#12950 Simulation Input: add boundary condition choice.

This commit is contained in:
Kristian Bendiksen committed 2025-11-12 08:39:20 +01:00
1 parent b1646d9a1f
commit b7a4983009
3 files changed
+55 -13

No files matched your search

@@ -320,17 +320,21 @@ std::expected<void, QString> RicExportEclipseSectorModelFeature::exportSimulatio
if ( !bordnumVisibility.isNull() )
{
RigEclipseResultTools::generateBorderResult( &eclipseCase, bordnumVisibility, RiaResultNames::bordnum() );
if ( exportSettings.m_boundaryCondition() == RicExportEclipseSectorModelUi::BoundaryCondition::BCCON_BCPROP )
{
// Generate BCCON result to assign values 1-6 based on which face of the box the border cells are on
RigEclipseResultTools::generateBcconResult( &eclipseCase, exportSettings.min(), exportSettings.max() );
}
else if ( exportSettings.m_boundaryCondition() == RicExportEclipseSectorModelUi::BoundaryCondition::OPERNUM_OPERATER )
{
// Generate OPERNUM result based on BORDNUM (border cells get max existing OPERNUM + 1)
RigEclipseResultTools::generateOperNumResult( &eclipseCase );
// Generate BCCON result to assign values 1-6 based on which face of the box the border cells are on
RigEclipseResultTools::generateBcconResult( &eclipseCase, exportSettings.min(), exportSettings.max() );
// Generate OPERNUM result based on BORDNUM (border cells get max existing OPERNUM + 1)
RigEclipseResultTools::generateOperNumResult( &eclipseCase );
}
if ( auto result = addOperNumRegionAndOperater( &eclipseCase, exportSettings, deckFile ); !result )
{
return result;
if ( auto result = addOperNumRegionAndOperater( &eclipseCase, exportSettings, deckFile ); !result )
{
return result;
}
}
}
if ( auto result = replaceKeywordValuesInDeckFile( &eclipseCase, exportSettings, deckFile ); !result )
@@ -1237,7 +1241,7 @@ std::expected<void, QString> RicExportEclipseSectorModelFeature::addOperNumRegio
// Create OPERATER keyword to multiply pore volume in border region
// OPERATER format: TARGET_ARRAY REGION_NUMBER OPERATION ARRAY_PARAMETER PARAM1 PARAM2 REGION_NAME
// Example: OPERATER / PORV 1 MULTX PORV 1.0e6 1* 1* /
float porvMultiplier = 1.0e6f; // TODO: Make this user-configurable
float porvMultiplier = static_cast<float>( exportSettings.m_porvMultiplier() );
Opm::DeckKeyword operaterKw = RimKeywordFactory::operaterKeyword( "PORV", operNumRegion, "MULTX", "PORV", porvMultiplier );
// Add OPERATER keyword to EDIT section
@@ -77,6 +77,15 @@ void RicExportEclipseSectorModelUi::GridBoxSelectionEnum::setUp()
setDefault( RicExportEclipseSectorModelUi::VISIBLE_CELLS_BOX );
}
template <>
void RicExportEclipseSectorModelUi::BoundaryConditionEnum::setUp()
{
addItem( RicExportEclipseSectorModelUi::OPERNUM_OPERATER, "OPERNUM_OPERATER", "OPERNUM + OPERATER" );
addItem( RicExportEclipseSectorModelUi::BCCON_BCPROP, "BCCON_BCPROP", "BCCON + BCPROP" );
setDefault( RicExportEclipseSectorModelUi::OPERNUM_OPERATER );
}
} // namespace caf
//--------------------------------------------------------------------------------------------------
@@ -141,6 +150,10 @@ RicExportEclipseSectorModelUi::RicExportEclipseSectorModelUi()
CAF_PDM_InitField( &m_exportSimulationInput, "ExportSimulationInput", false, "Export Simulation Input" );
CAF_PDM_InitFieldNoDefault( &m_boundaryCondition, "BoundaryCondition", "Boundary Condition Type" );
CAF_PDM_InitField( &m_porvMultiplier, "PorvMultiplier", 1.0e6, "PORV Multiplier" );
m_exportGridFilename = defaultGridFileName();
m_exportParametersFilename = defaultResultsFileName();
m_exportFaultsFilename = defaultFaultsFileName();
@@ -440,8 +453,18 @@ void RicExportEclipseSectorModelUi::defineUiOrdering( QString uiConfigName, caf:
}
else if ( uiConfigName == m_tabNames[2] )
{
m_bcpropKeywords.uiCapability()->setUiEditorTypeName( caf::PdmUiTableViewEditor::uiEditorTypeName() );
uiOrdering.add( &m_bcpropKeywords );
caf::PdmUiGroup* bcGroup = uiOrdering.addNewGroup( "Boundary Conditions" );
bcGroup->add( &m_boundaryCondition );
if ( m_boundaryCondition() == OPERNUM_OPERATER )
{
bcGroup->add( &m_porvMultiplier );
}
else if ( m_boundaryCondition() == BCCON_BCPROP )
{
m_bcpropKeywords.uiCapability()->setUiEditorTypeName( caf::PdmUiTableViewEditor::uiEditorTypeName() );
bcGroup->add( &m_bcpropKeywords );
}
}
uiOrdering.skipRemainingFields( true );
}
@@ -471,6 +494,10 @@ void RicExportEclipseSectorModelUi::fieldChangedByUi( const caf::PdmFieldHandle*
applyBoundaryDefaults();
updateConnectedEditors();
}
else if ( changedField == &m_boundaryCondition )
{
updateConnectedEditors();
}
}
//--------------------------------------------------------------------------------------------------
@@ -62,6 +62,13 @@ class RicExportEclipseSectorModelUi : public caf::PdmObject
};
using GridBoxSelectionEnum = caf::AppEnum<GridBoxSelection>;
enum BoundaryCondition
{
OPERNUM_OPERATER,
BCCON_BCPROP
};
using BoundaryConditionEnum = caf::AppEnum<BoundaryCondition>;
public:
RicExportEclipseSectorModelUi();
~RicExportEclipseSectorModelUi() override;
@@ -105,6 +112,10 @@ public:
caf::PdmField<bool> m_exportSimulationInput;
caf::PdmField<BoundaryConditionEnum> m_boundaryCondition;
caf::PdmField<double> m_porvMultiplier;
caf::PdmField<int> m_visibleWellsPadding;
caf::PdmField<int> refinementCountI;