#4404 Derived Ensemble: Fix stepping based on data source

This commit is contained in:
Magne Sjaastad 2019-06-07 14:41:55 +02:00
parent 74718c38fc
commit 8ce19c742e
6 changed files with 92 additions and 61 deletions

View File

@ -28,11 +28,19 @@ const std::vector<time_t> RifDerivedEnsembleReader::EMPTY_TIME_STEPS_VECTOR;
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RifDerivedEnsembleReader::RifDerivedEnsembleReader(RimDerivedEnsembleCase* derivedCase)
RifDerivedEnsembleReader::RifDerivedEnsembleReader(RimDerivedEnsembleCase* derivedCase,
RifSummaryReaderInterface* sourceSummaryReader1)
{
CVF_ASSERT(derivedCase);
m_derivedCase = derivedCase;
if (sourceSummaryReader1)
{
// TODO: This is assuming that the addresses of both reader interfaces are equal
m_allResultAddresses = sourceSummaryReader1->allResultAddresses();
m_allErrorAddresses = sourceSummaryReader1->allErrorAddresses();
}
}
//--------------------------------------------------------------------------------------------------
@ -62,7 +70,8 @@ bool RifDerivedEnsembleReader::values(const RifEclipseSummaryAddress& resultAddr
auto dataValues = m_derivedCase->values(resultAddress);
values->clear();
values->reserve(dataValues.size());
for (auto val : dataValues) values->push_back(val);
for (auto val : dataValues)
values->push_back(val);
return true;
}

View File

@ -33,7 +33,7 @@ class RifDerivedEnsembleReader : public RifSummaryReaderInterface
static const std::vector<time_t> EMPTY_TIME_STEPS_VECTOR;
public:
RifDerivedEnsembleReader(RimDerivedEnsembleCase* derivedCase);
RifDerivedEnsembleReader(RimDerivedEnsembleCase* derivedCase, RifSummaryReaderInterface* sourceSummaryReader1);
const std::vector<time_t>& timeSteps(const RifEclipseSummaryAddress& resultAddress) const override;
bool values(const RifEclipseSummaryAddress& resultAddress, std::vector<double>* values) const override;

View File

@ -22,7 +22,6 @@
#include <QDateTime>
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
@ -31,6 +30,14 @@ const std::set<RifEclipseSummaryAddress>& RifSummaryReaderInterface::allResultAd
return m_allResultAddresses;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
const std::set<RifEclipseSummaryAddress>& RifSummaryReaderInterface::allErrorAddresses() const
{
return m_allErrorAddresses;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------

View File

@ -38,7 +38,10 @@ class RifSummaryReaderInterface : public cvf::Object
{
public:
bool hasAddress(const RifEclipseSummaryAddress& resultAddress) const;
const std::set<RifEclipseSummaryAddress>& allResultAddresses() const;
const std::set<RifEclipseSummaryAddress>& allErrorAddresses() const;
RifEclipseSummaryAddress errorAddress(const RifEclipseSummaryAddress& resultAddress) const;
virtual const std::vector<time_t>& timeSteps(const RifEclipseSummaryAddress& resultAddress) const = 0;

View File

@ -28,9 +28,9 @@
#include "RimMainPlotCollection.h"
#include "RimOilField.h"
#include "RimProject.h"
#include "RimSummaryCaseCollection.h"
#include "RimSummaryCaseMainCollection.h"
#include "RimSummaryPlotCollection.h"
#include "RimSummaryCaseCollection.h"
#include "cvfAssert.h"
@ -47,9 +47,11 @@ const std::vector<double> RimDerivedEnsembleCase::EMPTY_VALUES_VECTOR;
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimDerivedEnsembleCase::RimDerivedEnsembleCase() : m_summaryCase1(nullptr), m_summaryCase2(nullptr)
RimDerivedEnsembleCase::RimDerivedEnsembleCase()
: m_summaryCase1(nullptr)
, m_summaryCase2(nullptr)
{
CAF_PDM_InitObject("Summary Case",":/SummaryCase16x16.png","","");
CAF_PDM_InitObject("Summary Case", ":/SummaryCase16x16.png", "", "");
CAF_PDM_InitFieldNoDefault(&m_summaryCase1, "SummaryCase1", "SummaryCase1", "", "", "");
CAF_PDM_InitFieldNoDefault(&m_summaryCase2, "SummaryCase2", "SummaryCase2", "", "", "");
@ -59,10 +61,7 @@ RimDerivedEnsembleCase::RimDerivedEnsembleCase() : m_summaryCase1(nullptr), m_su
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimDerivedEnsembleCase::~RimDerivedEnsembleCase()
{
}
RimDerivedEnsembleCase::~RimDerivedEnsembleCase() {}
//--------------------------------------------------------------------------------------------------
///
@ -187,8 +186,10 @@ QString RimDerivedEnsembleCase::caseName() const
auto case1Name = m_summaryCase1->caseName();
auto case2Name = m_summaryCase2->caseName();
if (case1Name == case2Name) return case1Name;
else return QString("%1/%2").arg(case1Name).arg(case2Name);
if (case1Name == case2Name)
return case1Name;
else
return QString("%1/%2").arg(case1Name).arg(case2Name);
}
//--------------------------------------------------------------------------------------------------
@ -196,7 +197,18 @@ QString RimDerivedEnsembleCase::caseName() const
//--------------------------------------------------------------------------------------------------
void RimDerivedEnsembleCase::createSummaryReaderInterface()
{
m_reader.reset(new RifDerivedEnsembleReader(this));
RifSummaryReaderInterface* summaryCase1Reader = nullptr;
if (m_summaryCase1)
{
if (!m_summaryCase1->summaryReader())
{
m_summaryCase1->createSummaryReaderInterface();
}
summaryCase1Reader = m_summaryCase1->summaryReader();
}
m_reader.reset(new RifDerivedEnsembleReader(this, summaryCase1Reader));
}
//--------------------------------------------------------------------------------------------------
@ -218,7 +230,7 @@ void RimDerivedEnsembleCase::updateFilePathsFromProjectPath(const QString& newPr
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimDerivedEnsembleCaseCollection * RimDerivedEnsembleCase::parentEnsemble() const
RimDerivedEnsembleCaseCollection* RimDerivedEnsembleCase::parentEnsemble() const
{
RimDerivedEnsembleCaseCollection* ensemble;
firstAncestorOrThisOfType(ensemble);

View File

@ -152,8 +152,8 @@ void RimDerivedEnsembleCaseCollection::updateDerivedEnsembleCases()
if (!sumCase2) continue;
auto derivedCase = firstCaseNotInUse();
derivedCase->createSummaryReaderInterface();
derivedCase->setSummaryCases(sumCase1, sumCase2);
derivedCase->createSummaryReaderInterface();
derivedCase->setCaseRealizationParameters(crp);
derivedCase->setInUse(true);
}