diff --git a/ApplicationLibCode/ProjectDataModel/StimPlanModel/RimStimPlanModelPressureCalculator.cpp b/ApplicationLibCode/ProjectDataModel/StimPlanModel/RimStimPlanModelPressureCalculator.cpp index 605fdba2b7..cf2c983999 100644 --- a/ApplicationLibCode/ProjectDataModel/StimPlanModel/RimStimPlanModelPressureCalculator.cpp +++ b/ApplicationLibCode/ProjectDataModel/StimPlanModel/RimStimPlanModelPressureCalculator.cpp @@ -263,44 +263,9 @@ bool RimStimPlanModelPressureCalculator::extractValuesForProperty( RiaDefines::C } else if ( curveProperty == RiaDefines::CurveProperty::PRESSURE ) { - // Filter out the facies which does not have pressure depletion. - std::map faciesWithInitialPressure = - stimPlanModel->stimPlanModelTemplate()->faciesWithInitialPressure(); - - if ( !faciesWithInitialPressure.empty() ) + if ( !handleFaciesWithInitialPressure( stimPlanModel, timeStep, faciesValues, values ) ) { - std::vector initialPressureValues; - std::vector initialPressureMeasuredDepthValues; - std::vector initialPressureTvDepthValues; - - if ( !extractValuesForProperty( RiaDefines::CurveProperty::INITIAL_PRESSURE, - stimPlanModel, - timeStep, - initialPressureValues, - initialPressureMeasuredDepthValues, - initialPressureTvDepthValues, - rkbDiff ) ) - { - return false; - } - - CAF_ASSERT( faciesValues.size() == initialPressureValues.size() ); - for ( size_t i = 0; i < faciesValues.size(); i++ ) - { - // Use the values from initial pressure curve - int faciesValue = static_cast( 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 ) * fraction; - - values[i] = value; - } - } + return false; } } @@ -677,3 +642,53 @@ double RimStimPlanModelPressureCalculator::pressureDifferenceInterpolationOffset // Unit: meter return 1.0; } + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +bool RimStimPlanModelPressureCalculator::handleFaciesWithInitialPressure( const RimStimPlanModel* stimPlanModel, + int timeStep, + const std::vector& faciesValues, + std::vector& values ) const +{ + // Filter out the facies which does not have pressure depletion. + std::map faciesWithInitialPressure = stimPlanModel->stimPlanModelTemplate()->faciesWithInitialPressure(); + + if ( !faciesWithInitialPressure.empty() ) + { + std::vector initialPressureValues; + std::vector initialPressureMeasuredDepthValues; + std::vector initialPressureTvDepthValues; + double rkbDiff; + if ( !extractValuesForProperty( RiaDefines::CurveProperty::INITIAL_PRESSURE, + stimPlanModel, + timeStep, + initialPressureValues, + initialPressureMeasuredDepthValues, + initialPressureTvDepthValues, + rkbDiff ) ) + { + return false; + } + + CAF_ASSERT( faciesValues.size() == initialPressureValues.size() ); + for ( size_t i = 0; i < faciesValues.size(); i++ ) + { + // Use the values from initial pressure curve + int faciesValue = static_cast( 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 ) * fraction; + + values[i] = value; + } + } + } + + return true; +} diff --git a/ApplicationLibCode/ProjectDataModel/StimPlanModel/RimStimPlanModelPressureCalculator.h b/ApplicationLibCode/ProjectDataModel/StimPlanModel/RimStimPlanModelPressureCalculator.h index 3ff1913ae8..e5a676c65e 100644 --- a/ApplicationLibCode/ProjectDataModel/StimPlanModel/RimStimPlanModelPressureCalculator.h +++ b/ApplicationLibCode/ProjectDataModel/StimPlanModel/RimStimPlanModelPressureCalculator.h @@ -73,6 +73,10 @@ protected: const std::vector& tvDepthValues, const std::vector& initialPressureValues, std::vector& values ) const; + bool handleFaciesWithInitialPressure( const RimStimPlanModel* stimPlanModel, + int timeStep, + const std::vector& faciesValues, + std::vector& values ) const; typedef std::pair DepthValuePair; typedef std::vector DepthValuePairVector;