diff --git a/ApplicationCode/ProjectDataModel/RimGridTimeHistoryCurve.cpp b/ApplicationCode/ProjectDataModel/RimGridTimeHistoryCurve.cpp index 83fd126e41..d359680741 100644 --- a/ApplicationCode/ProjectDataModel/RimGridTimeHistoryCurve.cpp +++ b/ApplicationCode/ProjectDataModel/RimGridTimeHistoryCurve.cpp @@ -155,6 +155,23 @@ QString RimGridTimeHistoryCurve::quantityName() const return m_eclipseResultDefinition->resultVariableUiName(); } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QString RimGridTimeHistoryCurve::caseName() const +{ + RimEclipseCase* eclCase = nullptr; + RimReservoirCellResultsStorage* cellResStorage = m_eclipseResultDefinition->currentGridCellResults(); + cellResStorage->firstAncestorOrThisOfType(eclCase); + + if (eclCase) + { + return eclCase->caseUserDescription(); + } + + return ""; +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -198,29 +215,20 @@ void RimGridTimeHistoryCurve::onLoadDataAndUpdate() { this->RimPlotCurve::updateCurvePresentation(); - RimEclipseTopologyItem* eclTopItem = eclipseTopologyItem(); - if (eclTopItem && eclTopItem->eclipseCase()) + if (isCurveVisible()) { - m_eclipseResultDefinition->loadResult(); - - RimReservoirCellResultsStorage* cellResStorage = m_eclipseResultDefinition->currentGridCellResults(); - RigCaseCellResultsData* cellResultsData = cellResStorage->cellResults(); - - std::vector timeStepDates = cellResultsData->timeStepDates(m_eclipseResultDefinition->scalarResultIndex()); - - std::vector values = yValues(); - - if (isCurveVisible()) + RimEclipseTopologyItem* eclTopItem = eclipseTopologyItem(); + if (eclTopItem && eclTopItem->eclipseCase()) { - std::vector dateTimes; - for (QDateTime dt : timeStepDates) - { - dateTimes.push_back(dt.toTime_t()); - } + m_eclipseResultDefinition->loadResult(); + + std::vector dateTimes = timeStepValues(); + + std::vector values = yValues(); RimSummaryPlot* plot = nullptr; firstAncestorOrThisOfType(plot); - bool isLogCurve = false;// plot->isLogarithmicScaleEnabled(this->yAxis()); + bool isLogCurve = plot->isLogarithmicScaleEnabled(this->yAxis()); if (dateTimes.size() > 0 && dateTimes.size() == values.size()) { @@ -264,6 +272,26 @@ void RimGridTimeHistoryCurve::onLoadDataAndUpdate() } } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +std::vector RimGridTimeHistoryCurve::timeStepValues() const +{ + std::vector dateTimes; + + RimReservoirCellResultsStorage* cellResStorage = m_eclipseResultDefinition->currentGridCellResults(); + RigCaseCellResultsData* cellResultsData = cellResStorage->cellResults(); + + std::vector timeStepDates = cellResultsData->timeStepDates(m_eclipseResultDefinition->scalarResultIndex()); + + for (QDateTime dt : timeStepDates) + { + dateTimes.push_back(dt.toTime_t()); + } + + return dateTimes; +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/ProjectDataModel/RimGridTimeHistoryCurve.h b/ApplicationCode/ProjectDataModel/RimGridTimeHistoryCurve.h index 81fb1e091b..dc72131575 100644 --- a/ApplicationCode/ProjectDataModel/RimGridTimeHistoryCurve.h +++ b/ApplicationCode/ProjectDataModel/RimGridTimeHistoryCurve.h @@ -50,13 +50,17 @@ public: void setYAxis(RimDefines::PlotAxis plotAxis); std::vector yValues() const; + std::vector timeStepValues() const; QString quantityName() const; + QString caseName() const; protected: virtual QString createCurveAutoName() override; virtual void updateZoomInParentPlot() override; virtual void onLoadDataAndUpdate() override; + + virtual void defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering) override; virtual void initAfterRead() override; virtual void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue) override; diff --git a/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlot.cpp b/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlot.cpp index d511001d73..393a55f582 100644 --- a/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlot.cpp +++ b/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlot.cpp @@ -203,78 +203,154 @@ QString RimSummaryPlot::asciiDataForPlotExport() const { QString out; - std::vector curves; - this->descendantsIncludingThisOfType(curves); - - std::vector caseNames; - std::vector > timeSteps; - - std::vector > > allCurveData; - std::vector > allCurveNames; - //Vectors containing cases - curves - data points/curve name - - for (RimSummaryCurve* curve : curves) { - if (!curve->isCurveVisible()) continue; - QString curveCaseName = curve->summaryCase()->caseName(); + std::vector curves; + this->descendantsIncludingThisOfType(curves); - size_t casePosInList = cvf::UNDEFINED_SIZE_T; - for (size_t i = 0; i < caseNames.size(); i++) + std::vector caseNames; + std::vector > timeSteps; + + std::vector > > allCurveData; + std::vector > allCurveNames; + //Vectors containing cases - curves - data points/curve name + + for (RimSummaryCurve* curve : curves) { - if (curveCaseName == caseNames[i]) casePosInList = i; - } + if (!curve->isCurveVisible()) continue; + QString curveCaseName = curve->summaryCase()->caseName(); - if (casePosInList == cvf::UNDEFINED_SIZE_T) - { - caseNames.push_back(curveCaseName); - - std::vector curveTimeSteps = curve->timeSteps(); - timeSteps.push_back(curveTimeSteps); - - std::vector > curveDataForCase; - std::vector curveYData = curve->yValues(); - curveDataForCase.push_back(curveYData); - allCurveData.push_back(curveDataForCase); - - std::vector curveNamesForCase; - curveNamesForCase.push_back(curve->curveName()); - allCurveNames.push_back(curveNamesForCase); - } - else - { - std::vector curveYData = curve->yValues(); - allCurveData[casePosInList].push_back(curveYData); - - QString curveName = curve->curveName(); - allCurveNames[casePosInList].push_back(curveName); - } - } - - for (size_t i = 0; i < timeSteps.size(); i++) //cases - { - out += "\n\n"; - out += "Case: " + caseNames[i]; - out += "\n"; - - for (size_t j = 0; j < timeSteps[i].size(); j++) //time steps & data points - { - if (j == 0) + size_t casePosInList = cvf::UNDEFINED_SIZE_T; + for (size_t i = 0; i < caseNames.size(); i++) { - out += "Date and time"; - for (size_t k = 0; k < allCurveNames[i].size(); k++) // curves + if (curveCaseName == caseNames[i]) casePosInList = i; + } + + if (casePosInList == cvf::UNDEFINED_SIZE_T) + { + caseNames.push_back(curveCaseName); + + std::vector curveTimeSteps = curve->timeSteps(); + timeSteps.push_back(curveTimeSteps); + + std::vector > curveDataForCase; + std::vector curveYData = curve->yValues(); + curveDataForCase.push_back(curveYData); + allCurveData.push_back(curveDataForCase); + + std::vector curveNamesForCase; + curveNamesForCase.push_back(curve->curveName()); + allCurveNames.push_back(curveNamesForCase); + } + else + { + std::vector curveYData = curve->yValues(); + allCurveData[casePosInList].push_back(curveYData); + + QString curveName = curve->curveName(); + allCurveNames[casePosInList].push_back(curveName); + } + } + + for (size_t i = 0; i < timeSteps.size(); i++) //cases + { + out += "\n\n"; + out += "Case: " + caseNames[i]; + out += "\n"; + + for (size_t j = 0; j < timeSteps[i].size(); j++) //time steps & data points + { + if (j == 0) { - out += "\t" + (allCurveNames[i][k]); + out += "Date and time"; + for (size_t k = 0; k < allCurveNames[i].size(); k++) // curves + { + out += "\t" + (allCurveNames[i][k]); + } + } + out += "\n"; + out += QDateTime::fromTime_t(timeSteps[i][j]).toUTC().toString("yyyy-MM-dd hh:mm:ss "); + + for (size_t k = 0; k < allCurveData[i].size(); k++) // curves + { + out += "\t" + QString::number(allCurveData[i][k][j], 'g', 6); } } - out += "\n"; - out += QDateTime::fromTime_t(timeSteps[i][j]).toUTC().toString("yyyy-MM-dd hh:mm:ss "); + } + } - for (size_t k = 0; k < allCurveData[i].size(); k++) // curves + + { + std::vector caseNames; + std::vector > timeSteps; + + std::vector > > allCurveData; + std::vector > allCurveNames; + //Vectors containing cases - curves - data points/curve name + + for (RimGridTimeHistoryCurve* curve : m_gridTimeHistoryCurves) + { + if (!curve->isCurveVisible()) continue; + QString curveCaseName = curve->caseName(); + + size_t casePosInList = cvf::UNDEFINED_SIZE_T; + for (size_t i = 0; i < caseNames.size(); i++) { - out += "\t" + QString::number(allCurveData[i][k][j], 'g', 6); + if (curveCaseName == caseNames[i]) casePosInList = i; + } + + if (casePosInList == cvf::UNDEFINED_SIZE_T) + { + caseNames.push_back(curveCaseName); + + std::vector curveTimeSteps = curve->timeStepValues(); + timeSteps.push_back(curveTimeSteps); + + std::vector > curveDataForCase; + std::vector curveYData = curve->yValues(); + curveDataForCase.push_back(curveYData); + allCurveData.push_back(curveDataForCase); + + std::vector curveNamesForCase; + curveNamesForCase.push_back(curve->curveName()); + allCurveNames.push_back(curveNamesForCase); + } + else + { + std::vector curveYData = curve->yValues(); + allCurveData[casePosInList].push_back(curveYData); + + QString curveName = curve->curveName(); + allCurveNames[casePosInList].push_back(curveName); + } + } + + for (size_t i = 0; i < timeSteps.size(); i++) //cases + { + out += "\n\n"; + out += "Case: " + caseNames[i]; + out += "\n"; + + for (size_t j = 0; j < timeSteps[i].size(); j++) //time steps & data points + { + if (j == 0) + { + out += "Date and time"; + for (size_t k = 0; k < allCurveNames[i].size(); k++) // curves + { + out += "\t" + (allCurveNames[i][k]); + } + } + out += "\n"; + out += QDateTime::fromTime_t(timeSteps[i][j]).toUTC().toString("yyyy-MM-dd hh:mm:ss "); + + for (size_t k = 0; k < allCurveData[i].size(); k++) // curves + { + out += "\t" + QString::number(allCurveData[i][k][j], 'g', 6); + } } } } + return out; }