From 737ee811fab8ac685074707fdba2c8d87a7eabe9 Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Fri, 10 Sep 2021 11:41:29 +0200 Subject: [PATCH] #7912 Summary Data Import : Map from eclAdr to keyword --- .../FileInterface/RifOpmCommonSummary.cpp | 107 +++++++++++------- .../FileInterface/RifOpmCommonSummary.h | 17 +-- .../UnitTests/CMakeLists_files.cmake | 1 + .../UnitTests/opm-summary-Test.cpp | 53 +++++++++ 4 files changed, 131 insertions(+), 47 deletions(-) create mode 100644 ApplicationLibCode/UnitTests/opm-summary-Test.cpp diff --git a/ApplicationLibCode/FileInterface/RifOpmCommonSummary.cpp b/ApplicationLibCode/FileInterface/RifOpmCommonSummary.cpp index 56b14facf3..cd07aa6e91 100644 --- a/ApplicationLibCode/FileInterface/RifOpmCommonSummary.cpp +++ b/ApplicationLibCode/FileInterface/RifOpmCommonSummary.cpp @@ -93,7 +93,7 @@ bool RifOpmCommonEclipseSummary::open( const QString& headerFileName, try { auto temporarySummaryFile = - std::make_unique(headerFileName.toStdString(), includeRestartFiles ); + std::make_unique( headerFileName.toStdString(), includeRestartFiles ); temporarySummaryFile->make_esmry_file(); @@ -132,31 +132,21 @@ const std::vector& RifOpmCommonEclipseSummary::timeSteps( const RifEclip //-------------------------------------------------------------------------------------------------- bool RifOpmCommonEclipseSummary::values( const RifEclipseSummaryAddress& resultAddress, std::vector* values ) const { - if ( m_exteSmry ) + auto it = m_adrToKeyword.find( resultAddress ); + if ( it != m_adrToKeyword.end() ) { - auto it = m_adrToSummaryNodeIndex.find( resultAddress ); - if ( it != m_adrToSummaryNodeIndex.end() ) + auto keyword = it->second; + if ( m_exteSmry ) { -// auto index = it->second; -// auto node = m_exteSmry->summaryNodeList()[index]; -// auto fileValues = m_exteSmry->get( node ); -// values->insert( values->begin(), fileValues.begin(), fileValues.end() ); - } - - return true; - } - - if ( m_eSmry ) - { - auto it = m_adrToSummaryNodeIndex.find( resultAddress ); - if ( it != m_adrToSummaryNodeIndex.end() ) - { - auto index = it->second; - auto node = m_eSmry->summaryNodeList()[index]; - auto fileValues = m_eSmry->get( node ); + auto fileValues = m_exteSmry->get( keyword ); values->insert( values->begin(), fileValues.begin(), fileValues.end() ); } + if ( m_eSmry ) + { + auto fileValues = m_eSmry->get( keyword ); + values->insert( values->begin(), fileValues.begin(), fileValues.end() ); + } return true; } @@ -168,14 +158,17 @@ bool RifOpmCommonEclipseSummary::values( const RifEclipseSummaryAddress& resultA //-------------------------------------------------------------------------------------------------- std::string RifOpmCommonEclipseSummary::unitName( const RifEclipseSummaryAddress& resultAddress ) const { - if ( m_eSmry ) + auto it = m_adrToKeyword.find( resultAddress ); + if ( it != m_adrToKeyword.end() ) { - auto it = m_adrToSummaryNodeIndex.find( resultAddress ); - if ( it != m_adrToSummaryNodeIndex.end() ) + auto keyword = it->second; + if ( m_exteSmry ) { - auto index = it->second; - auto node = m_eSmry->summaryNodeList()[index]; - return m_eSmry->get_unit( node ); + return m_exteSmry->get_unit( keyword ); + } + if ( m_eSmry ) + { + return m_eSmry->get_unit( keyword ); } } @@ -196,20 +189,31 @@ RiaDefines::EclipseUnitSystem RifOpmCommonEclipseSummary::unitSystem() const //-------------------------------------------------------------------------------------------------- void RifOpmCommonEclipseSummary::buildMetaData() { + std::vector dates; + std::vector keywords; + + if ( m_exteSmry ) + { + dates = m_exteSmry->dates(); + keywords = m_exteSmry->keywordList(); + } + if ( m_eSmry ) { - auto dates = m_eSmry->dates(); - for ( const auto& d : dates ) - { - auto timeAsTimeT = std::chrono::system_clock::to_time_t( d ); - m_timeSteps.push_back( timeAsTimeT ); - } - - auto [addresses, addressMap] = RifOpmCommonSummaryTools::buildMetaData( m_eSmry.get() ); - - m_allResultAddresses = addresses; - m_adrToSummaryNodeIndex = addressMap; + dates = m_eSmry->dates(); + keywords = m_eSmry->keywordList(); } + + for ( const auto& d : dates ) + { + auto timeAsTimeT = std::chrono::system_clock::to_time_t( d ); + m_timeSteps.push_back( timeAsTimeT ); + } + + auto [addresses, addressMap] = RifOpmCommonSummaryTools::buildMetaDataKeyword( keywords ); + + m_allResultAddresses = addresses; + m_adrToKeyword = addressMap; } //-------------------------------------------------------------------------------------------------- @@ -263,9 +267,9 @@ void RifOpmCommonEclipseSummary::increaseLodFileCount() //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -QString RifOpmCommonEclipseSummary::extendedSummaryFilename( const QString& headerFileName) +QString RifOpmCommonEclipseSummary::extendedSummaryFilename( const QString& headerFileName ) { - QString s(headerFileName); + QString s( headerFileName ); return s.replace( ".SMSPEC", ".ESMRY" ); } @@ -379,3 +383,26 @@ std::pair, std::map, std::map> + RifOpmCommonSummaryTools::buildMetaDataKeyword( const std::vector& keywords ) +{ + std::set addresses; + std::map addressToNodeIndexMap; + + for ( auto keyword : keywords ) + { + auto eclAdr = RifEclipseSummaryAddress::fromEclipseTextAddress( keyword ); + + if ( eclAdr.isValid() ) + { + addresses.insert( eclAdr ); + addressToNodeIndexMap[eclAdr] = keyword; + } + } + + return { addresses, addressToNodeIndexMap }; +} diff --git a/ApplicationLibCode/FileInterface/RifOpmCommonSummary.h b/ApplicationLibCode/FileInterface/RifOpmCommonSummary.h index 725c027a8b..02f753fc4a 100644 --- a/ApplicationLibCode/FileInterface/RifOpmCommonSummary.h +++ b/ApplicationLibCode/FileInterface/RifOpmCommonSummary.h @@ -52,6 +52,9 @@ public: static std::pair, std::map> buildMetaData( const Opm::EclIO::ESmry* summaryFile ); + + static std::pair, std::map> + buildMetaDataKeyword( const std::vector& keywords ); }; //================================================================================================== @@ -81,16 +84,16 @@ private: void buildMetaData(); bool openESmryFile( const QString& headerFileName, bool includeRestartFiles, RiaThreadSafeLogger* threadSafeLogger ); - static void increaseLodFileCount(); - static QString extendedSummaryFilename(const QString& headerFileName); + static void increaseLodFileCount(); + static QString extendedSummaryFilename( const QString& headerFileName ); private: - std::unique_ptr m_eSmry; - std::unique_ptr m_exteSmry; + std::unique_ptr m_eSmry; + std::unique_ptr m_exteSmry; - std::vector m_eSmryKeywords; - std::map m_adrToSummaryNodeIndex; - std::vector m_timeSteps; + std::vector m_eSmryKeywords; + std::map m_adrToKeyword; + std::vector m_timeSteps; static size_t sm_createdLodFileCount; diff --git a/ApplicationLibCode/UnitTests/CMakeLists_files.cmake b/ApplicationLibCode/UnitTests/CMakeLists_files.cmake index 12660ffc50..ece2897a75 100644 --- a/ApplicationLibCode/UnitTests/CMakeLists_files.cmake +++ b/ApplicationLibCode/UnitTests/CMakeLists_files.cmake @@ -79,6 +79,7 @@ set(SOURCE_GROUP_SOURCE_FILES ${CMAKE_CURRENT_LIST_DIR}/RigSurfaceResampler-Test.cpp ${CMAKE_CURRENT_LIST_DIR}/RigSurfaceStatisticsCalculator-Test.cpp ${CMAKE_CURRENT_LIST_DIR}/StructGridInterface-Test.cpp + ${CMAKE_CURRENT_LIST_DIR}/opm-summary-Test.cpp ) if(RESINSIGHT_ENABLE_GRPC) diff --git a/ApplicationLibCode/UnitTests/opm-summary-Test.cpp b/ApplicationLibCode/UnitTests/opm-summary-Test.cpp new file mode 100644 index 0000000000..15f186ac20 --- /dev/null +++ b/ApplicationLibCode/UnitTests/opm-summary-Test.cpp @@ -0,0 +1,53 @@ +#include "gtest/gtest.h" + +#include "RiaTestDataDirectory.h" +#include "RifOpmCommonSummary.h" + +#include "opm/io/eclipse/ESmry.hpp" +#include "opm/io/eclipse/ExtESmry.hpp" + +static const QString H5_TEST_DATA_DIRECTORY = QString( "%1/h5-file/" ).arg( TEST_DATA_DIR ); + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +TEST( DISABLED_OpmSummaryTests, ReadOpmSummaryDataListContent ) +{ + std::vector esmryKeywords; + { + QString filePath = H5_TEST_DATA_DIRECTORY + "NORNE_ATW2013_RFTPLT_V2.SMSPEC"; + + Opm::EclIO::ESmry eSmry( filePath.toStdString() ); + + esmryKeywords = eSmry.keywordList(); + eSmry.make_esmry_file(); + } + + std::vector extEsmryKeywords; + { + QString filePath = H5_TEST_DATA_DIRECTORY + "NORNE_ATW2013_RFTPLT_V2.ESMRY"; + + Opm::EclIO::ExtESmry extEsmry( filePath.toStdString() ); + + extEsmryKeywords = extEsmry.keywordList(); + } + + EXPECT_EQ( esmryKeywords.size(), extEsmryKeywords.size() ); + for ( size_t i = 0; i < esmryKeywords.size(); i++ ) + { + auto s1 = esmryKeywords[i]; + auto s2 = extEsmryKeywords[i]; + EXPECT_STREQ( s1.c_str(), s2.c_str() ); + + RifEclipseSummaryAddress eclAdr = RifEclipseSummaryAddress::fromEclipseTextAddress( s1 ); + EXPECT_TRUE( eclAdr.isValid() ); + } + + /* + auto keywords = eSmry.keywordList(); + for ( auto k : keywords ) + { + std::cout << k << "\n"; + } + */ +}