mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
#6086 Add porosity, porosity change and permeability calculation.
This commit is contained in:
@@ -23,7 +23,6 @@
|
||||
|
||||
#include "RifElementPropertyReader.h"
|
||||
#include "RifGeoMechReaderInterface.h"
|
||||
#include "RigFemPartResultCalculatorPoreCompressibility.h"
|
||||
|
||||
#ifdef USE_ODB_API
|
||||
#include "RifOdbReader.h"
|
||||
@@ -45,6 +44,8 @@
|
||||
#include "RigFemPartResultCalculatorNormalSE.h"
|
||||
#include "RigFemPartResultCalculatorNormalST.h"
|
||||
#include "RigFemPartResultCalculatorNormalized.h"
|
||||
#include "RigFemPartResultCalculatorPoreCompressibility.h"
|
||||
#include "RigFemPartResultCalculatorPorosityPermeability.h"
|
||||
#include "RigFemPartResultCalculatorPrincipalStrain.h"
|
||||
#include "RigFemPartResultCalculatorPrincipalStress.h"
|
||||
#include "RigFemPartResultCalculatorQ.h"
|
||||
@@ -113,6 +114,10 @@ RigFemPartResultsCollection::RigFemPartResultsCollection( RifGeoMechReaderInterf
|
||||
|
||||
m_referenceTimeStep = 0;
|
||||
|
||||
m_initialPermeabilityFixed = 1.0;
|
||||
m_initialPermeabilityResultAddress = "";
|
||||
m_permeabilityExponent = 1.0;
|
||||
|
||||
m_resultCalculators.push_back(
|
||||
std::unique_ptr<RigFemPartResultCalculator>( new RigFemPartResultCalculatorTimeLapse( *this ) ) );
|
||||
m_resultCalculators.push_back(
|
||||
@@ -166,6 +171,8 @@ RigFemPartResultsCollection::RigFemPartResultsCollection( RifGeoMechReaderInterf
|
||||
std::unique_ptr<RigFemPartResultCalculator>( new RigFemPartResultCalculatorStressAnisotropy( *this ) ) );
|
||||
m_resultCalculators.push_back(
|
||||
std::unique_ptr<RigFemPartResultCalculator>( new RigFemPartResultCalculatorPoreCompressibility( *this ) ) );
|
||||
m_resultCalculators.push_back(
|
||||
std::unique_ptr<RigFemPartResultCalculator>( new RigFemPartResultCalculatorPorosityPermeability( *this ) ) );
|
||||
m_resultCalculators.push_back(
|
||||
std::unique_ptr<RigFemPartResultCalculator>( new RigFemPartResultCalculatorFormationIndices( *this ) ) );
|
||||
}
|
||||
@@ -374,6 +381,13 @@ void RigFemPartResultsCollection::setBiotCoefficientParameters( double biotFixed
|
||||
deleteResult( RigFemResultAddress( elementType, "ST", "Q", RigFemResultAddress::allTimeLapsesValue() ) );
|
||||
}
|
||||
|
||||
// Depends on COMRESSIBILITY.PORE which depends on biot coefficient
|
||||
std::set<RigFemResultAddress> initPermResults = initialPermeabilityDependentResults();
|
||||
for ( auto result : initPermResults )
|
||||
{
|
||||
deleteResult( result );
|
||||
}
|
||||
|
||||
for ( auto fieldName : {"SE", "ST"} )
|
||||
{
|
||||
// Surface aligned stress
|
||||
@@ -419,6 +433,48 @@ int RigFemPartResultsCollection::referenceTimeStep() const
|
||||
return m_referenceTimeStep;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RigFemPartResultsCollection::setPermeabilityParameters( double fixedInitalPermeability,
|
||||
const QString& initialPermeabilityAddress,
|
||||
double permeabilityExponent )
|
||||
{
|
||||
m_initialPermeabilityFixed = fixedInitalPermeability;
|
||||
m_initialPermeabilityResultAddress = initialPermeabilityAddress;
|
||||
m_permeabilityExponent = permeabilityExponent;
|
||||
|
||||
std::set<RigFemResultAddress> results = initialPermeabilityDependentResults();
|
||||
for ( auto result : results )
|
||||
{
|
||||
deleteResult( result );
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
double RigFemPartResultsCollection::initialPermeabilityFixed() const
|
||||
{
|
||||
return m_initialPermeabilityFixed;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
QString RigFemPartResultsCollection::initialPermeabilityAddress() const
|
||||
{
|
||||
return m_initialPermeabilityResultAddress;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
double RigFemPartResultsCollection::permeabilityExponent() const
|
||||
{
|
||||
return m_permeabilityExponent;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
/// Will always return a valid object, but it can be empty
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@@ -636,6 +692,10 @@ std::map<std::string, std::vector<std::string>>
|
||||
fieldCompNames["COMPRESSIBILITY"].push_back( "PORE" );
|
||||
fieldCompNames["COMPRESSIBILITY"].push_back( "VERTICAL" );
|
||||
fieldCompNames["COMPRESSIBILITY"].push_back( "VERTICAL-RATIO" );
|
||||
|
||||
fieldCompNames["POROSITY-PERMEABILITY"].push_back( "PHI" );
|
||||
fieldCompNames["POROSITY-PERMEABILITY"].push_back( "DPHI" );
|
||||
fieldCompNames["POROSITY-PERMEABILITY"].push_back( "PERM" );
|
||||
}
|
||||
else if ( resPos == RIG_INTEGRATION_POINT )
|
||||
{
|
||||
@@ -715,6 +775,10 @@ std::map<std::string, std::vector<std::string>>
|
||||
fieldCompNames["COMPRESSIBILITY"].push_back( "PORE" );
|
||||
fieldCompNames["COMPRESSIBILITY"].push_back( "VERTICAL" );
|
||||
fieldCompNames["COMPRESSIBILITY"].push_back( "VERTICAL-RATIO" );
|
||||
|
||||
fieldCompNames["POROSITY-PERMEABILITY"].push_back( "PHI" );
|
||||
fieldCompNames["POROSITY-PERMEABILITY"].push_back( "DPHI" );
|
||||
fieldCompNames["POROSITY-PERMEABILITY"].push_back( "PERM" );
|
||||
}
|
||||
else if ( resPos == RIG_ELEMENT_NODAL_FACE )
|
||||
{
|
||||
@@ -1242,11 +1306,35 @@ std::set<RigFemResultAddress> RigFemPartResultsCollection::referenceCaseDependen
|
||||
"COMPRESSIBILITY",
|
||||
"VERTICAL-RATIO",
|
||||
RigFemResultAddress::allTimeLapsesValue() ) );
|
||||
results.insert(
|
||||
RigFemResultAddress( elementType, "POROSITY-PERMEABILITY", "PHI", RigFemResultAddress::allTimeLapsesValue() ) );
|
||||
results.insert(
|
||||
RigFemResultAddress( elementType, "POROSITY-PERMEABILITY", "DPHI", RigFemResultAddress::allTimeLapsesValue() ) );
|
||||
results.insert(
|
||||
RigFemResultAddress( elementType, "POROSITY-PERMEABILITY", "PERM", RigFemResultAddress::allTimeLapsesValue() ) );
|
||||
}
|
||||
|
||||
return results;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
std::set<RigFemResultAddress> RigFemPartResultsCollection::initialPermeabilityDependentResults()
|
||||
{
|
||||
std::set<RigFemResultAddress> results;
|
||||
for ( auto elementType : {RIG_ELEMENT_NODAL, RIG_INTEGRATION_POINT} )
|
||||
{
|
||||
results.insert(
|
||||
RigFemResultAddress( elementType, "POROSITY-PERMEABILITY", "PHI", RigFemResultAddress::allTimeLapsesValue() ) );
|
||||
results.insert(
|
||||
RigFemResultAddress( elementType, "POROSITY-PERMEABILITY", "DPHI", RigFemResultAddress::allTimeLapsesValue() ) );
|
||||
results.insert(
|
||||
RigFemResultAddress( elementType, "POROSITY-PERMEABILITY", "PERM", RigFemResultAddress::allTimeLapsesValue() ) );
|
||||
return results;
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
|
||||
Reference in New Issue
Block a user