mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
#6754 Scale porosity, permeability and elastic props by net-to-gross.
This commit is contained in:
@@ -46,6 +46,7 @@
|
||||
#include "RimFractureModelTemplate.h"
|
||||
#include "RimLayerCurve.h"
|
||||
#include "RimModeledWellPath.h"
|
||||
#include "RimNonNetLayers.h"
|
||||
#include "RimTools.h"
|
||||
#include "RimWellLogFile.h"
|
||||
#include "RimWellLogPlot.h"
|
||||
@@ -187,10 +188,26 @@ bool RimFractureModelElasticPropertyCalculator::calculate( RiaDefines::CurveProp
|
||||
underburdenFormation );
|
||||
}
|
||||
|
||||
std::vector<double> netToGrossValues =
|
||||
m_fractureModelCalculator->extractValues( RiaDefines::CurveProperty::NET_TO_GROSS, timeStep );
|
||||
|
||||
CAF_ASSERT( tvDepthValues.size() == faciesValues.size() );
|
||||
CAF_ASSERT( tvDepthValues.size() == poroValues.size() );
|
||||
CAF_ASSERT( tvDepthValues.size() == formationValues.size() );
|
||||
|
||||
bool isScaledByNetToGross = fractureModel->isScaledByNetToGross( curveProperty ) && !netToGrossValues.empty();
|
||||
double netToGrossCutoff = 1.0;
|
||||
QString netToGrossFaciesName = "";
|
||||
QString netToGrossFormationName = "";
|
||||
if ( fractureModel->fractureModelTemplate() && fractureModel->fractureModelTemplate()->nonNetLayers() )
|
||||
{
|
||||
netToGrossCutoff = fractureModel->fractureModelTemplate()->nonNetLayers()->cutOff();
|
||||
netToGrossFaciesName = fractureModel->fractureModelTemplate()->nonNetLayers()->facies();
|
||||
netToGrossFormationName = fractureModel->fractureModelTemplate()->nonNetLayers()->formation();
|
||||
}
|
||||
|
||||
FaciesKey ntgFaciesKey = std::make_tuple( "", netToGrossFormationName, netToGrossFaciesName );
|
||||
|
||||
for ( size_t i = 0; i < tvDepthValues.size(); i++ )
|
||||
{
|
||||
// Avoid using the field name in the match for now
|
||||
@@ -208,6 +225,21 @@ bool RimFractureModelElasticPropertyCalculator::calculate( RiaDefines::CurveProp
|
||||
const RigElasticProperties& rigElasticProperties = elasticProperties->propertiesForFacies( faciesKey );
|
||||
double scale = elasticProperties->getPropertyScaling( formationName, faciesName, curveProperty );
|
||||
double val = rigElasticProperties.getValueForPorosity( curveProperty, porosity, scale );
|
||||
|
||||
//
|
||||
if ( isScaledByNetToGross )
|
||||
{
|
||||
double netToGross = netToGrossValues[i];
|
||||
if ( netToGross < netToGrossCutoff )
|
||||
{
|
||||
double ntgScale = elasticProperties->getPropertyScaling( netToGrossFormationName,
|
||||
netToGrossFaciesName,
|
||||
curveProperty );
|
||||
double ntgValue = rigElasticProperties.getValueForPorosity( curveProperty, porosity, ntgScale );
|
||||
val = val * netToGross + ( 1.0 - netToGross ) * ntgValue;
|
||||
}
|
||||
}
|
||||
|
||||
values.push_back( val );
|
||||
}
|
||||
else if ( fractureModel->hasDefaultValueForProperty( curveProperty ) )
|
||||
|
||||
Reference in New Issue
Block a user