mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
Improve summary calculation performance
* Only reload calculation data * Make sure performance is good when a calculated object is added or changed - avoid recreation of summary file readers - delete all nodes in address tree representing calculated curves - build address nodes for calculated curves
This commit is contained in:
@@ -18,7 +18,15 @@
|
||||
|
||||
#include "RimSummaryCalculationCollection.h"
|
||||
|
||||
#include "RiaSummaryTools.h"
|
||||
|
||||
#include "RifSummaryReaderInterface.h"
|
||||
|
||||
#include "RimObservedSummaryData.h"
|
||||
#include "RimSummaryCalculation.h"
|
||||
#include "RimSummaryCase.h"
|
||||
#include "RimSummaryCaseCollection.h"
|
||||
#include "RimSummaryCaseMainCollection.h"
|
||||
|
||||
CAF_PDM_SOURCE_INIT( RimSummaryCalculationCollection, "RimSummaryCalculationCollection" );
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@@ -37,12 +45,53 @@ RimSummaryCalculation* RimSummaryCalculationCollection::createCalculation() cons
|
||||
return new RimSummaryCalculation;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RimSummaryCalculationCollection::updateDataDependingOnCalculations()
|
||||
{
|
||||
// Refresh data sources tree
|
||||
// Refresh meta data for all summary cases and rebuild AddressNodes in the summary tree
|
||||
RimSummaryCaseMainCollection* summaryCaseCollection = RiaSummaryTools::summaryCaseMainCollection();
|
||||
auto summaryCases = summaryCaseCollection->allSummaryCases();
|
||||
for ( RimSummaryCase* summaryCase : summaryCases )
|
||||
{
|
||||
if ( !summaryCase ) continue;
|
||||
|
||||
if ( auto reader = summaryCase->summaryReader() )
|
||||
{
|
||||
reader->buildMetaData();
|
||||
summaryCase->onCalculationUpdated();
|
||||
}
|
||||
}
|
||||
|
||||
RimObservedDataCollection* observedDataCollection = RiaSummaryTools::observedDataCollection();
|
||||
auto observedData = observedDataCollection->allObservedSummaryData();
|
||||
for ( auto obs : observedData )
|
||||
{
|
||||
if ( !obs ) continue;
|
||||
|
||||
if ( auto reader = obs->summaryReader() )
|
||||
{
|
||||
reader->buildMetaData();
|
||||
obs->onCalculationUpdated();
|
||||
}
|
||||
}
|
||||
|
||||
auto summaryCaseCollections = summaryCaseCollection->summaryCaseCollections();
|
||||
for ( RimSummaryCaseCollection* summaryCaseCollection : summaryCaseCollections )
|
||||
{
|
||||
summaryCaseCollection->onCalculationUpdated();
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RimSummaryCalculationCollection::rebuildCaseMetaData()
|
||||
{
|
||||
ensureValidCalculationIds();
|
||||
updateDataDependingOnCalculations();
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
|
||||
Reference in New Issue
Block a user