From f023ec98e8259aacf43aa7d1df79dd3613fd7bdb Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Sat, 9 Aug 2014 15:08:30 +0200 Subject: [PATCH] Added overload to result accessor factory --- .../RigResultAccessorFactory.cpp | 139 ++++++++++++------ .../RigResultAccessorFactory.h | 17 ++- 2 files changed, 108 insertions(+), 48 deletions(-) diff --git a/ApplicationCode/ReservoirDataModel/RigResultAccessorFactory.cpp b/ApplicationCode/ReservoirDataModel/RigResultAccessorFactory.cpp index de23da6f87..71f20f5083 100644 --- a/ApplicationCode/ReservoirDataModel/RigResultAccessorFactory.cpp +++ b/ApplicationCode/ReservoirDataModel/RigResultAccessorFactory.cpp @@ -36,6 +36,69 @@ #include "RigCombTransResultAccessor.h" +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +cvf::ref RigResultAccessorFactory::createResultAccessor(RigCaseData* eclipseCase, + size_t gridIndex, + RifReaderInterface::PorosityModelResultType porosityModel, + size_t timeStepIndex, + const QString& uiResultName) +{ + CVF_ASSERT(gridIndex < eclipseCase->gridCount()); + CVF_ASSERT(eclipseCase); + CVF_ASSERT(eclipseCase->results(porosityModel)); + CVF_ASSERT(eclipseCase->activeCellInfo(porosityModel)); + + RigGridBase* grid = eclipseCase->grid(gridIndex); + + if (uiResultName == RimDefines::combinedTransmissibilityResultName()) + { + cvf::ref cellFaceAccessObject = new RigCombTransResultAccessor(grid); + + cvf::ref xTransAccessor = RigResultAccessorFactory::createNativeResultAccessor(eclipseCase, gridIndex, porosityModel, timeStepIndex, "TRANX"); + cvf::ref yTransAccessor = RigResultAccessorFactory::createNativeResultAccessor(eclipseCase, gridIndex, porosityModel, timeStepIndex, "TRANY"); + cvf::ref zTransAccessor = RigResultAccessorFactory::createNativeResultAccessor(eclipseCase, gridIndex, porosityModel, timeStepIndex, "TRANZ"); + + cellFaceAccessObject->setTransResultAccessors(xTransAccessor.p(), yTransAccessor.p(), zTransAccessor.p()); + + return cellFaceAccessObject; + } + + return RigResultAccessorFactory::createNativeResultAccessor(eclipseCase, gridIndex, porosityModel, timeStepIndex, uiResultName); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +cvf::ref RigResultAccessorFactory::createResultAccessor(RigCaseData* eclipseCase, + size_t gridIndex, + RifReaderInterface::PorosityModelResultType porosityModel, + size_t timeStepIndex, + const QString& uiResultName, + RimDefines::ResultCatType resultType) +{ + CVF_ASSERT(gridIndex < eclipseCase->gridCount()); + CVF_ASSERT(eclipseCase); + CVF_ASSERT(eclipseCase->results(porosityModel)); + CVF_ASSERT(eclipseCase->activeCellInfo(porosityModel)); + + RigGridBase *grid = eclipseCase->grid(gridIndex); + + if (!eclipseCase || !eclipseCase->results(porosityModel) || !eclipseCase->activeCellInfo(porosityModel)) + { + return NULL; + } + + size_t scalarSetIndex = eclipseCase->results(porosityModel)->findScalarResultIndex(resultType, uiResultName); + if (scalarSetIndex == cvf::UNDEFINED_SIZE_T) + { + return NULL; + } + + return createResultAccessor(eclipseCase, gridIndex, porosityModel, timeStepIndex, scalarSetIndex); +} + //-------------------------------------------------------------------------------------------------- /// This function must be harmonized with RigResultModifierFactory::createResultModifier() //-------------------------------------------------------------------------------------------------- @@ -63,64 +126,46 @@ cvf::ref RigResultAccessorFactory::createNativeResultAccessor return NULL; } - std::vector< std::vector >& scalarSetResults = eclipseCase->results(porosityModel)->cellScalarResults(scalarSetIndex); - - if (timeStepIndex >= scalarSetResults.size()) - { - return NULL; - } - - std::vector* resultValues = NULL; - if (timeStepIndex < scalarSetResults.size()) - { - resultValues = &(scalarSetResults[timeStepIndex]); - } - - bool useGlobalActiveIndex = eclipseCase->results(porosityModel)->isUsingGlobalActiveIndex(scalarSetIndex); - if (useGlobalActiveIndex) - { - cvf::ref object = new RigActiveCellsResultAccessor(grid, resultValues, eclipseCase->activeCellInfo(porosityModel)); - return object; - } - else - { - cvf::ref object = new RigAllGridCellsResultAccessor(grid, resultValues); - return object; - } + return createResultAccessor(eclipseCase, gridIndex, porosityModel, timeStepIndex, scalarSetIndex); } - - //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- cvf::ref RigResultAccessorFactory::createResultAccessor(RigCaseData* eclipseCase, - size_t gridIndex, - RifReaderInterface::PorosityModelResultType porosityModel, - size_t timeStepIndex, - const QString& uiResultName) + size_t gridIndex, + RifReaderInterface::PorosityModelResultType porosityModel, + size_t timeStepIndex, + size_t resultIndex) { - CVF_ASSERT(gridIndex < eclipseCase->gridCount()); - CVF_ASSERT(eclipseCase); - CVF_ASSERT(eclipseCase->results(porosityModel)); - CVF_ASSERT(eclipseCase->activeCellInfo(porosityModel)); + if (!eclipseCase) return NULL; - RigGridBase* grid = eclipseCase->grid(gridIndex); + RigGridBase* grid = eclipseCase->grid(gridIndex); + if (!grid) return NULL; - if (uiResultName == RimDefines::combinedTransmissibilityResultName()) - { - cvf::ref cellFaceAccessObject = new RigCombTransResultAccessor(grid); + std::vector< std::vector >& scalarSetResults = eclipseCase->results(porosityModel)->cellScalarResults(resultIndex); + if (timeStepIndex >= scalarSetResults.size()) + { + return NULL; + } - cvf::ref xTransAccessor = RigResultAccessorFactory::createNativeResultAccessor(eclipseCase, gridIndex, porosityModel, timeStepIndex, "TRANX"); - cvf::ref yTransAccessor = RigResultAccessorFactory::createNativeResultAccessor(eclipseCase, gridIndex, porosityModel, timeStepIndex, "TRANY"); - cvf::ref zTransAccessor = RigResultAccessorFactory::createNativeResultAccessor(eclipseCase, gridIndex, porosityModel, timeStepIndex, "TRANZ"); - - cellFaceAccessObject->setTransResultAccessors(xTransAccessor.p(), yTransAccessor.p(), zTransAccessor.p()); + std::vector* resultValues = NULL; + if (timeStepIndex < scalarSetResults.size()) + { + resultValues = &(scalarSetResults[timeStepIndex]); + } - return cellFaceAccessObject; - } - - return RigResultAccessorFactory::createNativeResultAccessor(eclipseCase, gridIndex, porosityModel, timeStepIndex, uiResultName); + bool useGlobalActiveIndex = eclipseCase->results(porosityModel)->isUsingGlobalActiveIndex(resultIndex); + if (useGlobalActiveIndex) + { + cvf::ref object = new RigActiveCellsResultAccessor(grid, resultValues, eclipseCase->activeCellInfo(porosityModel)); + return object; + } + else + { + cvf::ref object = new RigAllGridCellsResultAccessor(grid, resultValues); + return object; + } } diff --git a/ApplicationCode/ReservoirDataModel/RigResultAccessorFactory.h b/ApplicationCode/ReservoirDataModel/RigResultAccessorFactory.h index 6a4a414865..15d2ebd99f 100644 --- a/ApplicationCode/ReservoirDataModel/RigResultAccessorFactory.h +++ b/ApplicationCode/ReservoirDataModel/RigResultAccessorFactory.h @@ -18,9 +18,10 @@ #pragma once -#include "cvfStructGridScalarDataAccess.h" #include "RifReaderInterface.h" +#include "RimDefines.h" +#include "cvfStructGridScalarDataAccess.h" class RigActiveCellInfo; class RigGridBase; @@ -36,6 +37,14 @@ public: size_t timeStepIndex, const QString& uiResultName); + static cvf::ref + createResultAccessor(RigCaseData* eclipseCase, + size_t gridIndex, + RifReaderInterface::PorosityModelResultType porosityModel, + size_t timeStepIndex, + const QString& uiResultName, + RimDefines::ResultCatType resultType); + // TO BE DELETED static cvf::ref @@ -54,6 +63,12 @@ private: size_t timeStepIndex, const QString& resultName); + static cvf::ref + createResultAccessor(RigCaseData* eclipseCase, + size_t gridIndex, + RifReaderInterface::PorosityModelResultType porosityModel, + size_t timeStepIndex, + size_t resultIndex); };