#1816 : Observed Data : Add mock data to RifReaderObservedData

This commit is contained in:
Magne Sjaastad 2017-09-22 14:26:54 +02:00
parent 363224e39a
commit eb744f381d
15 changed files with 340 additions and 59 deletions

View File

@ -488,6 +488,10 @@ bool RiaApplication::loadProject(const QString& projectFileName, ProjectLoadActi
{
oilField->observedDataCollection = new RimObservedDataCollection();
}
for (auto observedCases : oilField->observedDataCollection()->allObservedData())
{
observedCases->createSummaryReaderInterface();
}
#ifdef USE_PROTOTYPE_FEATURE_FRACTURES
oilField->fractureDefinitionCollection()->loadAndUpdateData();

View File

@ -21,12 +21,8 @@
#include "RifColumnBasedAsciiParser.h"
#include "RifEclipseSummaryAddress.h"
#include "ert/ecl/ecl_sum.h"
#include <string>
#include <assert.h>
#include <QDateTime>
#include <QTextStream>
//--------------------------------------------------------------------------------------------------
///
@ -47,15 +43,44 @@ RifReaderObservedData::~RifReaderObservedData()
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
bool RifReaderObservedData::open(const std::string& headerFileName)
bool RifReaderObservedData::open(const QString& headerFileName,
const QString& identifierName,
RifEclipseSummaryAddress::SummaryVarCategory summaryCategory)
{
QString dateFormat = "yyyy-MM-dd";
QString cellSeparator = "\t";
QLocale decimalLocale = QLocale::Norwegian;
if (headerFileName.empty()) return false;
QString data = headerFileName.data();
QString data;
QTextStream out(&data);
out << "Date" << "\t" << "Oil" << "\t" << "PW" << "\n";
out << "1993-02-23" << "\t" << "10" << "\t" << "1" << "\n";
out << "1993-06-15" << "\t" << "20" << "\t" << "2" << "\n";
out << "1994-02-26" << "\t" << "30" << "\t" << "3" << "\n";
out << "1994-05-23" << "\t" << "40" << "\t" << "4" << "\n";
return false;
//RiaParseAsciiData::parseData(data, settings);
//m_asciiParser = RifColumnBasedAsciiParser(data)
m_asciiParser = std::unique_ptr<RifColumnBasedAsciiParser>(new RifColumnBasedAsciiParser(data, dateFormat, decimalLocale, cellSeparator));
m_timeSteps.clear();
if (m_asciiParser)
{
for (QDateTime timeStep : m_asciiParser->timeSteps())
{
time_t t = timeStep.toTime_t();
m_timeSteps.push_back(t);
}
m_allResultAddresses.clear();
for (auto s : m_asciiParser->headers())
{
m_allResultAddresses.push_back(address(s, identifierName, summaryCategory));
}
}
if (!m_asciiParser) return false;
return true;
}
//--------------------------------------------------------------------------------------------------
@ -63,6 +88,24 @@ bool RifReaderObservedData::open(const std::string& headerFileName)
//--------------------------------------------------------------------------------------------------
bool RifReaderObservedData::values(const RifEclipseSummaryAddress& resultAddress, std::vector<double>* values)
{
size_t columnIndex = m_allResultAddresses.size();
for (size_t i = 0; i < m_allResultAddresses.size(); i++)
{
if (resultAddress == m_allResultAddresses[i])
{
columnIndex = i;
}
}
if (columnIndex != m_allResultAddresses.size())
{
for (auto& v : m_asciiParser->columnValues(columnIndex))
{
values->push_back(v);
}
}
return true;
}
@ -71,25 +114,17 @@ bool RifReaderObservedData::values(const RifEclipseSummaryAddress& resultAddress
//--------------------------------------------------------------------------------------------------
const std::vector<time_t>& RifReaderObservedData::timeSteps(const RifEclipseSummaryAddress& resultAddress) const
{
// if (m_asciiParser)
// {
// for (QDateTime timeStep : m_asciiParser->timeSteps())
// {
// time_t t = timeStep.toTime_t();
// timeStepsTime_t.push_back(t);
// }
// }
return m_timeStepsTime_t;
return m_timeSteps;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RifEclipseSummaryAddress RifReaderObservedData::address(const AsciiData& asciiData, std::string identifierName, RifEclipseSummaryAddress::SummaryVarCategory summaryCategory)
RifEclipseSummaryAddress RifReaderObservedData::address(const QString& quantity,
const QString& identifierName,
RifEclipseSummaryAddress::SummaryVarCategory summaryCategory)
{
std::string quantityName;
std::string quantityName = quantity.toStdString();
int regionNumber(-1);
int regionNumber2(-1);
std::string wellGroupName;
@ -103,13 +138,13 @@ RifEclipseSummaryAddress RifReaderObservedData::address(const AsciiData& asciiDa
switch (summaryCategory)
{
case RifEclipseSummaryAddress::SUMMARY_WELL_GROUP:
wellGroupName = identifierName;
wellGroupName = identifierName.toStdString();
break;
case RifEclipseSummaryAddress::SUMMARY_WELL:
wellName = identifierName;
wellName = identifierName.toStdString();
break;
case RifEclipseSummaryAddress::SUMMARY_WELL_LGR:
lgrName = identifierName;
lgrName = identifierName.toStdString();
break;
default:
break;

View File

@ -21,14 +21,14 @@
#include "RifSummaryReaderInterface.h"
#include <map>
#include <memory>
#include <string>
#include <vector>
#include <map>
#include "cvfObject.h"
struct AsciiData;
class QDateTime;
class QString;
class RifColumnBasedAsciiParser;
class RifEclipseSummaryAddress;
@ -42,17 +42,24 @@ public:
RifReaderObservedData();
~RifReaderObservedData();
bool open(const std::string& headerFileName);
bool open(const QString& headerFileName,
const QString& identifierName,
RifEclipseSummaryAddress::SummaryVarCategory summaryCategory);
virtual const std::vector<time_t>& timeSteps(const RifEclipseSummaryAddress& resultAddress) const override;
virtual const std::vector<time_t>& timeSteps(const RifEclipseSummaryAddress& resultAddress) const override;
virtual bool values(const RifEclipseSummaryAddress& resultAddress, std::vector<double>* values) override;
std::string unitName(const RifEclipseSummaryAddress& resultAddress) override;
virtual bool values(const RifEclipseSummaryAddress& resultAddress,
std::vector<double>* values) override;
std::string unitName(const RifEclipseSummaryAddress& resultAddress) override;
private:
RifEclipseSummaryAddress address(const AsciiData& asciiData, std::string identifierName, RifEclipseSummaryAddress::SummaryVarCategory summaryCategor);
RifEclipseSummaryAddress address(const QString& quantity,
const QString& identifierName,
RifEclipseSummaryAddress::SummaryVarCategory summaryCategory);
private:
RifColumnBasedAsciiParser* m_asciiParser;
std::vector<time_t> m_timeStepsTime_t;
std::unique_ptr<RifColumnBasedAsciiParser> m_asciiParser;
std::vector<time_t> m_timeSteps;
};

View File

@ -91,9 +91,9 @@ QString RimOilField::uniqueShortNameForCase(RimSummaryCase* summaryCase)
std::set<QString> allAutoShortNames;
std::vector<RimSummaryCase*> allCases = summaryCaseMainCollection->allSummaryCases();
std::vector<RimObservedData*> observedDataCases = observedDataCollection->allObservedData();
std::vector<RimSummaryCase*> observedDataCases = observedDataCollection->allObservedData();
for (RimObservedData* observedData : observedDataCases)
for (auto observedData : observedDataCases)
{
allCases.push_back(dynamic_cast<RimSummaryCase*>(observedData));
}

View File

@ -552,7 +552,7 @@ void RimProject::allSummaryCases(std::vector<RimSummaryCase*>& sumCases)
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimProject::allObservedData(std::vector<RimObservedData*>& observedData)
void RimProject::allObservedData(std::vector<RimSummaryCase*>& observedData)
{
for (RimOilField* oilField : oilFields)
{
@ -561,7 +561,7 @@ void RimProject::allObservedData(std::vector<RimObservedData*>& observedData)
if (observedDataCollection)
{
observedData.clear();
std::vector<RimObservedData*> allObservedData = observedDataCollection->allObservedData();
std::vector<RimSummaryCase*> allObservedData = observedDataCollection->allObservedData();
observedData.insert(observedData.end(), allObservedData.begin(), allObservedData.end());
}
}

View File

@ -95,7 +95,7 @@ public:
void allCases(std::vector<RimCase*>& cases);
void allSummaryCases(std::vector<RimSummaryCase*>& sumCases);
void allObservedData(std::vector<RimObservedData*>& observedData);
void allObservedData(std::vector<RimSummaryCase*>& observedData);
void allNotLinkedViews(std::vector<RimView*>& views);
void allVisibleViews(std::vector<RimView*>& views);

View File

@ -25,6 +25,7 @@ ${CEE_CURRENT_LIST_DIR}RimSummaryYAxisProperties.h
${CEE_CURRENT_LIST_DIR}RimObservedData.h
${CEE_CURRENT_LIST_DIR}RimObservedDataCollection.h
${CEE_CURRENT_LIST_DIR}RimSummaryObservedDataFile.h
${CEE_CURRENT_LIST_DIR}RimObservedRsmspecColumnBasedData.h
)
set (SOURCE_GROUP_SOURCE_FILES
@ -48,6 +49,7 @@ ${CEE_CURRENT_LIST_DIR}RimSummaryYAxisProperties.cpp
${CEE_CURRENT_LIST_DIR}RimObservedData.cpp
${CEE_CURRENT_LIST_DIR}RimObservedDataCollection.cpp
${CEE_CURRENT_LIST_DIR}RimSummaryObservedDataFile.cpp
${CEE_CURRENT_LIST_DIR}RimObservedRsmspecColumnBasedData.cpp
)
list(APPEND CODE_HEADER_FILES

View File

@ -21,7 +21,7 @@
#include <QFileInfo>
CAF_PDM_SOURCE_INIT(RimObservedData, "ObservedData");
CAF_PDM_ABSTRACT_SOURCE_INIT(RimObservedData, "ObservedData");
//--------------------------------------------------------------------------------------------------
///
@ -63,17 +63,16 @@ void RimObservedData::updateFilePathsFromProjectPath(const QString & newProjectP
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimObservedData::createSummaryReaderInterface()
QString RimObservedData::identifierName() const
{
throw std::logic_error("The method or operation is not implemented.");
return m_identifierName();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RifSummaryReaderInterface* RimObservedData::summaryReader()
RifEclipseSummaryAddress::SummaryVarCategory RimObservedData::summaryCategory() const
{
throw std::logic_error("The method or operation is not implemented.");
return nullptr;
return m_summaryCategory();
}

View File

@ -40,12 +40,8 @@ public:
virtual QString caseName() override;
virtual void updateFilePathsFromProjectPath(const QString& newProjectPath, const QString& oldProjectPath) override;
virtual void createSummaryReaderInterface() override;
virtual RifSummaryReaderInterface* summaryReader() override;
QString identifierName() const;
RifEclipseSummaryAddress::SummaryVarCategory summaryCategory() const;
private:
caf::PdmField<caf::AppEnum<RifEclipseSummaryAddress::SummaryVarCategory> > m_summaryCategory;
caf::PdmField<QString> m_identifierName;

View File

@ -79,9 +79,9 @@ RimSummaryObservedDataFile* RimObservedDataCollection::createAndAddObservedDataF
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
std::vector<RimObservedData*> RimObservedDataCollection::allObservedData()
std::vector<RimSummaryCase*> RimObservedDataCollection::allObservedData()
{
std::vector<RimObservedData*> allObservedData;
std::vector<RimSummaryCase*> allObservedData;
allObservedData.insert(allObservedData.begin(), m_observedDataArray.begin(), m_observedDataArray.end());

View File

@ -21,6 +21,7 @@
#include "cafPdmObject.h"
#include "cafPdmChildArrayField.h"
class RimSummaryCase;
class RimObservedData;
class RimSummaryObservedDataFile;
@ -38,7 +39,7 @@ public:
void removeObservedData(RimObservedData* observedData);
void addObservedData(RimObservedData* observedData);
RimSummaryObservedDataFile* createAndAddObservedDataFromFileName(const QString& fileName);
std::vector<RimObservedData*> allObservedData();
std::vector<RimSummaryCase*> allObservedData();
private:
caf::PdmChildArrayField<RimObservedData*> m_observedDataArray;

View File

@ -0,0 +1,160 @@
/////////////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2017- Statoil ASA
//
// ResInsight is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE.
//
// See the GNU General Public License at <http://www.gnu.org/licenses/gpl.html>
// for more details.
//
/////////////////////////////////////////////////////////////////////////////////
#include "RimObservedRsmspecColumnBasedData.h"
#include "RifSummaryReaderInterface.h"
CAF_PDM_SOURCE_INIT(RimObservedRsmspecColumnBasedData, "RimObservedRsmspecColumnBasedData");
class MyTestInterface : public RifSummaryReaderInterface
{
public:
MyTestInterface()
{
m_timeSteps.push_back(1000);
m_timeSteps.push_back(1010);
m_timeSteps.push_back(1020);
m_timeSteps.push_back(1030);
m_timeSteps.push_back(1040);
m_headers.push_back("sdflkj");
m_headers.push_back("sdf");
m_headers.push_back("sdfffff");
m_headers.push_back("qwqwqw");
m_headers.push_back("aaaaa");
m_headers.push_back("absc");
}
// caf::PdmField<caf::AppEnum<RifEclipseSummaryAddress::SummaryVarCategory> > m_summaryCategory;
// caf::PdmField<QString> m_identifierName;
void setMetaData(RifEclipseSummaryAddress::SummaryVarCategory summaryCategory, const QString& identifierName)
{
m_category = summaryCategory;
m_identifierName = identifierName;
buildMetaData();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
virtual const std::vector<time_t>& timeSteps(const RifEclipseSummaryAddress& resultAddress) const override
{
return m_timeSteps;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
virtual bool values(const RifEclipseSummaryAddress& resultAddress, std::vector<double>* values) override
{
values->push_back(20);
values->push_back(40);
values->push_back(50);
values->push_back(40);
return true;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
virtual std::string unitName(const RifEclipseSummaryAddress& resultAddress) override
{
return "Unknown unit";
}
private:
void buildMetaData()
{
m_allResultAddresses.clear();
for (size_t i = 0; i < m_headers.size(); i++)
{
RifEclipseSummaryAddress addr(m_category,
m_headers[i].toStdString(),
-1,
-1,
"",
"",
-1,
"",
-1,
-1,
-1);
m_allResultAddresses.push_back(addr);
}
}
private:
std::vector<time_t> m_timeSteps;
std::vector<QString> m_headers;
RifEclipseSummaryAddress::SummaryVarCategory m_category;
QString m_identifierName;
};
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimObservedRsmspecColumnBasedData::RimObservedRsmspecColumnBasedData()
{
CAF_PDM_InitObject("Observed RSMSPEC Column Based Data File", ":/Default.png", "", "");
m_summaryHeaderFilename.uiCapability()->setUiName("File");
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimObservedRsmspecColumnBasedData::~RimObservedRsmspecColumnBasedData()
{
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimObservedRsmspecColumnBasedData::setSummaryHeaderFilename(const QString& fileName)
{
m_summaryHeaderFilename = fileName;
this->updateAutoShortName();
this->updateTreeItemName();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimObservedRsmspecColumnBasedData::createSummaryReaderInterface()
{
m_summeryReader = new MyTestInterface;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RifSummaryReaderInterface* RimObservedRsmspecColumnBasedData::summaryReader()
{
return m_summeryReader.p();
}

View File

@ -0,0 +1,48 @@
/////////////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2017- Statoil ASA
//
// ResInsight is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE.
//
// See the GNU General Public License at <http://www.gnu.org/licenses/gpl.html>
// for more details.
//
/////////////////////////////////////////////////////////////////////////////////
#pragma once
#include "RimObservedData.h"
#include "cafPdmObject.h"
#include "cafPdmField.h"
#include "cvfObject.h"
class MyTestInterface;
//==================================================================================================
//
//==================================================================================================
class RimObservedRsmspecColumnBasedData : public RimObservedData
{
CAF_PDM_HEADER_INIT;
public:
RimObservedRsmspecColumnBasedData();
virtual ~RimObservedRsmspecColumnBasedData();
void setSummaryHeaderFilename(const QString& fileName);
virtual void createSummaryReaderInterface() override;
virtual RifSummaryReaderInterface* summaryReader() override;
private:
cvf::ref<MyTestInterface> m_summeryReader;
};

View File

@ -22,6 +22,7 @@
#include "RimTools.h"
#include <QFileInfo>
#include "RifReaderObservedData.h"
CAF_PDM_SOURCE_INIT(RimSummaryObservedDataFile, "SummaryObservedDataFile");
@ -52,3 +53,24 @@ void RimSummaryObservedDataFile::setSummaryHeaderFilename(const QString& fileNam
this->updateAutoShortName();
this->updateTreeItemName();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimSummaryObservedDataFile::createSummaryReaderInterface()
{
m_summaryReader = new RifReaderObservedData;
if (!m_summaryReader->open(this->summaryHeaderFilename(), identifierName(), summaryCategory()))
{
m_summaryReader = nullptr;
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RifSummaryReaderInterface* RimSummaryObservedDataFile::summaryReader()
{
return m_summaryReader.p();
}

View File

@ -24,6 +24,7 @@
#include "cafPdmField.h"
#include "cvfObject.h"
class RifReaderObservedData;
//==================================================================================================
//
@ -36,4 +37,10 @@ public:
virtual ~RimSummaryObservedDataFile();
void setSummaryHeaderFilename(const QString& fileName);
virtual void createSummaryReaderInterface() override;
virtual RifSummaryReaderInterface* summaryReader() override;
private:
cvf::ref<RifReaderObservedData> m_summaryReader;
};