mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
#11418 Fix calculation between multiple cases
This commit is contained in:
@@ -304,7 +304,9 @@ std::optional<std::pair<std::vector<double>, std::vector<time_t>>>
|
||||
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::pair<std::vector<double>, std::vector<time_t>>>
|
||||
std::optional<std::pair<std::vector<double>, std::vector<time_t>>>
|
||||
RimSummaryCalculation::calculateResult( const QString& expression,
|
||||
const std::vector<SummaryCalculationVariable>& variables,
|
||||
RimSummaryCase* summaryCase )
|
||||
RimSummaryCase* summaryCaseForSubstitution )
|
||||
|
||||
{
|
||||
QString leftHandSideVariableName = RimSummaryCalculation::findLeftHandSide( expression );
|
||||
@@ -324,12 +326,13 @@ std::optional<std::pair<std::vector<double>, std::vector<time_t>>>
|
||||
{
|
||||
SummaryCalculationVariable v = variables[i];
|
||||
|
||||
RiaSummaryCurveDefinition curveDef( summaryCase, v.summaryAddress, false );
|
||||
RimSummaryCase* summaryCaseForValues = v.summaryCase;
|
||||
if ( summaryCaseForSubstitution ) summaryCaseForValues = summaryCaseForSubstitution;
|
||||
|
||||
std::vector<double> curveValues = RiaSummaryCurveDefinition::resultValues( curveDef );
|
||||
RiaSummaryCurveDefinition curveDef( summaryCaseForValues, v.summaryAddress, false );
|
||||
|
||||
std::vector<double> curveValues = RiaSummaryCurveDefinition::resultValues( curveDef );
|
||||
std::vector<time_t> curveTimeSteps = RiaSummaryCurveDefinition::timeSteps( curveDef );
|
||||
|
||||
if ( !curveTimeSteps.empty() && !curveValues.empty() )
|
||||
{
|
||||
timeHistoryCurveMerger.addCurveData( curveTimeSteps, curveValues );
|
||||
@@ -431,26 +434,19 @@ void RimSummaryCalculation::removeDependentObjects()
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
std::vector<RimSummaryCalculationAddress> RimSummaryCalculation::allAddressesForSummaryCase( RimSummaryCase* summaryCase ) const
|
||||
{
|
||||
if ( !m_distributeToAllCases )
|
||||
{
|
||||
for ( auto& v : m_variables )
|
||||
{
|
||||
if ( auto variable = dynamic_cast<RimSummaryCalculationVariable*>( 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();
|
||||
|
||||
@@ -76,7 +76,9 @@ protected:
|
||||
RimSummaryCalculationVariable* createVariable() override;
|
||||
|
||||
static std::optional<std::pair<std::vector<double>, std::vector<time_t>>>
|
||||
calculateResult( const QString& expression, const std::vector<SummaryCalculationVariable>& variables, RimSummaryCase* summaryCase );
|
||||
calculateResult( const QString& expression,
|
||||
const std::vector<SummaryCalculationVariable>& variables,
|
||||
RimSummaryCase* summaryCaseForSubstitution );
|
||||
|
||||
std::optional<std::pair<std::vector<double>, std::vector<time_t>>> calculateWithSubstitutions( RimSummaryCase* summaryCase,
|
||||
const RifEclipseSummaryAddress& addr );
|
||||
|
||||
Reference in New Issue
Block a user