#6364 Add import, display and export of immobile fluid saturation.

Part of Stimplan "detailed fluid loss" format.
This commit is contained in:
Kristian Bendiksen 2020-08-26 07:01:16 +02:00
parent 71426dcacb
commit d4d010c5d5
9 changed files with 52 additions and 16 deletions

View File

@ -49,6 +49,7 @@ void AppEnum<RiaDefines::CurveProperty>::setUp()
addItem( RiaDefines::CurveProperty::THERMAL_EXPANSION_COEFFISIENT,
"THERMAL_EXPANSION_COEFFISIENT",
"Thermal Expansion Coeffisient" );
addItem( RiaDefines::CurveProperty::IMMOBILE_FLUID_SATURATION, "IMMOBILE_FLUID_SATURATION", "Immobile FLuid Saturation" );
setDefault( RiaDefines::CurveProperty::UNDEFINED );
}

View File

@ -48,5 +48,6 @@ enum class CurveProperty
RELATIVE_PERMEABILITY_FACTOR,
PORO_ELASTIC_CONSTANT,
THERMAL_EXPANSION_COEFFISIENT,
IMMOBILE_FLUID_SATURATION,
};
}; // namespace RiaDefines

View File

@ -143,7 +143,8 @@ RimFractureModelPlot*
RiaDefines::CurveProperty::SPURT_LOSS,
RiaDefines::CurveProperty::RELATIVE_PERMEABILITY_FACTOR,
RiaDefines::CurveProperty::PORO_ELASTIC_CONSTANT,
RiaDefines::CurveProperty::THERMAL_EXPANSION_COEFFISIENT};
RiaDefines::CurveProperty::THERMAL_EXPANSION_COEFFISIENT,
RiaDefines::CurveProperty::IMMOBILE_FLUID_SATURATION};
for ( auto result : results )
{

View File

@ -96,7 +96,8 @@ void RicElasticPropertiesImportTools::importElasticPropertiesFromFile( const QSt
item.biotCoefficient,
item.k0,
item.fluidLossCoefficient,
item.spurtLoss );
item.spurtLoss,
item.immobileFluidSaturation );
}
rimElasticProperties->setPropertiesForFacies( key, rigElasticProperties );

View File

@ -136,6 +136,7 @@ QString RimElasticProperties::generatePropertiesTable()
" <th>k0</th>"
" <th>Fluid Loss<br>Coefficient</th>"
" <th>Spurt Loss</th>"
" <th>Immobile Fluid<br>Saturation</th>"
" </tr>"
" </thead>"
" <tbody>" );
@ -143,16 +144,17 @@ QString RimElasticProperties::generatePropertiesTable()
QString body;
for ( auto prop : m_properties )
{
const QString& fieldName = prop.second.fieldName();
const std::vector<double>& porosity = prop.second.porosity();
const std::vector<double>& youngsModulus = prop.second.youngsModulus();
const std::vector<double>& poissonsRatio = prop.second.poissonsRatio();
const std::vector<double>& K_Ic = prop.second.K_Ic();
const std::vector<double>& proppantEmbedment = prop.second.proppantEmbedment();
const std::vector<double>& biotCoefficient = prop.second.biotCoefficient();
const std::vector<double>& k0 = prop.second.k0();
const std::vector<double>& fluidLossCoefficient = prop.second.fluidLossCoefficient();
const std::vector<double>& spurtLoss = prop.second.spurtLoss();
const QString& fieldName = prop.second.fieldName();
const std::vector<double>& porosity = prop.second.porosity();
const std::vector<double>& youngsModulus = prop.second.youngsModulus();
const std::vector<double>& poissonsRatio = prop.second.poissonsRatio();
const std::vector<double>& K_Ic = prop.second.K_Ic();
const std::vector<double>& proppantEmbedment = prop.second.proppantEmbedment();
const std::vector<double>& biotCoefficient = prop.second.biotCoefficient();
const std::vector<double>& k0 = prop.second.k0();
const std::vector<double>& fluidLossCoefficient = prop.second.fluidLossCoefficient();
const std::vector<double>& spurtLoss = prop.second.spurtLoss();
const std::vector<double>& immobileFluidSaturation = prop.second.immobileFluidSaturation();
for ( size_t i = 0; i < porosity.size(); i++ )
{
@ -169,6 +171,7 @@ QString RimElasticProperties::generatePropertiesTable()
" <td align=right>%10</td>"
" <td align=right>%11</td>"
" <td align=right>%12</td>"
" <td align=right>%13</td>"
"</tr>" );
QString line = format.arg( fieldName )
@ -182,7 +185,8 @@ QString RimElasticProperties::generatePropertiesTable()
.arg( biotCoefficient[i] )
.arg( k0[i] )
.arg( fluidLossCoefficient[i] )
.arg( spurtLoss[i] );
.arg( spurtLoss[i] )
.arg( immobileFluidSaturation[i] );
body.append( line );
}

View File

@ -309,6 +309,11 @@ void RimElasticPropertiesCurve::performDataExtraction( bool* isUsingPseudoLength
double val = rigElasticProperties.getSpurtLoss( porosity );
values.push_back( val );
}
else if ( m_curveProperty() == RiaDefines::CurveProperty::IMMOBILE_FLUID_SATURATION )
{
double val = rigElasticProperties.getImmobileFluidSaturation( porosity );
values.push_back( val );
}
else if ( m_fractureModel->hasDefaultValueForProperty( curveProperty() ) )
{
double val = m_fractureModel->getDefaultValueForProperty( curveProperty() );

View File

@ -18,6 +18,7 @@
#include "RimFractureModelPlot.h"
#include "RiaDefines.h"
#include "RiaFractureModelDefines.h"
#include "RiaLogging.h"
#include "RicfCommandObject.h"
@ -573,7 +574,7 @@ std::vector<double> RimFractureModelPlot::calculateProppandEmbedment() const
//--------------------------------------------------------------------------------------------------
std::vector<double> RimFractureModelPlot::calculateImmobileFluidSaturation() const
{
return std::vector<double>();
return findCurveAndComputeLayeredAverage( RiaDefines::CurveProperty::IMMOBILE_FLUID_SATURATION );
}
//--------------------------------------------------------------------------------------------------

View File

@ -126,6 +126,14 @@ const std::vector<double>& RigElasticProperties::spurtLoss() const
return m_spurtLoss;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
const std::vector<double>& RigElasticProperties::immobileFluidSaturation() const
{
return m_immobileFluidSaturation;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
@ -137,7 +145,8 @@ void RigElasticProperties::appendValues( double porosity,
double biotCoefficient,
double k0,
double fluidLossCoefficient,
double spurtLoss )
double spurtLoss,
double immobileFluidSaturation )
{
m_porosity.push_back( porosity );
m_youngsModulus.push_back( youngsModulus );
@ -148,6 +157,7 @@ void RigElasticProperties::appendValues( double porosity,
m_k0.push_back( k0 );
m_fluidLossCoefficient.push_back( fluidLossCoefficient );
m_spurtLoss.push_back( spurtLoss );
m_immobileFluidSaturation.push_back( immobileFluidSaturation );
}
//--------------------------------------------------------------------------------------------------
@ -213,3 +223,11 @@ double RigElasticProperties::getSpurtLoss( double porosity ) const
{
return RiaInterpolationTools::linear( m_porosity, m_spurtLoss, porosity );
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
double RigElasticProperties::getImmobileFluidSaturation( double porosity ) const
{
return RiaInterpolationTools::linear( m_porosity, m_immobileFluidSaturation, porosity );
}

View File

@ -41,7 +41,8 @@ public:
double biotCoefficient,
double k0,
double fluidLossCoefficient,
double spurtLoss );
double spurtLoss,
double immobileFluidSaturation );
double getYoungsModulus( double porosity ) const;
double getPoissonsRatio( double porosity ) const;
double getK_Ic( double porosity ) const;
@ -50,6 +51,7 @@ public:
double getK0( double porosity ) const;
double getFluidLossCoefficient( double porosity ) const;
double getSpurtLoss( double porosity ) const;
double getImmobileFluidSaturation( double porosity ) const;
const std::vector<double>& porosity() const;
const std::vector<double>& youngsModulus() const;
@ -60,6 +62,7 @@ public:
const std::vector<double>& k0() const;
const std::vector<double>& fluidLossCoefficient() const;
const std::vector<double>& spurtLoss() const;
const std::vector<double>& immobileFluidSaturation() const;
private:
QString m_fieldName;
@ -75,4 +78,5 @@ private:
std::vector<double> m_k0;
std::vector<double> m_fluidLossCoefficient;
std::vector<double> m_spurtLoss;
std::vector<double> m_immobileFluidSaturation;
};