#2022 Curve Calculator : Calculated summary case is now available

This commit is contained in:
Magne Sjaastad
2017-10-18 11:18:43 +02:00
parent d5d26a36f2
commit 244916c0ed
6 changed files with 74 additions and 6 deletions

View File

@@ -61,6 +61,22 @@ void RiaSummaryCurveDefinition::resultValues(const RiaSummaryCurveDefinition& cu
reader->values(curveDefinition.summaryAddress(), values);
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
const std::vector<time_t>& RiaSummaryCurveDefinition::timeSteps(const RiaSummaryCurveDefinition& curveDefinition)
{
std::vector<time_t> dummy;
if (!curveDefinition.summaryAddress().isValid()) return dummy;
if (!curveDefinition.summaryCase()) return dummy;
RifSummaryReaderInterface* reader = curveDefinition.summaryCase()->summaryReader();
if (!reader) return dummy;
return reader->timeSteps(curveDefinition.summaryAddress());
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------

View File

@@ -39,7 +39,8 @@ public:
bool operator < (const RiaSummaryCurveDefinition& other) const;
// TODO: Consider moving to a separate tools class
static void resultValues(const RiaSummaryCurveDefinition& curveDefinition, std::vector<double>* values);
static void resultValues(const RiaSummaryCurveDefinition& curveDefinition, std::vector<double>* values);
static const std::vector<time_t>& timeSteps(const RiaSummaryCurveDefinition& curveDefinition);
private:
std::pair<RimSummaryCase*, RifEclipseSummaryAddress> m_curveDefinition;

View File

@@ -188,6 +188,8 @@ bool RimCalculation::calculate()
std::vector<std::vector<double>> variableValues;
variableValues.resize(m_variables.size());
std::vector<time_t> sourceTimeSteps;
size_t itemCount = 0;
@@ -215,6 +217,11 @@ bool RimCalculation::calculate()
std::vector<double>& curveValues = variableValues[i];
RiaSummaryCurveDefinition::resultValues(curveDef, &curveValues);
if (sourceTimeSteps.size() == 0)
{
sourceTimeSteps = RiaSummaryCurveDefinition::timeSteps(curveDef);
}
if (itemCount == 0)
{
itemCount = curveValues.size();
@@ -247,6 +254,9 @@ bool RimCalculation::calculate()
if (evaluatedOk)
{
// Copy time vector from source
m_timesteps = sourceTimeSteps;
QString txt;
for (auto v : m_calculatedValues())
{

View File

@@ -37,7 +37,9 @@ RimCalculationCollection::RimCalculationCollection()
m_calcuations.uiCapability()->setUiEditorTypeName(caf::PdmUiTreeSelectionEditor::uiEditorTypeName());
CAF_PDM_InitFieldNoDefault(&m_calcuationSummaryCase, "CalculationsSummaryCase", "Calculations Summary Case", "", "", "");
m_calcuationSummaryCase = new RimCalculatedSummaryCase;
m_calcuationSummaryCase.xmlCapability()->disableIO();
ensureSummaryCaseIsCreated();
}
//--------------------------------------------------------------------------------------------------
@@ -50,7 +52,8 @@ RimCalculation* RimCalculationCollection::addCalculation()
m_calcuations.push_back(calculation);
m_calcuationSummaryCase()->buildMetaData();
ensureSummaryCaseIsCreated();
m_calcuationSummaryCase->buildMetaData();
return calculation;
}
@@ -62,7 +65,8 @@ void RimCalculationCollection::deleteCalculation(RimCalculation* calculation)
{
m_calcuations.removeChildObject(calculation);
m_calcuationSummaryCase()->buildMetaData();
ensureSummaryCaseIsCreated();
m_calcuationSummaryCase->buildMetaData();
delete calculation;
}
@@ -85,8 +89,37 @@ std::vector<RimCalculation*> RimCalculationCollection::calculations() const
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimCalculatedSummaryCase* RimCalculationCollection::calculationSummaryCase()
RimSummaryCase* RimCalculationCollection::calculationSummaryCase()
{
ensureSummaryCaseIsCreated();
return m_calcuationSummaryCase();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimCalculationCollection::deleteAllContainedObjects()
{
RimCalculatedSummaryCase* sumCase = m_calcuationSummaryCase();
if (sumCase)
{
m_calcuationSummaryCase.removeChildObject(sumCase);
delete sumCase;
}
m_calcuations.deleteAllChildObjects();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimCalculationCollection::ensureSummaryCaseIsCreated()
{
if (!m_calcuationSummaryCase())
{
m_calcuationSummaryCase = new RimCalculatedSummaryCase;
}
}

View File

@@ -23,6 +23,7 @@
#include "cafPdmChildField.h"
class RimCalculation;
class RimSummaryCase;
class RimCalculatedSummaryCase;
//==================================================================================================
@@ -40,7 +41,12 @@ public:
void deleteCalculation(RimCalculation* calculation);
std::vector<RimCalculation*> calculations() const;
RimCalculatedSummaryCase* calculationSummaryCase();
RimSummaryCase* calculationSummaryCase();
void deleteAllContainedObjects();
private:
void ensureSummaryCaseIsCreated();
private:
caf::PdmChildArrayField<RimCalculation*> m_calcuations;

View File

@@ -200,6 +200,8 @@ void RimProject::close()
multiSnapshotDefinitions.deleteAllChildObjects();
calculationCollection->deleteAllContainedObjects();
delete viewLinkerCollection->viewLinker();
viewLinkerCollection->viewLinker = NULL;