Merge pull request #5032 from OPM/summary-cache-improvements

Summary cache improvements
This commit is contained in:
Magne Sjaastad 2019-11-12 19:03:30 +01:00 committed by GitHub
commit ef2d7eca0c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 28 additions and 61 deletions

View File

@ -84,5 +84,4 @@ void RicSummaryCurveCreatorDialog::slotDialogFinished()
{
plotwindow->cleanUpTemporaryWidgets();
}
RifReaderEclipseSummary::purgeCache();
}

View File

@ -570,14 +570,6 @@ void RifReaderEclipseSummary::markForCachePurge( const RifEclipseSummaryAddress&
m_valuesCache->markAddressForPurge( address );
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RifReaderEclipseSummary::purgeCache()
{
ValuesCache::purge();
}
#if 0
//--------------------------------------------------------------------------------------------------
///
@ -597,26 +589,17 @@ void RifReaderEclipseSummary::populateVectorFromStringList(stringlist_type* stri
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
const std::vector<double> RifReaderEclipseSummary::ValuesCache::EMPTY_VECTOR;
std::set<RifReaderEclipseSummary::ValuesCache*> RifReaderEclipseSummary::ValuesCache::m_instances;
const std::vector<double> RifReaderEclipseSummary::ValuesCache::EMPTY_VECTOR;
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RifReaderEclipseSummary::ValuesCache::ValuesCache()
{
// Register instance
m_instances.insert( this );
}
RifReaderEclipseSummary::ValuesCache::ValuesCache() {}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RifReaderEclipseSummary::ValuesCache::~ValuesCache()
{
// Deregister instance
m_instances.erase( this );
}
RifReaderEclipseSummary::ValuesCache::~ValuesCache() {}
//--------------------------------------------------------------------------------------------------
///
@ -648,15 +631,6 @@ void RifReaderEclipseSummary::ValuesCache::markAddressForPurge( const RifEclipse
m_purgeList.insert( address );
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RifReaderEclipseSummary::ValuesCache::purge()
{
for ( auto instance : m_instances )
instance->purgeData();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------

View File

@ -84,8 +84,7 @@ public:
return m_warnings;
}
void markForCachePurge( const RifEclipseSummaryAddress& address ) override;
static void purgeCache();
void markForCachePurge( const RifEclipseSummaryAddress& address ) override;
private:
int timeStepCount() const;
@ -122,15 +121,12 @@ private:
void insertValues( const RifEclipseSummaryAddress& address, const std::vector<double>& values );
const std::vector<double>& getValues( const RifEclipseSummaryAddress& address ) const;
void markAddressForPurge( const RifEclipseSummaryAddress& address );
static void purge();
private:
void purgeData();
std::map<const RifEclipseSummaryAddress, std::vector<double>> m_cachedValues;
std::set<RifEclipseSummaryAddress> m_purgeList;
static std::set<ValuesCache*> m_instances;
};
std::unique_ptr<ValuesCache> m_valuesCache;

View File

@ -44,6 +44,8 @@ RimFileSummaryCase::RimFileSummaryCase()
CAF_PDM_InitField( &m_includeRestartFiles, "IncludeRestartFiles", false, "Include Restart Files", "", "", "" );
m_includeRestartFiles.uiCapability()->setUiHidden( true );
m_summaryFileReader = new RifReaderEclipseSummary;
}
//--------------------------------------------------------------------------------------------------
@ -83,8 +85,12 @@ void RimFileSummaryCase::updateFilePathsFromProjectPath( const QString& newProje
//--------------------------------------------------------------------------------------------------
void RimFileSummaryCase::createSummaryReaderInterface()
{
m_summaryFileReader = RimFileSummaryCase::findRelatedFilesAndCreateReader( this->summaryHeaderFilename(),
m_includeRestartFiles );
if ( !m_summaryFileReader->open( this->summaryHeaderFilename(), m_includeRestartFiles ) )
{
RiaLogging::warning( QString( "Failed to open summary file %1" ).arg( this->summaryHeaderFilename() ) );
m_summaryFileReader = nullptr;
}
}
//--------------------------------------------------------------------------------------------------
@ -99,25 +105,6 @@ void RimFileSummaryCase::createRftReaderInterface()
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RifReaderEclipseSummary* RimFileSummaryCase::findRelatedFilesAndCreateReader( const QString& headerFileName,
bool includeRestartFiles )
{
RifReaderEclipseSummary* summaryFileReader = new RifReaderEclipseSummary;
if ( !summaryFileReader->open( headerFileName, includeRestartFiles ) )
{
RiaLogging::warning( QString( "Failed to open summary file %1" ).arg( headerFileName ) );
delete summaryFileReader;
summaryFileReader = nullptr;
}
return summaryFileReader;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------

View File

@ -50,9 +50,7 @@ public:
void setIncludeRestartFiles( bool includeRestartFiles );
static RifReaderEclipseSummary* findRelatedFilesAndCreateReader( const QString& headerFileName,
bool includeRestartFiles );
static RifReaderEclipseRft* findRftDataAndCreateReader( const QString& headerFileName );
static RifReaderEclipseRft* findRftDataAndCreateReader( const QString& headerFileName );
private:
cvf::ref<RifReaderEclipseSummary> m_summaryFileReader;

View File

@ -52,6 +52,8 @@ RimGridSummaryCase::RimGridSummaryCase()
CAF_PDM_InitField( &m_includeRestartFiles, "IncludeRestartFiles", false, "Include Restart Files", "", "", "" );
m_includeRestartFiles.uiCapability()->setUiHidden( true );
m_summaryFileReader = new RifReaderEclipseSummary;
}
//--------------------------------------------------------------------------------------------------
@ -173,8 +175,10 @@ void RimGridSummaryCase::updateFilePathsFromProjectPath( const QString& newProje
//--------------------------------------------------------------------------------------------------
void RimGridSummaryCase::createSummaryReaderInterface()
{
m_summaryFileReader = RimFileSummaryCase::findRelatedFilesAndCreateReader( this->summaryHeaderFilename(),
m_includeRestartFiles );
if ( !m_summaryFileReader->open( this->summaryHeaderFilename(), m_includeRestartFiles ) )
{
m_summaryFileReader = nullptr;
}
}
//--------------------------------------------------------------------------------------------------

View File

@ -399,6 +399,7 @@ void RimSummaryCaseMainCollection::loadFileSummaryCaseData( std::vector<RimFileS
{
// Use openMP when reading file summary case meta data. Avoid using the virtual interface of base class
// RimSummaryCase, as it is difficult to make sure all variants of the leaf classes are thread safe.
// Only open the summary file reader in parallel loop to reduce risk of multithreading issues
#pragma omp parallel for
for ( int cIdx = 0; cIdx < static_cast<int>( fileSummaryCases.size() ); ++cIdx )
@ -407,6 +408,14 @@ void RimSummaryCaseMainCollection::loadFileSummaryCaseData( std::vector<RimFileS
if ( fileSummaryCase )
{
fileSummaryCase->createSummaryReaderInterface();
}
}
for ( int cIdx = 0; cIdx < static_cast<int>( fileSummaryCases.size() ); ++cIdx )
{
RimFileSummaryCase* fileSummaryCase = fileSummaryCases[cIdx];
if ( fileSummaryCase )
{
fileSummaryCase->createRftReaderInterface();
addCaseRealizationParametersIfFound( *fileSummaryCase, fileSummaryCase->summaryHeaderFilename() );
}