mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
Import and plot of FMU RFT data works
This commit is contained in:
@@ -18,6 +18,7 @@
|
||||
|
||||
#include "RifDataSourceForRftPlt.h"
|
||||
#include "RimEclipseCase.h"
|
||||
#include "RimObservedFmuRftData.h"
|
||||
#include "RimSummaryCase.h"
|
||||
#include "RimSummaryCaseCollection.h"
|
||||
#include "RimWellLogFile.h"
|
||||
@@ -84,6 +85,17 @@ RifDataSourceForRftPlt::RifDataSourceForRftPlt(SourceType sourceType,
|
||||
m_ensemble = ensemble;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
RifDataSourceForRftPlt::RifDataSourceForRftPlt(SourceType sourceType, RimObservedFmuRftData* observedFmuRftData)
|
||||
{
|
||||
CVF_ASSERT(sourceType == SourceType::OBSERVED_FMU_RFT);
|
||||
|
||||
m_sourceType = sourceType;
|
||||
m_observedFmuRftData = observedFmuRftData;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@@ -146,6 +158,14 @@ RimWellLogFile* RifDataSourceForRftPlt::wellLogFile() const
|
||||
return m_wellLogFile;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
RimObservedFmuRftData* RifDataSourceForRftPlt::observedFmuRftData() const
|
||||
{
|
||||
return m_observedFmuRftData;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@@ -163,6 +183,8 @@ QString RifDataSourceForRftPlt::sourceTypeUiText(SourceType sourceType)
|
||||
return QString("Ensembles with RFT Data");
|
||||
case SourceType::SUMMARY_RFT:
|
||||
return QString("Summary case with RFT Data");
|
||||
case SourceType::OBSERVED_FMU_RFT:
|
||||
return QString("Observed FMU data");
|
||||
}
|
||||
return QString();
|
||||
}
|
||||
@@ -174,7 +196,7 @@ bool operator==(const RifDataSourceForRftPlt& addr1, const RifDataSourceForRftPl
|
||||
{
|
||||
return addr1.sourceType() == addr2.sourceType() && addr1.eclCase() == addr2.eclCase() &&
|
||||
addr1.wellLogFile() == addr2.wellLogFile() && addr1.summaryCase() == addr2.summaryCase() &&
|
||||
addr1.ensemble() == addr2.ensemble();
|
||||
addr1.ensemble() == addr2.ensemble() && addr1.observedFmuRftData() == addr2.observedFmuRftData();
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@@ -216,10 +238,7 @@ bool operator<(const RifDataSourceForRftPlt& addr1, const RifDataSourceForRftPlt
|
||||
{
|
||||
return addr1.wellLogFile()->fileName() < addr2.wellLogFile()->fileName();
|
||||
}
|
||||
else
|
||||
{
|
||||
return addr1.wellLogFile() < addr2.wellLogFile();
|
||||
}
|
||||
return addr1.wellLogFile() < addr2.wellLogFile();
|
||||
}
|
||||
else if (addr1.m_sourceType == RifDataSourceForRftPlt::SUMMARY_RFT)
|
||||
{
|
||||
@@ -227,10 +246,7 @@ bool operator<(const RifDataSourceForRftPlt& addr1, const RifDataSourceForRftPlt
|
||||
{
|
||||
return addr1.summaryCase()->caseName() < addr2.summaryCase()->caseName();
|
||||
}
|
||||
else
|
||||
{
|
||||
return addr1.summaryCase() < addr2.summaryCase();
|
||||
}
|
||||
return addr1.summaryCase() < addr2.summaryCase();
|
||||
}
|
||||
else if (addr1.m_sourceType == RifDataSourceForRftPlt::ENSEMBLE_RFT)
|
||||
{
|
||||
@@ -238,21 +254,23 @@ bool operator<(const RifDataSourceForRftPlt& addr1, const RifDataSourceForRftPlt
|
||||
{
|
||||
return addr1.ensemble()->name() < addr2.ensemble()->name();
|
||||
}
|
||||
else
|
||||
{
|
||||
return addr1.ensemble() < addr2.ensemble();
|
||||
}
|
||||
return addr1.ensemble() < addr2.ensemble();
|
||||
}
|
||||
else if (addr1.m_sourceType == RifDataSourceForRftPlt::OBSERVED_FMU_RFT)
|
||||
{
|
||||
if (addr1.observedFmuRftData() && addr2.observedFmuRftData())
|
||||
{
|
||||
return addr1.observedFmuRftData()->name() < addr2.observedFmuRftData()->name();
|
||||
}
|
||||
return addr1.observedFmuRftData() < addr2.observedFmuRftData();
|
||||
}
|
||||
else
|
||||
{
|
||||
if (addr1.eclCase() && addr2.eclCase())
|
||||
{
|
||||
return addr1.eclCase()->caseId() < addr2.eclCase()->caseId();
|
||||
}
|
||||
else
|
||||
{
|
||||
return addr1.eclCase() < addr2.eclCase();
|
||||
}
|
||||
return addr1.eclCase() < addr2.eclCase();
|
||||
}
|
||||
}
|
||||
#if 0
|
||||
|
||||
@@ -35,6 +35,7 @@ class RimEclipseCase;
|
||||
class RifReaderRftInterface;
|
||||
class RimSummaryCase;
|
||||
class RimSummaryCaseCollection;
|
||||
class RimObservedFmuRftData;
|
||||
|
||||
//==================================================================================================
|
||||
///
|
||||
@@ -50,7 +51,8 @@ public:
|
||||
RFT,
|
||||
GRID,
|
||||
ENSEMBLE_RFT,
|
||||
SUMMARY_RFT
|
||||
SUMMARY_RFT,
|
||||
OBSERVED_FMU_RFT
|
||||
};
|
||||
|
||||
RifDataSourceForRftPlt();
|
||||
@@ -58,6 +60,7 @@ public:
|
||||
RifDataSourceForRftPlt(SourceType sourceType, RimSummaryCaseCollection* ensemble);
|
||||
RifDataSourceForRftPlt(SourceType sourceType, RimSummaryCase* summaryCase, RimSummaryCaseCollection* ensemble);
|
||||
RifDataSourceForRftPlt(SourceType sourceType, RimWellLogFile* wellLogFile = nullptr);
|
||||
RifDataSourceForRftPlt(SourceType sourceType, RimObservedFmuRftData* observedFmuRftData);
|
||||
|
||||
SourceType sourceType() const;
|
||||
RimEclipseCase* eclCase() const;
|
||||
@@ -65,6 +68,7 @@ public:
|
||||
RimSummaryCaseCollection* ensemble() const;
|
||||
RimSummaryCase* summaryCase() const;
|
||||
RimWellLogFile* wellLogFile() const;
|
||||
RimObservedFmuRftData* observedFmuRftData() const;
|
||||
|
||||
static QString sourceTypeUiText(SourceType sourceType);
|
||||
|
||||
@@ -77,6 +81,7 @@ private:
|
||||
caf::PdmPointer<RimSummaryCase> m_summaryCase;
|
||||
caf::PdmPointer<RimSummaryCaseCollection> m_ensemble;
|
||||
caf::PdmPointer<RimWellLogFile> m_wellLogFile;
|
||||
caf::PdmPointer<RimObservedFmuRftData> m_observedFmuRftData;
|
||||
};
|
||||
|
||||
bool operator==(const RifDataSourceForRftPlt& addr1, const RifDataSourceForRftPlt& addr2);
|
||||
|
||||
@@ -25,9 +25,6 @@ RifEclipseRftAddress::RifEclipseRftAddress(QString wellName, QDateTime timeStep,
|
||||
: m_wellName(wellName)
|
||||
, m_wellLogChannel(wellLogChannelName)
|
||||
{
|
||||
timeStep.setTimeSpec(Qt::TimeSpec::UTC);
|
||||
|
||||
m_timeStep.setTimeSpec(Qt::TimeSpec::UTC);
|
||||
m_timeStep = timeStep;
|
||||
}
|
||||
|
||||
|
||||
@@ -227,6 +227,7 @@ void RifReaderFmuRft::load()
|
||||
QDir dir(m_filePath);
|
||||
|
||||
WellObservationMap wellObservations = loadWellDates(dir, &errorMsg);
|
||||
WellObservationMap validObservations;
|
||||
if (wellObservations.empty())
|
||||
{
|
||||
if (errorMsg.isEmpty())
|
||||
@@ -243,23 +244,22 @@ void RifReaderFmuRft::load()
|
||||
WellObservationSet& wellObservationSet = it->second;
|
||||
QString txtFile = QString("%1.txt").arg(wellName);
|
||||
QString obsFile = QString("%1.obs").arg(wellName);
|
||||
QFileInfo txtFileInfo(dir.absoluteFilePath(txtFile));
|
||||
QFileInfo obsFileInfo(dir.absoluteFilePath(obsFile));
|
||||
|
||||
if (!readTxtFile(txtFile, &errorMsg, &wellObservationSet))
|
||||
if (!readTxtFile(dir.absoluteFilePath(txtFile), &errorMsg, &wellObservationSet))
|
||||
{
|
||||
RiaLogging::error(errorMsg);
|
||||
return;
|
||||
RiaLogging::warning(errorMsg);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!readObsFile(obsFile, &errorMsg, &wellObservationSet))
|
||||
if (!readObsFile(dir.absoluteFilePath(obsFile), &errorMsg, &wellObservationSet))
|
||||
{
|
||||
RiaLogging::error(errorMsg);
|
||||
return;
|
||||
RiaLogging::warning(errorMsg);
|
||||
continue;
|
||||
}
|
||||
validObservations.insert(*it);
|
||||
}
|
||||
|
||||
m_allWellObservations.swap(wellObservations);
|
||||
m_allWellObservations.swap(validObservations);
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@@ -390,6 +390,7 @@ RifReaderFmuRft::WellObservationMap RifReaderFmuRft::loadWellDates(QDir& dir, QS
|
||||
}
|
||||
|
||||
QDateTime dateTime(QDate(year, month, day));
|
||||
dateTime.setTimeSpec(Qt::UTC);
|
||||
WellObservationSet observationSet(dateTime, measurementIndex);
|
||||
validObservations.insert(std::make_pair(wellName, observationSet));
|
||||
}
|
||||
@@ -416,8 +417,8 @@ bool RifReaderFmuRft::readTxtFile(const QString& fileName, QString* errorMsg, We
|
||||
QTextStream stream(&file);
|
||||
while (true)
|
||||
{
|
||||
QString line = stream.readLine();
|
||||
if (line.isNull())
|
||||
QString line = stream.readLine().trimmed();
|
||||
if (line.isNull() || line.isEmpty())
|
||||
{
|
||||
break;
|
||||
}
|
||||
@@ -465,17 +466,16 @@ bool RifReaderFmuRft::readObsFile(const QString& fileName, QString* errorMsg, We
|
||||
QTextStream stream(&file);
|
||||
while (true)
|
||||
{
|
||||
if (lineNumber >= wellObservationSet->observations.size())
|
||||
QString line = stream.readLine().trimmed();
|
||||
if (line.isNull() || line.isEmpty())
|
||||
{
|
||||
break;
|
||||
}
|
||||
else if (lineNumber >= wellObservationSet->observations.size())
|
||||
{
|
||||
*errorMsg = QString("'%1' has more lines than corresponding txt file").arg(fileName);
|
||||
return false;
|
||||
}
|
||||
|
||||
QString line = stream.readLine();
|
||||
if (line.isNull())
|
||||
{
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
QTextStream lineStream(&line);
|
||||
|
||||
Reference in New Issue
Block a user