#12957 Sector Model Export: unified refinement abstraction via effectiveRefinement()

Add effectiveRefinement() to RicRefinementSettings, RicExportSectorModelUi, and
RigSimulationInputSettings, always returning RigNonUniformRefinement regardless of
whether uniform, non-uniform, or no refinement is active.

Merge the dual RigGridExportAdapter constructors into a single one taking
RigNonUniformRefinement, and unify transformIjkToSectorCoordinates to a single
overload. Eliminate all hasNonUniformRefinement() branching patterns in
RigSimulationInputTool.cpp in favour of effectiveRefinement().
This commit is contained in:
Kristian Bendiksen committed 2026-03-30 11:24:56 +02:00
1 parent e8a1431c36
commit 5d6aba0f70
19 files changed
+367 -452

No files matched your search

@@ -237,27 +237,28 @@ std::pair<std::vector<int>, int> generateOperNumResult( RimEclipseCase*
auto mainGrid = eclipseCase->eclipseCaseData()->mainGrid();
if ( mainGrid )
{
cvf::Vec3st originalMin = gridAdapter.originalMin();
cvf::Vec3st refinement = gridAdapter.refinement();
cvf::Vec3st originalMin = gridAdapter.originalMin();
const RigNonUniformRefinement& ref = gridAdapter.nonUniformRefinement();
// Refine the OPERNUM data to match the refined grid
// Each original cell is subdivided into refinement.x * refinement.y * refinement.z subcells
size_t refinedNI = gridAdapter.cellCountI();
size_t refinedNJ = gridAdapter.cellCountJ();
size_t refinedNK = gridAdapter.cellCountK();
for ( size_t rk = 0; rk < refinedNK; ++rk )
{
auto [sectorK, subK] = ref.mapRefinedToOriginal( RigNonUniformRefinement::DimK, rk );
for ( size_t rj = 0; rj < refinedNJ; ++rj )
{
auto [sectorJ, subJ] = ref.mapRefinedToOriginal( RigNonUniformRefinement::DimJ, rj );
for ( size_t ri = 0; ri < refinedNI; ++ri )
{
// Calculate which original cell this refined cell belongs to
size_t origI = originalMin.x() + ri / refinement.x();
size_t origJ = originalMin.y() + rj / refinement.y();
size_t origK = originalMin.z() + rk / refinement.z();
auto [sectorI, subI] = ref.mapRefinedToOriginal( RigNonUniformRefinement::DimI, ri );
// Get the OPERNUM value from the original grid
size_t origI = originalMin.x() + sectorI;
size_t origJ = originalMin.y() + sectorJ;
size_t origK = originalMin.z() + sectorK;
size_t origCellIdx = mainGrid->cellIndexFromIJK( origI, origJ, origK );
if ( origCellIdx < resultValues.size() )