mirror of
https://github.com/OPM/ResInsight.git
synced 2026-08-27 05:37:21 -05:00
#12215 Well target candidates: Adjust user interface for single case.
Fixes #12215.
This commit is contained in:
@@ -18,6 +18,7 @@
|
||||
|
||||
#include "RicNewWellTargetCandidatesGeneratorFeature.h"
|
||||
|
||||
#include "RimEclipseCase.h"
|
||||
#include "RimEclipseCaseEnsemble.h"
|
||||
#include "RimWellTargetCandidatesGenerator.h"
|
||||
|
||||
@@ -34,16 +35,24 @@ CAF_CMD_SOURCE_INIT( RicNewWellTargetCandidatesGeneratorFeature, "RicNewWellTarg
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RicNewWellTargetCandidatesGeneratorFeature::onActionTriggered( bool isChecked )
|
||||
{
|
||||
auto ensembles = caf::selectedObjectsByTypeStrict<RimEclipseCaseEnsemble*>();
|
||||
if ( ensembles.empty() ) return;
|
||||
if ( auto ensembles = caf::selectedObjectsByTypeStrict<RimEclipseCaseEnsemble*>(); !ensembles.empty() )
|
||||
{
|
||||
auto ensemble = ensembles.front();
|
||||
auto generator = new RimWellTargetCandidatesGenerator();
|
||||
ensemble->addWellTargetsGenerator( generator );
|
||||
|
||||
auto ensemble = ensembles.front();
|
||||
auto generator = new RimWellTargetCandidatesGenerator();
|
||||
ensemble->addWellTargetsGenerator( generator );
|
||||
ensemble->updateConnectedEditors();
|
||||
RiuMainWindow::instance()->selectAsCurrentItem( generator );
|
||||
}
|
||||
else if ( auto eclipseCases = caf::selectedObjectsByTypeStrict<RimEclipseCase*>(); !eclipseCases.empty() )
|
||||
{
|
||||
auto eclipseCase = eclipseCases.front();
|
||||
auto generator = new RimWellTargetCandidatesGenerator();
|
||||
eclipseCase->addWellTargetsGenerator( generator );
|
||||
|
||||
ensemble->updateConnectedEditors();
|
||||
|
||||
RiuMainWindow::instance()->selectAsCurrentItem( generator );
|
||||
eclipseCase->updateConnectedEditors();
|
||||
RiuMainWindow::instance()->selectAsCurrentItem( generator );
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
|
||||
@@ -277,6 +277,8 @@ caf::CmdFeatureMenuBuilder RimContextCommandBuilder::commandsFromSelection()
|
||||
menuBuilder << "RicEclipseCaseNewGroupFeature";
|
||||
menuBuilder << "Separator";
|
||||
menuBuilder << "RicCopyReferencesToClipboardFeature";
|
||||
menuBuilder << "RicNewWellTargetCandidatesGeneratorFeature";
|
||||
|
||||
menuBuilder << "Separator";
|
||||
}
|
||||
else if ( dynamic_cast<RimGridInfoCollection*>( firstUiItem ) )
|
||||
|
||||
@@ -72,6 +72,7 @@
|
||||
#include "RimWellLogPlotCollection.h"
|
||||
#include "RimWellPath.h"
|
||||
#include "RimWellPathCollection.h"
|
||||
#include "RimWellTargetCandidatesGenerator.h"
|
||||
|
||||
#include "cafPdmDocument.h"
|
||||
#include "cafPdmFieldScriptingCapability.h"
|
||||
@@ -119,6 +120,8 @@ RimEclipseCase::RimEclipseCase()
|
||||
CAF_PDM_InitFieldNoDefault( &m_viewCollection, "ViewCollection", "Views" );
|
||||
m_viewCollection = new RimEclipseViewCollection;
|
||||
|
||||
CAF_PDM_InitFieldNoDefault( &m_wellTargetGenerators, "WellTargetGenerators", "Well Target Candidates Generators" );
|
||||
|
||||
// Init
|
||||
|
||||
m_matrixModelResults = new RimReservoirCellResultsStorage;
|
||||
@@ -126,7 +129,6 @@ RimEclipseCase::RimEclipseCase()
|
||||
|
||||
m_fractureModelResults = new RimReservoirCellResultsStorage;
|
||||
m_fractureModelResults.uiCapability()->setUiTreeChildrenHidden( true );
|
||||
|
||||
setReservoirData( nullptr );
|
||||
|
||||
m_readerSettings = RiaPreferencesGrid::current()->readerSettings();
|
||||
@@ -557,6 +559,8 @@ void RimEclipseCase::defineUiTreeOrdering( caf::PdmUiTreeOrdering& uiTreeOrderin
|
||||
{
|
||||
uiTreeOrdering.add( &m_2dIntersectionViewCollection );
|
||||
}
|
||||
|
||||
uiTreeOrdering.add( &m_wellTargetGenerators );
|
||||
}
|
||||
else if ( uiConfigName == "MainWindow.DataSources" )
|
||||
{
|
||||
@@ -1287,3 +1291,12 @@ std::vector<RimEclipseContourMapView*> RimEclipseCase::contourMapViews() const
|
||||
|
||||
return views;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RimEclipseCase::addWellTargetsGenerator( RimWellTargetCandidatesGenerator* generator )
|
||||
{
|
||||
m_wellTargetGenerators.push_back( generator );
|
||||
generator->updateResultDefinition();
|
||||
}
|
||||
|
||||
@@ -40,6 +40,7 @@
|
||||
|
||||
class QString;
|
||||
|
||||
class RimWellTargetCandidatesGenerator;
|
||||
class RigCaseCellResultsData;
|
||||
class RigEclipseCaseData;
|
||||
class RigGridBase;
|
||||
@@ -130,6 +131,8 @@ public:
|
||||
void setReaderSettings( RifReaderSettings& readerSettings );
|
||||
RifReaderSettings readerSettings() const;
|
||||
|
||||
void addWellTargetsGenerator( RimWellTargetCandidatesGenerator* generator );
|
||||
|
||||
void updateResultAddressCollection();
|
||||
|
||||
protected:
|
||||
@@ -174,6 +177,8 @@ private:
|
||||
caf::PdmChildField<RimReservoirCellResultsStorage*> m_fractureModelResults;
|
||||
caf::PdmChildField<RimEclipseViewCollection*> m_viewCollection;
|
||||
|
||||
caf::PdmChildArrayField<RimWellTargetCandidatesGenerator*> m_wellTargetGenerators;
|
||||
|
||||
caf::PdmField<std::vector<caf::FilePath>> m_filesContainingFaults;
|
||||
|
||||
// Obsolete fields:
|
||||
|
||||
@@ -118,8 +118,9 @@ RimWellTargetCandidatesGenerator::RimWellTargetCandidatesGenerator()
|
||||
CAF_PDM_InitField( &m_cellCountJ, "CellCountJ", 100, "Cell Count J" );
|
||||
CAF_PDM_InitField( &m_cellCountK, "CellCountK", 10, "Cell Count K" );
|
||||
|
||||
CAF_PDM_InitField( &m_generateEnsembleStatistics, "GenerateEnsembleStatistics", true, "Generate Ensemble Statistics" );
|
||||
caf::PdmUiPushButtonEditor::configureEditorLabelHidden( &m_generateEnsembleStatistics );
|
||||
CAF_PDM_InitField( &m_generateButton, "GenerateButton", true, "Generate" );
|
||||
caf::PdmUiPushButtonEditor::configureEditorLabelHidden( &m_generateButton );
|
||||
m_generateButton.xmlCapability()->disableIO();
|
||||
|
||||
CAF_PDM_InitFieldNoDefault( &m_ensembleStatisticsCase, "EnsembleStatisticsCase", "Ensemble Statistics Case" );
|
||||
|
||||
@@ -134,6 +135,8 @@ RimWellTargetCandidatesGenerator::RimWellTargetCandidatesGenerator()
|
||||
|
||||
m_minimumTransmissibility = cvf::UNDEFINED_DOUBLE;
|
||||
m_maximumTransmissibility = cvf::UNDEFINED_DOUBLE;
|
||||
|
||||
setDeletable( true );
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@@ -149,11 +152,14 @@ RimWellTargetCandidatesGenerator::~RimWellTargetCandidatesGenerator()
|
||||
void RimWellTargetCandidatesGenerator::fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue )
|
||||
{
|
||||
updateAllBoundaries();
|
||||
generateCandidates( firstCase() );
|
||||
|
||||
if ( changedField == &m_generateEnsembleStatistics )
|
||||
if ( changedField == &m_generateButton )
|
||||
{
|
||||
generateEnsembleStatistics();
|
||||
auto hasEnsembleParent = firstAncestorOrThisOfType<RimEclipseCaseEnsemble>() != nullptr;
|
||||
if ( hasEnsembleParent )
|
||||
generateEnsembleStatistics();
|
||||
else if ( auto eclipseCase = firstCase() )
|
||||
generateCandidates( eclipseCase );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -180,12 +186,9 @@ QList<caf::PdmOptionItemInfo> RimWellTargetCandidatesGenerator::calculateValueOp
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RimWellTargetCandidatesGenerator::updateAllBoundaries()
|
||||
{
|
||||
auto ensemble = firstAncestorOrThisOfType<RimEclipseCaseEnsemble>();
|
||||
if ( !ensemble ) return;
|
||||
RimEclipseCase* eclipseCase = firstCase();
|
||||
if ( !eclipseCase ) return;
|
||||
|
||||
if ( ensemble->cases().empty() ) return;
|
||||
|
||||
RimEclipseCase* eclipseCase = ensemble->cases().front();
|
||||
eclipseCase->ensureReservoirCaseIsOpen();
|
||||
|
||||
auto resultsData = eclipseCase->results( RiaDefines::PorosityModelType::MATRIX_MODEL );
|
||||
@@ -285,11 +288,11 @@ void RimWellTargetCandidatesGenerator::defineEditorAttribute( const caf::PdmFiel
|
||||
}
|
||||
}
|
||||
|
||||
if ( field == &m_generateEnsembleStatistics )
|
||||
if ( field == &m_generateButton )
|
||||
{
|
||||
if ( auto attrib = dynamic_cast<caf::PdmUiPushButtonEditorAttribute*>( attribute ) )
|
||||
{
|
||||
attrib->m_buttonText = "Create Ensemble Statistics";
|
||||
attrib->m_buttonText = "Generate";
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -368,16 +371,23 @@ void RimWellTargetCandidatesGenerator::defineUiOrdering( QString uiConfigName, c
|
||||
caf::PdmUiGroup* resultDefinitionGroup = uiOrdering.addNewGroup( "Cluster Filter" );
|
||||
m_resultDefinition->uiOrdering( uiConfigName, *resultDefinitionGroup );
|
||||
|
||||
caf::PdmUiGroup* ensembleGridGroup = uiOrdering.addNewGroup( "Ensemble Statistics Grid" );
|
||||
ensembleGridGroup->add( &m_cellCountI );
|
||||
ensembleGridGroup->add( &m_cellCountJ );
|
||||
ensembleGridGroup->add( &m_cellCountK );
|
||||
auto hasEnsembleParent = firstAncestorOrThisOfType<RimEclipseCaseEnsemble>() != nullptr;
|
||||
|
||||
if ( hasEnsembleParent )
|
||||
{
|
||||
caf::PdmUiGroup* ensembleGridGroup = uiOrdering.addNewGroup( "Ensemble Statistics Grid" );
|
||||
ensembleGridGroup->add( &m_cellCountI );
|
||||
ensembleGridGroup->add( &m_cellCountJ );
|
||||
ensembleGridGroup->add( &m_cellCountK );
|
||||
}
|
||||
|
||||
caf::PdmUiGroup* advancedGroup = uiOrdering.addNewGroup( "Advanced" );
|
||||
advancedGroup->add( &m_maxIterations );
|
||||
advancedGroup->add( &m_maxClusters );
|
||||
|
||||
uiOrdering.add( &m_generateEnsembleStatistics );
|
||||
uiOrdering.add( &m_generateButton );
|
||||
|
||||
uiOrdering.skipRemainingFields();
|
||||
|
||||
if ( m_minimumVolume == cvf::UNDEFINED_DOUBLE || m_maximumVolume == cvf::UNDEFINED_DOUBLE )
|
||||
{
|
||||
@@ -405,8 +415,10 @@ RigWellTargetCandidatesGenerator::ClusteringLimits RimWellTargetCandidatesGenera
|
||||
RimEclipseCase* RimWellTargetCandidatesGenerator::firstCase() const
|
||||
{
|
||||
auto ensemble = firstAncestorOrThisOfType<RimEclipseCaseEnsemble>();
|
||||
if ( !ensemble || ensemble->cases().empty() ) return nullptr;
|
||||
return ensemble->cases()[0];
|
||||
if ( ensemble && !ensemble->cases().empty() )
|
||||
return ensemble->cases()[0];
|
||||
else
|
||||
return firstAncestorOrThisOfType<RimEclipseCase>();
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
|
||||
@@ -81,7 +81,7 @@ private:
|
||||
caf::PdmField<int> m_cellCountJ;
|
||||
caf::PdmField<int> m_cellCountK;
|
||||
|
||||
caf::PdmField<bool> m_generateEnsembleStatistics;
|
||||
caf::PdmField<bool> m_generateButton;
|
||||
|
||||
caf::PdmChildField<RimEclipseCase*> m_ensembleStatisticsCase;
|
||||
|
||||
|
||||
@@ -673,13 +673,18 @@ std::vector<RigWellTargetCandidatesGenerator::ClusterStatistics>
|
||||
const std::vector<double>& porvSoilAndSgas = resultsData->cellScalarResults( porvSoilAndSgasAddress, timeStepIdx );
|
||||
|
||||
RigEclipseResultAddress fipOilAddress( RiaDefines::ResultCatType::DYNAMIC_NATIVE, "FIPOIL" );
|
||||
resultsData->ensureKnownResultLoaded( fipOilAddress );
|
||||
const std::vector<double>& fipOil = resultsData->cellScalarResults( fipOilAddress, timeStepIdx );
|
||||
std::vector<double> fipOil;
|
||||
if ( resultsData->ensureKnownResultLoaded( fipOilAddress ) )
|
||||
{
|
||||
fipOil = resultsData->cellScalarResults( fipOilAddress, timeStepIdx );
|
||||
}
|
||||
|
||||
RigEclipseResultAddress fipGasAddress( RiaDefines::ResultCatType::DYNAMIC_NATIVE, "FIPGAS" );
|
||||
resultsData->ensureKnownResultLoaded( fipGasAddress );
|
||||
const std::vector<double>& fipGas = resultsData->cellScalarResults( fipGasAddress, timeStepIdx );
|
||||
|
||||
std::vector<double> fipGas;
|
||||
if ( resultsData->ensureKnownResultLoaded( fipGasAddress ) )
|
||||
{
|
||||
fipGas = resultsData->cellScalarResults( fipGasAddress, timeStepIdx );
|
||||
}
|
||||
RigEclipseResultAddress clusterAddress( RiaDefines::ResultCatType::GENERATED, clusterResultName );
|
||||
resultsData->ensureKnownResultLoaded( clusterAddress );
|
||||
const std::vector<double>& clusterIds = resultsData->cellScalarResults( clusterAddress, 0 );
|
||||
|
||||
Reference in New Issue
Block a user