mirror of
https://github.com/OPM/ResInsight.git
synced 2026-10-25 14:40:26 -05:00
#12950 Generate BCCON/BCPROP for simulation input.
This commit is contained in:
1 parent
4291ebd91c
commit
b1646d9a1f
6 files changed
+303
-5
No files matched your search
@@ -237,6 +237,86 @@ int findMaxOperNumValue( RimEclipseCase* eclipseCase )
|
||||
return maxValue;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void generateBcconResult( RimEclipseCase* eclipseCase, const cvf::Vec3st& min, const cvf::Vec3st& max )
|
||||
{
|
||||
if ( eclipseCase == nullptr ) return;
|
||||
|
||||
auto resultsData = eclipseCase->results( RiaDefines::PorosityModelType::MATRIX_MODEL );
|
||||
if ( !resultsData ) return;
|
||||
|
||||
auto grid = eclipseCase->eclipseCaseData()->mainGrid();
|
||||
if ( !grid ) return;
|
||||
|
||||
// Check if BORDNUM result exists
|
||||
RigEclipseResultAddress bordNumAddr( RiaDefines::ResultCatType::GENERATED, RiaDefines::ResultDataType::INTEGER, RiaResultNames::bordnum() );
|
||||
if ( !resultsData->hasResultEntry( bordNumAddr ) )
|
||||
{
|
||||
RiaLogging::warning( "BORDNUM result not found - cannot generate BCCON result" );
|
||||
return;
|
||||
}
|
||||
|
||||
resultsData->ensureKnownResultLoaded( bordNumAddr );
|
||||
auto bordNumValues = resultsData->cellScalarResults( bordNumAddr, 0 );
|
||||
if ( bordNumValues.empty() ) return;
|
||||
|
||||
auto activeReservoirCellIdxs =
|
||||
eclipseCase->eclipseCaseData()->activeCellInfo( RiaDefines::PorosityModelType::MATRIX_MODEL )->activeReservoirCellIndices();
|
||||
|
||||
size_t reservoirCellCount =
|
||||
eclipseCase->eclipseCaseData()->activeCellInfo( RiaDefines::PorosityModelType::MATRIX_MODEL )->reservoirCellCount();
|
||||
std::vector<int> result( reservoirCellCount, 0 );
|
||||
|
||||
// Iterate through all active cells
|
||||
for ( auto activeCellIdx : activeReservoirCellIdxs )
|
||||
{
|
||||
// Check if this cell is a border cell
|
||||
int borderValue = static_cast<int>( bordNumValues[activeCellIdx.value()] );
|
||||
if ( borderValue != BorderType::BORDER_CELL ) continue;
|
||||
|
||||
// Get IJK indices for this cell
|
||||
size_t i, j, k;
|
||||
if ( !grid->ijkFromCellIndex( activeCellIdx.value(), &i, &j, &k ) ) continue;
|
||||
|
||||
// Determine which face of the box this cell is on
|
||||
// Priority: I faces, then J faces, then K faces (for corner/edge cells)
|
||||
int bcconValue = 0;
|
||||
|
||||
if ( i == min.x() )
|
||||
{
|
||||
bcconValue = 1; // I- face
|
||||
}
|
||||
else if ( i == max.x() )
|
||||
{
|
||||
bcconValue = 2; // I+ face
|
||||
}
|
||||
else if ( j == min.y() )
|
||||
{
|
||||
bcconValue = 3; // J- face
|
||||
}
|
||||
else if ( j == max.y() )
|
||||
{
|
||||
bcconValue = 4; // J+ face
|
||||
}
|
||||
else if ( k == min.z() )
|
||||
{
|
||||
bcconValue = 5; // K- face
|
||||
}
|
||||
else if ( k == max.z() )
|
||||
{
|
||||
bcconValue = 6; // K+ face
|
||||
}
|
||||
|
||||
result[activeCellIdx.value()] = bcconValue;
|
||||
}
|
||||
|
||||
RigEclipseResultTools::createResultVector( *eclipseCase, "BCCON", result );
|
||||
|
||||
eclipseCase->updateConnectedEditors();
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
|
||||
@@ -51,6 +51,8 @@ int generateOperNumResult( RimEclipseCase* eclipseCase, int borderCellValue = -1
|
||||
|
||||
int findMaxOperNumValue( RimEclipseCase* eclipseCase );
|
||||
|
||||
void generateBcconResult( RimEclipseCase* eclipseCase, const cvf::Vec3st& min, const cvf::Vec3st& max );
|
||||
|
||||
std::vector<BorderCellFace> generateBorderCellFaces( RimEclipseCase* eclipseCase );
|
||||
|
||||
} // namespace RigEclipseResultTools
|
||||
Reference in new issue
Block a user