mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
Work in progress, updating cell indexing
This commit is contained in:
@@ -276,7 +276,7 @@ void RigEclipseToStimPlanCellTransmissibilityCalculator::calculateStimPlanCellsM
|
||||
{
|
||||
// Use main grid cell to evaluate if a cell is active or not.
|
||||
// All cells in temporary grids are active
|
||||
const RigCell& cell = mainGrid->globalCellArray()[reservoirCellIndex];
|
||||
const RigCell& cell = mainGrid->cell( reservoirCellIndex );
|
||||
size_t mainGridReservoirIndex = cell.mainGridCellIndex();
|
||||
|
||||
if ( !activeCellInfo->isActive( mainGridReservoirIndex ) )
|
||||
@@ -358,7 +358,7 @@ std::vector<size_t>
|
||||
std::vector<size_t> cellIndicesToLeafCells;
|
||||
for ( const size_t& index : cellIndices )
|
||||
{
|
||||
const RigCell& cell = mainGrid->globalCellArray()[index];
|
||||
const RigCell& cell = mainGrid->cell( index );
|
||||
if ( !cell.subGrid() )
|
||||
{
|
||||
cellIndicesToLeafCells.push_back( index );
|
||||
|
||||
@@ -73,13 +73,13 @@ void RigCellVolumeResultCalculator::calculate( const RigEclipseResultAddress& re
|
||||
cellVolumeResults.resize( cellResultCount, std::numeric_limits<double>::infinity() );
|
||||
|
||||
#pragma omp parallel for
|
||||
for ( int nativeResvCellIndex = 0; nativeResvCellIndex < static_cast<int>( m_resultsData->m_ownerMainGrid->globalCellArray().size() );
|
||||
for ( int nativeResvCellIndex = 0; nativeResvCellIndex < static_cast<int>( m_resultsData->m_ownerMainGrid->cellCount() );
|
||||
nativeResvCellIndex++ )
|
||||
{
|
||||
size_t resultIndex = m_resultsData->activeCellInfo()->cellResultIndex( nativeResvCellIndex );
|
||||
if ( resultIndex != cvf::UNDEFINED_SIZE_T )
|
||||
{
|
||||
const RigCell& cell = m_resultsData->m_ownerMainGrid->globalCellArray()[nativeResvCellIndex];
|
||||
const RigCell& cell = m_resultsData->m_ownerMainGrid->cell( nativeResvCellIndex );
|
||||
if ( !cell.subGrid() )
|
||||
{
|
||||
cellVolumeResults[resultIndex] = cell.volume();
|
||||
|
||||
@@ -79,8 +79,9 @@ void RigFaultDistanceResultCalculator::calculate( const RigEclipseResultAddress&
|
||||
if ( !shouldCompute ) return;
|
||||
|
||||
const std::vector<RigCell>& globalCellArray = m_resultsData->m_ownerMainGrid->globalCellArray();
|
||||
const auto grid = m_resultsData->m_ownerMainGrid;
|
||||
|
||||
long long numCells = static_cast<long long>( globalCellArray.size() );
|
||||
long long numCells = static_cast<long long>( m_resultsData->m_ownerMainGrid->cellCount() );
|
||||
|
||||
std::vector<cvf::StructGridInterface::FaceType> faceTypes = cvf::StructGridInterface::validFaceTypes();
|
||||
|
||||
|
||||
@@ -110,52 +110,53 @@ void RigActiveCellGrid::transferActiveInformation( int gridI
|
||||
fractureActiveCellInfo->computeDerivedData();
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
size_t RigActiveCellGrid::cellIndexFromIJK( size_t i, size_t j, size_t k ) const
|
||||
{
|
||||
auto index = RigGridBase::cellIndexFromIJK( i, j, k );
|
||||
return m_globalToActiveMap[index];
|
||||
}
|
||||
////--------------------------------------------------------------------------------------------------
|
||||
/////
|
||||
////--------------------------------------------------------------------------------------------------
|
||||
// size_t RigActiveCellGrid::cellIndexFromIJK( size_t i, size_t j, size_t k ) const
|
||||
//{
|
||||
// auto index = RigGridBase::cellIndexFromIJK( i, j, k );
|
||||
// return m_globalToActiveMap[index];
|
||||
// }
|
||||
//
|
||||
////--------------------------------------------------------------------------------------------------
|
||||
/////
|
||||
////--------------------------------------------------------------------------------------------------
|
||||
// size_t RigActiveCellGrid::cellIndexFromIJKUnguarded( size_t i, size_t j, size_t k ) const
|
||||
//{
|
||||
// auto index = RigGridBase::cellIndexFromIJKUnguarded( i, j, k );
|
||||
// return m_globalToActiveMap[index];
|
||||
// }
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
size_t RigActiveCellGrid::cellIndexFromIJKUnguarded( size_t i, size_t j, size_t k ) const
|
||||
{
|
||||
auto index = RigGridBase::cellIndexFromIJKUnguarded( i, j, k );
|
||||
return m_globalToActiveMap[index];
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
bool RigActiveCellGrid::ijkFromCellIndex( size_t cellIndex, size_t* i, size_t* j, size_t* k ) const
|
||||
{
|
||||
if ( cellIndex >= m_activeToGlobalMap.size() )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
auto index = m_activeToGlobalMap[cellIndex];
|
||||
return RigGridBase::ijkFromCellIndex( index, i, j, k );
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RigActiveCellGrid::ijkFromCellIndexUnguarded( size_t cellIndex, size_t* i, size_t* j, size_t* k ) const
|
||||
{
|
||||
auto index = m_activeToGlobalMap[cellIndex];
|
||||
RigGridBase::ijkFromCellIndexUnguarded( index, i, j, k );
|
||||
}
|
||||
////--------------------------------------------------------------------------------------------------
|
||||
/////
|
||||
////--------------------------------------------------------------------------------------------------
|
||||
// bool RigActiveCellGrid::ijkFromCellIndex( size_t cellIndex, size_t* i, size_t* j, size_t* k ) const
|
||||
//{
|
||||
// if ( cellIndex >= m_activeToGlobalMap.size() )
|
||||
// {
|
||||
// return false;
|
||||
// }
|
||||
// auto index = m_activeToGlobalMap[cellIndex];
|
||||
// return RigGridBase::ijkFromCellIndex( index, i, j, k );
|
||||
// }
|
||||
//
|
||||
////--------------------------------------------------------------------------------------------------
|
||||
/////
|
||||
////--------------------------------------------------------------------------------------------------
|
||||
// void RigActiveCellGrid::ijkFromCellIndexUnguarded( size_t cellIndex, size_t* i, size_t* j, size_t* k ) const
|
||||
//{
|
||||
// auto index = m_activeToGlobalMap[cellIndex];
|
||||
// RigGridBase::ijkFromCellIndexUnguarded( index, i, j, k );
|
||||
// }
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
RigCell& RigActiveCellGrid::cell( size_t gridLocalCellIndex )
|
||||
{
|
||||
return m_cells[gridLocalCellIndex];
|
||||
const auto index = m_globalToActiveMap[gridLocalCellIndex];
|
||||
return m_cells[index];
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@@ -163,7 +164,24 @@ RigCell& RigActiveCellGrid::cell( size_t gridLocalCellIndex )
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
const RigCell& RigActiveCellGrid::cell( size_t gridLocalCellIndex ) const
|
||||
{
|
||||
return m_cells[gridLocalCellIndex];
|
||||
const auto index = m_globalToActiveMap[gridLocalCellIndex];
|
||||
return m_cells[index];
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
size_t RigActiveCellGrid::globalToActualCellIndex( size_t globalCellIndex ) const
|
||||
{
|
||||
return m_globalToActiveMap[globalCellIndex];
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
size_t RigActiveCellGrid::actualToGlobalCellIndex( size_t actualCellIndex ) const
|
||||
{
|
||||
return m_activeToGlobalMap[actualCellIndex];
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
|
||||
@@ -36,14 +36,18 @@ public:
|
||||
const std::vector<int>& activeMatrixIndexes,
|
||||
const std::vector<int>& activeFracIndexes );
|
||||
|
||||
size_t cellIndexFromIJK( size_t i, size_t j, size_t k ) const override;
|
||||
size_t cellIndexFromIJKUnguarded( size_t i, size_t j, size_t k ) const override;
|
||||
bool ijkFromCellIndex( size_t cellIndex, size_t* i, size_t* j, size_t* k ) const override;
|
||||
void ijkFromCellIndexUnguarded( size_t cellIndex, size_t* i, size_t* j, size_t* k ) const override;
|
||||
// size_t cellIndexFromIJK( size_t i, size_t j, size_t k ) const override;
|
||||
// size_t cellIndexFromIJKUnguarded( size_t i, size_t j, size_t k ) const override;
|
||||
// bool ijkFromCellIndex( size_t cellIndex, size_t* i, size_t* j, size_t* k ) const override;
|
||||
// void ijkFromCellIndexUnguarded( size_t cellIndex, size_t* i, size_t* j, size_t* k ) const override;
|
||||
|
||||
RigCell& cell( size_t gridLocalCellIndex ) override;
|
||||
const RigCell& cell( size_t gridLocalCellIndex ) const override;
|
||||
size_t cellCount() const override;
|
||||
|
||||
size_t globalToActualCellIndex( size_t globalCellIndex ) const override;
|
||||
size_t actualToGlobalCellIndex( size_t actualCellIndex ) const override;
|
||||
|
||||
size_t cellCount() const override;
|
||||
|
||||
private:
|
||||
std::vector<size_t> m_globalToActiveMap;
|
||||
|
||||
@@ -56,7 +56,7 @@ bool RigActiveCellInfo::isActive( size_t reservoirCellIndex ) const
|
||||
return true;
|
||||
}
|
||||
|
||||
CVF_TIGHT_ASSERT( reservoirCellIndex < m_cellIndexToResultIndex.size() );
|
||||
if ( reservoirCellIndex >= m_cellIndexToResultIndex.size() ) return false;
|
||||
|
||||
return m_cellIndexToResultIndex[reservoirCellIndex] != cvf::UNDEFINED_SIZE_T;
|
||||
}
|
||||
|
||||
@@ -99,6 +99,22 @@ const RigCell& RigGridBase::cell( size_t gridLocalCellIndex ) const
|
||||
return m_mainGrid->globalCellArray()[m_indexToStartOfCells + gridLocalCellIndex];
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
size_t RigGridBase::globalToActualCellIndex( size_t globalCellIndex ) const
|
||||
{
|
||||
return globalCellIndex;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
size_t RigGridBase::actualToGlobalCellIndex( size_t actualCellIndex ) const
|
||||
{
|
||||
return actualCellIndex;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
|
||||
@@ -37,6 +37,9 @@ class RigMainGrid;
|
||||
class RigCell;
|
||||
class RigActiveCellInfo;
|
||||
|
||||
// global cell index is index in full I,J,K grid
|
||||
// actual cell index is the index into the m_cells array, will be differenc
|
||||
|
||||
class RigGridBase : public cvf::StructGridInterface
|
||||
{
|
||||
public:
|
||||
@@ -50,8 +53,11 @@ public:
|
||||
size_t cellCountK() const override;
|
||||
|
||||
virtual size_t cellCount() const;
|
||||
virtual RigCell& cell( size_t gridLocalCellIndex );
|
||||
virtual const RigCell& cell( size_t gridLocalCellIndex ) const;
|
||||
virtual RigCell& cell( size_t actualCellIndex );
|
||||
virtual const RigCell& cell( size_t actualCellIndex ) const;
|
||||
|
||||
virtual size_t globalToActualCellIndex( size_t globalCellIndex ) const;
|
||||
virtual size_t actualToGlobalCellIndex( size_t actualCellIndex ) const;
|
||||
|
||||
void characteristicCellSizes( double* iSize, double* jSize, double* kSize ) const override;
|
||||
|
||||
|
||||
@@ -74,7 +74,7 @@ const std::vector<cvf::Vec3d>& RigMainGrid::nodes() const
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
std::vector<RigCell>& RigMainGrid::globalCellArray()
|
||||
std::vector<RigCell>& RigMainGrid::reservoirCells()
|
||||
{
|
||||
return m_cells;
|
||||
}
|
||||
@@ -82,25 +82,41 @@ std::vector<RigCell>& RigMainGrid::globalCellArray()
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
const std::vector<RigCell>& RigMainGrid::globalCellArray() const
|
||||
const std::vector<RigCell>& RigMainGrid::reservoirCells() const
|
||||
{
|
||||
return m_cells;
|
||||
}
|
||||
|
||||
////--------------------------------------------------------------------------------------------------
|
||||
/////
|
||||
////--------------------------------------------------------------------------------------------------
|
||||
// std::vector<RigCell>& RigMainGrid::globalCellArray()
|
||||
//{
|
||||
// return m_cells;
|
||||
// }
|
||||
//
|
||||
////--------------------------------------------------------------------------------------------------
|
||||
/////
|
||||
////--------------------------------------------------------------------------------------------------
|
||||
// const std::vector<RigCell>& RigMainGrid::globalCellArray() const
|
||||
//{
|
||||
// return m_cells;
|
||||
// }
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
RigGridBase* RigMainGrid::gridAndGridLocalIdxFromGlobalCellIdx( size_t globalCellIdx, size_t* gridLocalCellIdx )
|
||||
{
|
||||
CVF_ASSERT( globalCellIdx < m_cells.size() );
|
||||
// CVF_ASSERT( globalCellIdx < m_cells.size() );
|
||||
|
||||
const RigCell& cell = m_cells[globalCellIdx];
|
||||
RigGridBase* hostGrid = cell.hostGrid();
|
||||
const RigCell& c = cell( globalCellIdx );
|
||||
RigGridBase* hostGrid = c.hostGrid();
|
||||
CVF_ASSERT( hostGrid );
|
||||
|
||||
if ( gridLocalCellIdx )
|
||||
{
|
||||
*gridLocalCellIdx = cell.gridLocalCellIndex();
|
||||
*gridLocalCellIdx = c.gridLocalCellIndex();
|
||||
}
|
||||
|
||||
return hostGrid;
|
||||
@@ -111,15 +127,15 @@ RigGridBase* RigMainGrid::gridAndGridLocalIdxFromGlobalCellIdx( size_t globalCel
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
const RigGridBase* RigMainGrid::gridAndGridLocalIdxFromGlobalCellIdx( size_t globalCellIdx, size_t* gridLocalCellIdx ) const
|
||||
{
|
||||
CVF_ASSERT( globalCellIdx < m_cells.size() );
|
||||
// CVF_ASSERT( globalCellIdx < m_cells.size() );
|
||||
|
||||
const RigCell& cell = m_cells[globalCellIdx];
|
||||
const RigGridBase* hostGrid = cell.hostGrid();
|
||||
const RigCell& c = cell( globalCellIdx );
|
||||
const RigGridBase* hostGrid = c.hostGrid();
|
||||
CVF_ASSERT( hostGrid );
|
||||
|
||||
if ( gridLocalCellIdx )
|
||||
{
|
||||
*gridLocalCellIdx = cell.gridLocalCellIndex();
|
||||
*gridLocalCellIdx = c.gridLocalCellIndex();
|
||||
}
|
||||
|
||||
return hostGrid;
|
||||
@@ -492,7 +508,7 @@ void RigMainGrid::calculateFaults( const RigActiveCellInfo* activeCellInfo )
|
||||
return;
|
||||
}
|
||||
|
||||
m_faultsPrCellAcc = new RigFaultsPrCellAccumulator( m_cells.size() );
|
||||
m_faultsPrCellAcc = new RigFaultsPrCellAccumulator( RigGridBase::cellCount() );
|
||||
|
||||
// Spread fault idx'es on the cells from the faults
|
||||
for ( size_t fIdx = 0; fIdx < m_faults.size(); ++fIdx )
|
||||
@@ -517,9 +533,10 @@ void RigMainGrid::calculateFaults( const RigActiveCellInfo* activeCellInfo )
|
||||
|
||||
std::vector<RigFault::FaultFace>& unNamedFaultFaces = unNamedFault->faultFaces();
|
||||
std::vector<RigFault::FaultFace>& unNamedFaultFacesInactive = unNamedFaultWithInactive->faultFaces();
|
||||
for ( int gcIdx = 0; gcIdx < static_cast<int>( m_cells.size() ); ++gcIdx )
|
||||
for ( size_t i = 0; i < cellCount(); i++ )
|
||||
{
|
||||
addUnNamedFaultFaces( gcIdx,
|
||||
const auto globIndex = actualToGlobalCellIndex( i );
|
||||
addUnNamedFaultFaces( (int)globIndex,
|
||||
activeCellInfo,
|
||||
vxs,
|
||||
unNamedFaultIdx,
|
||||
@@ -542,7 +559,7 @@ void RigMainGrid::addUnNamedFaultFaces( int gcIdx,
|
||||
std::vector<RigFault::FaultFace>& unNamedFaultFacesInactive,
|
||||
RigFaultsPrCellAccumulator* faultsPrCellAcc ) const
|
||||
{
|
||||
if ( m_cells[gcIdx].isInvalid() )
|
||||
if ( cell( gcIdx ).isInvalid() )
|
||||
{
|
||||
return;
|
||||
}
|
||||
@@ -586,19 +603,20 @@ void RigMainGrid::addUnNamedFaultFaces( int gcIdx,
|
||||
}
|
||||
|
||||
neighborReservoirCellIdx = hostGrid->reservoirCellIndex( neighborGridCellIdx );
|
||||
if ( m_cells[neighborReservoirCellIdx].isInvalid() )
|
||||
if ( cell( neighborReservoirCellIdx ).isInvalid() )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
bool isNeighborCellActive = activeCellInfo->isActive( neighborReservoirCellIdx );
|
||||
auto activeNeighborCellIndex = hostGrid->globalToActualCellIndex( neighborGridCellIdx );
|
||||
bool isNeighborCellActive = activeCellInfo->isActive( activeNeighborCellIndex );
|
||||
|
||||
double tolerance = 1e-6;
|
||||
|
||||
std::array<size_t, 4> faceIdxs;
|
||||
m_cells[gcIdx].faceIndices( face, &faceIdxs );
|
||||
cell( gcIdx ).faceIndices( face, &faceIdxs );
|
||||
std::array<size_t, 4> nbFaceIdxs;
|
||||
m_cells[neighborReservoirCellIdx].faceIndices( StructGridInterface::oppositeFace( face ), &nbFaceIdxs );
|
||||
cell( neighborReservoirCellIdx ).faceIndices( StructGridInterface::oppositeFace( face ), &nbFaceIdxs );
|
||||
|
||||
bool sharedFaceVertices = true;
|
||||
if ( sharedFaceVertices && vxs[faceIdxs[0]].pointDistance( vxs[nbFaceIdxs[0]] ) > tolerance ) sharedFaceVertices = false;
|
||||
@@ -664,7 +682,7 @@ void RigMainGrid::distributeNNCsToFaults()
|
||||
if ( fIdx1 < 0 && fIdx2 < 0 )
|
||||
{
|
||||
cvf::String lgrString( "Same Grid" );
|
||||
if ( m_cells[conn.c1GlobIdx()].hostGrid() != m_cells[conn.c2GlobIdx()].hostGrid() )
|
||||
if ( cell( conn.c1GlobIdx() ).hostGrid() != cell( conn.c2GlobIdx() ).hostGrid() )
|
||||
{
|
||||
lgrString = "Different Grid";
|
||||
}
|
||||
@@ -741,7 +759,7 @@ void RigMainGrid::computeFaceNormalsDirection( const std::vector<size_t>& reserv
|
||||
|
||||
for ( const auto& index : reservoirCellIndices )
|
||||
{
|
||||
const auto& cell = m_cells[index];
|
||||
const auto& cell = this->cell( index );
|
||||
if ( !cell.isInvalid() )
|
||||
{
|
||||
// Some cells can be very twisted and distorted. Use a volume criteria to find a reasonably regular cell.
|
||||
|
||||
@@ -46,8 +46,10 @@ public:
|
||||
std::vector<cvf::Vec3d>& nodes();
|
||||
const std::vector<cvf::Vec3d>& nodes() const;
|
||||
|
||||
std::vector<RigCell>& globalCellArray();
|
||||
const std::vector<RigCell>& globalCellArray() const;
|
||||
std::vector<RigCell>& reservoirCells();
|
||||
const std::vector<RigCell>& reservoirCells() const;
|
||||
// std::vector<RigCell>& globalCellArray();
|
||||
// const std::vector<RigCell>& globalCellArray() const;
|
||||
|
||||
virtual RigGridBase* gridAndGridLocalIdxFromGlobalCellIdx( size_t globalCellIdx, size_t* gridLocalCellIdx );
|
||||
virtual const RigGridBase* gridAndGridLocalIdxFromGlobalCellIdx( size_t globalCellIdx, size_t* gridLocalCellIdx ) const;
|
||||
|
||||
Reference in New Issue
Block a user