From 66b9bb34b56dddb4bb70628ae4db00fbd7415fa3 Mon Sep 17 00:00:00 2001 From: Unknown Date: Thu, 5 Oct 2017 21:24:43 +0200 Subject: [PATCH] #1947 RFT/PLT Plot: Use const string in rftAddress for wellLogChannelName --- .../FileInterface/RifEclipseRftAddress.cpp | 13 --- .../FileInterface/RifEclipseRftAddress.h | 1 - .../FileInterface/RifReaderEclipseRft.cpp | 81 ++++++++++++------- .../FileInterface/RifReaderEclipseRft.h | 7 +- 4 files changed, 58 insertions(+), 44 deletions(-) diff --git a/ApplicationCode/FileInterface/RifEclipseRftAddress.cpp b/ApplicationCode/FileInterface/RifEclipseRftAddress.cpp index 5cc2a87853..6edf4ad91f 100644 --- a/ApplicationCode/FileInterface/RifEclipseRftAddress.cpp +++ b/ApplicationCode/FileInterface/RifEclipseRftAddress.cpp @@ -28,19 +28,6 @@ const QString RifEclipseRftAddress::WRAT = "Water Flow"; const QString RifEclipseRftAddress::ORAT = "Oil Flow"; const QString RifEclipseRftAddress::GRAT = "Gas Flow"; -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -RifEclipseRftAddress::RifEclipseRftAddress(std::string wellName, time_t timeStep, QString wellLogChannelName): - m_wellLogChannelName(wellLogChannelName) -{ - m_timeStep.setTimeSpec(Qt::TimeSpec::UTC); - m_timeStep.setTime_t(timeStep); - - m_wellName = QString(wellName.c_str()); - //m_wellLogChannelName = QString(wellLogChannelName.c_str()); -} - //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/FileInterface/RifEclipseRftAddress.h b/ApplicationCode/FileInterface/RifEclipseRftAddress.h index a3b8bcea8b..c5ae7a6217 100644 --- a/ApplicationCode/FileInterface/RifEclipseRftAddress.h +++ b/ApplicationCode/FileInterface/RifEclipseRftAddress.h @@ -41,7 +41,6 @@ public: static const QString GRAT; public: RifEclipseRftAddress(QString wellName, QDateTime timeStep, QString wellLogChannelName); - RifEclipseRftAddress(std::string wellName, time_t timeStep, QString wellLogChannelName); static std::vector allWellLogChannelNames(); diff --git a/ApplicationCode/FileInterface/RifReaderEclipseRft.cpp b/ApplicationCode/FileInterface/RifReaderEclipseRft.cpp index da86dffd4a..3345703034 100644 --- a/ApplicationCode/FileInterface/RifReaderEclipseRft.cpp +++ b/ApplicationCode/FileInterface/RifReaderEclipseRft.cpp @@ -22,8 +22,6 @@ #include "ert/ecl/ecl_rft_file.h" -#include - //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -56,50 +54,48 @@ void RifReaderEclipseRft::open() { ecl_rft_node_type* node = ecl_rft_file_iget_node(m_ecl_rft_file, i); - std::string wellName = ecl_rft_node_get_well_name(node); - time_t timeStep = ecl_rft_node_get_date(node); - - std::string wellLogChannelName = "PRESSURE"; - RifEclipseRftAddress addressPressure(wellName, timeStep, wellLogChannelName); + std::string wellNameStdString = ecl_rft_node_get_well_name(node); + QString wellName(wellNameStdString.c_str()); + m_wellNames.insert(wellName); + + time_t timeStepTime_t = ecl_rft_node_get_date(node); + QDateTime timeStep; + timeStep.setTimeSpec(Qt::TimeSpec::UTC); + timeStep.setTime_t(timeStepTime_t); + + RifEclipseRftAddress addressPressure(wellName, timeStep, RifEclipseRftAddress::PRESSURE); m_eclipseRftAddresses.push_back(addressPressure); m_rftAddressToLibeclNodeIdx[addressPressure] = i; - wellLogChannelName = "DEPTH"; - RifEclipseRftAddress addressDepth(wellName, timeStep, wellLogChannelName); + RifEclipseRftAddress addressDepth(wellName, timeStep, RifEclipseRftAddress::DEPTH); m_eclipseRftAddresses.push_back(addressDepth); m_rftAddressToLibeclNodeIdx[addressDepth] = i; if (ecl_rft_node_is_RFT(node)) { - wellLogChannelName = "SWAT"; - RifEclipseRftAddress addressSwat(wellName, timeStep, wellLogChannelName); + RifEclipseRftAddress addressSwat(wellName, timeStep, RifEclipseRftAddress::SWAT); m_eclipseRftAddresses.push_back(addressSwat); m_rftAddressToLibeclNodeIdx[addressSwat] = i; - wellLogChannelName = "SOIL"; - RifEclipseRftAddress addressSoil(wellName, timeStep, wellLogChannelName); + RifEclipseRftAddress addressSoil(wellName, timeStep, RifEclipseRftAddress::SOIL); m_eclipseRftAddresses.push_back(addressSoil); m_rftAddressToLibeclNodeIdx[addressSoil] = i; - wellLogChannelName = "SGAS"; - RifEclipseRftAddress addressSgas(wellName, timeStep, wellLogChannelName); + RifEclipseRftAddress addressSgas(wellName, timeStep, RifEclipseRftAddress::SGAS); m_eclipseRftAddresses.push_back(addressSgas); m_rftAddressToLibeclNodeIdx[addressSgas] = i; } else if (ecl_rft_node_is_PLT(node)) { - wellLogChannelName = "WRAT"; - RifEclipseRftAddress addressWrat(wellName, timeStep, wellLogChannelName); + RifEclipseRftAddress addressWrat(wellName, timeStep, RifEclipseRftAddress::WRAT); m_eclipseRftAddresses.push_back(addressWrat); m_rftAddressToLibeclNodeIdx[addressWrat] = i; - wellLogChannelName = "GRAT"; - RifEclipseRftAddress addressGrat(wellName, timeStep, wellLogChannelName); + RifEclipseRftAddress addressGrat(wellName, timeStep, RifEclipseRftAddress::GRAT); m_eclipseRftAddresses.push_back(addressGrat); m_rftAddressToLibeclNodeIdx[addressGrat] = i; - wellLogChannelName = "ORAT"; - RifEclipseRftAddress addressOrat(wellName, timeStep, wellLogChannelName); + RifEclipseRftAddress addressOrat(wellName, timeStep, RifEclipseRftAddress::ORAT); m_eclipseRftAddresses.push_back(addressOrat); m_rftAddressToLibeclNodeIdx[addressOrat] = i; } @@ -138,56 +134,56 @@ void RifReaderEclipseRft::values(const RifEclipseRftAddress& rftAddress, std::ve QString wellLogChannelName = rftAddress.wellLogChannelName(); - if (wellLogChannelName == "DEPTH") + if (wellLogChannelName == RifEclipseRftAddress::DEPTH) { for (int i = 0; i < ecl_rft_node_get_size(node); i++) { values->push_back(ecl_rft_node_iget_depth(node, i)); } } - else if (wellLogChannelName == "PRESSURE") + else if (wellLogChannelName == RifEclipseRftAddress::PRESSURE) { for (int i = 0; i < ecl_rft_node_get_size(node); i++) { values->push_back(ecl_rft_node_iget_pressure(node, i)); } } - else if (wellLogChannelName == "SWAT") + else if (wellLogChannelName == RifEclipseRftAddress::SWAT) { for (int i = 0; i < ecl_rft_node_get_size(node); i++) { values->push_back(ecl_rft_node_iget_swat(node, i)); } } - else if (wellLogChannelName == "SOIL") + else if (wellLogChannelName == RifEclipseRftAddress::SOIL) { for (int i = 0; i < ecl_rft_node_get_size(node); i++) { values->push_back(ecl_rft_node_iget_soil(node, i)); } } - else if (wellLogChannelName == "SGAS") + else if (wellLogChannelName == RifEclipseRftAddress::SGAS) { for (int i = 0; i < ecl_rft_node_get_size(node); i++) { values->push_back(ecl_rft_node_iget_sgas(node, i)); } } - else if (wellLogChannelName == "WRAT") + else if (wellLogChannelName == RifEclipseRftAddress::WRAT) { for (int i = 0; i < ecl_rft_node_get_size(node); i++) { values->push_back(ecl_rft_node_iget_wrat(node, i)); } } - else if (wellLogChannelName == "GRAT") + else if (wellLogChannelName == RifEclipseRftAddress::GRAT) { for (int i = 0; i < ecl_rft_node_get_size(node); i++) { values->push_back(ecl_rft_node_iget_grat(node, i)); } } - else if (wellLogChannelName == "ORAT") + else if (wellLogChannelName == RifEclipseRftAddress::ORAT) { for (int i = 0; i < ecl_rft_node_get_size(node); i++) { @@ -196,6 +192,33 @@ void RifReaderEclipseRft::values(const RifEclipseRftAddress& rftAddress, std::ve } } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +std::vector RifReaderEclipseRft::availableTimeSteps(const QString& wellName, const QString& wellLogChannelName) const +{ + std::vector timeSteps; + + if (wellName == "" || wellLogChannelName == "") return timeSteps; + + for (const RifEclipseRftAddress& address : m_eclipseRftAddresses) + { + if (address.wellName() == wellName && address.wellLogChannelName() == wellLogChannelName) + { + timeSteps.push_back(address.timeStep()); + } + } + return timeSteps; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +const std::set& RifReaderEclipseRft::wellNames() const +{ + return m_wellNames; +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/FileInterface/RifReaderEclipseRft.h b/ApplicationCode/FileInterface/RifReaderEclipseRft.h index e78edfb4d5..6970376d63 100644 --- a/ApplicationCode/FileInterface/RifReaderEclipseRft.h +++ b/ApplicationCode/FileInterface/RifReaderEclipseRft.h @@ -25,6 +25,8 @@ #include "cvfBase.h" #include "cvfObject.h" +#include + class RifEclipseRftAddress; //================================================================================================== @@ -37,10 +39,12 @@ public: RifReaderEclipseRft(const std::string& fileName); ~RifReaderEclipseRft(); - const std::vector& eclipseRftAddresses(); void values(const RifEclipseRftAddress& rftAddress, std::vector* values); + std::vector availableTimeSteps(const QString& wellName, const QString& wellLogChannelName) const; + const std::set& wellNames() const; + private: void open(); int indexFromAddress(const RifEclipseRftAddress& rftAddress) const; @@ -52,6 +56,7 @@ private: std::string m_fileName; ecl_rft_file_type* m_ecl_rft_file; std::vector m_eclipseRftAddresses; + std::set m_wellNames; std::map m_rftAddressToLibeclNodeIdx; };