mirror of
https://github.com/OPM/ResInsight.git
synced 2025-01-01 03:37:15 -06:00
Reveal: fix transmissibility calculation when filter cake is not present.
The "absolute" filter cake adjustment should only be used for cells when filter cake is present (i.e filtrate thickness is not zero).
This commit is contained in:
parent
02df80e0cc
commit
18c29d5fc7
@ -73,6 +73,14 @@ QString viscosityResultName()
|
||||
return "Viscosity";
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
QString filtrateThicknessResultName()
|
||||
{
|
||||
return "FiltrateThickness";
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@ -98,7 +106,7 @@ QString getExpectedThermalFractureUnit( const QString& name, RiaDefines::Eclipse
|
||||
{ "Velocity", { "m/sec", "ft/sec" } },
|
||||
{ "ResPressure", { "BARa", "psia" } },
|
||||
{ "ResTemperature", { "deg C", "deg F" } },
|
||||
{ "FiltrateThickness", { "cm", "inches" } },
|
||||
{ RiaDefines::filtrateThicknessResultName(), { "cm", "inches" } },
|
||||
{ RiaDefines::filtratePressureDropResultName(), { "bar", "psi" } },
|
||||
{ "EffectiveResStress", { "bar", "psi" } },
|
||||
{ "EffectiveFracStress", { "bar", "psi" } },
|
||||
|
@ -30,6 +30,7 @@ QString leakoffMobilityResultName();
|
||||
QString filterCakeMobilityResultName();
|
||||
QString injectivityFactorResultName();
|
||||
QString viscosityResultName();
|
||||
QString filtrateThicknessResultName();
|
||||
|
||||
QString getExpectedThermalFractureUnit( const QString& name, RiaDefines::EclipseUnitSystem unitSystem );
|
||||
|
||||
|
@ -85,6 +85,7 @@ void RigEclipseToStimPlanCalculator::computeValues()
|
||||
std::vector<std::vector<double>> injectivityFactors;
|
||||
std::vector<std::vector<double>> viscosities;
|
||||
std::vector<std::vector<double>> filterCakeMobilities;
|
||||
std::vector<std::vector<double>> filtrateThicknesses;
|
||||
|
||||
RimThermalFractureTemplate* thermalFractureTemplate = dynamic_cast<RimThermalFractureTemplate*>( m_fracture->fractureTemplate() );
|
||||
|
||||
@ -110,6 +111,12 @@ void RigEclipseToStimPlanCalculator::computeValues()
|
||||
RiaDefines::getExpectedThermalFractureUnit( RiaDefines::filterCakeMobilityResultName(),
|
||||
unitSystem ),
|
||||
timeStep );
|
||||
|
||||
filtrateThicknesses =
|
||||
thermalFractureTemplate->resultValues( RiaDefines::filtrateThicknessResultName(),
|
||||
RiaDefines::getExpectedThermalFractureUnit( RiaDefines::filtrateThicknessResultName(),
|
||||
unitSystem ),
|
||||
timeStep );
|
||||
}
|
||||
|
||||
for ( size_t i = 0; i < m_fractureGrid.fractureCells().size(); i++ )
|
||||
@ -127,6 +134,7 @@ void RigEclipseToStimPlanCalculator::computeValues()
|
||||
double injectivityFactor = resultValueAtIJ( injectivityFactors, m_fractureGrid, cellI, cellJ );
|
||||
double viscosity = resultValueAtIJ( viscosities, m_fractureGrid, cellI, cellJ );
|
||||
double filterCakeMobility = resultValueAtIJ( filterCakeMobilities, m_fractureGrid, cellI, cellJ );
|
||||
double filtrateThickness = resultValueAtIJ( filtrateThicknesses, m_fractureGrid, cellI, cellJ );
|
||||
|
||||
// Assumed value
|
||||
double relativePermeability = 1.0;
|
||||
@ -141,6 +149,7 @@ void RigEclipseToStimPlanCalculator::computeValues()
|
||||
filterPressureDropType,
|
||||
injectivityFactor,
|
||||
filterCakeMobility,
|
||||
filtrateThickness,
|
||||
viscosity,
|
||||
relativePermeability );
|
||||
}
|
||||
|
@ -35,12 +35,14 @@ RigEclipseToThermalCellTransmissibilityCalculator::RigEclipseToThermalCellTransm
|
||||
RimThermalFractureTemplate::FilterCakePressureDrop filterCakePressureDrop,
|
||||
double injectivityFactor,
|
||||
double filterCakeMobility,
|
||||
double filtrateThickness,
|
||||
double viscosity,
|
||||
double relativePermeability )
|
||||
: RigEclipseToStimPlanCellTransmissibilityCalculator( caseToApply, fractureTransform, skinFactor, cDarcy, stimPlanCell, fracture )
|
||||
, m_filterCakePressureDrop( filterCakePressureDrop )
|
||||
, m_injectivityFactor( injectivityFactor )
|
||||
, m_filterCakeMobility( filterCakeMobility )
|
||||
, m_filtrateThickness( filtrateThickness )
|
||||
, m_viscosity( viscosity )
|
||||
, m_relativePermeability( relativePermeability )
|
||||
{
|
||||
@ -60,11 +62,19 @@ double RigEclipseToThermalCellTransmissibilityCalculator::calculateTransmissibil
|
||||
}
|
||||
else if ( m_filterCakePressureDrop == RimThermalFractureTemplate::FilterCakePressureDrop::ABSOLUTE )
|
||||
{
|
||||
double filterCakeTransmissibility = ( m_viscosity / m_relativePermeability ) * fractureArea * m_filterCakeMobility;
|
||||
// Take filter cake transmissibility into account only when filter cake exists (i.e. has thickness).
|
||||
if ( m_filtrateThickness > 0.0 )
|
||||
{
|
||||
double filterCakeTransmissibility = ( m_viscosity / m_relativePermeability ) * fractureArea * m_filterCakeMobility;
|
||||
|
||||
// Harmonic mean
|
||||
return ( fractureMatrixTransimissibility * filterCakeTransmissibility ) /
|
||||
( fractureMatrixTransimissibility + filterCakeTransmissibility );
|
||||
// Harmonic mean
|
||||
return ( fractureMatrixTransimissibility * filterCakeTransmissibility ) /
|
||||
( fractureMatrixTransimissibility + filterCakeTransmissibility );
|
||||
}
|
||||
else
|
||||
{
|
||||
return fractureMatrixTransimissibility;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -53,6 +53,7 @@ public:
|
||||
RimThermalFractureTemplate::FilterCakePressureDrop filterCakePressureDrop,
|
||||
double injectvityFactor,
|
||||
double filterCakeMobility,
|
||||
double filtrateThickness,
|
||||
double viscosity,
|
||||
double relativePermeability );
|
||||
|
||||
@ -62,6 +63,7 @@ protected:
|
||||
RimThermalFractureTemplate::FilterCakePressureDrop m_filterCakePressureDrop;
|
||||
double m_injectivityFactor;
|
||||
double m_filterCakeMobility;
|
||||
double m_filtrateThickness;
|
||||
double m_viscosity;
|
||||
double m_relativePermeability;
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user