#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(); oilField->observedDataCollection = new RimObservedDataCollection();
} }
for (auto observedCases : oilField->observedDataCollection()->allObservedData())
{
observedCases->createSummaryReaderInterface();
}
#ifdef USE_PROTOTYPE_FEATURE_FRACTURES #ifdef USE_PROTOTYPE_FEATURE_FRACTURES
oilField->fractureDefinitionCollection()->loadAndUpdateData(); oilField->fractureDefinitionCollection()->loadAndUpdateData();

View File

@ -21,12 +21,8 @@
#include "RifColumnBasedAsciiParser.h" #include "RifColumnBasedAsciiParser.h"
#include "RifEclipseSummaryAddress.h" #include "RifEclipseSummaryAddress.h"
#include "ert/ecl/ecl_sum.h"
#include <string>
#include <assert.h>
#include <QDateTime> #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;
QString data = headerFileName.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 = std::unique_ptr<RifColumnBasedAsciiParser>(new RifColumnBasedAsciiParser(data, dateFormat, decimalLocale, cellSeparator));
//m_asciiParser = RifColumnBasedAsciiParser(data)
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) 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; return true;
} }
@ -71,25 +114,17 @@ bool RifReaderObservedData::values(const RifEclipseSummaryAddress& resultAddress
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
const std::vector<time_t>& RifReaderObservedData::timeSteps(const RifEclipseSummaryAddress& resultAddress) const const std::vector<time_t>& RifReaderObservedData::timeSteps(const RifEclipseSummaryAddress& resultAddress) const
{ {
// if (m_asciiParser) return m_timeSteps;
// {
// for (QDateTime timeStep : m_asciiParser->timeSteps())
// {
// time_t t = timeStep.toTime_t();
// timeStepsTime_t.push_back(t);
// }
// }
return m_timeStepsTime_t;
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
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 regionNumber(-1);
int regionNumber2(-1); int regionNumber2(-1);
std::string wellGroupName; std::string wellGroupName;
@ -103,13 +138,13 @@ RifEclipseSummaryAddress RifReaderObservedData::address(const AsciiData& asciiDa
switch (summaryCategory) switch (summaryCategory)
{ {
case RifEclipseSummaryAddress::SUMMARY_WELL_GROUP: case RifEclipseSummaryAddress::SUMMARY_WELL_GROUP:
wellGroupName = identifierName; wellGroupName = identifierName.toStdString();
break; break;
case RifEclipseSummaryAddress::SUMMARY_WELL: case RifEclipseSummaryAddress::SUMMARY_WELL:
wellName = identifierName; wellName = identifierName.toStdString();
break; break;
case RifEclipseSummaryAddress::SUMMARY_WELL_LGR: case RifEclipseSummaryAddress::SUMMARY_WELL_LGR:
lgrName = identifierName; lgrName = identifierName.toStdString();
break; break;
default: default:
break; break;

View File

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

View File

@ -91,9 +91,9 @@ QString RimOilField::uniqueShortNameForCase(RimSummaryCase* summaryCase)
std::set<QString> allAutoShortNames; std::set<QString> allAutoShortNames;
std::vector<RimSummaryCase*> allCases = summaryCaseMainCollection->allSummaryCases(); 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)); 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) for (RimOilField* oilField : oilFields)
{ {
@ -561,7 +561,7 @@ void RimProject::allObservedData(std::vector<RimObservedData*>& observedData)
if (observedDataCollection) if (observedDataCollection)
{ {
observedData.clear(); observedData.clear();
std::vector<RimObservedData*> allObservedData = observedDataCollection->allObservedData(); std::vector<RimSummaryCase*> allObservedData = observedDataCollection->allObservedData();
observedData.insert(observedData.end(), allObservedData.begin(), allObservedData.end()); observedData.insert(observedData.end(), allObservedData.begin(), allObservedData.end());
} }
} }

View File

@ -95,7 +95,7 @@ public:
void allCases(std::vector<RimCase*>& cases); void allCases(std::vector<RimCase*>& cases);
void allSummaryCases(std::vector<RimSummaryCase*>& sumCases); 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 allNotLinkedViews(std::vector<RimView*>& views);
void allVisibleViews(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}RimObservedData.h
${CEE_CURRENT_LIST_DIR}RimObservedDataCollection.h ${CEE_CURRENT_LIST_DIR}RimObservedDataCollection.h
${CEE_CURRENT_LIST_DIR}RimSummaryObservedDataFile.h ${CEE_CURRENT_LIST_DIR}RimSummaryObservedDataFile.h
${CEE_CURRENT_LIST_DIR}RimObservedRsmspecColumnBasedData.h
) )
set (SOURCE_GROUP_SOURCE_FILES 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}RimObservedData.cpp
${CEE_CURRENT_LIST_DIR}RimObservedDataCollection.cpp ${CEE_CURRENT_LIST_DIR}RimObservedDataCollection.cpp
${CEE_CURRENT_LIST_DIR}RimSummaryObservedDataFile.cpp ${CEE_CURRENT_LIST_DIR}RimSummaryObservedDataFile.cpp
${CEE_CURRENT_LIST_DIR}RimObservedRsmspecColumnBasedData.cpp
) )
list(APPEND CODE_HEADER_FILES list(APPEND CODE_HEADER_FILES

View File

@ -21,7 +21,7 @@
#include <QFileInfo> #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 m_summaryCategory();
return nullptr;
} }

View File

@ -40,12 +40,8 @@ public:
virtual QString caseName() override; virtual QString caseName() override;
virtual void updateFilePathsFromProjectPath(const QString& newProjectPath, const QString& oldProjectPath) override; virtual void updateFilePathsFromProjectPath(const QString& newProjectPath, const QString& oldProjectPath) override;
QString identifierName() const;
virtual void createSummaryReaderInterface() override; RifEclipseSummaryAddress::SummaryVarCategory summaryCategory() const;
virtual RifSummaryReaderInterface* summaryReader() override;
private: private:
caf::PdmField<caf::AppEnum<RifEclipseSummaryAddress::SummaryVarCategory> > m_summaryCategory; caf::PdmField<caf::AppEnum<RifEclipseSummaryAddress::SummaryVarCategory> > m_summaryCategory;
caf::PdmField<QString> m_identifierName; 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()); allObservedData.insert(allObservedData.begin(), m_observedDataArray.begin(), m_observedDataArray.end());

View File

@ -21,6 +21,7 @@
#include "cafPdmObject.h" #include "cafPdmObject.h"
#include "cafPdmChildArrayField.h" #include "cafPdmChildArrayField.h"
class RimSummaryCase;
class RimObservedData; class RimObservedData;
class RimSummaryObservedDataFile; class RimSummaryObservedDataFile;
@ -38,7 +39,7 @@ public:
void removeObservedData(RimObservedData* observedData); void removeObservedData(RimObservedData* observedData);
void addObservedData(RimObservedData* observedData); void addObservedData(RimObservedData* observedData);
RimSummaryObservedDataFile* createAndAddObservedDataFromFileName(const QString& fileName); RimSummaryObservedDataFile* createAndAddObservedDataFromFileName(const QString& fileName);
std::vector<RimObservedData*> allObservedData(); std::vector<RimSummaryCase*> allObservedData();
private: private:
caf::PdmChildArrayField<RimObservedData*> m_observedDataArray; 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 "RimTools.h"
#include <QFileInfo> #include <QFileInfo>
#include "RifReaderObservedData.h"
CAF_PDM_SOURCE_INIT(RimSummaryObservedDataFile, "SummaryObservedDataFile"); CAF_PDM_SOURCE_INIT(RimSummaryObservedDataFile, "SummaryObservedDataFile");
@ -52,3 +53,24 @@ void RimSummaryObservedDataFile::setSummaryHeaderFilename(const QString& fileNam
this->updateAutoShortName(); this->updateAutoShortName();
this->updateTreeItemName(); 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 "cafPdmField.h"
#include "cvfObject.h" #include "cvfObject.h"
class RifReaderObservedData;
//================================================================================================== //==================================================================================================
// //
@ -36,4 +37,10 @@ public:
virtual ~RimSummaryObservedDataFile(); virtual ~RimSummaryObservedDataFile();
void setSummaryHeaderFilename(const QString& fileName); void setSummaryHeaderFilename(const QString& fileName);
virtual void createSummaryReaderInterface() override;
virtual RifSummaryReaderInterface* summaryReader() override;
private:
cvf::ref<RifReaderObservedData> m_summaryReader;
}; };