diff --git a/ApplicationCode/FileInterface/RifReaderEclipseOutput.cpp b/ApplicationCode/FileInterface/RifReaderEclipseOutput.cpp index c60ccf7807..a7de33a5e6 100644 --- a/ApplicationCode/FileInterface/RifReaderEclipseOutput.cpp +++ b/ApplicationCode/FileInterface/RifReaderEclipseOutput.cpp @@ -30,6 +30,7 @@ #include "RigEclipseCaseData.h" #include "RigMainGrid.h" #include "RigSingleWellResultsData.h" +#include "RigResultInfo.h" #include "cafProgressInfo.h" @@ -646,8 +647,7 @@ void RifReaderEclipseOutput::buildMetaData() RigCaseCellResultsData* matrixModelResults = m_eclipseCase->results(RifReaderInterface::MATRIX_RESULTS); RigCaseCellResultsData* fractureModelResults = m_eclipseCase->results(RifReaderInterface::FRACTURE_RESULTS); - std::vector timeSteps; - std::vector daysSinceSimulationStart; + std::vector timeStepInfos; // Create access object for dynamic results m_dynamicResultsAccess = createDynamicResultsAccess(); @@ -657,8 +657,6 @@ void RifReaderEclipseOutput::buildMetaData() progInfo.incrementProgress(); - std::vector reportNumbers; - // Get time steps { std::vector timeStepsOnFile; @@ -672,9 +670,7 @@ void RifReaderEclipseOutput::buildMetaData() { if (this->isTimeStepIncludedByFilter(i)) { - timeSteps.push_back(timeStepsOnFile[i]); - daysSinceSimulationStart.push_back(daysSinceSimulationStartOnFile[i]); - reportNumbers.push_back(reportNumbersOnFile[i]); + timeStepInfos.push_back(RigTimeStepInfo(timeStepsOnFile[i], reportNumbersOnFile[i], daysSinceSimulationStartOnFile[i])); } } } @@ -692,7 +688,7 @@ void RifReaderEclipseOutput::buildMetaData() for (int i = 0; i < matrixResultNames.size(); ++i) { size_t resIndex = matrixModelResults->addEmptyScalarResult(RiaDefines::DYNAMIC_NATIVE, matrixResultNames[i], false); - matrixModelResults->setTimeStepDates(resIndex, timeSteps, daysSinceSimulationStart, reportNumbers); + matrixModelResults->setTimeStepInfos(resIndex, timeStepInfos); } } @@ -705,7 +701,7 @@ void RifReaderEclipseOutput::buildMetaData() for (int i = 0; i < fractureResultNames.size(); ++i) { size_t resIndex = fractureModelResults->addEmptyScalarResult(RiaDefines::DYNAMIC_NATIVE, fractureResultNames[i], false); - fractureModelResults->setTimeStepDates(resIndex, timeSteps, daysSinceSimulationStart, reportNumbers); + fractureModelResults->setTimeStepInfos(resIndex, timeStepInfos); } } @@ -741,29 +737,10 @@ void RifReaderEclipseOutput::buildMetaData() RifEclipseOutputFileTools::findKeywordsAndItemCount(filesUsedToFindAvailableKeywords, &resultNames, &resultNamesDataItemCounts); - std::vector staticDate; - std::vector staticDay; - std::vector staticReportNumber; + std::vector staticTimeStepInfo; + if (!timeStepInfos.empty()) { - if ( timeSteps.size() > 0 ) - { - staticDate.push_back(timeSteps.front()); - } - if (daysSinceSimulationStart.size() > 0) - { - staticDay.push_back(daysSinceSimulationStart.front()); - } - - std::vector reportNumbers; - if (m_dynamicResultsAccess.notNull()) - { - reportNumbers = m_dynamicResultsAccess->reportNumbers(); - } - - if ( reportNumbers.size() > 0 ) - { - staticReportNumber.push_back(reportNumbers.front()); - } + staticTimeStepInfo.push_back(timeStepInfos.front()); } { @@ -778,7 +755,7 @@ void RifReaderEclipseOutput::buildMetaData() for (int i = 0; i < matrixResultNames.size(); ++i) { size_t resIndex = matrixModelResults->addEmptyScalarResult(RiaDefines::STATIC_NATIVE, matrixResultNames[i], false); - matrixModelResults->setTimeStepDates(resIndex, staticDate, staticDay, staticReportNumber); + matrixModelResults->setTimeStepInfos(resIndex, staticTimeStepInfo); } } @@ -793,7 +770,7 @@ void RifReaderEclipseOutput::buildMetaData() for (int i = 0; i < fractureResultNames.size(); ++i) { size_t resIndex = fractureModelResults->addEmptyScalarResult(RiaDefines::STATIC_NATIVE, fractureResultNames[i], false); - fractureModelResults->setTimeStepDates(resIndex, staticDate, staticDay, staticReportNumber); + fractureModelResults->setTimeStepInfos(resIndex, staticTimeStepInfo); } } } diff --git a/ApplicationCode/FileInterface/RifReaderMockModel.cpp b/ApplicationCode/FileInterface/RifReaderMockModel.cpp index dee15942f5..ef25d6d9a0 100644 --- a/ApplicationCode/FileInterface/RifReaderMockModel.cpp +++ b/ApplicationCode/FileInterface/RifReaderMockModel.cpp @@ -22,6 +22,7 @@ #include "RigCaseCellResultsData.h" #include "RigEclipseCaseData.h" +#include "RigResultInfo.h" //-------------------------------------------------------------------------------------------------- /// @@ -34,32 +35,32 @@ bool RifReaderMockModel::open(const QString& fileName, RigEclipseCaseData* eclip RigCaseCellResultsData* cellResults = eclipseCase->results(RifReaderInterface::MATRIX_RESULTS); - - std::vector dates; - std::vector days; - std::vector repNumbers; - - for (int i = 0; i < static_cast(m_reservoirBuilder.timeStepCount()); i++) + std::vector timeStepInfos; { - dates.push_back(QDateTime(QDate(2012+i, 6, 1))); - days.push_back(i); - repNumbers.push_back(i); + std::vector dates; + std::vector days; + std::vector repNumbers; + + for (int i = 0; i < static_cast(m_reservoirBuilder.timeStepCount()); i++) + { + dates.push_back(QDateTime(QDate(2012+i, 6, 1))); + days.push_back(i); + repNumbers.push_back(i); + } + + timeStepInfos = RigTimeStepInfo::createTimeStepInfos(dates, repNumbers, days); } for (size_t i = 0; i < m_reservoirBuilder.resultCount(); i++) { size_t resIdx = cellResults->addEmptyScalarResult(RiaDefines::DYNAMIC_NATIVE, QString("Dynamic_Result_%1").arg(i), false); - cellResults->setTimeStepDates(resIdx, dates, days, repNumbers); + cellResults->setTimeStepInfos(resIdx, timeStepInfos); } if (m_reservoirBuilder.timeStepCount() == 0) return true; - std::vector staticDates; - staticDates.push_back(dates[0]); - std::vector staticDays; - staticDays.push_back(days[0]); - std::vector staticRepNumbers; - staticRepNumbers.push_back(0); + std::vector staticResultTimeStepInfos; + staticResultTimeStepInfos.push_back(timeStepInfos[0]); for (int i = 0; i < static_cast(m_reservoirBuilder.resultCount()); i++) { @@ -70,7 +71,7 @@ bool RifReaderMockModel::open(const QString& fileName, RigEclipseCaseData* eclip if (i > 1) resIndex = i; size_t resIdx = cellResults->addEmptyScalarResult(RiaDefines::STATIC_NATIVE, QString("Static_Result_%1%2").arg(resIndex).arg(varEnd), false); - cellResults->setTimeStepDates(resIdx, staticDates, staticDays, staticRepNumbers); + cellResults->setTimeStepInfos(resIdx, staticResultTimeStepInfos); } @@ -79,7 +80,7 @@ bool RifReaderMockModel::open(const QString& fileName, RigEclipseCaseData* eclip size_t resIdx; \ QString resultName(Name); \ resIdx = cellResults->addEmptyScalarResult(RiaDefines::INPUT_PROPERTY, resultName, false); \ - cellResults->setTimeStepDates(resIdx, staticDates, staticDays, staticRepNumbers); \ + cellResults->setTimeStepInfos(resIdx, staticResultTimeStepInfos); \ cellResults->cellScalarResults(resIdx).resize(1); \ std::vector& values = cellResults->cellScalarResults(resIdx)[0]; \ this->inputProperty(resultName, &values); \ diff --git a/ApplicationCode/ProjectDataModel/RimEclipseStatisticsCaseEvaluator.cpp b/ApplicationCode/ProjectDataModel/RimEclipseStatisticsCaseEvaluator.cpp index 923ed6f9dd..ed5534ec2c 100644 --- a/ApplicationCode/ProjectDataModel/RimEclipseStatisticsCaseEvaluator.cpp +++ b/ApplicationCode/ProjectDataModel/RimEclipseStatisticsCaseEvaluator.cpp @@ -43,20 +43,18 @@ void RimEclipseStatisticsCaseEvaluator::addNamedResult(RigCaseCellResultsData* d // Use time step dates from first result in first source case CVF_ASSERT(m_sourceCases.size() > 0); - std::vector sourceTimeStepDates = m_sourceCases[0]->results(RifReaderInterface::MATRIX_RESULTS)->cellResults()->timeStepDates(0); - std::vector sourceDaysSinceSimulationStart = m_sourceCases[0]->results(RifReaderInterface::MATRIX_RESULTS)->cellResults()->daysSinceSimulationStart(0); - std::vector sourceReportStepNumbers = m_sourceCases[0]->results(RifReaderInterface::MATRIX_RESULTS)->cellResults()->reportStepNumbers(0); + std::vector sourceTimeStepInfos = m_sourceCases[0]->results(RifReaderInterface::MATRIX_RESULTS)->cellResults()->timeStepInfos(0); size_t destinationScalarResultIndex = destinationCellResults->addEmptyScalarResult(resultType, resultName, true); CVF_ASSERT(destinationScalarResultIndex != cvf::UNDEFINED_SIZE_T); - destinationCellResults->setTimeStepDates(destinationScalarResultIndex, sourceTimeStepDates, sourceDaysSinceSimulationStart, sourceReportStepNumbers); + destinationCellResults->setTimeStepInfos(destinationScalarResultIndex, sourceTimeStepInfos); std::vector< std::vector >& dataValues = destinationCellResults->cellScalarResults(destinationScalarResultIndex); - dataValues.resize(sourceTimeStepDates.size()); + dataValues.resize(sourceTimeStepInfos.size()); // Initializes the size of the destination dataset to active union cell count - for (size_t i = 0; i < sourceTimeStepDates.size(); i++) + for (size_t i = 0; i < sourceTimeStepInfos.size(); i++) { dataValues[i].resize(activeUnionCellCount, HUGE_VAL); } diff --git a/ApplicationCode/ProjectDataModel/RimIdenticalGridCaseGroup.cpp b/ApplicationCode/ProjectDataModel/RimIdenticalGridCaseGroup.cpp index 73d2c0b401..a67e319e8d 100644 --- a/ApplicationCode/ProjectDataModel/RimIdenticalGridCaseGroup.cpp +++ b/ApplicationCode/ProjectDataModel/RimIdenticalGridCaseGroup.cpp @@ -238,9 +238,7 @@ void RimIdenticalGridCaseGroup::loadMainCaseAndActiveCellInfo() { RifReaderInterface::PorosityModelResultType poroModel = RifReaderInterface::MATRIX_RESULTS; - std::vector timeStepDates = rigCaseData->results(poroModel)->timeStepDates(0); - std::vector daysSinceSimulationStart = rigCaseData->results(poroModel)->daysSinceSimulationStart(0); - std::vector reportStepNumbers = rigCaseData->results(poroModel)->reportStepNumbers(0); + std::vector timeStepInfos = rigCaseData->results(poroModel)->timeStepInfos(0); const std::vector resultInfos = rigCaseData->results(poroModel)->infoForEachResultIndex(); @@ -265,10 +263,10 @@ void RimIdenticalGridCaseGroup::loadMainCaseAndActiveCellInfo() if (mustBeCalculated) cellResultsStorage->cellResults()->setMustBeCalculated(scalarResultIndex); - cellResultsStorage->cellResults()->setTimeStepDates(scalarResultIndex, timeStepDates, daysSinceSimulationStart, reportStepNumbers); + cellResultsStorage->cellResults()->setTimeStepInfos(scalarResultIndex, timeStepInfos); std::vector< std::vector >& dataValues = cellResultsStorage->cellResults()->cellScalarResults(scalarResultIndex); - dataValues.resize(timeStepDates.size()); + dataValues.resize(timeStepInfos.size()); } } diff --git a/ApplicationCode/ProjectDataModel/RimReservoirCellResultsStorage.cpp b/ApplicationCode/ProjectDataModel/RimReservoirCellResultsStorage.cpp index 0c9b02e39d..051ddd7e66 100644 --- a/ApplicationCode/ProjectDataModel/RimReservoirCellResultsStorage.cpp +++ b/ApplicationCode/ProjectDataModel/RimReservoirCellResultsStorage.cpp @@ -140,15 +140,15 @@ void RimReservoirCellResultsStorage::setupBeforeSave() cacheEntry->m_resultType = resInfo[rIdx].m_resultType; cacheEntry->m_resultName = resInfo[rIdx].m_resultName; - cacheEntry->m_timeStepDates = resInfo[rIdx].m_timeStepDates; - cacheEntry->m_daysSinceSimulationStart = resInfo[rIdx].m_daysSinceSimulationStart; + cacheEntry->m_timeStepDates = resInfo[rIdx].dates(); + cacheEntry->m_daysSinceSimulationStart = resInfo[rIdx].daysSinceSimulationStarts(); // Take note of the file position for fast lookup later cacheEntry->m_filePosition = cacheFile.pos(); // Write all the scalar values for each time step to the stream, // starting with the number of values - for (size_t tsIdx = 0; tsIdx < resInfo[rIdx].m_timeStepDates.size() ; ++tsIdx) + for (size_t tsIdx = 0; tsIdx < resInfo[rIdx].dates().size() ; ++tsIdx) { const std::vector* data = NULL; if (tsIdx < timestepCount) @@ -379,7 +379,7 @@ size_t RimReservoirCellResultsStorage::findOrLoadScalarResult(RiaDefines::Result if (m_readerInterface.notNull()) { // Add one more result to result container - size_t timeStepCount = m_cellResults->infoForEachResultIndex()[scalarResultIndex].m_timeStepDates.size(); + size_t timeStepCount = m_cellResults->infoForEachResultIndex()[scalarResultIndex].m_timeStepInfos.size(); bool resultLoadingSucess = true; @@ -461,7 +461,7 @@ size_t RimReservoirCellResultsStorage::findOrLoadScalarResultForTimeStep(RiaDefi if (m_readerInterface.notNull()) { - size_t timeStepCount = m_cellResults->infoForEachResultIndex()[scalarResultIndex].m_timeStepDates.size(); + size_t timeStepCount = m_cellResults->infoForEachResultIndex()[scalarResultIndex].m_timeStepInfos.size(); bool resultLoadingSucess = true; @@ -525,7 +525,7 @@ void RimReservoirCellResultsStorage::computeSOILForTimeStep(size_t timeStepIndex if (swatForTimeStep.size() > 0) { soilResultValueCount = swatForTimeStep.size(); - soilTimeStepCount = m_cellResults->infoForEachResultIndex()[scalarIndexSWAT].m_timeStepDates.size(); + soilTimeStepCount = m_cellResults->infoForEachResultIndex()[scalarIndexSWAT].m_timeStepInfos.size(); } } @@ -536,7 +536,7 @@ void RimReservoirCellResultsStorage::computeSOILForTimeStep(size_t timeStepIndex { soilResultValueCount = qMax(soilResultValueCount, sgasForTimeStep.size()); - size_t sgasTimeStepCount = m_cellResults->infoForEachResultIndex()[scalarIndexSGAS].m_timeStepDates.size(); + size_t sgasTimeStepCount = m_cellResults->infoForEachResultIndex()[scalarIndexSGAS].m_timeStepInfos.size(); soilTimeStepCount = qMax(soilTimeStepCount, sgasTimeStepCount); } } @@ -1494,7 +1494,11 @@ void RimReservoirCellResultsStorage::setCellResults(RigCaseCellResultsData* cell RimReservoirCellResultsStorageEntryInfo* resInfo = m_resultCacheMetaData[rIdx]; size_t resultIndex = m_cellResults->addEmptyScalarResult(resInfo->m_resultType(), resInfo->m_resultName(), true); - m_cellResults->setTimeStepDates(resultIndex, resInfo->m_timeStepDates(), resInfo->m_daysSinceSimulationStart(), std::vector()); // Hack: Using no report step numbers. Not really used except for Flow Diagnostics... + std::vector reportNumbers; // Hack: Using no report step numbers. Not really used except for Flow Diagnostics... + reportNumbers.resize(resInfo->m_timeStepDates().size()); + std::vector timeStepInfos = RigTimeStepInfo::createTimeStepInfos(resInfo->m_timeStepDates(), reportNumbers, resInfo->m_daysSinceSimulationStart()); + + m_cellResults->setTimeStepInfos(resultIndex, timeStepInfos); progress.setProgressDescription(resInfo->m_resultName); diff --git a/ApplicationCode/ReservoirDataModel/RigCaseCellResultsData.cpp b/ApplicationCode/ReservoirDataModel/RigCaseCellResultsData.cpp index a6a2788272..5a76ad747a 100644 --- a/ApplicationCode/ReservoirDataModel/RigCaseCellResultsData.cpp +++ b/ApplicationCode/ReservoirDataModel/RigCaseCellResultsData.cpp @@ -394,8 +394,8 @@ bool RigCaseCellResultsData::hasFlowDiagUsableFluxes() const //-------------------------------------------------------------------------------------------------- QDateTime RigCaseCellResultsData::timeStepDate(size_t scalarResultIndex, size_t timeStepIndex) const { - if (scalarResultIndex < m_resultInfos.size() && m_resultInfos[scalarResultIndex].m_timeStepDates.size() > timeStepIndex) - return m_resultInfos[scalarResultIndex].m_timeStepDates[timeStepIndex]; + if (scalarResultIndex < m_resultInfos.size() && m_resultInfos[scalarResultIndex].m_timeStepInfos.size() > timeStepIndex) + return m_resultInfos[scalarResultIndex].m_timeStepInfos[timeStepIndex].m_date; else return QDateTime(); } @@ -406,7 +406,9 @@ QDateTime RigCaseCellResultsData::timeStepDate(size_t scalarResultIndex, size_t std::vector RigCaseCellResultsData::timeStepDates(size_t scalarResultIndex) const { if (scalarResultIndex < m_resultInfos.size()) - return m_resultInfos[scalarResultIndex].m_timeStepDates; + { + return m_resultInfos[scalarResultIndex].dates(); + } else return std::vector(); } @@ -440,7 +442,7 @@ std::vector RigCaseCellResultsData::daysSinceSimulationStart(size_t scal { if (scalarResultIndex < m_resultInfos.size()) { - return m_resultInfos[scalarResultIndex].m_daysSinceSimulationStart; + return m_resultInfos[scalarResultIndex].daysSinceSimulationStarts(); } else { @@ -453,8 +455,8 @@ std::vector RigCaseCellResultsData::daysSinceSimulationStart(size_t scal //-------------------------------------------------------------------------------------------------- int RigCaseCellResultsData::reportStepNumber(size_t scalarResultIndex, size_t timeStepIndex) const { - if (scalarResultIndex < m_resultInfos.size() && m_resultInfos[scalarResultIndex].m_timeStepReportNumbers.size() > timeStepIndex) - return m_resultInfos[scalarResultIndex].m_timeStepReportNumbers[timeStepIndex]; + if (scalarResultIndex < m_resultInfos.size() && m_resultInfos[scalarResultIndex].m_timeStepInfos.size() > timeStepIndex) + return m_resultInfos[scalarResultIndex].m_timeStepInfos[timeStepIndex].m_reportNumber; else return -1; } @@ -465,25 +467,33 @@ int RigCaseCellResultsData::reportStepNumber(size_t scalarResultIndex, size_t ti std::vector RigCaseCellResultsData::reportStepNumbers(size_t scalarResultIndex) const { if (scalarResultIndex < m_resultInfos.size() ) - return m_resultInfos[scalarResultIndex].m_timeStepReportNumbers; + return m_resultInfos[scalarResultIndex].reportNumbers(); else return std::vector(); - } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RigCaseCellResultsData::setTimeStepDates(size_t scalarResultIndex, const std::vector& dates, const std::vector& daysSinceSimulationStart, const std::vector& reportStepNumbers) +std::vector RigCaseCellResultsData::timeStepInfos(size_t scalarResultIndex) const +{ + if (scalarResultIndex < m_resultInfos.size()) + return m_resultInfos[scalarResultIndex].m_timeStepInfos; + else + return std::vector(); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RigCaseCellResultsData::setTimeStepInfos(size_t scalarResultIndex, const std::vector& timeStepInfos) { CVF_ASSERT(scalarResultIndex < m_resultInfos.size() ); - m_resultInfos[scalarResultIndex].m_timeStepDates = dates; - m_resultInfos[scalarResultIndex].m_daysSinceSimulationStart = daysSinceSimulationStart; - m_resultInfos[scalarResultIndex].m_timeStepReportNumbers = reportStepNumbers; + m_resultInfos[scalarResultIndex].m_timeStepInfos = timeStepInfos; std::vector< std::vector >& dataValues = this->cellScalarResults(scalarResultIndex); - dataValues.resize(dates.size()); + dataValues.resize(timeStepInfos.size()); } //-------------------------------------------------------------------------------------------------- @@ -496,9 +506,9 @@ size_t RigCaseCellResultsData::maxTimeStepCount(size_t* scalarResultIndexWithMos for (size_t i = 0; i < m_resultInfos.size(); i++) { - if (m_resultInfos[i].m_timeStepDates.size() > maxTsCount) + if (m_resultInfos[i].m_timeStepInfos.size() > maxTsCount) { - maxTsCount = m_resultInfos[i].m_timeStepDates.size(); + maxTsCount = m_resultInfos[i].m_timeStepInfos.size(); scalarResultIndexWithMaxTsCount = i; } } diff --git a/ApplicationCode/ReservoirDataModel/RigCaseCellResultsData.h b/ApplicationCode/ReservoirDataModel/RigCaseCellResultsData.h index 7627a90125..58c7c2621d 100644 --- a/ApplicationCode/ReservoirDataModel/RigCaseCellResultsData.h +++ b/ApplicationCode/ReservoirDataModel/RigCaseCellResultsData.h @@ -36,6 +36,7 @@ class RigActiveCellInfo; class RigMainGrid; class RigResultInfo; class RigStatisticsDataCache; +class RigTimeStepInfo; //================================================================================================== /// Class containing the results for the complete number of active cells. Both main grid and LGR's @@ -81,7 +82,9 @@ public: std::vector daysSinceSimulationStart(size_t scalarResultIndex) const; int reportStepNumber(size_t scalarResultIndex, size_t timeStepIndex) const; std::vector reportStepNumbers(size_t scalarResultIndex) const; - void setTimeStepDates(size_t scalarResultIndex, const std::vector& dates, const std::vector& daysSinceSimulationStart, const std::vector& reportStepNumbers); + + std::vector timeStepInfos(size_t scalarResultIndex) const; + void setTimeStepInfos(size_t scalarResultIndex, const std::vector& timeStepInfos); // Find or create a slot for the results diff --git a/ApplicationCode/ReservoirDataModel/RigResultInfo.cpp b/ApplicationCode/ReservoirDataModel/RigResultInfo.cpp index 18848cca46..4e5686cd22 100644 --- a/ApplicationCode/ReservoirDataModel/RigResultInfo.cpp +++ b/ApplicationCode/ReservoirDataModel/RigResultInfo.cpp @@ -18,6 +18,38 @@ #include "RigResultInfo.h" +#include "cvfAssert.h" + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RigTimeStepInfo::RigTimeStepInfo(const QDateTime& date, int reportNumber, double daysSinceSimulationStart) + : m_date(date), + m_reportNumber(reportNumber), + m_daysSinceSimulationStart(daysSinceSimulationStart) +{ +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +std::vector RigTimeStepInfo::createTimeStepInfos(std::vector dates, + std::vector reportNumbers, + std::vector daysSinceSimulationStarts) +{ + CVF_ASSERT(dates.size() == reportNumbers.size()); + CVF_ASSERT(dates.size() == daysSinceSimulationStarts.size()); + + std::vector timeStepInfos; + + for (size_t i = 0; i < dates.size(); i++) + { + timeStepInfos.push_back(RigTimeStepInfo(dates[i], reportNumbers[i], daysSinceSimulationStarts[i])); + } + + return timeStepInfos; +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -30,3 +62,49 @@ RigResultInfo::RigResultInfo(RiaDefines::ResultCatType resultType, bool needsToB m_gridScalarResultIndex(gridScalarResultIndex) { } + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +std::vector RigResultInfo::dates() const +{ + std::vector values; + + for (auto v : m_timeStepInfos) + { + values.push_back(v.m_date); + } + + return values; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +std::vector RigResultInfo::daysSinceSimulationStarts() const +{ + std::vector values; + + for (auto v : m_timeStepInfos) + { + values.push_back(v.m_daysSinceSimulationStart); + } + + return values; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +std::vector RigResultInfo::reportNumbers() const +{ + std::vector values; + + for (auto v : m_timeStepInfos) + { + values.push_back(v.m_reportNumber); + } + + return values; +} + diff --git a/ApplicationCode/ReservoirDataModel/RigResultInfo.h b/ApplicationCode/ReservoirDataModel/RigResultInfo.h index 78ff56ac99..4ff0524811 100644 --- a/ApplicationCode/ReservoirDataModel/RigResultInfo.h +++ b/ApplicationCode/ReservoirDataModel/RigResultInfo.h @@ -20,23 +20,48 @@ #include "RiaDefines.h" +#include +#include + #include -class QString; +//================================================================================================== +/// +//================================================================================================== +class RigTimeStepInfo +{ +public: + RigTimeStepInfo(const QDateTime& date, int reportNumber, double daysSinceSimulationStart); + static std::vector createTimeStepInfos(std::vector dates, + std::vector reportNumbers, + std::vector daysSinceSimulationStarts); +public: + QDateTime m_date; + int m_reportNumber; + double m_daysSinceSimulationStart; +}; + + +//================================================================================================== +/// +//================================================================================================== class RigResultInfo { public: RigResultInfo(RiaDefines::ResultCatType resultType, bool needsToBeStored, bool mustBeCalculated, QString resultName, size_t gridScalarResultIndex); + std::vector dates() const; + std::vector daysSinceSimulationStarts() const; + std::vector reportNumbers() const; + public: RiaDefines::ResultCatType m_resultType; bool m_needsToBeStored; bool m_mustBeCalculated; QString m_resultName; size_t m_gridScalarResultIndex; - std::vector m_timeStepDates; - std::vector m_timeStepReportNumbers; - std::vector m_daysSinceSimulationStart; + + std::vector m_timeStepInfos; };