mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
#1336 Support export of Time History curve data
This commit is contained in:
parent
5530945972
commit
5b934b1747
@ -155,6 +155,23 @@ QString RimGridTimeHistoryCurve::quantityName() const
|
|||||||
return m_eclipseResultDefinition->resultVariableUiName();
|
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();
|
this->RimPlotCurve::updateCurvePresentation();
|
||||||
|
|
||||||
|
if (isCurveVisible())
|
||||||
|
{
|
||||||
RimEclipseTopologyItem* eclTopItem = eclipseTopologyItem();
|
RimEclipseTopologyItem* eclTopItem = eclipseTopologyItem();
|
||||||
if (eclTopItem && eclTopItem->eclipseCase())
|
if (eclTopItem && eclTopItem->eclipseCase())
|
||||||
{
|
{
|
||||||
m_eclipseResultDefinition->loadResult();
|
m_eclipseResultDefinition->loadResult();
|
||||||
|
|
||||||
RimReservoirCellResultsStorage* cellResStorage = m_eclipseResultDefinition->currentGridCellResults();
|
std::vector<time_t> dateTimes = timeStepValues();
|
||||||
RigCaseCellResultsData* cellResultsData = cellResStorage->cellResults();
|
|
||||||
|
|
||||||
std::vector<QDateTime> timeStepDates = cellResultsData->timeStepDates(m_eclipseResultDefinition->scalarResultIndex());
|
|
||||||
|
|
||||||
std::vector<double> values = yValues();
|
std::vector<double> values = yValues();
|
||||||
|
|
||||||
if (isCurveVisible())
|
|
||||||
{
|
|
||||||
std::vector<time_t> dateTimes;
|
|
||||||
for (QDateTime dt : timeStepDates)
|
|
||||||
{
|
|
||||||
dateTimes.push_back(dt.toTime_t());
|
|
||||||
}
|
|
||||||
|
|
||||||
RimSummaryPlot* plot = nullptr;
|
RimSummaryPlot* plot = nullptr;
|
||||||
firstAncestorOrThisOfType(plot);
|
firstAncestorOrThisOfType(plot);
|
||||||
bool isLogCurve = false;// plot->isLogarithmicScaleEnabled(this->yAxis());
|
bool isLogCurve = plot->isLogarithmicScaleEnabled(this->yAxis());
|
||||||
|
|
||||||
if (dateTimes.size() > 0 && dateTimes.size() == values.size())
|
if (dateTimes.size() > 0 && dateTimes.size() == values.size())
|
||||||
{
|
{
|
||||||
@ -264,6 +272,26 @@ void RimGridTimeHistoryCurve::onLoadDataAndUpdate()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
std::vector<time_t> RimGridTimeHistoryCurve::timeStepValues() const
|
||||||
|
{
|
||||||
|
std::vector<time_t> dateTimes;
|
||||||
|
|
||||||
|
RimReservoirCellResultsStorage* cellResStorage = m_eclipseResultDefinition->currentGridCellResults();
|
||||||
|
RigCaseCellResultsData* cellResultsData = cellResStorage->cellResults();
|
||||||
|
|
||||||
|
std::vector<QDateTime> timeStepDates = cellResultsData->timeStepDates(m_eclipseResultDefinition->scalarResultIndex());
|
||||||
|
|
||||||
|
for (QDateTime dt : timeStepDates)
|
||||||
|
{
|
||||||
|
dateTimes.push_back(dt.toTime_t());
|
||||||
|
}
|
||||||
|
|
||||||
|
return dateTimes;
|
||||||
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
@ -50,13 +50,17 @@ public:
|
|||||||
void setYAxis(RimDefines::PlotAxis plotAxis);
|
void setYAxis(RimDefines::PlotAxis plotAxis);
|
||||||
|
|
||||||
std::vector<double> yValues() const;
|
std::vector<double> yValues() const;
|
||||||
|
std::vector<time_t> timeStepValues() const;
|
||||||
|
|
||||||
QString quantityName() const;
|
QString quantityName() const;
|
||||||
|
QString caseName() const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual QString createCurveAutoName() override;
|
virtual QString createCurveAutoName() override;
|
||||||
virtual void updateZoomInParentPlot() override;
|
virtual void updateZoomInParentPlot() override;
|
||||||
virtual void onLoadDataAndUpdate() override;
|
virtual void onLoadDataAndUpdate() override;
|
||||||
|
|
||||||
|
|
||||||
virtual void defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering) override;
|
virtual void defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering) override;
|
||||||
virtual void initAfterRead() override;
|
virtual void initAfterRead() override;
|
||||||
virtual void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue) override;
|
virtual void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue) override;
|
||||||
|
@ -203,6 +203,7 @@ QString RimSummaryPlot::asciiDataForPlotExport() const
|
|||||||
{
|
{
|
||||||
QString out;
|
QString out;
|
||||||
|
|
||||||
|
{
|
||||||
std::vector<RimSummaryCurve*> curves;
|
std::vector<RimSummaryCurve*> curves;
|
||||||
this->descendantsIncludingThisOfType(curves);
|
this->descendantsIncludingThisOfType(curves);
|
||||||
|
|
||||||
@ -275,6 +276,81 @@ QString RimSummaryPlot::asciiDataForPlotExport() const
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
{
|
||||||
|
std::vector<QString> caseNames;
|
||||||
|
std::vector<std::vector<time_t> > timeSteps;
|
||||||
|
|
||||||
|
std::vector<std::vector<std::vector<double> > > allCurveData;
|
||||||
|
std::vector<std::vector<QString > > 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++)
|
||||||
|
{
|
||||||
|
if (curveCaseName == caseNames[i]) casePosInList = i;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (casePosInList == cvf::UNDEFINED_SIZE_T)
|
||||||
|
{
|
||||||
|
caseNames.push_back(curveCaseName);
|
||||||
|
|
||||||
|
std::vector<time_t> curveTimeSteps = curve->timeStepValues();
|
||||||
|
timeSteps.push_back(curveTimeSteps);
|
||||||
|
|
||||||
|
std::vector<std::vector<double> > curveDataForCase;
|
||||||
|
std::vector<double> curveYData = curve->yValues();
|
||||||
|
curveDataForCase.push_back(curveYData);
|
||||||
|
allCurveData.push_back(curveDataForCase);
|
||||||
|
|
||||||
|
std::vector<QString> curveNamesForCase;
|
||||||
|
curveNamesForCase.push_back(curve->curveName());
|
||||||
|
allCurveNames.push_back(curveNamesForCase);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
std::vector<double> 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;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user