mirror of
https://github.com/OPM/ResInsight.git
synced 2026-10-26 15:10:22 -05:00
When the summary plot time axis is configured to show time from simulation start, the text produced by Show Plot Data and the ASCII export now reports the same values instead of date and time. The time column header becomes "Time [<unit>]", and each row reports the elapsed time relative to the first time step of the first curve, scaled to the display unit selected on the time axis. Plots using the date based time axis are unchanged. Time in months and years is computed using calendar arithmetic instead of a fixed number of seconds per unit, so a time step exactly N calendar months or years after the simulation start reports exactly N. This makes resampled data report whole numbers also when a leap year is part of the interval. The calendar arithmetic is available as RiaQDateTimeTools::calendarYearsBetween() and calendarMonthsBetween(), and is used both when plotting the curves and when reporting the time column.
108 lines
4.8 KiB
C++
108 lines
4.8 KiB
C++
/////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Copyright (C) 2022 Equinor
|
|
//
|
|
// 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 "RiaDateTimeDefines.h"
|
|
#include "RifEclipseSummaryAddress.h"
|
|
|
|
#include "RimSummaryTimeAxisProperties.h"
|
|
|
|
#include <QDateTime>
|
|
#include <QString>
|
|
|
|
#include <optional>
|
|
|
|
class RimSummaryCurve;
|
|
class RimGridTimeHistoryCurve;
|
|
class RimAsciiDataCurve;
|
|
|
|
struct CurveData
|
|
{
|
|
QString name;
|
|
RifEclipseSummaryAddressDefines::CurveType curveType;
|
|
std::vector<double> values;
|
|
};
|
|
|
|
// Used to report the time column as time from simulation start instead of date and time
|
|
struct TimeFromSimulationStartInfo
|
|
{
|
|
QDateTime simulationStartTime;
|
|
RimSummaryTimeAxisProperties::TimeUnitType displayUnit = RimSummaryTimeAxisProperties::YEARS;
|
|
QString displayUnitText;
|
|
};
|
|
|
|
enum class SummaryCurveType
|
|
{
|
|
CURVE_TYPE_SUMMARY = 0x1,
|
|
CURVE_TYPE_OBSERVED = 0x2
|
|
};
|
|
|
|
class RimSummaryCurvesData
|
|
{
|
|
public:
|
|
RimSummaryCurvesData();
|
|
void clear();
|
|
|
|
void addCurveData( const QString& caseName, const QString& ensembleName, const std::vector<time_t>& curvetimeSteps, const CurveData& curveData );
|
|
|
|
void addCurveDataNoSearch( const QString& caseName,
|
|
const QString& ensembleName,
|
|
const std::vector<time_t>& curvetimeSteps,
|
|
const std::vector<CurveData>& curveDataVector );
|
|
|
|
static QString createTextForExport( const std::vector<RimSummaryCurve*>& curves,
|
|
const std::vector<RimAsciiDataCurve*>& asciiCurves,
|
|
const std::vector<RimGridTimeHistoryCurve*>& gridCurves,
|
|
RiaDefines::DateTimePeriod resamplingPeriod,
|
|
bool showTimeAsLongString,
|
|
const std::optional<TimeFromSimulationStartInfo>& timeFromSimulationStart = {} );
|
|
|
|
static QString createTextForCrossPlotCurves( const std::vector<RimSummaryCurve*>& curves );
|
|
|
|
private:
|
|
static void populateSummaryCurvesData( std::vector<RimSummaryCurve*> curves, SummaryCurveType curveType, RimSummaryCurvesData* curvesData );
|
|
static void populateTimeHistoryCurvesData( std::vector<RimGridTimeHistoryCurve*> curves, RimSummaryCurvesData* curvesData );
|
|
static void populateAsciiDataCurvesData( std::vector<RimAsciiDataCurve*> curves, RimSummaryCurvesData* curvesData );
|
|
|
|
static void prepareCaseCurvesForExport( RiaDefines::DateTimePeriod period,
|
|
const RimSummaryCurvesData& inputCurvesData,
|
|
RimSummaryCurvesData* resultCurvesData );
|
|
|
|
static void appendToExportDataForCase( QString& out,
|
|
const std::vector<time_t>& timeSteps,
|
|
const std::vector<CurveData>& curveData,
|
|
const std::optional<TimeFromSimulationStartInfo>& timeFromSimulationStart );
|
|
static void appendToExportData( QString& out,
|
|
const std::vector<RimSummaryCurvesData>& curvesData,
|
|
bool showTimeAsLongString,
|
|
const std::optional<TimeFromSimulationStartInfo>& timeFromSimulationStart );
|
|
RimSummaryCurvesData static concatCurvesData( const std::vector<RimSummaryCurvesData>& curvesData );
|
|
|
|
private:
|
|
size_t findCaseIndexForCaseId( const QString& caseId, size_t timeStepCount );
|
|
|
|
QString createCaseId( const QString& caseName, const QString& ensembleName );
|
|
|
|
public:
|
|
RiaDefines::DateTimePeriod resamplePeriod;
|
|
std::vector<QString> caseIds;
|
|
std::vector<std::vector<time_t>> timeSteps;
|
|
std::vector<std::vector<CurveData>> allCurveData;
|
|
};
|