diff --git a/ApplicationLibCode/ProjectDataModel/RimGridCalculation.cpp b/ApplicationLibCode/ProjectDataModel/RimGridCalculation.cpp index ecad488259..c53157699a 100644 --- a/ApplicationLibCode/ProjectDataModel/RimGridCalculation.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimGridCalculation.cpp @@ -250,10 +250,23 @@ bool RimGridCalculation::calculate() } } - cvf::UByteArray* inputValueVisibilityFilter = nullptr; + cvf::ref inputValueVisibilityFilter; if ( m_cellFilterView() ) { - inputValueVisibilityFilter = m_cellFilterView()->currentTotalCellVisibility().p(); + if ( auto eclipseView = dynamic_cast( m_cellFilterView() ) ) + { + // Use the cell filter geometry, independent of the active cells in the view's case. Cells inside the + // filters that are inactive in the view's case can be active in other calculation cases, and must be + // included when the calculation is applied to additional cases. + inputValueVisibilityFilter = new cvf::UByteArray; + eclipseView->calculateCellVisibility( inputValueVisibilityFilter.p(), + { RANGE_FILTERED, RANGE_FILTERED_INACTIVE }, + eclipseView->currentTimeStep() ); + } + else + { + inputValueVisibilityFilter = m_cellFilterView()->currentTotalCellVisibility(); + } } std::optional> timeSteps = std::nullopt; @@ -270,7 +283,7 @@ bool RimGridCalculation::calculate() } bool evaluateDependentCalculations = true; - return calculateForCases( outputEclipseCases(), inputValueVisibilityFilter, timeSteps, evaluateDependentCalculations ); + return calculateForCases( outputEclipseCases(), inputValueVisibilityFilter.p(), timeSteps, evaluateDependentCalculations ); } //-------------------------------------------------------------------------------------------------- @@ -752,7 +765,7 @@ size_t RimGridCalculation::replaceInvalidValuesWithDefaultValue( double defaultV //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RimGridCalculation::filterResults( RimGridView* cellFilterView, +void RimGridCalculation::filterResults( cvf::UByteArray* visibility, const std::vector>& values, size_t timeStep, RimGridCalculation::DefaultValueType defaultValueType, @@ -762,8 +775,6 @@ void RimGridCalculation::filterResults( RimGridView* RimEclipseCase* outputEclipseCase ) const { - auto visibility = cellFilterView->currentTotalCellVisibility(); - auto activeCellInfo = outputEclipseCase->eclipseCaseData()->activeCellInfo( porosityModel ); if ( defaultValueType == RimGridCalculation::DefaultValueType::FROM_PROPERTY ) @@ -1034,9 +1045,9 @@ bool RimGridCalculation::calculateForCases( const std::vector& } } - if ( m_cellFilterView() && !resultValues.empty() ) + if ( inputValueVisibilityFilter && !resultValues.empty() ) { - filterResults( m_cellFilterView(), + filterResults( inputValueVisibilityFilter, dataForAllVariables, tsId, m_defaultValueType(), diff --git a/ApplicationLibCode/ProjectDataModel/RimGridCalculation.h b/ApplicationLibCode/ProjectDataModel/RimGridCalculation.h index a16680c2ac..1a3a127e42 100644 --- a/ApplicationLibCode/ProjectDataModel/RimGridCalculation.h +++ b/ApplicationLibCode/ProjectDataModel/RimGridCalculation.h @@ -106,7 +106,7 @@ protected: RimEclipseCase* sourceCase, RimEclipseCase* destinationCase ) const; - void filterResults( RimGridView* cellFilterView, + void filterResults( cvf::UByteArray* visibility, const std::vector>& values, size_t timeStep, RimGridCalculation::DefaultValueType defaultValueType,