From 366f92b92f48f5a62f030cef45b6d4063f67a725 Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Thu, 6 Nov 2025 15:04:57 +0100 Subject: [PATCH] #13101 Fix update of ensemble calculation vectors --- .../ProjectDataModel/RimSummaryCalculation.cpp | 10 +++++----- .../ProjectDataModel/Summary/RimSummaryEnsemble.cpp | 11 +++++++++++ 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/ApplicationLibCode/ProjectDataModel/RimSummaryCalculation.cpp b/ApplicationLibCode/ProjectDataModel/RimSummaryCalculation.cpp index 519870d76a..68da17a05e 100644 --- a/ApplicationLibCode/ProjectDataModel/RimSummaryCalculation.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimSummaryCalculation.cpp @@ -77,18 +77,18 @@ std::optional> RimSummaryCalculation::ge for ( size_t i = 0; i < m_variables.size(); i++ ) { RimSummaryCalculationVariable* v = dynamic_cast( m_variables[i] ); - CAF_ASSERT( v != nullptr ); + if ( !v ) continue; - if ( !v->summaryCase() ) - { - return {}; - } + // A null pointer to a summary case is allowed. This can happen during load of a project file before all data structures are in + // place. If we skip in this situation, no calculated vectors will be displayed for ensembles. + // https://github.com/OPM/ResInsight/issues/13101 if ( !v->summaryAddress() ) { return {}; } + // Skip variables that reference self if ( v->summaryAddress()->address().id() == id() ) { return {}; diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryEnsemble.cpp b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryEnsemble.cpp index 44f87a030a..783e5d8a1c 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryEnsemble.cpp +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryEnsemble.cpp @@ -1241,6 +1241,17 @@ void RimSummaryEnsemble::buildMetaData() //-------------------------------------------------------------------------------------------------- void RimSummaryEnsemble::onCalculationUpdated() { + if ( auto caseWithMostKeywords = RimSummaryEnsembleTools::caseWithMostDataObjects( m_cases.childrenByType() ) ) + { + if ( auto reader = caseWithMostKeywords->summaryReader() ) + { + // https://github.com/OPM/ResInsight/issues/13101 + // Call createAndSetAddresses to ensure that addresses are recreated based on an update to the calculation objects. + + reader->createAndSetAddresses(); + } + } + m_dataVectorFolders->deleteCalculatedAddresses(); m_dataVectorFolders->updateFolderStructure( ensembleSummaryAddresses(), -1, m_ensembleId );