From a5e926ce1b123ef84febddbfaa5b6f255e4bd165 Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Fri, 8 Aug 2014 08:37:56 +0200 Subject: [PATCH] Added RigResultModifier and use this object for result modifications --- .../RimStatisticsCaseEvaluator.cpp | 16 ++- .../RimStatisticsCaseEvaluator.h | 1 - .../ReservoirDataModel/CMakeLists_files.cmake | 2 + .../RigResultAccessorFactory.cpp | 2 +- .../ReservoirDataModel/RigResultModifier.h | 3 + .../RigResultModifierFactory.cpp | 102 ++++++++++++++++++ .../RigResultModifierFactory.h | 44 ++++++++ .../RiaPropertyDataCommands.cpp | 35 +++--- 8 files changed, 174 insertions(+), 31 deletions(-) create mode 100644 ApplicationCode/ReservoirDataModel/RigResultModifierFactory.cpp create mode 100644 ApplicationCode/ReservoirDataModel/RigResultModifierFactory.h diff --git a/ApplicationCode/ProjectDataModel/RimStatisticsCaseEvaluator.cpp b/ApplicationCode/ProjectDataModel/RimStatisticsCaseEvaluator.cpp index ae6f742925..5693b69ec9 100644 --- a/ApplicationCode/ProjectDataModel/RimStatisticsCaseEvaluator.cpp +++ b/ApplicationCode/ProjectDataModel/RimStatisticsCaseEvaluator.cpp @@ -20,7 +20,10 @@ #include "RigCaseCellResultsData.h" #include "RigCaseData.h" +#include "RigResultModifier.h" +#include "RigResultModifierFactory.h" #include "RigStatisticsMath.h" + #include "RimReservoirCellResultsStorage.h" #include "cafProgressInfo.h" @@ -204,7 +207,7 @@ void RimStatisticsCaseEvaluator::evaluateForResults(const QList& result // Build data access objects for destination scalar results // Find the created result container, if any, and put its resultAccessor into the enum indexed destination collection - cvf::Collection destinationDataAccessList; + cvf::Collection destinationDataAccessList; std::vector statisticalResultNames(STAT_PARAM_COUNT); statisticalResultNames[MIN] = createResultNameMin(resultName); @@ -219,14 +222,9 @@ void RimStatisticsCaseEvaluator::evaluateForResults(const QList& result for (size_t stIdx = 0; stIdx < statisticalResultNames.size(); ++stIdx) { size_t scalarResultIndex = destCellResultsData->findScalarResultIndex(resultType, statisticalResultNames[stIdx]); - if (scalarResultIndex != cvf::UNDEFINED_SIZE_T) - { - destinationDataAccessList.push_back(m_destinationCase->resultAccessor(grid, poroModel, dataAccessTimeStepIndex, scalarResultIndex).p()); - } - else - { - destinationDataAccessList.push_back(NULL); - } + + cvf::ref resultModifier = RigResultModifierFactory::createResultModifier(m_destinationCase, grid->gridIndex(), poroModel, dataAccessTimeStepIndex, scalarResultIndex); + destinationDataAccessList.push_back(resultModifier.p()); } std::vector statParams(STAT_PARAM_COUNT, HUGE_VAL); diff --git a/ApplicationCode/ProjectDataModel/RimStatisticsCaseEvaluator.h b/ApplicationCode/ProjectDataModel/RimStatisticsCaseEvaluator.h index 906ad17c7d..6e3392ef7a 100644 --- a/ApplicationCode/ProjectDataModel/RimStatisticsCaseEvaluator.h +++ b/ApplicationCode/ProjectDataModel/RimStatisticsCaseEvaluator.h @@ -24,7 +24,6 @@ #include #include -#include class RimCase; class RigCaseData; diff --git a/ApplicationCode/ReservoirDataModel/CMakeLists_files.cmake b/ApplicationCode/ReservoirDataModel/CMakeLists_files.cmake index 1da15926a7..950bbb3f0d 100644 --- a/ApplicationCode/ReservoirDataModel/CMakeLists_files.cmake +++ b/ApplicationCode/ReservoirDataModel/CMakeLists_files.cmake @@ -17,6 +17,7 @@ ${CEE_CURRENT_LIST_DIR}RigActiveCellsResultAccessor.h ${CEE_CURRENT_LIST_DIR}RigCellEdgeResultAccessor.h ${CEE_CURRENT_LIST_DIR}RigCombTransResultAccessor.h ${CEE_CURRENT_LIST_DIR}RigResultModifier.h +${CEE_CURRENT_LIST_DIR}RigResultModifierFactory.h ${CEE_CURRENT_LIST_DIR}RigLocalGrid.h ${CEE_CURRENT_LIST_DIR}RigMainGrid.h ${CEE_CURRENT_LIST_DIR}RigReservoirBuilderMock.h @@ -42,6 +43,7 @@ ${CEE_CURRENT_LIST_DIR}RigAllGridCellsResultAccessor.cpp ${CEE_CURRENT_LIST_DIR}RigActiveCellsResultAccessor.cpp ${CEE_CURRENT_LIST_DIR}RigCellEdgeResultAccessor.cpp ${CEE_CURRENT_LIST_DIR}RigCombTransResultAccessor.cpp +${CEE_CURRENT_LIST_DIR}RigResultModifierFactory.cpp ${CEE_CURRENT_LIST_DIR}RigLocalGrid.cpp ${CEE_CURRENT_LIST_DIR}RigMainGrid.cpp ${CEE_CURRENT_LIST_DIR}RigReservoirBuilderMock.cpp diff --git a/ApplicationCode/ReservoirDataModel/RigResultAccessorFactory.cpp b/ApplicationCode/ReservoirDataModel/RigResultAccessorFactory.cpp index 4b45c963b0..41c30f3fc7 100644 --- a/ApplicationCode/ReservoirDataModel/RigResultAccessorFactory.cpp +++ b/ApplicationCode/ReservoirDataModel/RigResultAccessorFactory.cpp @@ -37,7 +37,7 @@ //-------------------------------------------------------------------------------------------------- -/// +/// This function must be harmonized with RigResultModifierFactory::createResultModifier() //-------------------------------------------------------------------------------------------------- cvf::ref RigResultAccessorFactory::createNativeResultAccessor(RigCaseData* eclipseCase, size_t gridIndex, diff --git a/ApplicationCode/ReservoirDataModel/RigResultModifier.h b/ApplicationCode/ReservoirDataModel/RigResultModifier.h index 3ab82e3462..4c9d8d7dc1 100644 --- a/ApplicationCode/ReservoirDataModel/RigResultModifier.h +++ b/ApplicationCode/ReservoirDataModel/RigResultModifier.h @@ -18,6 +18,9 @@ #pragma once +#include "RigGridBase.h" +#include "RigActiveCellInfo.h" + //================================================================================================== /// diff --git a/ApplicationCode/ReservoirDataModel/RigResultModifierFactory.cpp b/ApplicationCode/ReservoirDataModel/RigResultModifierFactory.cpp new file mode 100644 index 0000000000..80efe51c5a --- /dev/null +++ b/ApplicationCode/ReservoirDataModel/RigResultModifierFactory.cpp @@ -0,0 +1,102 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) Statoil ASA, Ceetron Solutions AS +// +// 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 +// for more details. +// +///////////////////////////////////////////////////////////////////////////////// + +#include "RigResultModifierFactory.h" + +#include "RigCaseCellResultsData.h" +#include "RigCaseData.h" +#include "RigResultModifier.h" + +#include + + +//-------------------------------------------------------------------------------------------------- +/// This function must be harmonized with RigResultAccessorFactory::createNativeResultAccessor() +//-------------------------------------------------------------------------------------------------- +cvf::ref RigResultModifierFactory::createResultModifier(RigCaseData* eclipseCase, + size_t gridIndex, + RifReaderInterface::PorosityModelResultType porosityModel, + size_t timeStepIndex, + QString& uiResultName) +{ + CVF_ASSERT(gridIndex < eclipseCase->gridCount()); + CVF_ASSERT(eclipseCase); + CVF_ASSERT(eclipseCase->results(porosityModel)); + CVF_ASSERT(eclipseCase->activeCellInfo(porosityModel)); + + if (!eclipseCase || !eclipseCase->results(porosityModel) || !eclipseCase->activeCellInfo(porosityModel)) + { + return NULL; + } + + size_t scalarSetIndex = eclipseCase->results(porosityModel)->findScalarResultIndex(uiResultName); + + return createResultModifier(eclipseCase, gridIndex, porosityModel, timeStepIndex, scalarSetIndex); +} + + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +cvf::ref RigResultModifierFactory::createResultModifier(RigCaseData* eclipseCase, + size_t gridIndex, + RifReaderInterface::PorosityModelResultType porosityModel, + size_t timeStepIndex, size_t scalarResultIndex) +{ + 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; + } + + if (scalarResultIndex == cvf::UNDEFINED_SIZE_T) + { + return NULL; + } + + std::vector< std::vector >& scalarSetResults = eclipseCase->results(porosityModel)->cellScalarResults(scalarResultIndex); + + if (timeStepIndex >= scalarSetResults.size()) + { + return NULL; + } + + std::vector* resultValues = NULL; + if (timeStepIndex < scalarSetResults.size()) + { + resultValues = &(scalarSetResults[timeStepIndex]); + } + + bool useGlobalActiveIndex = eclipseCase->results(porosityModel)->isUsingGlobalActiveIndex(scalarResultIndex); + if (useGlobalActiveIndex) + { + cvf::ref object = new RigActiveCellsResultModifier(grid, resultValues, eclipseCase->activeCellInfo(porosityModel)); + return object; + } + else + { + cvf::ref object = new RigAllGridCellsResultModifier(grid, resultValues); + return object; + } +} diff --git a/ApplicationCode/ReservoirDataModel/RigResultModifierFactory.h b/ApplicationCode/ReservoirDataModel/RigResultModifierFactory.h new file mode 100644 index 0000000000..18f7dbd3f3 --- /dev/null +++ b/ApplicationCode/ReservoirDataModel/RigResultModifierFactory.h @@ -0,0 +1,44 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) Statoil ASA, Ceetron Solutions AS +// +// 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 +// for more details. +// +///////////////////////////////////////////////////////////////////////////////// + +#pragma once + +#include "RifReaderInterface.h" + +class RigCaseData; +class RigResultModifier; + +class RigResultModifierFactory +{ +public: + static cvf::ref + createResultModifier(RigCaseData* eclipseCase, + size_t gridIndex, + RifReaderInterface::PorosityModelResultType porosityModel, + size_t timeStepIndex, + QString& uiResultName); + + static cvf::ref + createResultModifier(RigCaseData* eclipseCase, + size_t gridIndex, + RifReaderInterface::PorosityModelResultType porosityModel, + size_t timeStepIndex, + size_t scalarResultIndex); +}; + + diff --git a/ApplicationCode/SocketInterface/RiaPropertyDataCommands.cpp b/ApplicationCode/SocketInterface/RiaPropertyDataCommands.cpp index 01073c5cc8..101f9edcea 100644 --- a/ApplicationCode/SocketInterface/RiaPropertyDataCommands.cpp +++ b/ApplicationCode/SocketInterface/RiaPropertyDataCommands.cpp @@ -16,34 +16,31 @@ ///////////////////////////////////////////////////////////////////////////////// #include "RiaStdInclude.h" + #include "RiaSocketCommand.h" +#include "RiaSocketDataTransfer.h" #include "RiaSocketServer.h" #include "RiaSocketTools.h" -#include "RiuMainWindow.h" -#include "RiuProcessMonitor.h" +#include "RifReaderInterface.h" -#include "RigCaseData.h" +#include "RigActiveCellInfo.h" #include "RigCaseCellResultsData.h" +#include "RigCaseData.h" +#include "RigResultModifier.h" +#include "RigResultModifierFactory.h" -#include "RimReservoirCellResultsStorage.h" #include "RimCase.h" #include "RimInputCase.h" +#include "RimInputProperty.h" #include "RimInputPropertyCollection.h" -#include "RimUiTreeModelPdm.h" +#include "RimReservoirCellResultsStorage.h" #include "RimReservoirView.h" #include "RimResultSlot.h" -#include "RimCellEdgeResultSlot.h" -#include "RimCellRangeFilterCollection.h" -#include "RimCellPropertyFilterCollection.h" -#include "RimWellCollection.h" -#include "Rim3dOverlayInfoConfig.h" +#include "RimUiTreeModelPdm.h" -#include -#include "RiaApplication.h" -#include "RiaPreferences.h" -#include "RiaSocketDataTransfer.h" -#include "RimInputProperty.h" +#include "RiuMainWindow.h" +#include "RiuProcessMonitor.h" //-------------------------------------------------------------------------------------------------- @@ -934,14 +931,12 @@ public: return true; } - cvf::ref cellCenterDataAccessObject = - m_currentReservoir->reservoirData()->resultAccessor(grid, m_porosityModelEnum, m_requestedTimesteps[m_currentTimeStepNumberToRead], m_currentScalarIndex); - - if (!cellCenterDataAccessObject.isNull()) + cvf::ref resultModifier = RigResultModifierFactory::createResultModifier(m_currentReservoir->reservoirData(), grid->gridIndex(), m_porosityModelEnum, m_requestedTimesteps[m_currentTimeStepNumberToRead], m_currentScalarIndex); + if (!resultModifier.isNull()) { for (size_t cellIdx = 0; static_cast(cellIdx) < cellCountFromOctave; cellIdx++) { - cellCenterDataAccessObject->setCellScalar(cellIdx, doubleValues[cellIdx]); + resultModifier->setCellScalar(cellIdx, doubleValues[cellIdx]); } }