#3958 Refactoring: Moved code into CaseCellResultsData.

Made methods private
This commit is contained in:
Jacob Støren 2019-01-22 10:02:30 +01:00
parent ccfee8f34a
commit 8e16d3ff20
3 changed files with 63 additions and 40 deletions

View File

@ -230,47 +230,11 @@ void RimIdenticalGridCaseGroup::loadMainCaseAndActiveCellInfo()
computeUnionOfActiveCells();
}
// Action B : Copy result meta data from main case to all other cases in grid case group
// This code was originally part of RimStatisticsCaseEvaluator, but moved here to be a general solution
// for all cases
RigCaseCellResultsData::copyResultsMetaDataFromMainCase(rigCaseData,
poroModel,
caseCollection->reservoirs.childObjects());
{
std::vector<RigEclipseTimeStepInfo> timeStepInfos = rigCaseData->results(poroModel)->timeStepInfos(RigEclipseResultAddress(0));
const std::vector<RigEclipseResultInfo> resultInfos = rigCaseData->results(poroModel)->infoForEachResultIndex();
for (size_t i = 1; i < caseCollection()->reservoirs.size(); i++)
{
RimEclipseResultCase* rimReservoir = dynamic_cast<RimEclipseResultCase*>(caseCollection()->reservoirs[i]);
if (!rimReservoir) continue; // Input reservoir
RigCaseCellResultsData* cellResultsStorage = rimReservoir->results(poroModel);
for (size_t resIdx = 0; resIdx < resultInfos.size(); resIdx++)
{
RiaDefines::ResultCatType resultType = resultInfos[resIdx].resultType();
QString resultName = resultInfos[resIdx].resultName();
bool needsToBeStored = resultInfos[resIdx].needsToBeStored();
bool mustBeCalculated = resultInfos[resIdx].mustBeCalculated();
size_t scalarResultIndex = cellResultsStorage->findScalarResultIndex(resultType, resultName);
if (scalarResultIndex == cvf::UNDEFINED_SIZE_T)
{
scalarResultIndex = cellResultsStorage->findOrCreateScalarResultIndex(resultType, resultName, needsToBeStored);
if (mustBeCalculated) cellResultsStorage->setMustBeCalculated(scalarResultIndex);
cellResultsStorage->setTimeStepInfos(RigEclipseResultAddress(scalarResultIndex), timeStepInfos);
std::vector< std::vector<double> >& dataValues = cellResultsStorage->cellScalarResults(RigEclipseResultAddress(scalarResultIndex));
dataValues.resize(timeStepInfos.size());
}
}
cellResultsStorage->createPlaceholderResultEntries();
}
}
// "Load" the statistical cases

View File

@ -2674,3 +2674,54 @@ RigStatisticsDataCache* RigCaseCellResultsData::statistics(const RigEclipseResul
{
return m_statisticsDataCache[resVarAddr.scalarResultIndex].p();
}
#include "RimEclipseResultCase.h"
//--------------------------------------------------------------------------------------------------
/// Copy result meta data from main case to all other cases in grid case group
/// This code was originally part of RimStatisticsCaseEvaluator, but moved here to be a general solution
/// for all cases
//--------------------------------------------------------------------------------------------------
void RigCaseCellResultsData::copyResultsMetaDataFromMainCase(RigEclipseCaseData* mainCaseResultsData,
RiaDefines::PorosityModelType poroModel,
std::vector<RimEclipseCase*> destinationCases)
{
std::vector<RigEclipseTimeStepInfo> timeStepInfos = mainCaseResultsData->results(poroModel)->timeStepInfos(RigEclipseResultAddress(0));
const std::vector<RigEclipseResultInfo> resultInfos = mainCaseResultsData->results(poroModel)->infoForEachResultIndex();
for ( size_t i = 0; i < destinationCases.size(); i++ )
{
RimEclipseResultCase* rimReservoir = dynamic_cast<RimEclipseResultCase*>(destinationCases[i]);
if ( !rimReservoir ) continue; // Input reservoir
if (mainCaseResultsData == rimReservoir->eclipseCaseData()) continue; // Do not copy ontop of itself
RigCaseCellResultsData* cellResultsStorage = rimReservoir->results(poroModel);
for ( size_t resIdx = 0; resIdx < resultInfos.size(); resIdx++ )
{
RiaDefines::ResultCatType resultType = resultInfos[resIdx].resultType();
QString resultName = resultInfos[resIdx].resultName();
bool needsToBeStored = resultInfos[resIdx].needsToBeStored();
bool mustBeCalculated = resultInfos[resIdx].mustBeCalculated();
size_t scalarResultIndex = cellResultsStorage->findScalarResultIndex(resultType, resultName);
if ( scalarResultIndex == cvf::UNDEFINED_SIZE_T )
{
scalarResultIndex = cellResultsStorage->findOrCreateScalarResultIndex(resultType, resultName, needsToBeStored);
if ( mustBeCalculated ) cellResultsStorage->setMustBeCalculated(scalarResultIndex);
cellResultsStorage->setTimeStepInfos(RigEclipseResultAddress(scalarResultIndex), timeStepInfos);
std::vector< std::vector<double> >& dataValues = cellResultsStorage->cellScalarResults(RigEclipseResultAddress(scalarResultIndex));
dataValues.resize(timeStepInfos.size());
}
}
cellResultsStorage->createPlaceholderResultEntries();
}
}

View File

@ -21,6 +21,7 @@
#pragma once
#include "RiaDefines.h"
#include "RiaPorosityModel.h"
#include "cvfCollection.h"
@ -29,6 +30,7 @@
#include <vector>
#include <cmath>
class RifReaderInterface;
class RigActiveCellInfo;
class RigMainGrid;
@ -37,6 +39,8 @@ class RigStatisticsDataCache;
class RigEclipseTimeStepInfo;
class RigEclipseCaseData;
class RimEclipseCase;
class RigEclipseResultAddress
{
public:
@ -156,12 +160,16 @@ public:
RigCaseCellResultsData* gridCellResults,
QString porvResultName,
std::vector<double> &activeCellsResultsTempContainer);
static void copyResultsMetaDataFromMainCase(RigEclipseCaseData* mainCaseResultsData,
RiaDefines::PorosityModelType poroModel,
std::vector<RimEclipseCase*> destinationCases);
public:
const std::vector<RigEclipseResultInfo>& infoForEachResultIndex();
private:
bool mustBeCalculated(size_t scalarResultIndex) const;
void setMustBeCalculated(size_t scalarResultIndex);
public:
void eraseAllSourSimData();