#12631 Refactors RFT readers to use unique_ptr

This commit is contained in:
Magne Sjaastad authored and GitHub committed 2025-07-16 13:10:47 +02:00
1 parent 61504636b2
commit 0d0c8f5505
18 files changed
+54 -37

No files matched your search

@@ -64,6 +64,8 @@ public:
return RiaDefines::ResultDataType::DOUBLE; return RiaDefines::ResultDataType::DOUBLE;
case RifEclipseKeywordValueCount::KeywordDataType::INTEGER: case RifEclipseKeywordValueCount::KeywordDataType::INTEGER:
return RiaDefines::ResultDataType::INTEGER; return RiaDefines::ResultDataType::INTEGER;
case RifEclipseKeywordValueCount::KeywordDataType::UNKNOWN:
return RiaDefines::ResultDataType::UNKNOWN;
} }
return RiaDefines::ResultDataType::UNKNOWN; return RiaDefines::ResultDataType::UNKNOWN;
@@ -155,7 +155,7 @@ std::set<RifEclipseRftAddress> RifReaderEclipseRft::eclipseRftAddresses()
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RifReaderEclipseRft::values( const RifEclipseRftAddress& rftAddress, std::vector<double>* values ) void RifReaderEclipseRft::values( const RifEclipseRftAddress& rftAddress, std::vector<double>* values )
{ {
CVF_ASSERT( values ); if ( !values ) return;
if ( !m_ecl_rft_file ) if ( !m_ecl_rft_file )
{ {
@@ -24,8 +24,6 @@
#include <string> #include <string>
#include <vector> #include <vector>
#include "cvfObject.h"
#include <QDateTime> #include <QDateTime>
namespace caf namespace caf
@@ -37,7 +35,7 @@ class VecIjk;
// //
// //
//================================================================================================== //==================================================================================================
class RifReaderEclipseRft : public RifReaderRftInterface, public cvf::Object class RifReaderEclipseRft : public RifReaderRftInterface
{ {
public: public:
RifReaderEclipseRft( const QString& fileName ); RifReaderEclipseRft( const QString& fileName );
@@ -23,8 +23,6 @@
#include <string> #include <string>
#include <vector> #include <vector>
#include "cvfObject.h"
#include <QDateTime> #include <QDateTime>
#include <QDir> #include <QDir>
@@ -32,7 +30,7 @@
// //
// //
//================================================================================================== //==================================================================================================
class RifReaderFmuRft : public RifReaderRftInterface, public cvf::Object class RifReaderFmuRft : public RifReaderRftInterface
{ {
private: private:
struct WellDate struct WellDate
@@ -55,6 +55,11 @@ RifReaderOpmRft::RifReaderOpmRft( const QString& fileName )
{ {
} }
//--------------------------------------------------------------------------------------------------
/// This is required to avoid including the OPM library in the header file
//--------------------------------------------------------------------------------------------------
RifReaderOpmRft::~RifReaderOpmRft() = default;
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@@ -21,8 +21,6 @@
#include "RifReaderEclipseRft.h" #include "RifReaderEclipseRft.h"
#include "RifRftSegment.h" #include "RifRftSegment.h"
#include "cvfObject.h"
#include <memory> #include <memory>
namespace Opm namespace Opm
@@ -33,11 +31,12 @@ namespace EclIO
} // namespace EclIO } // namespace EclIO
} // namespace Opm } // namespace Opm
class RifReaderOpmRft : public RifReaderRftInterface, public cvf::Object class RifReaderOpmRft : public RifReaderRftInterface
{ {
public: public:
RifReaderOpmRft( const QString& fileName ); RifReaderOpmRft( const QString& fileName );
RifReaderOpmRft( const QString& fileName, const QString& dataDeckFileName ); RifReaderOpmRft( const QString& fileName, const QString& dataDeckFileName );
virtual ~RifReaderOpmRft();
std::set<RifEclipseRftAddress> eclipseRftAddresses() override; std::set<RifEclipseRftAddress> eclipseRftAddresses() override;
void values( const RifEclipseRftAddress& rftAddress, std::vector<double>* values ) override; void values( const RifEclipseRftAddress& rftAddress, std::vector<double>* values ) override;
@@ -35,7 +35,7 @@
// //
// //
//================================================================================================== //==================================================================================================
class RifReaderPressureDepthData : public RifReaderRftInterface, public cvf::Object class RifReaderPressureDepthData : public RifReaderRftInterface
{ {
public: public:
RifReaderPressureDepthData( const QString& filePath ); RifReaderPressureDepthData( const QString& filePath );
@@ -26,6 +26,11 @@
#include "cafVecIjk.h" #include "cafVecIjk.h"
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RifReaderRftInterface::~RifReaderRftInterface() = default;
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@@ -36,6 +36,8 @@ class RigEclipseWellLogExtractor;
class RifReaderRftInterface class RifReaderRftInterface
{ {
public: public:
virtual ~RifReaderRftInterface();
std::set<RifEclipseRftAddress> eclipseRftAddresses( const QString& wellName, const QDateTime& timeStep ); std::set<RifEclipseRftAddress> eclipseRftAddresses( const QString& wellName, const QDateTime& timeStep );
virtual std::set<RifEclipseRftAddress> eclipseRftAddresses() = 0; virtual std::set<RifEclipseRftAddress> eclipseRftAddresses() = 0;
virtual void values( const RifEclipseRftAddress& rftAddress, std::vector<double>* values ) = 0; virtual void values( const RifEclipseRftAddress& rftAddress, std::vector<double>* values ) = 0;
@@ -425,11 +425,11 @@ void RimEclipseResultCase::ensureRftDataIsImported()
{ {
if ( m_useOpmRftReader ) if ( m_useOpmRftReader )
{ {
m_readerOpmRft = new RifReaderOpmRft( rftFileInfo.filePath() ); m_readerOpmRft = std::make_unique<RifReaderOpmRft>( rftFileInfo.filePath() );
} }
else else
{ {
m_readerEclipseRft = new RifReaderEclipseRft( rftFileInfo.filePath() ); m_readerEclipseRft = std::make_unique<RifReaderEclipseRft>( rftFileInfo.filePath() );
} }
} }
@@ -612,9 +612,9 @@ RifReaderRftInterface* RimEclipseResultCase::rftReader()
{ {
ensureRftDataIsImported(); ensureRftDataIsImported();
if ( m_useOpmRftReader ) return m_readerOpmRft.p(); if ( m_useOpmRftReader ) return m_readerOpmRft.get();
return m_readerEclipseRft.p(); return m_readerEclipseRft.get();
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@@ -27,6 +27,8 @@
#include "cafFilePath.h" #include "cafFilePath.h"
#include "cafPdmProxyValueField.h" #include "cafPdmProxyValueField.h"
#include <memory>
class RifReaderRftInterface; class RifReaderRftInterface;
class RifReaderEclipseRft; class RifReaderEclipseRft;
class RifReaderOpmRft; class RifReaderOpmRft;
@@ -94,8 +96,8 @@ private:
private: private:
cvf::ref<RigFlowDiagSolverInterface> m_flowDagSolverInterface; cvf::ref<RigFlowDiagSolverInterface> m_flowDagSolverInterface;
cvf::ref<RifReaderEclipseRft> m_readerEclipseRft; std::unique_ptr<RifReaderEclipseRft> m_readerEclipseRft;
cvf::ref<RifReaderOpmRft> m_readerOpmRft; std::unique_ptr<RifReaderOpmRft> m_readerOpmRft;
caf::PdmProxyValueField<caf::AppEnum<RiaDefines::EclipseUnitSystem>> m_unitSystem; caf::PdmProxyValueField<caf::AppEnum<RiaDefines::EclipseUnitSystem>> m_unitSystem;
caf::PdmChildArrayField<RimFlowDiagSolution*> m_flowDiagSolutions; caf::PdmChildArrayField<RimFlowDiagSolution*> m_flowDiagSolutions;
@@ -57,7 +57,7 @@ void RimObservedFmuRftData::setDirectoryPath( const QString& path )
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RimObservedFmuRftData::createRftReaderInterface() void RimObservedFmuRftData::createRftReaderInterface()
{ {
m_fmuRftReader = new RifReaderFmuRft( m_directoryPath().path() ); m_fmuRftReader = std::make_unique<RifReaderFmuRft>( m_directoryPath().path() );
m_fmuRftReader->importData(); m_fmuRftReader->importData();
} }
@@ -66,12 +66,12 @@ void RimObservedFmuRftData::createRftReaderInterface()
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
RifReaderRftInterface* RimObservedFmuRftData::rftReader() RifReaderRftInterface* RimObservedFmuRftData::rftReader()
{ {
if ( m_fmuRftReader.isNull() ) if ( !m_fmuRftReader )
{ {
createRftReaderInterface(); createRftReaderInterface();
} }
return m_fmuRftReader.p(); return m_fmuRftReader.get();
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@@ -95,9 +95,9 @@ bool RimObservedFmuRftData::hasWell( const QString& wellPathName ) const
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
std::vector<QString> RimObservedFmuRftData::wells() const std::vector<QString> RimObservedFmuRftData::wells() const
{ {
if ( m_fmuRftReader.p() ) if ( m_fmuRftReader )
{ {
std::set<QString> wellNames = const_cast<RifReaderFmuRft*>( m_fmuRftReader.p() )->wellNames(); std::set<QString> wellNames = m_fmuRftReader->wellNames();
return std::vector<QString>( wellNames.begin(), wellNames.end() ); return std::vector<QString>( wellNames.begin(), wellNames.end() );
} }
return std::vector<QString>(); return std::vector<QString>();
@@ -108,9 +108,9 @@ std::vector<QString> RimObservedFmuRftData::wells() const
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
std::vector<QString> RimObservedFmuRftData::labels( const RifEclipseRftAddress& rftAddress ) std::vector<QString> RimObservedFmuRftData::labels( const RifEclipseRftAddress& rftAddress )
{ {
if ( m_fmuRftReader.p() ) if ( m_fmuRftReader )
{ {
return const_cast<RifReaderFmuRft*>( m_fmuRftReader.p() )->labels( rftAddress ); return m_fmuRftReader->labels( rftAddress );
} }
return {}; return {};
} }
@@ -19,12 +19,15 @@
#pragma once #pragma once
#include "RifReaderFmuRft.h" #include "RifReaderFmuRft.h"
#include "RimNamedObject.h" #include "RimNamedObject.h"
#include "cafPdmField.h" #include "cafPdmField.h"
#include "cafPdmObject.h" #include "cafPdmObject.h"
#include "cafPdmProxyValueField.h" #include "cafPdmProxyValueField.h"
#include <memory>
class RimObservedFmuRftData : public RimNamedObject class RimObservedFmuRftData : public RimNamedObject
{ {
CAF_PDM_HEADER_INIT; CAF_PDM_HEADER_INIT;
@@ -44,7 +47,7 @@ protected:
void initAfterRead() override; void initAfterRead() override;
private: private:
cvf::ref<RifReaderFmuRft> m_fmuRftReader; std::unique_ptr<RifReaderFmuRft> m_fmuRftReader;
caf::PdmField<caf::FilePath> m_directoryPath; caf::PdmField<caf::FilePath> m_directoryPath;
caf::PdmField<QString> m_directoryPath_OBSOLETE; caf::PdmField<QString> m_directoryPath_OBSOLETE;
@@ -63,7 +63,7 @@ void RimPressureDepthData::setFilePath( const QString& path )
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RimPressureDepthData::createRftReaderInterface() void RimPressureDepthData::createRftReaderInterface()
{ {
m_fmuRftReader = new RifReaderPressureDepthData( m_filePath().path() ); m_fmuRftReader = std::make_unique<RifReaderPressureDepthData>( m_filePath().path() );
m_fmuRftReader->load(); m_fmuRftReader->load();
} }
@@ -72,12 +72,12 @@ void RimPressureDepthData::createRftReaderInterface()
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
RifReaderRftInterface* RimPressureDepthData::rftReader() RifReaderRftInterface* RimPressureDepthData::rftReader()
{ {
if ( m_fmuRftReader.isNull() ) if ( !m_fmuRftReader )
{ {
createRftReaderInterface(); createRftReaderInterface();
} }
return m_fmuRftReader.p(); return m_fmuRftReader.get();
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@@ -101,9 +101,9 @@ bool RimPressureDepthData::hasWell( const QString& wellPathName ) const
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
std::vector<QString> RimPressureDepthData::wellNames() const std::vector<QString> RimPressureDepthData::wellNames() const
{ {
if ( m_fmuRftReader.p() ) if ( m_fmuRftReader )
{ {
std::set<QString> wellNames = const_cast<RifReaderPressureDepthData*>( m_fmuRftReader.p() )->wellNames(); std::set<QString> wellNames = m_fmuRftReader->wellNames();
return std::vector<QString>( wellNames.begin(), wellNames.end() ); return std::vector<QString>( wellNames.begin(), wellNames.end() );
} }
return {}; return {};
@@ -43,7 +43,7 @@ public:
std::vector<QString> wellNames() const; std::vector<QString> wellNames() const;
private: private:
cvf::ref<RifReaderPressureDepthData> m_fmuRftReader; std::unique_ptr<RifReaderPressureDepthData> m_fmuRftReader;
caf::PdmField<caf::FilePath> m_filePath; caf::PdmField<caf::FilePath> m_filePath;
caf::PdmProxyValueField<std::vector<QString>> m_wells; caf::PdmProxyValueField<std::vector<QString>> m_wells;
@@ -215,13 +215,13 @@ RifSummaryReaderInterface* RimFileSummaryCase::findRelatedFilesAndCreateReader(
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
RifReaderOpmRft* RimFileSummaryCase::createOpmRftReader( const QString& rftFileName, const QString& dataDeckFileName ) std::unique_ptr<RifReaderOpmRft> RimFileSummaryCase::createOpmRftReader( const QString& rftFileName, const QString& dataDeckFileName )
{ {
QFileInfo fi( rftFileName ); QFileInfo fi( rftFileName );
if ( fi.exists() ) if ( fi.exists() )
{ {
return new RifReaderOpmRft( rftFileName, dataDeckFileName ); return std::make_unique<RifReaderOpmRft>( rftFileName, dataDeckFileName );
} }
return nullptr; return nullptr;
@@ -293,11 +293,11 @@ RifSummaryReaderInterface* RimFileSummaryCase::summaryReader()
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
RifReaderRftInterface* RimFileSummaryCase::rftReader() RifReaderRftInterface* RimFileSummaryCase::rftReader()
{ {
if ( m_summaryEclipseRftReader.isNull() ) if ( !m_summaryEclipseRftReader )
{ {
createRftReaderInterface(); createRftReaderInterface();
} }
return m_summaryEclipseRftReader.p(); return m_summaryEclipseRftReader.get();
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@@ -22,6 +22,8 @@
#include "cafPdmField.h" #include "cafPdmField.h"
#include "cvfObject.h" #include "cvfObject.h"
#include <memory>
class RifReaderRftInterface; class RifReaderRftInterface;
class RifReaderOpmRft; class RifReaderOpmRft;
class RifReaderEclipseSummary; class RifReaderEclipseSummary;
@@ -73,13 +75,13 @@ private:
QString additionalSummaryDataFilePath() const; QString additionalSummaryDataFilePath() const;
static QString createAdditionalSummaryFileName(); static QString createAdditionalSummaryFileName();
static RifReaderOpmRft* createOpmRftReader( const QString& rftFileName, const QString& dataDeckFileName ); static std::unique_ptr<RifReaderOpmRft> createOpmRftReader( const QString& rftFileName, const QString& dataDeckFileName );
private: private:
cvf::ref<RifSummaryReaderInterface> m_fileSummaryReader; cvf::ref<RifSummaryReaderInterface> m_fileSummaryReader;
cvf::ref<RifCalculatedSummaryCurveReader> m_calculatedSummaryReader; cvf::ref<RifCalculatedSummaryCurveReader> m_calculatedSummaryReader;
cvf::ref<RifMultipleSummaryReaders> m_multiSummaryReader; cvf::ref<RifMultipleSummaryReaders> m_multiSummaryReader;
cvf::ref<RifReaderOpmRft> m_summaryEclipseRftReader; std::unique_ptr<RifReaderOpmRft> m_summaryEclipseRftReader;
caf::PdmField<bool> m_includeRestartFiles; caf::PdmField<bool> m_includeRestartFiles;
caf::PdmField<caf::FilePath> m_additionalSummaryFilePath; caf::PdmField<caf::FilePath> m_additionalSummaryFilePath;
@@ -23,6 +23,7 @@
#include <QDateTime> #include <QDateTime>
#include <QString> #include <QString>
#include <memory>
#include <vector> #include <vector>
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------