diff --git a/ApplicationLibCode/ProjectDataModel/RimSummaryCalculation.cpp b/ApplicationLibCode/ProjectDataModel/RimSummaryCalculation.cpp index c83a240de3..08ba9fcf96 100644 --- a/ApplicationLibCode/ProjectDataModel/RimSummaryCalculation.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimSummaryCalculation.cpp @@ -304,7 +304,9 @@ std::optional, std::vector>> auto vars = variables.value(); substituteVariables( vars, addr ); - return calculateResult( m_expression, vars, summaryCase ); + RimSummaryCase* summaryCaseForVariableSubstitution = m_distributeToAllCases ? summaryCase : nullptr; + + return calculateResult( m_expression, vars, summaryCaseForVariableSubstitution ); } //-------------------------------------------------------------------------------------------------- @@ -313,7 +315,7 @@ std::optional, std::vector>> std::optional, std::vector>> RimSummaryCalculation::calculateResult( const QString& expression, const std::vector& variables, - RimSummaryCase* summaryCase ) + RimSummaryCase* summaryCaseForSubstitution ) { QString leftHandSideVariableName = RimSummaryCalculation::findLeftHandSide( expression ); @@ -324,12 +326,13 @@ std::optional, std::vector>> { SummaryCalculationVariable v = variables[i]; - RiaSummaryCurveDefinition curveDef( summaryCase, v.summaryAddress, false ); + RimSummaryCase* summaryCaseForValues = v.summaryCase; + if ( summaryCaseForSubstitution ) summaryCaseForValues = summaryCaseForSubstitution; - std::vector curveValues = RiaSummaryCurveDefinition::resultValues( curveDef ); + RiaSummaryCurveDefinition curveDef( summaryCaseForValues, v.summaryAddress, false ); + std::vector curveValues = RiaSummaryCurveDefinition::resultValues( curveDef ); std::vector curveTimeSteps = RiaSummaryCurveDefinition::timeSteps( curveDef ); - if ( !curveTimeSteps.empty() && !curveValues.empty() ) { timeHistoryCurveMerger.addCurveData( curveTimeSteps, curveValues ); @@ -431,26 +434,19 @@ void RimSummaryCalculation::removeDependentObjects() //-------------------------------------------------------------------------------------------------- std::vector RimSummaryCalculation::allAddressesForSummaryCase( RimSummaryCase* summaryCase ) const { - if ( !m_distributeToAllCases ) - { - for ( auto& v : m_variables ) - { - if ( auto variable = dynamic_cast( v.p() ) ) - { - if ( variable->summaryCase() != summaryCase ) - { - return {}; - } - } - } - } - auto variables = getVariables(); if ( variables && !variables.value().empty() ) { + auto firstVariable = variables.value().front(); + + if ( !m_distributeToAllCases && ( firstVariable.summaryCase != summaryCase ) ) + { + // The calculation is only displayed in the summary case matching the first variable + return {}; + } + // The first variable is the substituable one. Use its category to // provide all available addresses. - auto firstVariable = variables.value().front(); if ( m_distributeToOtherItems ) { auto allResultAddresses = summaryCase->summaryReader()->allResultAddresses(); diff --git a/ApplicationLibCode/ProjectDataModel/RimSummaryCalculation.h b/ApplicationLibCode/ProjectDataModel/RimSummaryCalculation.h index 8f73d7ce96..dac018ca50 100644 --- a/ApplicationLibCode/ProjectDataModel/RimSummaryCalculation.h +++ b/ApplicationLibCode/ProjectDataModel/RimSummaryCalculation.h @@ -76,7 +76,9 @@ protected: RimSummaryCalculationVariable* createVariable() override; static std::optional, std::vector>> - calculateResult( const QString& expression, const std::vector& variables, RimSummaryCase* summaryCase ); + calculateResult( const QString& expression, + const std::vector& variables, + RimSummaryCase* summaryCaseForSubstitution ); std::optional, std::vector>> calculateWithSubstitutions( RimSummaryCase* summaryCase, const RifEclipseSummaryAddress& addr );