Support radial grids as cylindrical cells

* Add minimum angular count to system preferences
* Refactors grid view updates and radial grid handling
* Improves radial grid handling and LGR creation
This commit is contained in:
Magne Sjaastad authored and GitHub committed 2025-09-24 09:46:00 +02:00
1 parent d494725da8
commit 6ef5db2530
14 files changed
+479 -137

No files matched your search

@@ -24,6 +24,7 @@
#include "RiaFieldHandleTools.h"
#include "RiaLogging.h"
#include "RiaPreferencesGrid.h"
#include "RiaPreferencesSystem.h"
#include "RiaRegressionTestRunner.h"
#include "RiaResultNames.h"
@@ -32,6 +33,7 @@
#include "RifEclipseOutputFileTools.h"
#include "RifEclipseRestartDataAccess.h"
#include "RifInputPropertyLoader.h"
#include "RifOpmRadialGridTools.h"
#include "RifReaderEclipseOutput.h"
#include "RifReaderEclipseRft.h"
#include "RifReaderMockModel.h"
@@ -43,6 +45,7 @@
#include "RigEclipseCaseData.h"
#include "RigFlowDiagSolverInterface.h"
#include "RigMainGrid.h"
#include "RigReservoirGridTools.h"
#include "Formations/RimFormationNames.h"
#include "Formations/RimFormationTools.h"
@@ -150,6 +153,49 @@ bool RimEclipseResultCase::showTimeStepFilterGUI()
return true;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimEclipseResultCase::checkAndImportRadialGrid()
{
bool refreshEclipseCaseData = false;
if ( RiaPreferencesSystem::current()->useCylindricalCoordinates() )
{
// Check if radial grid data is available. Create LGR if radial section count is below specified limit. Rebuild cached data if
// required.
bool isLgrCreated = RifOpmRadialGridTools::importCylindricalCoordinates( gridFileName().toStdString(), eclipseCaseData() );
if ( !isLgrCreated )
{
// Check if min J coordinate is close to 0.0 and max is close to 360. This is a workaround for import of simulation cases that
// has an invalid header and is not possible to import using opm-common
auto bb = mainGrid()->boundingBox();
const double epsilon = 1.0;
if ( ( std::abs( bb.min().y() ) < epsilon ) && ( std::abs( bb.max().y() - 360.0 ) < epsilon ) )
{
size_t minimumAngularCellCount = static_cast<size_t>( RiaPreferencesSystem::current()->minimumAngularCellCount() );
if ( mainGrid()->cellCountJ() < minimumAngularCellCount )
{
auto angularRefinement = ( minimumAngularCellCount / mainGrid()->cellCountJ() ) + 1;
isLgrCreated = RifOpmRadialGridTools::createAngularGridRefinement( eclipseCaseData(), angularRefinement );
}
}
}
refreshEclipseCaseData = isLgrCreated;
}
else
{
refreshEclipseCaseData =
RifOpmRadialGridTools::importCoordinatesForRadialGrid( gridFileName().toStdString(), eclipseCaseData()->mainGrid() );
}
if ( refreshEclipseCaseData )
{
RigReservoirGridTools::refreshEclipseCaseDataAndViews( this );
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
@@ -297,6 +343,9 @@ bool RimEclipseResultCase::importGridAndResultMetaData( bool showTimeStepFilter
results( RiaDefines::PorosityModelType::MATRIX_MODEL )->computeCellVolumes();
}
checkAndImportRadialGrid();
return true;
}
@@ -545,8 +594,8 @@ cvf::ref<RifReaderInterface> RimEclipseResultCase::createMockModel( QString mode
//--------------------------------------------------------------------------------------------------
RimEclipseResultCase::~RimEclipseResultCase()
{
// Disconnect all comparison views. In debug build on Windows, a crash occurs. The comparison view is also set to zero in the destructor
// of Rim3dView()
// Disconnect all comparison views. In debug build on Windows, a crash occurs. The comparison view is also set to zero in the
// destructor of Rim3dView()
for ( auto v : reservoirViews() )
{
if ( v ) v->setComparisonView( nullptr );