From e88e43610821f0cacc76d8fe09371373d2f5de5e Mon Sep 17 00:00:00 2001 From: Kristian Bendiksen Date: Fri, 12 Dec 2025 16:33:12 +0100 Subject: [PATCH] Refactor: Modernize RigEclipseCaseData grids api. --- .../FileInterface/RifReaderEclipseWell.cpp | 3 +- .../RivReservoirPartMgr.cpp | 3 +- .../RivReservoirViewPartMgr.cpp | 9 +- .../RimStreamlineInViewCollection.cpp | 3 +- .../ReservoirDataModel/RigEclipseCaseData.cpp | 88 +++++-------------- .../ReservoirDataModel/RigEclipseCaseData.h | 16 ++-- .../SocketInterface/RiaCaseInfoCommands.cpp | 3 +- .../SocketInterface/RiaWellDataCommands.cpp | 3 +- .../RiaGrpcSimulationWellService.cpp | 3 +- 9 files changed, 40 insertions(+), 91 deletions(-) diff --git a/ApplicationLibCode/FileInterface/RifReaderEclipseWell.cpp b/ApplicationLibCode/FileInterface/RifReaderEclipseWell.cpp index 122725976e..6f032bcd25 100644 --- a/ApplicationLibCode/FileInterface/RifReaderEclipseWell.cpp +++ b/ApplicationLibCode/FileInterface/RifReaderEclipseWell.cpp @@ -474,8 +474,7 @@ void RifReaderEclipseWell::readWellCells( RifEclipseRestartDataAccess* restartDa sameCount = true; } - std::vector grids; - eclipseCaseData->allGrids( &grids ); + auto grids = eclipseCaseData->allGrids(); cvf::Collection wells; caf::ProgressInfo progress( well_info_get_num_wells( ert_well_info ), "" ); diff --git a/ApplicationLibCode/ModelVisualization/RivReservoirPartMgr.cpp b/ApplicationLibCode/ModelVisualization/RivReservoirPartMgr.cpp index 6d7381bf2f..77c5580abe 100644 --- a/ApplicationLibCode/ModelVisualization/RivReservoirPartMgr.cpp +++ b/ApplicationLibCode/ModelVisualization/RivReservoirPartMgr.cpp @@ -41,8 +41,7 @@ void RivReservoirPartMgr::clearAndSetReservoir( RivCellSetEnum cellSetType, RimE { RigEclipseCaseData* eclipseCaseData = eclipseCase->eclipseCaseData(); - std::vector grids; - eclipseCaseData->allGrids( &grids ); + auto grids = eclipseCaseData->allGrids(); for ( size_t i = 0; i < grids.size(); ++i ) { m_allGrids.push_back( new RivGridPartMgr( cellSetType, eclipseCase, grids[i], i ) ); diff --git a/ApplicationLibCode/ModelVisualization/RivReservoirViewPartMgr.cpp b/ApplicationLibCode/ModelVisualization/RivReservoirViewPartMgr.cpp index 4e290e8e6f..42590a3708 100644 --- a/ApplicationLibCode/ModelVisualization/RivReservoirViewPartMgr.cpp +++ b/ApplicationLibCode/ModelVisualization/RivReservoirViewPartMgr.cpp @@ -266,8 +266,7 @@ void RivReservoirViewPartMgr::createGeometry( RivCellSetEnum geometryType ) m_geometries[geometryType].clearAndSetReservoir( geometryType, m_reservoirView->eclipseCase(), m_reservoirView ); m_geometries[geometryType].setTransform( m_scaleTransform.p() ); - std::vector grids; - res->allGrids( &grids ); + auto grids = res->allGrids(); for ( size_t i = 0; i < grids.size(); ++i ) { @@ -431,8 +430,7 @@ void RivReservoirViewPartMgr::createPropertyFilteredNoneWellCellGeometry( size_t m_propFilteredGeometryFrames[frameIndex]->clearAndSetReservoir( PROPERTY_FILTERED, m_reservoirView->eclipseCase(), m_reservoirView ); m_propFilteredGeometryFrames[frameIndex]->setTransform( m_scaleTransform.p() ); - std::vector grids; - res->allGrids( &grids ); + auto grids = res->allGrids(); bool hasActiveCellFilters = m_reservoirView->cellFilterCollection()->hasActiveFilters(); bool hasVisibleWellCells = m_reservoirView->wellCollection()->hasVisibleWellCells(); @@ -513,8 +511,7 @@ void RivReservoirViewPartMgr::createPropertyFilteredWellGeometry( size_t frameIn m_reservoirView ); m_propFilteredWellGeometryFrames[frameIndex]->setTransform( m_scaleTransform.p() ); - std::vector grids; - res->allGrids( &grids ); + auto grids = res->allGrids(); bool hasActiveCellFilters = m_reservoirView->cellFilterCollection()->hasActiveFilters(); bool hasVisibleWellCells = m_reservoirView->wellCollection()->hasVisibleWellCells(); diff --git a/ApplicationLibCode/ProjectDataModel/Streamlines/RimStreamlineInViewCollection.cpp b/ApplicationLibCode/ProjectDataModel/Streamlines/RimStreamlineInViewCollection.cpp index 13c3d3b5db..377e9c61ce 100644 --- a/ApplicationLibCode/ProjectDataModel/Streamlines/RimStreamlineInViewCollection.cpp +++ b/ApplicationLibCode/ProjectDataModel/Streamlines/RimStreamlineInViewCollection.cpp @@ -393,8 +393,7 @@ void RimStreamlineInViewCollection::findStartCells( int // get the simulation wells const cvf::Collection& simWellData = eclipseCase()->eclipseCaseData()->wellResults(); - std::vector grids; - eclipseCase()->eclipseCaseData()->allGrids( &grids ); + auto grids = eclipseCase()->eclipseCaseData()->allGrids(); // go through all sim wells and find all open producer and injector cells for the given timestep for ( auto& swdata : simWellData ) diff --git a/ApplicationLibCode/ReservoirDataModel/RigEclipseCaseData.cpp b/ApplicationLibCode/ReservoirDataModel/RigEclipseCaseData.cpp index c3a8893c79..dd5216eb7c 100644 --- a/ApplicationLibCode/ReservoirDataModel/RigEclipseCaseData.cpp +++ b/ApplicationLibCode/ReservoirDataModel/RigEclipseCaseData.cpp @@ -37,8 +37,6 @@ #include "Well/RigWellResultFrame.h" #include "Well/RigWellResultPoint.h" -#include - #include //-------------------------------------------------------------------------------------------------- @@ -99,39 +97,33 @@ void RigEclipseCaseData::setMainGrid( std::shared_ptr mainGrid ) //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RigEclipseCaseData::allGrids( std::vector* grids ) +std::vector RigEclipseCaseData::allGrids() { - CVF_ASSERT( grids ); + if ( !m_mainGrid ) return {}; - if ( !m_mainGrid ) + std::vector grids; + for ( size_t i = 0; i < m_mainGrid->gridCount(); i++ ) { - return; + grids.push_back( m_mainGrid->gridByIndex( i ) ); } - size_t i; - for ( i = 0; i < m_mainGrid->gridCount(); i++ ) - { - grids->push_back( m_mainGrid->gridByIndex( i ) ); - } + return grids; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RigEclipseCaseData::allGrids( std::vector* grids ) const +std::vector RigEclipseCaseData::allGrids() const { - CVF_ASSERT( grids ); + if ( !m_mainGrid ) return {}; - if ( !m_mainGrid ) + std::vector grids; + for ( size_t i = 0; i < m_mainGrid->gridCount(); i++ ) { - return; + grids.push_back( m_mainGrid->gridByIndex( i ) ); } - size_t i; - for ( i = 0; i < m_mainGrid->gridCount(); i++ ) - { - grids->push_back( m_mainGrid->gridByIndex( i ) ); - } + return grids; } //-------------------------------------------------------------------------------------------------- @@ -167,12 +159,12 @@ const RigGridBase* RigEclipseCaseData::grid( const QString& gridName ) const return m_mainGrid.get(); } - size_t i; - for ( i = 0; i < m_mainGrid->gridCount(); i++ ) + for ( size_t i = 0; i < m_mainGrid->gridCount(); i++ ) { const RigGridBase* grid = m_mainGrid->gridByIndex( i ); if ( QString::fromStdString( grid->gridName() ) == gridName ) return grid; } + return nullptr; } @@ -193,35 +185,13 @@ void RigEclipseCaseData::computeWellCellsPrGrid() // If we have computed this already, return if ( !m_wellCellsInGrid.empty() ) return; - std::vector grids; - allGrids( &grids ); - - // Debug code used to display grid names and grid sizes - /* - size_t totCellCount = 0; - for (auto g : grids) - { - qDebug() << g->gridName().data(); - qDebug() << g->cellCountI() << " " << g->cellCountJ() << " " << g->cellCountK() << " "; - - size_t cellCount = g->cellCount(); - totCellCount += cellCount; - qDebug() << cellCount; - - qDebug() << "\n"; - } - - qDebug() << "\nTotal cell count " << totCellCount; - */ - - size_t gIdx; + auto grids = allGrids(); // Allocate and initialize the arrays - m_wellCellsInGrid.resize( grids.size() ); m_gridCellToResultWellIndex.resize( grids.size() ); - for ( gIdx = 0; gIdx < grids.size(); ++gIdx ) + for ( size_t gIdx = 0; gIdx < grids.size(); ++gIdx ) { if ( m_wellCellsInGrid[gIdx].isNull() || m_wellCellsInGrid[gIdx]->size() != grids[gIdx]->cellCount() ) { @@ -236,14 +206,10 @@ void RigEclipseCaseData::computeWellCellsPrGrid() } // Fill arrays with data - size_t wIdx; - for ( wIdx = 0; wIdx < m_simWellData.size(); ++wIdx ) + for ( size_t wIdx = 0; wIdx < m_simWellData.size(); ++wIdx ) { - size_t tIdx; - for ( tIdx = 0; tIdx < m_simWellData[wIdx]->m_wellCellsTimeSteps.size(); ++tIdx ) + for ( const RigWellResultFrame& wellCells : m_simWellData[wIdx]->m_wellCellsTimeSteps ) { - RigWellResultFrame& wellCells = m_simWellData[wIdx]->m_wellCellsTimeSteps[tIdx]; - // Well result branches for ( const auto& wellSegment : wellCells.wellResultBranches() ) { @@ -342,10 +308,7 @@ const RigCell& RigEclipseCaseData::cellFromWellResultCell( const RigWellResultPo size_t gridIndex = wellResultPoint.gridIndex(); size_t gridCellIndex = wellResultPoint.cellIndex(); - std::vector grids; - allGrids( &grids ); - - return grids[gridIndex]->cell( gridCellIndex ); + return grid( gridIndex )->cell( gridCellIndex ); } //-------------------------------------------------------------------------------------------------- @@ -363,18 +326,12 @@ bool RigEclipseCaseData::findSharedSourceFace( cvf::StructGridInterface::FaceTyp if ( gridIndex != otherGridIndex ) return false; - std::vector grids; - allGrids( &grids ); - - const RigGridBase* grid = grids[gridIndex]; + const RigGridBase* grid = this->grid( gridIndex ); size_t i, j, k; grid->ijkFromCellIndex( gridCellIndex, &i, &j, &k ); - size_t faceIdx; - for ( faceIdx = 0; faceIdx < 6; faceIdx++ ) + for ( cvf::StructGridInterface::FaceType sourceFace : cvf::StructGridInterface::validFaceTypes() ) { - cvf::StructGridInterface::FaceType sourceFace = static_cast( faceIdx ); - size_t ni, nj, nk; RigGridBase::neighborIJKAtCellFace( i, j, k, sourceFace, &ni, &nj, &nk ); @@ -537,7 +494,8 @@ std::vector //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RigEclipseCaseData::setVirtualPerforationTransmissibilities( std::shared_ptr virtualPerforationTransmissibilities ) +void RigEclipseCaseData::setVirtualPerforationTransmissibilities( + std::shared_ptr virtualPerforationTransmissibilities ) { m_virtualPerforationTransmissibilities = virtualPerforationTransmissibilities; } diff --git a/ApplicationLibCode/ReservoirDataModel/RigEclipseCaseData.h b/ApplicationLibCode/ReservoirDataModel/RigEclipseCaseData.h index 4c8496a867..e912fef5ac 100644 --- a/ApplicationLibCode/ReservoirDataModel/RigEclipseCaseData.h +++ b/ApplicationLibCode/ReservoirDataModel/RigEclipseCaseData.h @@ -68,12 +68,12 @@ public: std::shared_ptr mainGridShared() const { return m_mainGrid; } void setMainGrid( std::shared_ptr mainGrid ); - void allGrids( std::vector* grids ); // To be removed - void allGrids( std::vector* grids ) const; // To be removed - const RigGridBase* grid( size_t index ) const; - RigGridBase* grid( size_t index ); - size_t gridCount() const; - const RigGridBase* grid( const QString& gridName ) const; + [[nodiscard]] std::vector allGrids(); + [[nodiscard]] std::vector allGrids() const; + const RigGridBase* grid( size_t index ) const; + RigGridBase* grid( size_t index ); + size_t gridCount() const; + const RigGridBase* grid( const QString& gridName ) const; std::shared_ptr results( RiaDefines::PorosityModelType porosityModel ); std::shared_ptr results( RiaDefines::PorosityModelType porosityModel ) const; @@ -122,8 +122,8 @@ public: simulationWellBranches( const QString& simWellName, bool includeAllCellCenters, bool useAutoDetectionOfBranches ) const; void setVirtualPerforationTransmissibilities( std::shared_ptr virtualPerforationTransmissibilities ); - const RigVirtualPerforationTransmissibilities* virtualPerforationTransmissibilities() const; - std::shared_ptr virtualPerforationTransmissibilitiesShared(); + const RigVirtualPerforationTransmissibilities* virtualPerforationTransmissibilities() const; + std::shared_ptr virtualPerforationTransmissibilitiesShared(); std::shared_ptr virtualPerforationTransmissibilitiesShared() const; void clearWellCellsInGridCache() { m_wellCellsInGrid.clear(); } diff --git a/ApplicationLibCode/SocketInterface/RiaCaseInfoCommands.cpp b/ApplicationLibCode/SocketInterface/RiaCaseInfoCommands.cpp index d63b12557a..537029490a 100644 --- a/ApplicationLibCode/SocketInterface/RiaCaseInfoCommands.cpp +++ b/ApplicationLibCode/SocketInterface/RiaCaseInfoCommands.cpp @@ -369,8 +369,7 @@ public: if ( rimCase && rimCase->eclipseCaseData() && rimCase->eclipseCaseData()->mainGrid() ) { - std::vector grids; - rimCase->eclipseCaseData()->allGrids( &grids ); + auto grids = rimCase->eclipseCaseData()->allGrids(); quint64 byteCount = grids.size() * 3 * sizeof( quint64 ); socketStream << byteCount; diff --git a/ApplicationLibCode/SocketInterface/RiaWellDataCommands.cpp b/ApplicationLibCode/SocketInterface/RiaWellDataCommands.cpp index d87a753214..1aa4072b76 100644 --- a/ApplicationLibCode/SocketInterface/RiaWellDataCommands.cpp +++ b/ApplicationLibCode/SocketInterface/RiaWellDataCommands.cpp @@ -281,8 +281,7 @@ public: // Fetch results const RigWellResultFrame* wellResFrame = currentWellResult->wellResultFrame( timeStepIdx ); - std::vector grids; - rimCase->eclipseCaseData()->allGrids( &grids ); + auto grids = rimCase->eclipseCaseData()->allGrids(); for ( const auto& wellResultBranch : wellResFrame->wellResultBranches() ) { diff --git a/GrpcInterface/RiaGrpcSimulationWellService.cpp b/GrpcInterface/RiaGrpcSimulationWellService.cpp index dc12d98a21..85e75ec0ea 100644 --- a/GrpcInterface/RiaGrpcSimulationWellService.cpp +++ b/GrpcInterface/RiaGrpcSimulationWellService.cpp @@ -113,8 +113,7 @@ grpc::Status RiaGrpcSimulationWellService::GetSimulationWellCells( grpc::ServerC { // Fetch results const RigWellResultFrame* wellResFrame = currentWellResult->wellResultFrame( tsIdx ); - std::vector grids; - eclipseCase->eclipseCaseData()->allGrids( &grids ); + auto grids = eclipseCase->eclipseCaseData()->allGrids(); for ( size_t bIdx = 0; bIdx < wellResFrame->wellResultBranches().size(); ++bIdx ) {