#7912 Summary Data Import : Map from eclAdr to keyword

This commit is contained in:
Magne Sjaastad
2021-09-10 11:41:29 +02:00
parent 2dbe0a0c9c
commit 737ee811fa
4 changed files with 131 additions and 47 deletions

View File

@@ -132,31 +132,21 @@ 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 keyword = it->second;
if ( m_exteSmry )
{
auto it = m_adrToSummaryNodeIndex.find( resultAddress );
if ( it != m_adrToSummaryNodeIndex.end() )
{
// 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;
auto fileValues = m_exteSmry->get( keyword );
values->insert( values->begin(), fileValues.begin(), fileValues.end() );
}
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_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
{
auto it = m_adrToKeyword.find( resultAddress );
if ( it != m_adrToKeyword.end() )
{
auto keyword = it->second;
if ( m_exteSmry )
{
return m_exteSmry->get_unit( keyword );
}
if ( m_eSmry )
{
auto it = m_adrToSummaryNodeIndex.find( resultAddress );
if ( it != m_adrToSummaryNodeIndex.end() )
{
auto index = it->second;
auto node = m_eSmry->summaryNodeList()[index];
return m_eSmry->get_unit( node );
return m_eSmry->get_unit( keyword );
}
}
@@ -196,20 +189,31 @@ RiaDefines::EclipseUnitSystem RifOpmCommonEclipseSummary::unitSystem() const
//--------------------------------------------------------------------------------------------------
void RifOpmCommonEclipseSummary::buildMetaData()
{
std::vector<Opm::time_point> dates;
std::vector<std::string> keywords;
if ( m_exteSmry )
{
dates = m_exteSmry->dates();
keywords = m_exteSmry->keywordList();
}
if ( m_eSmry )
{
auto dates = m_eSmry->dates();
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::buildMetaData( m_eSmry.get() );
auto [addresses, addressMap] = RifOpmCommonSummaryTools::buildMetaDataKeyword( keywords );
m_allResultAddresses = addresses;
m_adrToSummaryNodeIndex = addressMap;
}
m_adrToKeyword = addressMap;
}
//--------------------------------------------------------------------------------------------------
@@ -379,3 +383,26 @@ std::pair<std::set<RifEclipseSummaryAddress>, std::map<RifEclipseSummaryAddress,
return { addresses, addressToNodeIndexMap };
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
std::pair<std::set<RifEclipseSummaryAddress>, std::map<RifEclipseSummaryAddress, std::string>>
RifOpmCommonSummaryTools::buildMetaDataKeyword( const std::vector<std::string>& keywords )
{
std::set<RifEclipseSummaryAddress> addresses;
std::map<RifEclipseSummaryAddress, std::string> addressToNodeIndexMap;
for ( auto keyword : keywords )
{
auto eclAdr = RifEclipseSummaryAddress::fromEclipseTextAddress( keyword );
if ( eclAdr.isValid() )
{
addresses.insert( eclAdr );
addressToNodeIndexMap[eclAdr] = keyword;
}
}
return { addresses, addressToNodeIndexMap };
}

View File

@@ -52,6 +52,9 @@ public:
static std::pair<std::set<RifEclipseSummaryAddress>, std::map<RifEclipseSummaryAddress, size_t>>
buildMetaData( const Opm::EclIO::ESmry* summaryFile );
static std::pair<std::set<RifEclipseSummaryAddress>, std::map<RifEclipseSummaryAddress, std::string>>
buildMetaDataKeyword( const std::vector<std::string>& keywords );
};
//==================================================================================================
@@ -89,7 +92,7 @@ private:
std::unique_ptr<Opm::EclIO::ExtESmry> m_exteSmry;
std::vector<std::string> m_eSmryKeywords;
std::map<RifEclipseSummaryAddress, size_t> m_adrToSummaryNodeIndex;
std::map<RifEclipseSummaryAddress, std::string> m_adrToKeyword;
std::vector<time_t> m_timeSteps;
static size_t sm_createdLodFileCount;

View File

@@ -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)

View File

@@ -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<std::string> 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<std::string> 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";
}
*/
}