Refactor: Modernize RigEclipseCaseData grids api.

This commit is contained in:
Kristian Bendiksen committed 2025-12-22 19:19:33 +01:00
1 parent c7e86ce0d7
commit e88e436108
9 files changed
+40 -91

No files matched your search

@@ -474,8 +474,7 @@ void RifReaderEclipseWell::readWellCells( RifEclipseRestartDataAccess* restartDa
sameCount = true;
}
std::vector<RigGridBase*> grids;
eclipseCaseData->allGrids( &grids );
auto grids = eclipseCaseData->allGrids();
cvf::Collection<RigSimWellData> wells;
caf::ProgressInfo progress( well_info_get_num_wells( ert_well_info ), "" );
@@ -41,8 +41,7 @@ void RivReservoirPartMgr::clearAndSetReservoir( RivCellSetEnum cellSetType, RimE
{
RigEclipseCaseData* eclipseCaseData = eclipseCase->eclipseCaseData();
std::vector<const RigGridBase*> 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 ) );
@@ -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<RigGridBase*> 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<RigGridBase*> 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<RigGridBase*> grids;
res->allGrids( &grids );
auto grids = res->allGrids();
bool hasActiveCellFilters = m_reservoirView->cellFilterCollection()->hasActiveFilters();
bool hasVisibleWellCells = m_reservoirView->wellCollection()->hasVisibleWellCells();
@@ -393,8 +393,7 @@ void RimStreamlineInViewCollection::findStartCells( int
// get the simulation wells
const cvf::Collection<RigSimWellData>& simWellData = eclipseCase()->eclipseCaseData()->wellResults();
std::vector<const RigGridBase*> 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 )
@@ -37,8 +37,6 @@
#include "Well/RigWellResultFrame.h"
#include "Well/RigWellResultPoint.h"
#include <QDebug>
#include <array>
//--------------------------------------------------------------------------------------------------
@@ -99,39 +97,33 @@ void RigEclipseCaseData::setMainGrid( std::shared_ptr<RigMainGrid> mainGrid )
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RigEclipseCaseData::allGrids( std::vector<RigGridBase*>* grids )
std::vector<RigGridBase*> RigEclipseCaseData::allGrids()
{
CVF_ASSERT( grids );
if ( !m_mainGrid ) return {};
if ( !m_mainGrid )
std::vector<RigGridBase*> 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<const RigGridBase*>* grids ) const
std::vector<const RigGridBase*> RigEclipseCaseData::allGrids() const
{
CVF_ASSERT( grids );
if ( !m_mainGrid ) return {};
if ( !m_mainGrid )
std::vector<const RigGridBase*> 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<RigGridBase*> 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<const RigGridBase*> 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<const RigGridBase*> 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<cvf::StructGridInterface::FaceType>( faceIdx );
size_t ni, nj, nk;
RigGridBase::neighborIJKAtCellFace( i, j, k, sourceFace, &ni, &nj, &nk );
@@ -537,7 +494,8 @@ std::vector<const RigWellPath*>
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RigEclipseCaseData::setVirtualPerforationTransmissibilities( std::shared_ptr<RigVirtualPerforationTransmissibilities> virtualPerforationTransmissibilities )
void RigEclipseCaseData::setVirtualPerforationTransmissibilities(
std::shared_ptr<RigVirtualPerforationTransmissibilities> virtualPerforationTransmissibilities )
{
m_virtualPerforationTransmissibilities = virtualPerforationTransmissibilities;
}
@@ -68,12 +68,12 @@ public:
std::shared_ptr<const RigMainGrid> mainGridShared() const { return m_mainGrid; }
void setMainGrid( std::shared_ptr<RigMainGrid> mainGrid );
void allGrids( std::vector<RigGridBase*>* grids ); // To be removed
void allGrids( std::vector<const RigGridBase*>* 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<RigGridBase*> allGrids();
[[nodiscard]] std::vector<const RigGridBase*> 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<RigCaseCellResultsData> results( RiaDefines::PorosityModelType porosityModel );
std::shared_ptr<const RigCaseCellResultsData> results( RiaDefines::PorosityModelType porosityModel ) const;
@@ -122,8 +122,8 @@ public:
simulationWellBranches( const QString& simWellName, bool includeAllCellCenters, bool useAutoDetectionOfBranches ) const;
void setVirtualPerforationTransmissibilities( std::shared_ptr<RigVirtualPerforationTransmissibilities> virtualPerforationTransmissibilities );
const RigVirtualPerforationTransmissibilities* virtualPerforationTransmissibilities() const;
std::shared_ptr<RigVirtualPerforationTransmissibilities> virtualPerforationTransmissibilitiesShared();
const RigVirtualPerforationTransmissibilities* virtualPerforationTransmissibilities() const;
std::shared_ptr<RigVirtualPerforationTransmissibilities> virtualPerforationTransmissibilitiesShared();
std::shared_ptr<const RigVirtualPerforationTransmissibilities> virtualPerforationTransmissibilitiesShared() const;
void clearWellCellsInGridCache() { m_wellCellsInGrid.clear(); }
@@ -369,8 +369,7 @@ public:
if ( rimCase && rimCase->eclipseCaseData() && rimCase->eclipseCaseData()->mainGrid() )
{
std::vector<RigGridBase*> grids;
rimCase->eclipseCaseData()->allGrids( &grids );
auto grids = rimCase->eclipseCaseData()->allGrids();
quint64 byteCount = grids.size() * 3 * sizeof( quint64 );
socketStream << byteCount;
@@ -281,8 +281,7 @@ public:
// Fetch results
const RigWellResultFrame* wellResFrame = currentWellResult->wellResultFrame( timeStepIdx );
std::vector<RigGridBase*> grids;
rimCase->eclipseCaseData()->allGrids( &grids );
auto grids = rimCase->eclipseCaseData()->allGrids();
for ( const auto& wellResultBranch : wellResFrame->wellResultBranches() )
{
@@ -113,8 +113,7 @@ grpc::Status RiaGrpcSimulationWellService::GetSimulationWellCells( grpc::ServerC
{
// Fetch results
const RigWellResultFrame* wellResFrame = currentWellResult->wellResultFrame( tsIdx );
std::vector<RigGridBase*> grids;
eclipseCase->eclipseCaseData()->allGrids( &grids );
auto grids = eclipseCase->eclipseCaseData()->allGrids();
for ( size_t bIdx = 0; bIdx < wellResFrame->wellResultBranches().size(); ++bIdx )
{