From f6fe69ba45b1cfe5c5ef2dbb8e9cb226ba899358 Mon Sep 17 00:00:00 2001 From: Kristian Bendiksen Date: Wed, 24 Feb 2021 12:52:03 +0100 Subject: [PATCH] #7400 StimPlanModel: Add support for multiple missing value strategies. --- .../StimPlanModel/RimStimPlanModel.cpp | 7 ++++--- .../StimPlanModel/RimStimPlanModel.h | 10 ++++++---- .../RimStimPlanModelWellLogCalculator.cpp | 19 ++++++++++++------- 3 files changed, 22 insertions(+), 14 deletions(-) diff --git a/ApplicationLibCode/ProjectDataModel/StimPlanModel/RimStimPlanModel.cpp b/ApplicationLibCode/ProjectDataModel/StimPlanModel/RimStimPlanModel.cpp index 41ee1a7c7e..4a5cb2a394 100644 --- a/ApplicationLibCode/ProjectDataModel/StimPlanModel/RimStimPlanModel.cpp +++ b/ApplicationLibCode/ProjectDataModel/StimPlanModel/RimStimPlanModel.cpp @@ -1330,12 +1330,13 @@ double RimStimPlanModel::getDefaultValueForProperty( RiaDefines::CurveProperty c //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -RimStimPlanModel::MissingValueStrategy RimStimPlanModel::missingValueStrategy( RiaDefines::CurveProperty curveProperty ) const +std::deque + RimStimPlanModel::missingValueStrategies( RiaDefines::CurveProperty curveProperty ) const { if ( curveProperty == RiaDefines::CurveProperty::PRESSURE ) - return RimStimPlanModel::MissingValueStrategy::OTHER_CURVE_PROPERTY; + return { RimStimPlanModel::MissingValueStrategy::OTHER_CURVE_PROPERTY }; else - return RimStimPlanModel::MissingValueStrategy::DEFAULT_VALUE; + return { RimStimPlanModel::MissingValueStrategy::DEFAULT_VALUE }; } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ProjectDataModel/StimPlanModel/RimStimPlanModel.h b/ApplicationLibCode/ProjectDataModel/StimPlanModel/RimStimPlanModel.h index 9c5a316560..bd943b6002 100644 --- a/ApplicationLibCode/ProjectDataModel/StimPlanModel/RimStimPlanModel.h +++ b/ApplicationLibCode/ProjectDataModel/StimPlanModel/RimStimPlanModel.h @@ -43,6 +43,8 @@ class RimTextAnnotation; class RimStimPlanModelCalculator; class RimColorLegend; +#include + //================================================================================================== /// /// @@ -167,10 +169,10 @@ public: std::shared_ptr calculator() const; - RimStimPlanModel::MissingValueStrategy missingValueStrategy( RiaDefines::CurveProperty curveProperty ) const; - RimStimPlanModel::BurdenStrategy burdenStrategy( RiaDefines::CurveProperty curveProperty ) const; - RiaDefines::ResultCatType eclipseResultCategory( RiaDefines::CurveProperty curveProperty ) const; - QString eclipseResultVariable( RiaDefines::CurveProperty curveProperty ) const; + std::deque missingValueStrategies( RiaDefines::CurveProperty curveProperty ) const; + RimStimPlanModel::BurdenStrategy burdenStrategy( RiaDefines::CurveProperty curveProperty ) const; + RiaDefines::ResultCatType eclipseResultCategory( RiaDefines::CurveProperty curveProperty ) const; + QString eclipseResultVariable( RiaDefines::CurveProperty curveProperty ) const; static double findFaciesValue( const RimColorLegend& colorLegend, const QString& name ); diff --git a/ApplicationLibCode/ProjectDataModel/StimPlanModel/RimStimPlanModelWellLogCalculator.cpp b/ApplicationLibCode/ProjectDataModel/StimPlanModel/RimStimPlanModelWellLogCalculator.cpp index 2690cce066..3ad5c59d7c 100644 --- a/ApplicationLibCode/ProjectDataModel/StimPlanModel/RimStimPlanModelWellLogCalculator.cpp +++ b/ApplicationLibCode/ProjectDataModel/StimPlanModel/RimStimPlanModelWellLogCalculator.cpp @@ -95,12 +95,18 @@ bool RimStimPlanModelWellLogCalculator::calculate( RiaDefines::CurveProperty cur addUnderburden( curveProperty, stimPlanModel, tvDepthValues, measuredDepthValues, values ); } - if ( hasMissingValues( values ) ) - { - QString resultVariable = stimPlanModel->eclipseResultVariable( curveProperty ); + std::deque missingValueStratgies = + stimPlanModel->missingValueStrategies( curveProperty ); - if ( stimPlanModel->missingValueStrategy( curveProperty ) == RimStimPlanModel::MissingValueStrategy::DEFAULT_VALUE ) + while ( hasMissingValues( values ) && !missingValueStratgies.empty() ) + { + RimStimPlanModel::MissingValueStrategy strategy = missingValueStratgies.front(); + missingValueStratgies.pop_front(); + + if ( strategy == RimStimPlanModel::MissingValueStrategy::DEFAULT_VALUE ) { + QString resultVariable = stimPlanModel->eclipseResultVariable( curveProperty ); + // Input properties must use first time step int replacementTimeStep = 0; if ( !replaceMissingValuesWithDefault( curveProperty, stimPlanModel, replacementTimeStep, resultVariable, values ) ) @@ -108,12 +114,11 @@ bool RimStimPlanModelWellLogCalculator::calculate( RiaDefines::CurveProperty cur return false; } } - else if ( stimPlanModel->missingValueStrategy( curveProperty ) == - RimStimPlanModel::MissingValueStrategy::LINEAR_INTERPOLATION ) + else if ( strategy == RimStimPlanModel::MissingValueStrategy::LINEAR_INTERPOLATION ) { RiaInterpolationTools::interpolateMissingValues( measuredDepthValues, values ); } - else + else if ( strategy == RimStimPlanModel::MissingValueStrategy::OTHER_CURVE_PROPERTY ) { // Get the missing data from other curve RiaDefines::CurveProperty replacementProperty =