#7912 Summary Data Import : Update to ESMRY format

This commit is contained in:
Magne Sjaastad 2021-09-10 16:36:25 +02:00
parent d1463645d0
commit f699f5f6b8
6 changed files with 93 additions and 94 deletions

View File

@ -52,7 +52,7 @@ void RiaPreferencesSummary::SummaryReaderModeType::setUp()
{
addItem( RiaPreferencesSummary::SummaryReaderMode::LIBECL, "LIBECL", "UNSMRY (libecl)" );
addItem( RiaPreferencesSummary::SummaryReaderMode::HDF5_OPM_COMMON, "HDF5_OPM_COMMON", "h5 (HDF5)" );
addItem( RiaPreferencesSummary::SummaryReaderMode::OPM_COMMON, "OPM_COMMON", "LODSMRY (opm-common)" );
addItem( RiaPreferencesSummary::SummaryReaderMode::OPM_COMMON, "OPM_COMMON", "ESMRY (opm-common)" );
setDefault( RiaPreferencesSummary::SummaryReaderMode::HDF5_OPM_COMMON );
}
} // namespace caf
@ -110,23 +110,23 @@ RiaPreferencesSummary::RiaPreferencesSummary()
"Semicolon separated list of filters used to create curves in new summary plots",
"" );
CAF_PDM_InitField( &m_createOptimizedSummaryDataFile,
CAF_PDM_InitField( &m_createEnhancedSummaryDataFile,
"createOptimizedSummaryDataFile",
false,
"Create LODSMRY Summary Files",
"Create ESMRY Summary Files",
"",
"If not present, create summary file with extension '*.LODSMRY'",
"If not present, create summary file with extension '*.ESMRY'",
"" );
caf::PdmUiNativeCheckBoxEditor::configureFieldForEditor( &m_createOptimizedSummaryDataFile );
caf::PdmUiNativeCheckBoxEditor::configureFieldForEditor( &m_createEnhancedSummaryDataFile );
CAF_PDM_InitField( &m_useOptimizedSummaryDataFile,
CAF_PDM_InitField( &m_useEnhancedSummaryDataFile,
"useOptimizedSummaryDataFile",
true,
"Use LODSMRY Summary Files",
"Use ESMRY Files",
"",
"If present, import summary files with extension '*.LODSMRY'",
"If present, import summary files with extension '*.ESMRY'",
"" );
caf::PdmUiNativeCheckBoxEditor::configureFieldForEditor( &m_useOptimizedSummaryDataFile );
caf::PdmUiNativeCheckBoxEditor::configureFieldForEditor( &m_useEnhancedSummaryDataFile );
CAF_PDM_InitField( &m_createH5SummaryDataFile,
"createH5SummaryDataFile",
@ -194,17 +194,17 @@ RiaPreferencesSummary::SummaryReaderMode RiaPreferencesSummary::summaryDataReade
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
bool RiaPreferencesSummary::useOptimizedSummaryDataFiles() const
bool RiaPreferencesSummary::useEnhancedSummaryDataFiles() const
{
return m_useOptimizedSummaryDataFile();
return m_useEnhancedSummaryDataFile();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
bool RiaPreferencesSummary::createOptimizedSummaryDataFiles() const
bool RiaPreferencesSummary::createEnhancedSummaryDataFiles() const
{
return m_createOptimizedSummaryDataFile();
return m_createEnhancedSummaryDataFile();
}
//--------------------------------------------------------------------------------------------------
@ -341,8 +341,8 @@ void RiaPreferencesSummary::defineUiOrdering( QString uiConfigName, caf::PdmUiOr
if ( m_summaryReader == SummaryReaderMode::OPM_COMMON )
{
uiOrdering.add( &m_useOptimizedSummaryDataFile );
uiOrdering.add( &m_createOptimizedSummaryDataFile );
uiOrdering.add( &m_useEnhancedSummaryDataFile );
uiOrdering.add( &m_createEnhancedSummaryDataFile );
}
else if ( m_summaryReader == SummaryReaderMode::HDF5_OPM_COMMON )
{

View File

@ -60,8 +60,8 @@ public:
static RiaPreferencesSummary* current();
SummaryReaderMode summaryDataReader() const;
bool useOptimizedSummaryDataFiles() const;
bool createOptimizedSummaryDataFiles() const;
bool useEnhancedSummaryDataFiles() const;
bool createEnhancedSummaryDataFiles() const;
bool createH5SummaryDataFiles() const;
bool checkH5SummaryDataTimeStamp() const;
@ -98,8 +98,8 @@ private:
caf::PdmField<bool> m_showSummaryTimeAsLongString;
caf::PdmField<bool> m_useMultipleThreadsWhenLoadingSummaryCases;
caf::PdmField<bool> m_createOptimizedSummaryDataFile;
caf::PdmField<bool> m_useOptimizedSummaryDataFile;
caf::PdmField<bool> m_createEnhancedSummaryDataFile;
caf::PdmField<bool> m_useEnhancedSummaryDataFile;
caf::PdmField<bool> m_createH5SummaryDataFile;
caf::PdmField<bool> m_checkH5FileTimeStamp;

View File

@ -26,56 +26,55 @@
#ifdef USE_OPENMP
#include <omp.h>
#endif
#include "QFileInfo"
size_t RifOpmCommonEclipseSummary::sm_createdLodFileCount = 0;
#include <QFileInfo>
size_t RifOpmCommonEclipseSummary::sm_createdEsmryFileCount = 0;
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RifOpmCommonEclipseSummary::RifOpmCommonEclipseSummary()
: m_useLodsmryFiles( false )
, m_createLodsmryFiles( false )
: m_useEsmryFiles( false )
, m_createEsmryFiles( false )
{
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RifOpmCommonEclipseSummary::~RifOpmCommonEclipseSummary()
RifOpmCommonEclipseSummary::~RifOpmCommonEclipseSummary() = default;
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RifOpmCommonEclipseSummary::useEnhancedSummaryFiles( bool enable )
{
m_useEsmryFiles = enable;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RifOpmCommonEclipseSummary::useLodsmaryFiles( bool enable )
void RifOpmCommonEclipseSummary::createEnhancedSummaryFiles( bool enable )
{
m_useLodsmryFiles = enable;
m_createEsmryFiles = enable;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RifOpmCommonEclipseSummary::createLodsmaryFiles( bool enable )
void RifOpmCommonEclipseSummary::resetEnhancedSummaryFileCount()
{
m_createLodsmryFiles = enable;
sm_createdEsmryFileCount = 0;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RifOpmCommonEclipseSummary::resetLodCount()
size_t RifOpmCommonEclipseSummary::numberOfEnhancedSummaryFileCreated()
{
sm_createdLodFileCount = 0;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
size_t RifOpmCommonEclipseSummary::numberOfLodFilesCreated()
{
return sm_createdLodFileCount;
return sm_createdEsmryFileCount;
}
//--------------------------------------------------------------------------------------------------
@ -85,9 +84,9 @@ bool RifOpmCommonEclipseSummary::open( const QString& headerFileName,
bool includeRestartFiles,
RiaThreadSafeLogger* threadSafeLogger )
{
if ( m_createLodsmryFiles )
if ( m_createEsmryFiles )
{
auto candidateFileName = extendedSummaryFilename( headerFileName );
auto candidateFileName = enhancedSummaryFilename( headerFileName );
if ( !QFileInfo::exists( candidateFileName ) )
{
try
@ -97,7 +96,7 @@ bool RifOpmCommonEclipseSummary::open( const QString& headerFileName,
temporarySummaryFile->make_esmry_file();
RifOpmCommonEclipseSummary::increaseLodFileCount();
RifOpmCommonEclipseSummary::increaseEsmryFileCount();
}
catch ( std::exception& e )
{
@ -110,9 +109,9 @@ bool RifOpmCommonEclipseSummary::open( const QString& headerFileName,
}
}
if ( !openESmryFile( headerFileName, includeRestartFiles, threadSafeLogger ) ) return false;
if ( !openFileReader( headerFileName, includeRestartFiles, threadSafeLogger ) ) return false;
if ( !m_eSmry && !m_exteSmry ) return false;
if ( !m_standardReader && !m_enhancedReader ) return false;
buildMetaData();
@ -132,19 +131,19 @@ const std::vector<time_t>& RifOpmCommonEclipseSummary::timeSteps( const RifEclip
//--------------------------------------------------------------------------------------------------
bool RifOpmCommonEclipseSummary::values( const RifEclipseSummaryAddress& resultAddress, std::vector<double>* values ) const
{
auto it = m_adrToKeyword.find( resultAddress );
if ( it != m_adrToKeyword.end() )
auto it = m_summaryAddressToKeywordMap.find( resultAddress );
if ( it != m_summaryAddressToKeywordMap.end() )
{
auto keyword = it->second;
if ( m_exteSmry )
if ( m_enhancedReader )
{
auto fileValues = m_exteSmry->get( keyword );
auto fileValues = m_enhancedReader->get( keyword );
values->insert( values->begin(), fileValues.begin(), fileValues.end() );
}
if ( m_eSmry )
if ( m_standardReader )
{
auto fileValues = m_eSmry->get( keyword );
auto fileValues = m_standardReader->get( keyword );
values->insert( values->begin(), fileValues.begin(), fileValues.end() );
}
return true;
@ -158,17 +157,17 @@ bool RifOpmCommonEclipseSummary::values( const RifEclipseSummaryAddress& resultA
//--------------------------------------------------------------------------------------------------
std::string RifOpmCommonEclipseSummary::unitName( const RifEclipseSummaryAddress& resultAddress ) const
{
auto it = m_adrToKeyword.find( resultAddress );
if ( it != m_adrToKeyword.end() )
auto it = m_summaryAddressToKeywordMap.find( resultAddress );
if ( it != m_summaryAddressToKeywordMap.end() )
{
auto keyword = it->second;
if ( m_exteSmry )
if ( m_enhancedReader )
{
return m_exteSmry->get_unit( keyword );
return m_enhancedReader->get_unit( keyword );
}
if ( m_eSmry )
if ( m_standardReader )
{
return m_eSmry->get_unit( keyword );
return m_standardReader->get_unit( keyword );
}
}
@ -192,16 +191,16 @@ void RifOpmCommonEclipseSummary::buildMetaData()
std::vector<Opm::time_point> dates;
std::vector<std::string> keywords;
if ( m_exteSmry )
if ( m_enhancedReader )
{
dates = m_exteSmry->dates();
keywords = m_exteSmry->keywordList();
dates = m_enhancedReader->dates();
keywords = m_enhancedReader->keywordList();
}
if ( m_eSmry )
if ( m_standardReader )
{
dates = m_eSmry->dates();
keywords = m_eSmry->keywordList();
dates = m_standardReader->dates();
keywords = m_standardReader->keywordList();
}
for ( const auto& d : dates )
@ -212,23 +211,24 @@ void RifOpmCommonEclipseSummary::buildMetaData()
auto [addresses, addressMap] = RifOpmCommonSummaryTools::buildMetaDataKeyword( keywords );
m_allResultAddresses = addresses;
m_adrToKeyword = addressMap;
m_allResultAddresses = addresses;
m_summaryAddressToKeywordMap = addressMap;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
bool RifOpmCommonEclipseSummary::openESmryFile( const QString& headerFileName,
bool includeRestartFiles,
RiaThreadSafeLogger* threadSafeLogger )
bool RifOpmCommonEclipseSummary::openFileReader( const QString& headerFileName,
bool includeRestartFiles,
RiaThreadSafeLogger* threadSafeLogger )
{
if ( m_useLodsmryFiles )
if ( m_useEsmryFiles )
{
try
{
auto candidateFileName = extendedSummaryFilename( headerFileName );
m_exteSmry = std::make_unique<Opm::EclIO::ExtESmry>( candidateFileName.toStdString(), includeRestartFiles );
auto candidateFileName = enhancedSummaryFilename( headerFileName );
m_enhancedReader =
std::make_unique<Opm::EclIO::ExtESmry>( candidateFileName.toStdString(), includeRestartFiles );
return true;
}
@ -240,7 +240,7 @@ bool RifOpmCommonEclipseSummary::openESmryFile( const QString& headerFileN
try
{
m_eSmry = std::make_unique<Opm::EclIO::ESmry>( headerFileName.toStdString(), includeRestartFiles );
m_standardReader = std::make_unique<Opm::EclIO::ESmry>( headerFileName.toStdString(), includeRestartFiles );
}
catch ( std::exception& e )
{
@ -257,17 +257,17 @@ bool RifOpmCommonEclipseSummary::openESmryFile( const QString& headerFileN
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RifOpmCommonEclipseSummary::increaseLodFileCount()
void RifOpmCommonEclipseSummary::increaseEsmryFileCount()
{
// This function can be called from a parallel loop, make it thread safe
#pragma omp critical
sm_createdLodFileCount++;
sm_createdEsmryFileCount++;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
QString RifOpmCommonEclipseSummary::extendedSummaryFilename( const QString& headerFileName )
QString RifOpmCommonEclipseSummary::enhancedSummaryFilename( const QString& headerFileName )
{
QString s( headerFileName );
return s.replace( ".SMSPEC", ".ESMRY" );

View File

@ -67,11 +67,11 @@ public:
RifOpmCommonEclipseSummary();
~RifOpmCommonEclipseSummary() override;
void useLodsmaryFiles( bool enable );
void createLodsmaryFiles( bool enable );
void useEnhancedSummaryFiles( bool enable );
void createEnhancedSummaryFiles( bool enable );
static void resetLodCount();
static size_t numberOfLodFilesCreated();
static void resetEnhancedSummaryFileCount();
static size_t numberOfEnhancedSummaryFileCreated();
bool open( const QString& headerFileName, bool includeRestartFiles, RiaThreadSafeLogger* threadSafeLogger );
@ -82,21 +82,20 @@ public:
private:
void buildMetaData();
bool openESmryFile( const QString& headerFileName, bool includeRestartFiles, RiaThreadSafeLogger* threadSafeLogger );
bool openFileReader( const QString& headerFileName, bool includeRestartFiles, RiaThreadSafeLogger* threadSafeLogger );
static void increaseLodFileCount();
static QString extendedSummaryFilename( const QString& headerFileName );
static void increaseEsmryFileCount();
static QString enhancedSummaryFilename( const QString& headerFileName );
private:
std::unique_ptr<Opm::EclIO::ESmry> m_eSmry;
std::unique_ptr<Opm::EclIO::ExtESmry> m_exteSmry;
std::unique_ptr<Opm::EclIO::ESmry> m_standardReader;
std::unique_ptr<Opm::EclIO::ExtESmry> m_enhancedReader;
std::vector<std::string> m_eSmryKeywords;
std::map<RifEclipseSummaryAddress, std::string> m_adrToKeyword;
std::map<RifEclipseSummaryAddress, std::string> m_summaryAddressToKeywordMap;
std::vector<time_t> m_timeSteps;
static size_t sm_createdLodFileCount;
static size_t sm_createdEsmryFileCount;
bool m_useLodsmryFiles;
bool m_createLodsmryFiles;
bool m_useEsmryFiles;
bool m_createEsmryFiles;
};

View File

@ -97,8 +97,8 @@ bool RifReaderEclipseSummary::open( const QString& headerFileName, RiaThreadSafe
{
auto opmCommonReader = std::make_unique<RifOpmCommonEclipseSummary>();
opmCommonReader->useLodsmaryFiles( prefSummary->useOptimizedSummaryDataFiles() );
opmCommonReader->createLodsmaryFiles( prefSummary->createOptimizedSummaryDataFiles() );
opmCommonReader->useEnhancedSummaryFiles( prefSummary->useEnhancedSummaryDataFiles() );
opmCommonReader->createEnhancedSummaryFiles( prefSummary->createEnhancedSummaryDataFiles() );
isValid = opmCommonReader->open( headerFileName, false, threadSafeLogger );
if ( isValid )

View File

@ -484,7 +484,7 @@ void RimSummaryCaseMainCollection::loadFileSummaryCaseData( std::vector<RimFileS
caf::ProgressInfo progInfo( fileSummaryCases.size(), "Loading Summary Cases" );
RifOpmCommonEclipseSummary::resetLodCount();
RifOpmCommonEclipseSummary::resetEnhancedSummaryFileCount();
RiaThreadSafeLogger threadSafeLogger;
@ -508,11 +508,11 @@ void RimSummaryCaseMainCollection::loadFileSummaryCaseData( std::vector<RimFileS
RiaLogging::info( txt );
}
auto numberOfLodFilesCreated = RifOpmCommonEclipseSummary::numberOfLodFilesCreated();
if ( numberOfLodFilesCreated > 0 )
auto numberOfEsmryFilesCreated = RifOpmCommonEclipseSummary::numberOfEnhancedSummaryFileCreated();
if ( numberOfEsmryFilesCreated > 0 )
{
RiaLogging::info( QString( "Optimized Summary Reader : Converted and created %1 '*.LODSMRY' files on disk." )
.arg( numberOfLodFilesCreated ) );
RiaLogging::info(
QString( "Summary Files : Converted and created %1 '*.ESMRY' files on disk." ).arg( numberOfEsmryFilesCreated ) );
}
// This loop is not thread safe, use serial loop