Import and plot of FMU RFT data works

This commit is contained in:
Gaute Lindkvist
2019-08-20 15:09:13 +02:00
parent f76c67dab3
commit 2c5ca4ce46
51 changed files with 862 additions and 237 deletions

View File

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

View File

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

View File

@@ -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;
}

View File

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