Add preference setting to select which dynamic result to show as default (if available)

This commit is contained in:
Jon Jenssen authored and JJ committed 2026-10-20 19:02:32 +02:00
1 parent d83a492b14
commit 5293dbe015
13 files changed
+109 -38

No files matched your search

@@ -23,10 +23,12 @@
#include "RiaPreferences.h"
#include "RiaPreferencesSummary.h"
#include "RiaPreferencesSystem.h"
#include "RiaResultNames.h"
#include "RifReaderSettings.h"
#include "cafPdmUiCheckBoxEditor.h"
#include "cafPdmUiComboBoxEditor.h"
CAF_PDM_SOURCE_INIT( RiaPreferencesGrid, "RifReaderSettings" );
@@ -90,9 +92,6 @@ RiaPreferencesGrid::RiaPreferencesGrid()
"" );
caf::PdmUiNativeCheckBoxEditor::configureFieldForEditor( &m_autoComputeDepthRelatedProperties );
CAF_PDM_InitField( &m_loadAndShowSoil, "loadAndShowSoil", true, "Load and Show SOIL" );
caf::PdmUiNativeCheckBoxEditor::configureFieldForEditor( &m_loadAndShowSoil );
CAF_PDM_InitField( &m_onlyLoadActiveCells, "onlyLoadActiveCells", false, "Only Load Active Cell Geometry" );
caf::PdmUiNativeCheckBoxEditor::configureFieldForEditor( &m_onlyLoadActiveCells );
@@ -100,6 +99,16 @@ RiaPreferencesGrid::RiaPreferencesGrid()
caf::PdmUiNativeCheckBoxEditor::configureFieldForEditor( &m_invalidateLongThinCells );
CAF_PDM_InitFieldNoDefault( &m_radialGridMode, "radialGridMode", "Radial Grid Display Mode" );
CAF_PDM_InitField( &m_preferredDynamicResult, "preferredDynamicResult", QString( "SOIL" ), "Default Dynamic Result to Show:" );
m_preferredDynamicResult.uiCapability()->setUiEditorTypeName( caf::PdmUiComboBoxEditor::uiEditorTypeName() );
m_preferredDynamicResult.uiCapability()->setAttribute( caf::PdmUiComboBoxEditor::Keys::ENABLE_EDITABLE_CONTENT, true );
m_preferredDynamicResult.uiCapability()->setAttribute( caf::PdmUiComboBoxEditor::Keys::ENABLE_AUTO_COMPLETE, false );
m_preferredDynamicResult.uiCapability()->setAttribute( caf::PdmUiComboBoxEditor::Keys::ADJUST_WIDTH_TO_CONTENTS, true );
CAF_PDM_InitField( &m_loadAndShowSoil_OBSOLETE, "loadAndShowSoil", true, "Load and Show SOIL" );
m_loadAndShowSoil_OBSOLETE.uiCapability()->setUiHidden( true );
m_loadAndShowSoil_OBSOLETE.xmlCapability()->setIOWritable( false );
}
//--------------------------------------------------------------------------------------------------
@@ -117,7 +126,7 @@ void RiaPreferencesGrid::appendItems( caf::PdmUiOrdering& uiOrdering )
{
auto newCBGroup = uiOrdering.addNewGroup( "Behavior When Loading Data" );
newCBGroup->add( &m_autoComputeDepthRelatedProperties );
newCBGroup->add( &m_loadAndShowSoil );
newCBGroup->add( &m_preferredDynamicResult );
newCBGroup->add( &m_invalidateLongThinCells );
if ( auto prefSummary = RiaPreferencesSummary::current() )
@@ -252,9 +261,9 @@ bool RiaPreferencesGrid::skipWellData() const
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
bool RiaPreferencesGrid::loadAndShowSoil() const
QString RiaPreferencesGrid::preferredDynamicResult() const
{
return m_loadAndShowSoil;
return m_preferredDynamicResult();
}
//--------------------------------------------------------------------------------------------------
@@ -344,3 +353,27 @@ RiaGridDefines::RadialGridMode RiaPreferencesGrid::radialGridMode() const
{
return m_radialGridMode();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
QList<caf::PdmOptionItemInfo> RiaPreferencesGrid::calculateValueOptions( const caf::PdmFieldHandle* fieldNeedingOptions )
{
QList<caf::PdmOptionItemInfo> options;
if ( fieldNeedingOptions == &m_preferredDynamicResult )
{
static std::vector<QString> resultNameOptions = { RiaResultNames::soil(),
RiaResultNames::sgas(),
RiaResultNames::swat(),
RiaResultNames::pressure(),
RiaResultNames::undefinedResultName() };
for ( auto& name : resultNameOptions )
{
options.push_back( caf::PdmOptionItemInfo( name, QVariant::fromValue( name ) ) );
}
}
return options;
}
@@ -53,10 +53,10 @@ public:
QString includeFileAbsolutePathPrefix() const;
bool useResultIndexFile() const;
bool skipWellData() const;
bool loadAndShowSoil() const;
bool autoComputeDepthRelatedProperties() const;
bool onlyLoadActiveCells() const;
bool invalidateLongThinCells() const;
QString preferredDynamicResult() const;
RiaDefines::GridModelReader gridModelReader() const;
@@ -68,6 +68,9 @@ public:
void appendItems( caf::PdmUiOrdering& uiOrdering );
protected:
QList<caf::PdmOptionItemInfo> calculateValueOptions( const caf::PdmFieldHandle* fieldNeedingOptions ) override;
private:
caf::PdmField<GridModelEnum> m_gridModelReader;
RiaDefines::GridModelReader m_gridModelReaderOverride;
@@ -80,9 +83,11 @@ private:
caf::PdmField<bool> m_useResultIndexFile;
caf::PdmField<bool> m_skipWellData;
caf::PdmField<bool> m_autoComputeDepthRelatedProperties;
caf::PdmField<bool> m_loadAndShowSoil;
caf::PdmField<bool> m_onlyLoadActiveCells;
caf::PdmField<bool> m_invalidateLongThinCells;
caf::PdmField<QString> m_preferredDynamicResult;
caf::PdmField<caf::AppEnum<RiaGridDefines::RadialGridMode>> m_radialGridMode;
caf::PdmField<bool> m_loadAndShowSoil_OBSOLETE;
};
@@ -488,6 +488,14 @@ QString RiaResultNames::swat()
return "SWAT";
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
QString RiaResultNames::pressure()
{
return "PRESSURE";
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
@@ -92,6 +92,7 @@ QString rockv();
QString soil();
QString sgas();
QString swat();
QString pressure();
QString sowcr();
QString sogcr();
@@ -24,6 +24,7 @@
#include "RiaLogging.h"
#include "RiaQDateTimeTools.h"
#include "RiaQStringFormatter.h"
#include "RiaResultNames.h"
#include "RigEclipseResultAddress.h"
#include "Summary/RiaSummaryTools.h"
@@ -160,7 +161,7 @@ std::vector<RigCompletionData>
if ( pdParams.performScaling )
{
RigCaseCellResultsData* results = caseToApply->results( RiaDefines::PorosityModelType::MATRIX_MODEL );
results->ensureKnownResultLoaded( RigEclipseResultAddress( RiaDefines::ResultCatType::DYNAMIC_NATIVE, "PRESSURE" ) );
results->ensureKnownResultLoaded( RigEclipseResultAddress( RiaDefines::ResultCatType::DYNAMIC_NATIVE, RiaResultNames::pressure() ) );
}
return generateCompdatValuesConst( caseToApply,
@@ -234,7 +235,8 @@ std::vector<RigCompletionData>
const std::vector<double>* currentMatrixPressures = nullptr;
if ( performPressureDepletionScaling )
{
pressureResultVector = &results->cellScalarResults( RigEclipseResultAddress( RiaDefines::ResultCatType::DYNAMIC_NATIVE, "PRESSURE" ) );
pressureResultVector =
&results->cellScalarResults( RigEclipseResultAddress( RiaDefines::ResultCatType::DYNAMIC_NATIVE, RiaResultNames::pressure() ) );
CAF_ASSERT( !pressureResultVector->empty() );
if ( pdParams.pressureScalingTimeStep < static_cast<int>( pressureResultVector->size() ) )
@@ -22,7 +22,7 @@
#include "RiaGuiApplication.h"
#include "RiaLogging.h"
#include "RiaPorosityModel.h"
#include "RiuMessageDialog.h"
#include "RiaResultNames.h"
#include "RigCaseCellResultsData.h"
#include "RigEclipseCaseData.h"
@@ -35,6 +35,7 @@
#include "RimSaturationPressurePlot.h"
#include "RimSaturationPressurePlotCollection.h"
#include "RiuMessageDialog.h"
#include "RiuPlotMainWindow.h"
#include "RiuPlotMainWindowTools.h"
@@ -77,7 +78,7 @@ std::vector<RimSaturationPressurePlot*> RicCreateSaturationPressurePlotsFeature:
{
RigCaseCellResultsData* resultData = eclipseCaseData->results( RiaDefines::PorosityModelType::MATRIX_MODEL );
if ( !resultData->hasResultEntry( RigEclipseResultAddress( RiaDefines::ResultCatType::DYNAMIC_NATIVE, "PRESSURE" ) ) )
if ( !resultData->hasResultEntry( RigEclipseResultAddress( RiaDefines::ResultCatType::DYNAMIC_NATIVE, RiaResultNames::pressure() ) ) )
{
RiaLogging::error( "CreateSaturationPressurePlots : PRESSURE is not available " );
return plots;
@@ -25,6 +25,7 @@
#include "RiaDefines.h"
#include "RiaEclipseUnitTools.h"
#include "RiaPorosityModel.h"
#include "RiaResultNames.h"
#include "RigCaseCellResultsData.h"
#include "RigEclipseCaseData.h"
@@ -73,7 +74,7 @@ void RimFaultReactivationDataAccessorPorePressure::updateResultAccessor()
{
if ( !m_caseData ) return;
RigEclipseResultAddress resVarAddress( RiaDefines::ResultCatType::DYNAMIC_NATIVE, "PRESSURE" );
RigEclipseResultAddress resVarAddress( RiaDefines::ResultCatType::DYNAMIC_NATIVE, RiaResultNames::pressure() );
m_eclipseCase->results( RiaDefines::PorosityModelType::MATRIX_MODEL )->ensureKnownResultLoaded( resVarAddress );
m_resultAccessor =
@@ -21,6 +21,7 @@
#include "RiaEclipseUnitTools.h"
#include "RiaInterpolationTools.h"
#include "RiaLogging.h"
#include "RiaResultNames.h"
#include "RiaWellLogUnitTools.h"
#include "RigCaseCellResultsData.h"
@@ -84,7 +85,7 @@ void RimFaultReactivationDataAccessorStressEclipse::updateResultAccessor()
{
if ( !m_caseData ) return;
RigEclipseResultAddress resVarAddress( RiaDefines::ResultCatType::DYNAMIC_NATIVE, "PRESSURE" );
RigEclipseResultAddress resVarAddress( RiaDefines::ResultCatType::DYNAMIC_NATIVE, RiaResultNames::pressure() );
m_eclipseCase->results( RiaDefines::PorosityModelType::MATRIX_MODEL )->ensureKnownResultLoaded( resVarAddress );
m_resultAccessor =
@@ -1040,7 +1040,7 @@ void RimEclipseStatisticsCase::populateResultSelection()
QStringList varList =
caseData->results( RiaDefines::PorosityModelType::MATRIX_MODEL )->resultNames( RiaDefines::ResultCatType::DYNAMIC_NATIVE );
if ( varList.contains( RiaResultNames::soil() ) ) m_selectedDynamicProperties.v().push_back( RiaResultNames::soil() );
if ( varList.contains( "PRESSURE" ) ) m_selectedDynamicProperties.v().push_back( "PRESSURE" );
if ( varList.contains( RiaResultNames::pressure() ) ) m_selectedDynamicProperties.v().push_back( RiaResultNames::pressure() );
}
if ( m_selectedStaticProperties().empty() )
@@ -1056,7 +1056,8 @@ void RimEclipseStatisticsCase::populateResultSelection()
QStringList varList =
caseData->results( RiaDefines::PorosityModelType::FRACTURE_MODEL )->resultNames( RiaDefines::ResultCatType::DYNAMIC_NATIVE );
if ( varList.contains( RiaResultNames::soil() ) ) m_selectedFractureDynamicProperties.v().push_back( RiaResultNames::soil() );
if ( varList.contains( "PRESSURE" ) ) m_selectedFractureDynamicProperties.v().push_back( "PRESSURE" );
if ( varList.contains( RiaResultNames::pressure() ) )
m_selectedFractureDynamicProperties.v().push_back( RiaResultNames::pressure() );
}
if ( m_selectedFractureStaticProperties().empty() )
@@ -309,15 +309,21 @@ void RimWellTargetMapping::updateAllBoundaries()
};
std::tie( m_minimumSaturationOil, m_maximumSaturationOil, m_defaultSaturationOil ) =
updateBoundaryValues( resultsData, { RigEclipseResultAddress( RiaDefines::ResultCatType::DYNAMIC_NATIVE, "SOIL" ) }, timeStepIdx );
updateBoundaryValues( resultsData,
{ RigEclipseResultAddress( RiaDefines::ResultCatType::DYNAMIC_NATIVE, RiaResultNames::soil() ) },
timeStepIdx );
m_defaultSaturationOil = 0.3;
std::tie( m_minimumSaturationGas, m_maximumSaturationGas, m_defaultSaturationGas ) =
updateBoundaryValues( resultsData, { RigEclipseResultAddress( RiaDefines::ResultCatType::DYNAMIC_NATIVE, "SGAS" ) }, timeStepIdx );
updateBoundaryValues( resultsData,
{ RigEclipseResultAddress( RiaDefines::ResultCatType::DYNAMIC_NATIVE, RiaResultNames::sgas() ) },
timeStepIdx );
m_defaultSaturationGas = 0.3;
std::tie( m_minimumPressure, m_maximumPressure, m_defaultPressure ) =
updateBoundaryValues( resultsData, { RigEclipseResultAddress( RiaDefines::ResultCatType::DYNAMIC_NATIVE, "PRESSURE" ) }, timeStepIdx );
updateBoundaryValues( resultsData,
{ RigEclipseResultAddress( RiaDefines::ResultCatType::DYNAMIC_NATIVE, RiaResultNames::pressure() ) },
timeStepIdx );
std::tie( m_minimumPermeability, m_maximumPermeability, m_defaultPermeability ) =
updateBoundaryValues( resultsData, { RigEclipseResultAddress( RiaDefines::ResultCatType::STATIC_NATIVE, "PERMX" ) }, 0 );
@@ -840,32 +840,40 @@ RigEclipseResultAddress RigCaseCellResultsData::defaultResult() const
auto isCandidateResult = []( const RigEclipseResultAddress& adr, RiaDefines::ResultCatType category )
{ return adr.resultCatType() == category && adr.resultName() != RiaResultNames::completionTypeResultName(); };
auto preferredResult = RiaPreferencesGrid::current()->preferredDynamicResult();
if ( preferredResult == RiaResultNames::undefinedResultName() )
{
return RigEclipseResultAddress( RiaDefines::ResultCatType::DYNAMIC_NATIVE, RiaResultNames::undefinedResultName() );
}
if ( maxTimeStepCount() > 0 )
{
auto prefs = RiaPreferencesGrid::current();
if ( prefs->loadAndShowSoil() && m_ownerCaseData )
if ( m_ownerCaseData )
{
// Use the saturation result matching the available phases, but only if the result exists or can be
// computed, i.e. a result entry is present. See issue #10122.
// Check which results are available
const auto phases = m_ownerCaseData->availablePhases();
const RigEclipseResultAddress soilAddress( RiaDefines::ResultCatType::DYNAMIC_NATIVE, RiaResultNames::soil() );
if ( phases.contains( RiaDefines::PhaseType::OIL_PHASE ) && hasResultEntry( soilAddress ) )
{
return soilAddress;
}
const RigEclipseResultAddress sgasAddress( RiaDefines::ResultCatType::DYNAMIC_NATIVE, RiaResultNames::sgas() );
if ( phases.contains( RiaDefines::PhaseType::GAS_PHASE ) && hasResultEntry( sgasAddress ) )
bool soilAvailable = phases.contains( RiaDefines::PhaseType::OIL_PHASE ) && hasResultEntry( soilAddress );
bool sgasAvailable = phases.contains( RiaDefines::PhaseType::GAS_PHASE ) && hasResultEntry( sgasAddress );
if ( preferredResult == RiaResultNames::soil() )
{
return sgasAddress;
if ( soilAvailable ) return soilAddress;
if ( sgasAvailable ) return sgasAddress;
}
else if ( preferredResult == RiaResultNames::sgas() )
{
if ( sgasAvailable ) return sgasAddress;
if ( soilAvailable ) return soilAddress;
}
const RigEclipseResultAddress swatAddress( RiaDefines::ResultCatType::DYNAMIC_NATIVE, RiaResultNames::swat() );
if ( hasResultEntry( swatAddress ) )
{
return swatAddress;
}
const RigEclipseResultAddress defaultAddress( RiaDefines::ResultCatType::DYNAMIC_NATIVE, preferredResult );
if ( hasResultEntry( defaultAddress ) ) return defaultAddress;
RiaLogging::warning( std::format( "Unable to find default dynamic result {}", preferredResult.toStdString() ) );
}
auto dynamicResult = std::find_if( allResults.begin(),
@@ -116,7 +116,7 @@ void RigWellTargetMapping::generateCandidates( RimEclipseCase* eclips
}
}
RigEclipseResultAddress pressureAddress( RiaDefines::ResultCatType::DYNAMIC_NATIVE, "PRESSURE" );
RigEclipseResultAddress pressureAddress( RiaDefines::ResultCatType::DYNAMIC_NATIVE, RiaResultNames::pressure() );
resultsData->ensureKnownResultLoaded( pressureAddress );
data.pressure = resultsData->cellScalarResults( pressureAddress, timeStepIdx );
@@ -18,6 +18,8 @@
#include "RiuPvtPlotUpdater.h"
#include "RiaResultNames.h"
#include "RigCaseCellResultsData.h"
#include "RigEclipseCaseData.h"
#include "RigEclipseResultAddress.h"
@@ -91,7 +93,8 @@ bool RiuPvtPlotUpdater::queryDataAndUpdatePlot( const RimEclipseResultDefinition
cellResultsData->ensureKnownResultLoaded( RigEclipseResultAddress( RiaDefines::ResultCatType::DYNAMIC_NATIVE, "RS" ) );
cellResultsData->ensureKnownResultLoaded( RigEclipseResultAddress( RiaDefines::ResultCatType::DYNAMIC_NATIVE, "RV" ) );
cellResultsData->ensureKnownResultLoaded( RigEclipseResultAddress( RiaDefines::ResultCatType::DYNAMIC_NATIVE, "PRESSURE" ) );
cellResultsData->ensureKnownResultLoaded(
RigEclipseResultAddress( RiaDefines::ResultCatType::DYNAMIC_NATIVE, RiaResultNames::pressure() ) );
cellResultsData->ensureKnownResultLoaded( RigEclipseResultAddress( RiaDefines::ResultCatType::STATIC_NATIVE, "PVTNUM" ) );
cvf::ref<RigResultAccessor> rsAccessor =
@@ -111,7 +114,8 @@ bool RiuPvtPlotUpdater::queryDataAndUpdatePlot( const RimEclipseResultDefinition
gridIndex,
porosityModel,
timeStepIndex,
RigEclipseResultAddress( RiaDefines::ResultCatType::DYNAMIC_NATIVE, "PRESSURE" ) );
RigEclipseResultAddress( RiaDefines::ResultCatType::DYNAMIC_NATIVE,
RiaResultNames::pressure() ) );
cvf::ref<RigResultAccessor> pvtnumAccessor =
RigResultAccessorFactory::createFromResultAddress( eclipseCaseData,
gridIndex,