diff --git a/ApplicationLibCode/CMakeLists.txt b/ApplicationLibCode/CMakeLists.txt index db154fae86..422cdafca2 100644 --- a/ApplicationLibCode/CMakeLists.txt +++ b/ApplicationLibCode/CMakeLists.txt @@ -121,6 +121,7 @@ include_directories( ${CMAKE_CURRENT_SOURCE_DIR}/ReservoirDataModel ${CMAKE_CURRENT_SOURCE_DIR}/ReservoirDataModel/Completions ${CMAKE_CURRENT_SOURCE_DIR}/ReservoirDataModel/ResultAccessors + ${CMAKE_CURRENT_SOURCE_DIR}/ReservoirDataModel/ResultCalculators ${CMAKE_CURRENT_SOURCE_DIR}/GeoMech/OdbReader ${CMAKE_CURRENT_SOURCE_DIR}/GeoMech/GeoMechDataModel ${CMAKE_CURRENT_SOURCE_DIR}/GeoMech/GeoMechVisualization @@ -168,6 +169,7 @@ list( ReservoirDataModel/CMakeLists_filesNotToUnitTest.cmake ReservoirDataModel/Completions/CMakeLists_files.cmake ReservoirDataModel/ResultAccessors/CMakeLists_files.cmake + ReservoirDataModel/ResultCalculators/CMakeLists_files.cmake FileInterface/CMakeLists_files.cmake ProjectDataModel/CMakeLists_files.cmake ProjectDataModel/AnalysisPlots/CMakeLists_files.cmake @@ -435,6 +437,7 @@ target_include_directories( ${CMAKE_SOURCE_DIR}/ApplicationLibCode/ProjectDataModel/Intersections ${CMAKE_SOURCE_DIR}/ApplicationLibCode/ReservoirDataModel ${CMAKE_SOURCE_DIR}/ApplicationLibCode/ReservoirDataModel/ResultAccessors + ${CMAKE_SOURCE_DIR}/ApplicationLibCode/ReservoirDataModel/ResultCalculators ${CMAKE_SOURCE_DIR}/ApplicationLibCode/SocketInterface ${CMAKE_SOURCE_DIR}/ApplicationLibCode/UserInterface ) diff --git a/ApplicationLibCode/ReservoirDataModel/ResultCalculators/CMakeLists_files.cmake b/ApplicationLibCode/ReservoirDataModel/ResultCalculators/CMakeLists_files.cmake new file mode 100644 index 0000000000..839a19c187 --- /dev/null +++ b/ApplicationLibCode/ReservoirDataModel/ResultCalculators/CMakeLists_files.cmake @@ -0,0 +1,19 @@ +set(SOURCE_GROUP_HEADER_FILES + ${CMAKE_CURRENT_LIST_DIR}/RigEclipseResultCalculator.h + ${CMAKE_CURRENT_LIST_DIR}/RigSoilResultCalculator.h +) + +set(SOURCE_GROUP_SOURCE_FILES + ${CMAKE_CURRENT_LIST_DIR}/RigEclipseResultCalculator.cpp + ${CMAKE_CURRENT_LIST_DIR}/RigSoilResultCalculator.cpp +) + +list(APPEND CODE_HEADER_FILES ${SOURCE_GROUP_HEADER_FILES}) + +list(APPEND CODE_SOURCE_FILES ${SOURCE_GROUP_SOURCE_FILES}) + +source_group( + "ReservoirDataModel\\ResultCalculators" + FILES ${SOURCE_GROUP_HEADER_FILES} ${SOURCE_GROUP_SOURCE_FILES} + ${CMAKE_CURRENT_LIST_DIR}/CMakeLists_files.cmake +) diff --git a/ApplicationLibCode/ReservoirDataModel/ResultCalculators/RigEclipseResultCalculator.cpp b/ApplicationLibCode/ReservoirDataModel/ResultCalculators/RigEclipseResultCalculator.cpp new file mode 100644 index 0000000000..842598231c --- /dev/null +++ b/ApplicationLibCode/ReservoirDataModel/ResultCalculators/RigEclipseResultCalculator.cpp @@ -0,0 +1,34 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2023- Equinor ASA +// +// 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 "RigEclipseResultCalculator.h" + +//================================================================================================== +/// +//================================================================================================== +RigEclipseResultCalculator::RigEclipseResultCalculator( RigCaseCellResultsData& resultsData ) + : m_resultsData( &resultsData ) +{ +} + +//================================================================================================== +/// +//================================================================================================== +RigEclipseResultCalculator::~RigEclipseResultCalculator() +{ +} diff --git a/ApplicationLibCode/ReservoirDataModel/ResultCalculators/RigEclipseResultCalculator.h b/ApplicationLibCode/ReservoirDataModel/ResultCalculators/RigEclipseResultCalculator.h new file mode 100644 index 0000000000..cd13ae6d89 --- /dev/null +++ b/ApplicationLibCode/ReservoirDataModel/ResultCalculators/RigEclipseResultCalculator.h @@ -0,0 +1,39 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2023- Equinor ASA +// +// 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 + +class RigCaseCellResultsData; +class RigEclipseResultAddress; + +//================================================================================================== +/// +//================================================================================================== +class RigEclipseResultCalculator +{ +public: + RigEclipseResultCalculator( RigCaseCellResultsData& resultsData ); + virtual ~RigEclipseResultCalculator(); + virtual bool isMatching( const RigEclipseResultAddress& resVarAddr ) const = 0; + virtual void calculate( const RigEclipseResultAddress& resVarAddr, size_t timeStepIndex ) = 0; + +protected: + RigCaseCellResultsData* m_resultsData; +}; diff --git a/ApplicationLibCode/ReservoirDataModel/ResultCalculators/RigSoilResultCalculator.cpp b/ApplicationLibCode/ReservoirDataModel/ResultCalculators/RigSoilResultCalculator.cpp new file mode 100644 index 0000000000..d3697cc879 --- /dev/null +++ b/ApplicationLibCode/ReservoirDataModel/ResultCalculators/RigSoilResultCalculator.cpp @@ -0,0 +1,169 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2023- Equinor ASA +// +// 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 "RigSoilResultCalculator.h" +#include "RigCaseCellResultsData.h" +#include "RigEclipseResultInfo.h" + +#include "RiaResultNames.h" + +//================================================================================================== +/// +//================================================================================================== +RigSoilResultCalculator::RigSoilResultCalculator( RigCaseCellResultsData& resultsData ) + : RigEclipseResultCalculator( resultsData ) +{ +} + +//================================================================================================== +/// +//================================================================================================== +RigSoilResultCalculator::~RigSoilResultCalculator() +{ +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +bool RigSoilResultCalculator::isMatching( const RigEclipseResultAddress& resVarAddr ) const +{ + return resVarAddr.resultName() == RiaResultNames::soil() && resVarAddr.resultCatType() == RiaDefines::ResultCatType::DYNAMIC_NATIVE; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RigSoilResultCalculator::calculate( const RigEclipseResultAddress& resVarAddr, size_t timeStepIndex ) +{ + // Compute SGAS based on SWAT if the simulation contains no oil + m_resultsData->testAndComputeSgasForTimeStep( timeStepIndex ); + + RigEclipseResultAddress SWATAddr( RiaDefines::ResultCatType::DYNAMIC_NATIVE, RiaResultNames::swat() ); + RigEclipseResultAddress SGASAddr( RiaDefines::ResultCatType::DYNAMIC_NATIVE, RiaResultNames::sgas() ); + RigEclipseResultAddress SSOLAddr( RiaDefines::ResultCatType::DYNAMIC_NATIVE, "SSOL" ); + + size_t scalarIndexSWAT = + m_resultsData->findOrLoadKnownScalarResultForTimeStep( RigEclipseResultAddress( RiaDefines::ResultCatType::DYNAMIC_NATIVE, + RiaResultNames::swat() ), + timeStepIndex ); + size_t scalarIndexSGAS = + m_resultsData->findOrLoadKnownScalarResultForTimeStep( RigEclipseResultAddress( RiaDefines::ResultCatType::DYNAMIC_NATIVE, + RiaResultNames::sgas() ), + timeStepIndex ); + size_t scalarIndexSSOL = + m_resultsData->findOrLoadKnownScalarResultForTimeStep( RigEclipseResultAddress( RiaDefines::ResultCatType::DYNAMIC_NATIVE, "SSOL" ), + timeStepIndex ); + + // Early exit if none of SWAT or SGAS is present + if ( scalarIndexSWAT == cvf::UNDEFINED_SIZE_T && scalarIndexSGAS == cvf::UNDEFINED_SIZE_T ) + { + return; + } + + size_t soilResultValueCount = 0; + size_t soilTimeStepCount = 0; + + if ( scalarIndexSWAT != cvf::UNDEFINED_SIZE_T ) + { + const std::vector& swatForTimeStep = m_resultsData->cellScalarResults( SWATAddr, timeStepIndex ); + if ( swatForTimeStep.size() > 0 ) + { + soilResultValueCount = swatForTimeStep.size(); + soilTimeStepCount = m_resultsData->infoForEachResultIndex()[scalarIndexSWAT].timeStepInfos().size(); + } + } + + if ( scalarIndexSGAS != cvf::UNDEFINED_SIZE_T ) + { + const std::vector& sgasForTimeStep = m_resultsData->cellScalarResults( SGASAddr, timeStepIndex ); + if ( sgasForTimeStep.size() > 0 ) + { + soilResultValueCount = qMax( soilResultValueCount, sgasForTimeStep.size() ); + + size_t sgasTimeStepCount = m_resultsData->infoForEachResultIndex()[scalarIndexSGAS].timeStepInfos().size(); + soilTimeStepCount = qMax( soilTimeStepCount, sgasTimeStepCount ); + } + } + + // Make sure memory is allocated for the new SOIL results + size_t soilResultScalarIndex = m_resultsData->findScalarResultIndexFromAddress( resVarAddr ); + m_resultsData->m_cellScalarResults[soilResultScalarIndex].resize( soilTimeStepCount ); + + if ( m_resultsData->cellScalarResults( resVarAddr, timeStepIndex ).size() > 0 ) + { + // Data is computed and allocated, nothing more to do + return; + } + + m_resultsData->m_cellScalarResults[soilResultScalarIndex][timeStepIndex].resize( soilResultValueCount ); + + const std::vector* swatForTimeStep = nullptr; + const std::vector* sgasForTimeStep = nullptr; + const std::vector* ssolForTimeStep = nullptr; + + if ( scalarIndexSWAT != cvf::UNDEFINED_SIZE_T ) + { + swatForTimeStep = &( m_resultsData->cellScalarResults( SWATAddr, timeStepIndex ) ); + if ( swatForTimeStep->size() == 0 ) + { + swatForTimeStep = nullptr; + } + } + + if ( scalarIndexSGAS != cvf::UNDEFINED_SIZE_T ) + { + sgasForTimeStep = &( m_resultsData->cellScalarResults( SGASAddr, timeStepIndex ) ); + if ( sgasForTimeStep->size() == 0 ) + { + sgasForTimeStep = nullptr; + } + } + + if ( scalarIndexSSOL != cvf::UNDEFINED_SIZE_T ) + { + ssolForTimeStep = &( m_resultsData->cellScalarResults( SSOLAddr, timeStepIndex ) ); + if ( ssolForTimeStep->size() == 0 ) + { + ssolForTimeStep = nullptr; + } + } + + std::vector* soilForTimeStep = m_resultsData->modifiableCellScalarResult( resVarAddr, timeStepIndex ); + +#pragma omp parallel for + for ( int idx = 0; idx < static_cast( soilResultValueCount ); idx++ ) + { + double soilValue = 1.0; + if ( sgasForTimeStep ) + { + soilValue -= sgasForTimeStep->at( idx ); + } + + if ( swatForTimeStep ) + { + soilValue -= swatForTimeStep->at( idx ); + } + + if ( ssolForTimeStep ) + { + soilValue -= ssolForTimeStep->at( idx ); + } + + soilForTimeStep->at( idx ) = soilValue; + } +} diff --git a/ApplicationLibCode/ReservoirDataModel/ResultCalculators/RigSoilResultCalculator.h b/ApplicationLibCode/ReservoirDataModel/ResultCalculators/RigSoilResultCalculator.h new file mode 100644 index 0000000000..5575510077 --- /dev/null +++ b/ApplicationLibCode/ReservoirDataModel/ResultCalculators/RigSoilResultCalculator.h @@ -0,0 +1,38 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2023- Equinor ASA +// +// 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 + +#include "RigEclipseResultCalculator.h" + +class RigCaseCellResultsData; +class RigEclipseResultAddress; + +//================================================================================================== +/// +//================================================================================================== +class RigSoilResultCalculator : public RigEclipseResultCalculator +{ +public: + RigSoilResultCalculator( RigCaseCellResultsData& resultsData ); + ~RigSoilResultCalculator() override; + bool isMatching( const RigEclipseResultAddress& resVarAddr ) const override; + void calculate( const RigEclipseResultAddress& resVarAddr, size_t timeStepIndex ) override; +}; diff --git a/ApplicationLibCode/ReservoirDataModel/RigCaseCellResultsData.cpp b/ApplicationLibCode/ReservoirDataModel/RigCaseCellResultsData.cpp index 42ce47660f..51575070b0 100644 --- a/ApplicationLibCode/ReservoirDataModel/RigCaseCellResultsData.cpp +++ b/ApplicationLibCode/ReservoirDataModel/RigCaseCellResultsData.cpp @@ -35,6 +35,7 @@ #include "RigEclipseResultInfo.h" #include "RigFormationNames.h" #include "RigMainGrid.h" +#include "RigSoilResultCalculator.h" #include "RigStatisticsDataCache.h" #include "RigStatisticsMath.h" @@ -801,7 +802,7 @@ const std::vector* RigCaseCellResultsData::getResultIndexableStaticResul //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -const std::vector& RigCaseCellResultsData::infoForEachResultIndex() +const std::vector& RigCaseCellResultsData::infoForEachResultIndex() const { return m_resultInfos; } @@ -1585,120 +1586,9 @@ size_t RigCaseCellResultsData::findOrLoadKnownScalarResultForTimeStep( const Rig //-------------------------------------------------------------------------------------------------- void RigCaseCellResultsData::computeSOILForTimeStep( size_t timeStepIndex ) { - // Compute SGAS based on SWAT if the simulation contains no oil - testAndComputeSgasForTimeStep( timeStepIndex ); - - RigEclipseResultAddress SWATAddr( RiaDefines::ResultCatType::DYNAMIC_NATIVE, RiaResultNames::swat() ); - RigEclipseResultAddress SGASAddr( RiaDefines::ResultCatType::DYNAMIC_NATIVE, RiaResultNames::sgas() ); - RigEclipseResultAddress SSOLAddr( RiaDefines::ResultCatType::DYNAMIC_NATIVE, "SSOL" ); - - size_t scalarIndexSWAT = - findOrLoadKnownScalarResultForTimeStep( RigEclipseResultAddress( RiaDefines::ResultCatType::DYNAMIC_NATIVE, RiaResultNames::swat() ), - timeStepIndex ); - size_t scalarIndexSGAS = - findOrLoadKnownScalarResultForTimeStep( RigEclipseResultAddress( RiaDefines::ResultCatType::DYNAMIC_NATIVE, RiaResultNames::sgas() ), - timeStepIndex ); - size_t scalarIndexSSOL = - findOrLoadKnownScalarResultForTimeStep( RigEclipseResultAddress( RiaDefines::ResultCatType::DYNAMIC_NATIVE, "SSOL" ), timeStepIndex ); - - // Early exit if none of SWAT or SGAS is present - if ( scalarIndexSWAT == cvf::UNDEFINED_SIZE_T && scalarIndexSGAS == cvf::UNDEFINED_SIZE_T ) - { - return; - } - - size_t soilResultValueCount = 0; - size_t soilTimeStepCount = 0; - - if ( scalarIndexSWAT != cvf::UNDEFINED_SIZE_T ) - { - const std::vector& swatForTimeStep = this->cellScalarResults( SWATAddr, timeStepIndex ); - if ( swatForTimeStep.size() > 0 ) - { - soilResultValueCount = swatForTimeStep.size(); - soilTimeStepCount = this->infoForEachResultIndex()[scalarIndexSWAT].timeStepInfos().size(); - } - } - - if ( scalarIndexSGAS != cvf::UNDEFINED_SIZE_T ) - { - const std::vector& sgasForTimeStep = this->cellScalarResults( SGASAddr, timeStepIndex ); - if ( sgasForTimeStep.size() > 0 ) - { - soilResultValueCount = qMax( soilResultValueCount, sgasForTimeStep.size() ); - - size_t sgasTimeStepCount = this->infoForEachResultIndex()[scalarIndexSGAS].timeStepInfos().size(); - soilTimeStepCount = qMax( soilTimeStepCount, sgasTimeStepCount ); - } - } - - // Make sure memory is allocated for the new SOIL results RigEclipseResultAddress SOILAddr( RiaDefines::ResultCatType::DYNAMIC_NATIVE, RiaResultNames::soil() ); - size_t soilResultScalarIndex = this->findScalarResultIndexFromAddress( SOILAddr ); - m_cellScalarResults[soilResultScalarIndex].resize( soilTimeStepCount ); - - if ( this->cellScalarResults( SOILAddr, timeStepIndex ).size() > 0 ) - { - // Data is computed and allocated, nothing more to do - return; - } - - m_cellScalarResults[soilResultScalarIndex][timeStepIndex].resize( soilResultValueCount ); - - const std::vector* swatForTimeStep = nullptr; - const std::vector* sgasForTimeStep = nullptr; - const std::vector* ssolForTimeStep = nullptr; - - if ( scalarIndexSWAT != cvf::UNDEFINED_SIZE_T ) - { - swatForTimeStep = &( this->cellScalarResults( SWATAddr, timeStepIndex ) ); - if ( swatForTimeStep->size() == 0 ) - { - swatForTimeStep = nullptr; - } - } - - if ( scalarIndexSGAS != cvf::UNDEFINED_SIZE_T ) - { - sgasForTimeStep = &( this->cellScalarResults( SGASAddr, timeStepIndex ) ); - if ( sgasForTimeStep->size() == 0 ) - { - sgasForTimeStep = nullptr; - } - } - - if ( scalarIndexSSOL != cvf::UNDEFINED_SIZE_T ) - { - ssolForTimeStep = &( this->cellScalarResults( SSOLAddr, timeStepIndex ) ); - if ( ssolForTimeStep->size() == 0 ) - { - ssolForTimeStep = nullptr; - } - } - - std::vector* soilForTimeStep = this->modifiableCellScalarResult( SOILAddr, timeStepIndex ); - -#pragma omp parallel for - for ( int idx = 0; idx < static_cast( soilResultValueCount ); idx++ ) - { - double soilValue = 1.0; - if ( sgasForTimeStep ) - { - soilValue -= sgasForTimeStep->at( idx ); - } - - if ( swatForTimeStep ) - { - soilValue -= swatForTimeStep->at( idx ); - } - - if ( ssolForTimeStep ) - { - soilValue -= ssolForTimeStep->at( idx ); - } - - soilForTimeStep->at( idx ) = soilValue; - } + RigSoilResultCalculator calculator( *this ); + calculator.calculate( SOILAddr, timeStepIndex ); } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ReservoirDataModel/RigCaseCellResultsData.h b/ApplicationLibCode/ReservoirDataModel/RigCaseCellResultsData.h index c3000629b3..ea4c5a9f57 100644 --- a/ApplicationLibCode/ReservoirDataModel/RigCaseCellResultsData.h +++ b/ApplicationLibCode/ReservoirDataModel/RigCaseCellResultsData.h @@ -153,6 +153,7 @@ private: // Add a friend class, as this way of loading data requires careful management of state // All other data access assumes all time steps are loaded at the same time friend class RimEclipseStatisticsCaseEvaluator; + friend class RigSoilResultCalculator; size_t findOrLoadKnownScalarResultForTimeStep( const RigEclipseResultAddress& resVarAddr, size_t timeStepIndex ); size_t findOrCreateScalarResultIndex( const RigEclipseResultAddress& resVarAddr, bool needsToBeStored ); @@ -161,7 +162,7 @@ private: size_t addStaticScalarResult( RiaDefines::ResultCatType type, const QString& resultName, bool needsToBeStored, size_t resultValueCount ); - const std::vector& infoForEachResultIndex(); + const std::vector& infoForEachResultIndex() const; size_t resultCount() const; bool mustBeCalculated( size_t scalarResultIndex ) const; diff --git a/ApplicationLibCode/ReservoirDataModel/RigEclipseResultInfo.cpp b/ApplicationLibCode/ReservoirDataModel/RigEclipseResultInfo.cpp index 17d8273180..3dc5e05891 100644 --- a/ApplicationLibCode/ReservoirDataModel/RigEclipseResultInfo.cpp +++ b/ApplicationLibCode/ReservoirDataModel/RigEclipseResultInfo.cpp @@ -128,6 +128,14 @@ size_t RigEclipseResultInfo::gridScalarResultIndex() const return m_gridScalarResultIndex; } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +const RigEclipseResultAddress& RigEclipseResultInfo::eclipseResultAddress() const +{ + return m_resultAddress; +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ReservoirDataModel/RigEclipseResultInfo.h b/ApplicationLibCode/ReservoirDataModel/RigEclipseResultInfo.h index 9f8062e60a..da76338ed5 100644 --- a/ApplicationLibCode/ReservoirDataModel/RigEclipseResultInfo.h +++ b/ApplicationLibCode/ReservoirDataModel/RigEclipseResultInfo.h @@ -65,7 +65,8 @@ public: bool operator<( const RigEclipseResultInfo& rhs ) const; - const RigEclipseResultAddress& eclipseResultAddress() const { return m_resultAddress; } + const RigEclipseResultAddress& eclipseResultAddress() const; + const std::vector& timeStepInfos() const; private: friend class RigCaseCellResultsData; @@ -75,8 +76,7 @@ private: void setMustBeCalculated( bool mustCalculate ); size_t gridScalarResultIndex() const; - const std::vector& timeStepInfos() const; - void setTimeStepInfos( const std::vector& timeSteps ); + void setTimeStepInfos( const std::vector& timeSteps ); RigEclipseResultAddress m_resultAddress; size_t m_gridScalarResultIndex;