#7339 StimPlanModel: handle facies without pressure depletion.

This commit is contained in:
Kristian Bendiksen
2021-02-10 19:24:46 +01:00
parent ad0e07a540
commit 3e43ca2b65
6 changed files with 294 additions and 5 deletions

View File

@@ -23,6 +23,7 @@
#include "RimStimPlanModel.h"
#include "RimStimPlanModelCalculator.h"
#include "RimStimPlanModelTemplate.h"
//--------------------------------------------------------------------------------------------------
///
@@ -99,14 +100,15 @@ bool RimStimPlanModelPressureCalculator::extractValuesForProperty( RiaDefines::C
// Get depth from the static eclipse case
std::vector<double> staticTvDepthValues;
std::vector<double> staticMeasuredDepthValues;
std::vector<double> faciesValues;
{
std::vector<double> dummyValues;
double dummyRkbDiff;
if ( !RimStimPlanModelWellLogCalculator::extractValuesForProperty( RiaDefines::CurveProperty::POROSITY_UNSCALED,
if ( !RimStimPlanModelWellLogCalculator::extractValuesForProperty( RiaDefines::CurveProperty::FACIES,
stimPlanModel,
timeStep,
dummyValues,
faciesValues,
staticMeasuredDepthValues,
staticTvDepthValues,
dummyRkbDiff ) )
@@ -134,12 +136,12 @@ bool RimStimPlanModelPressureCalculator::extractValuesForProperty( RiaDefines::C
double prevEndIndex = 0;
for ( size_t i = 0; i < staticTvDepthValues.size(); i++ )
{
double tvd = staticTvDepthValues[i];
double md = staticMeasuredDepthValues[i];
double tvd = staticTvDepthValues[i];
double md = staticMeasuredDepthValues[i];
double value = std::numeric_limits<double>::infinity();
// Find value before and after this depth in the static data
auto [startIndex, endIndex] = findIndex( md, measuredDepthValues );
double value = std::numeric_limits<double>::infinity();
if ( startIndex < values.size() && endIndex < values.size() )
{
@@ -191,5 +193,42 @@ bool RimStimPlanModelPressureCalculator::extractValuesForProperty( RiaDefines::C
values = results;
}
// Filter out the facies which does not have pressure depletion.
std::map<int, double> faciesWithInitialPressure = stimPlanModel->stimPlanModelTemplate()->faciesWithInitialPressure();
if ( curveProperty == RiaDefines::CurveProperty::PRESSURE && !faciesWithInitialPressure.empty() )
{
std::vector<double> initialPressureValues;
std::vector<double> initialPressureMeasuredDepthValues;
std::vector<double> initialPressureTvDepthValues;
if ( !stimPlanModel->calculator()->extractCurveData( RiaDefines::CurveProperty::INITIAL_PRESSURE,
timeStep,
initialPressureValues,
initialPressureMeasuredDepthValues,
initialPressureTvDepthValues,
rkbDiff ) )
{
return false;
}
for ( size_t i = 0; i < faciesValues.size(); i++ )
{
// Use the values from initial pressure curve
int faciesValue = static_cast<int>( faciesValues[i] );
double currentPressure = values[i];
double initialPressure = initialPressureValues[i];
auto faciesConfig = faciesWithInitialPressure.find( faciesValue );
if ( faciesConfig != faciesWithInitialPressure.end() && !std::isinf( currentPressure ) &&
!std::isinf( initialPressure ) )
{
double fraction = faciesConfig->second;
double value = initialPressure - ( initialPressure - currentPressure ) * ( 1.0 - fraction );
values[i] = value;
}
}
}
return true;
}