From 537cead7f1381d9adfea984c4e406d244afec194 Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Mon, 27 Nov 2023 15:26:33 +0100 Subject: [PATCH] Add optional input value filter for calculation --- .../RimEclipseStatisticsCase.cpp | 12 +++++++----- .../ProjectDataModel/RimGridCalculation.cpp | 19 ++++++++++++++----- .../ProjectDataModel/RimGridCalculation.h | 2 +- 3 files changed, 22 insertions(+), 11 deletions(-) diff --git a/ApplicationLibCode/ProjectDataModel/RimEclipseStatisticsCase.cpp b/ApplicationLibCode/ProjectDataModel/RimEclipseStatisticsCase.cpp index 068085c345..ee49bebe5f 100644 --- a/ApplicationLibCode/ProjectDataModel/RimEclipseStatisticsCase.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimEclipseStatisticsCase.cpp @@ -318,11 +318,13 @@ void RimEclipseStatisticsCase::computeStatistics() for ( auto calc : dependentCalculations ) { - // A view filter is depending on active cells for a specific case, and the current implementation does not work for grids with - // different active cells. Disable use of view filter for now. - const bool useViewFilter = false; + cvf::UByteArray* inputValueVisibilityFilter = nullptr; + if ( m_gridCalculationFilterView() ) + { + inputValueVisibilityFilter = m_gridCalculationFilterView()->currentTotalCellVisibility().p(); + } - calc->calculateForCases( sourceCases, useViewFilter, timeStepIndices ); + calc->calculateForCases( sourceCases, inputValueVisibilityFilter, timeStepIndices ); } } @@ -629,7 +631,7 @@ QList RimEclipseStatisticsCase::calculateValueOptions( c { QList options; - options.push_back( caf::PdmOptionItemInfo( nullptr, "None" ) ); + options.push_back( caf::PdmOptionItemInfo( "None", nullptr ) ); for ( const auto& view : views() ) { diff --git a/ApplicationLibCode/ProjectDataModel/RimGridCalculation.cpp b/ApplicationLibCode/ProjectDataModel/RimGridCalculation.cpp index ce68813ce5..86151d94df 100644 --- a/ApplicationLibCode/ProjectDataModel/RimGridCalculation.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimGridCalculation.cpp @@ -127,9 +127,9 @@ bool RimGridCalculation::calculate() } } - auto timeSteps = std::nullopt; - bool useViewFilter = true; - return calculateForCases( outputEclipseCases(), useViewFilter, timeSteps ); + auto timeSteps = std::nullopt; + auto inputValueVisibilityFilter = nullptr; + return calculateForCases( outputEclipseCases(), inputValueVisibilityFilter, timeSteps ); } //-------------------------------------------------------------------------------------------------- @@ -537,7 +537,7 @@ void RimGridCalculation::removeDependentObjects() /// //-------------------------------------------------------------------------------------------------- bool RimGridCalculation::calculateForCases( const std::vector& calculationCases, - bool useViewFilter, + cvf::UByteArray* inputValueVisibilityFilter, std::optional> timeSteps ) { if ( calculationCases.empty() ) return true; @@ -604,7 +604,16 @@ bool RimGridCalculation::calculateForCases( const std::vector& { RimGridCalculationVariable* v = dynamic_cast( m_variables[i] ); CAF_ASSERT( v != nullptr ); - values.push_back( getInputVectorForVariable( v, tsId, porosityModel, calculationCase ) ); + + auto inputValues = getInputVectorForVariable( v, tsId, porosityModel, calculationCase ); + + if ( inputValueVisibilityFilter ) + { + const double defaultValue = 0.0; + replaceFilteredValuesWithDefaultValue( defaultValue, inputValueVisibilityFilter, inputValues, porosityModel, calculationCase ); + } + + values.push_back( inputValues ); } ExpressionParser parser; diff --git a/ApplicationLibCode/ProjectDataModel/RimGridCalculation.h b/ApplicationLibCode/ProjectDataModel/RimGridCalculation.h index 16ed5e65ca..e322ac1719 100644 --- a/ApplicationLibCode/ProjectDataModel/RimGridCalculation.h +++ b/ApplicationLibCode/ProjectDataModel/RimGridCalculation.h @@ -58,7 +58,7 @@ public: std::vector outputEclipseCases() const; RigEclipseResultAddress outputAddress() const; bool calculateForCases( const std::vector& calculationCases, - bool useViewFilter, + cvf::UByteArray* inputValueVisibilityFilter, std::optional> timeSteps ); void assignEclipseCaseForNullPointers( RimEclipseCase* eclipseCase );