mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
Add optional Eclipse case as data source in a view
This option makes it possible to look at data from other cases without creating one view per case.
This commit is contained in:
@@ -19,6 +19,7 @@
|
||||
#include "RimEclipseCaseTools.h"
|
||||
|
||||
#include "RimEclipseResultCase.h"
|
||||
#include "RimEclipseStatisticsCase.h"
|
||||
#include "RimProject.h"
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@@ -53,3 +54,30 @@ std::vector<RimEclipseResultCase*> RimEclipseCaseTools::eclipseResultCases()
|
||||
|
||||
return resultCases;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
std::vector<RimEclipseCase*> RimEclipseCaseTools::allEclipseGridCases()
|
||||
{
|
||||
// Find all Eclipse cases, including all single grid cases and source cases in a grid case group. Statistics cases are excluded.
|
||||
|
||||
RimProject* proj = RimProject::current();
|
||||
if ( proj )
|
||||
{
|
||||
std::vector<RimEclipseCase*> eclipseCases;
|
||||
for ( auto c : proj->allGridCases() )
|
||||
{
|
||||
if ( dynamic_cast<RimEclipseStatisticsCase*>( c ) ) continue;
|
||||
|
||||
if ( auto ec = dynamic_cast<RimEclipseCase*>( c ) )
|
||||
{
|
||||
eclipseCases.push_back( ec );
|
||||
}
|
||||
}
|
||||
|
||||
return eclipseCases;
|
||||
}
|
||||
|
||||
return {};
|
||||
}
|
||||
|
||||
@@ -29,6 +29,12 @@ class RimEclipseResultCase;
|
||||
class RimEclipseCaseTools
|
||||
{
|
||||
public:
|
||||
static std::vector<RimEclipseCase*> eclipseCases();
|
||||
// Single grid cases not part of a grid case group
|
||||
static std::vector<RimEclipseCase*> eclipseCases();
|
||||
|
||||
// Result cases based on RimEclipseCaseTools::elipseCases()
|
||||
static std::vector<RimEclipseResultCase*> eclipseResultCases();
|
||||
|
||||
// All Eclipse cases including grid case group source cases, excluding statistics cases
|
||||
static std::vector<RimEclipseCase*> allEclipseGridCases();
|
||||
};
|
||||
|
||||
@@ -48,6 +48,7 @@
|
||||
#include "RimCellEdgeColors.h"
|
||||
#include "RimCellFilterCollection.h"
|
||||
#include "RimEclipseCase.h"
|
||||
#include "RimEclipseCaseTools.h"
|
||||
#include "RimEclipseCellColors.h"
|
||||
#include "RimEclipseFaultColors.h"
|
||||
#include "RimEclipsePropertyFilter.h"
|
||||
@@ -82,6 +83,7 @@
|
||||
#include "RimStreamlineInViewCollection.h"
|
||||
#include "RimSurfaceInViewCollection.h"
|
||||
#include "RimTernaryLegendConfig.h"
|
||||
#include "RimTools.h"
|
||||
#include "RimViewController.h"
|
||||
#include "RimViewLinker.h"
|
||||
#include "RimViewNameConfig.h"
|
||||
@@ -140,6 +142,8 @@ RimEclipseView::RimEclipseView()
|
||||
"EclipseView",
|
||||
"The Eclipse 3d Reservoir View" );
|
||||
|
||||
CAF_PDM_InitFieldNoDefault( &m_customEclipseCase, "CustomEclipseCase", "Custom Case" );
|
||||
|
||||
CAF_PDM_InitScriptableFieldWithScriptKeywordNoDefault( &m_cellResult, "GridCellResult", "CellResult", "Cell Result", ":/CellResult.png" );
|
||||
m_cellResult = new RimEclipseCellColors();
|
||||
m_cellResult.uiCapability()->setUiTreeHidden( true );
|
||||
@@ -378,6 +382,19 @@ void RimEclipseView::setVisibleGridPartsWatertight()
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RimEclipseView::propagateEclipseCaseToChildObjects()
|
||||
{
|
||||
auto currentEclipseCase = eclipseCase();
|
||||
|
||||
cellResult()->setEclipseCase( currentEclipseCase );
|
||||
faultResultSettings()->customFaultResult()->setEclipseCase( currentEclipseCase );
|
||||
cellFilterCollection()->setCase( currentEclipseCase );
|
||||
m_streamlineCollection->setEclipseCase( currentEclipseCase );
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@@ -385,6 +402,20 @@ void RimEclipseView::fieldChangedByUi( const caf::PdmFieldHandle* changedField,
|
||||
{
|
||||
RimGridView::fieldChangedByUi( changedField, oldValue, newValue );
|
||||
|
||||
if ( changedField == &m_customEclipseCase )
|
||||
{
|
||||
propagateEclipseCaseToChildObjects();
|
||||
|
||||
// Sync with RimReloadCaseTools::updateAll3dViews
|
||||
loadDataAndUpdate();
|
||||
updateGridBoxData();
|
||||
updateAnnotationItems();
|
||||
|
||||
zoomAll();
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if ( changedField == &m_showInvalidCells )
|
||||
{
|
||||
scheduleGeometryRegen( INACTIVE );
|
||||
@@ -453,7 +484,7 @@ void RimEclipseView::onCreateDisplayModel()
|
||||
RiuMainWindow::instance()->setResultInfo(QString("RimEclipseView::onCreateDisplayModel() ") + QString::number(callCount++));
|
||||
#endif
|
||||
|
||||
if ( !( m_eclipseCase && m_eclipseCase->eclipseCaseData() ) ) return;
|
||||
if ( !( eclipseCase() && eclipseCase()->eclipseCaseData() ) ) return;
|
||||
|
||||
const bool cellFiltersActive = cellFilterCollection()->hasActiveFilters();
|
||||
const bool propertyFiltersActive = eclipsePropertyFilterCollection()->hasActiveFilters();
|
||||
@@ -1062,11 +1093,11 @@ void RimEclipseView::onLoadDataAndUpdate()
|
||||
|
||||
onUpdateScaleTransform();
|
||||
|
||||
if ( m_eclipseCase )
|
||||
if ( eclipseCase() )
|
||||
{
|
||||
if ( !m_eclipseCase->openReserviorCase() )
|
||||
if ( !eclipseCase()->openReserviorCase() )
|
||||
{
|
||||
RiaLogging::warning( "Could not open the Eclipse Grid file: \n" + m_eclipseCase->gridFileName() );
|
||||
RiaLogging::warning( "Could not open the Eclipse Grid file: \n" + eclipseCase()->gridFileName() );
|
||||
setEclipseCase( nullptr );
|
||||
return;
|
||||
}
|
||||
@@ -1278,9 +1309,9 @@ void RimEclipseView::onUpdateDisplayModelVisibility()
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
RigCaseCellResultsData* RimEclipseView::currentGridCellResults() const
|
||||
{
|
||||
if ( m_eclipseCase )
|
||||
if ( eclipseCase() )
|
||||
{
|
||||
return m_eclipseCase->results( cellResult()->porosityModel() );
|
||||
return eclipseCase()->results( cellResult()->porosityModel() );
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
@@ -1291,9 +1322,9 @@ RigCaseCellResultsData* RimEclipseView::currentGridCellResults() const
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
const RigActiveCellInfo* RimEclipseView::currentActiveCellInfo() const
|
||||
{
|
||||
if ( m_eclipseCase && m_eclipseCase->eclipseCaseData() )
|
||||
if ( eclipseCase() && eclipseCase()->eclipseCaseData() )
|
||||
{
|
||||
return m_eclipseCase->eclipseCaseData()->activeCellInfo( cellResult()->porosityModel() );
|
||||
return eclipseCase()->eclipseCaseData()->activeCellInfo( cellResult()->porosityModel() );
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
@@ -1367,15 +1398,15 @@ void RimEclipseView::onUpdateLegends()
|
||||
}
|
||||
}
|
||||
|
||||
if ( !m_eclipseCase || !nativeOrOverrideViewer() || !m_eclipseCase->eclipseCaseData() )
|
||||
if ( !eclipseCase() || !nativeOrOverrideViewer() || !eclipseCase()->eclipseCaseData() )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
RigEclipseCaseData* eclipseCase = m_eclipseCase->eclipseCaseData();
|
||||
CVF_ASSERT( eclipseCase );
|
||||
RigEclipseCaseData* eclipseCaseData = eclipseCase()->eclipseCaseData();
|
||||
CVF_ASSERT( eclipseCaseData );
|
||||
|
||||
RigCaseCellResultsData* results = eclipseCase->results( cellResult()->porosityModel() );
|
||||
RigCaseCellResultsData* results = eclipseCaseData->results( cellResult()->porosityModel() );
|
||||
CVF_ASSERT( results );
|
||||
|
||||
updateLegendRangesTextAndVisibility( cellResult()->legendConfig(),
|
||||
@@ -1535,10 +1566,8 @@ void RimEclipseView::updateLegendRangesTextAndVisibility( RimRegularLegendConfig
|
||||
void RimEclipseView::setEclipseCase( RimEclipseCase* reservoir )
|
||||
{
|
||||
m_eclipseCase = reservoir;
|
||||
cellResult()->setEclipseCase( reservoir );
|
||||
faultResultSettings()->customFaultResult()->setEclipseCase( reservoir );
|
||||
cellFilterCollection()->setCase( reservoir );
|
||||
m_streamlineCollection->setEclipseCase( reservoir );
|
||||
|
||||
propagateEclipseCaseToChildObjects();
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@@ -1546,6 +1575,8 @@ void RimEclipseView::setEclipseCase( RimEclipseCase* reservoir )
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
RimEclipseCase* RimEclipseView::eclipseCase() const
|
||||
{
|
||||
if ( m_customEclipseCase() != nullptr ) return m_customEclipseCase();
|
||||
|
||||
return m_eclipseCase;
|
||||
}
|
||||
|
||||
@@ -1564,9 +1595,9 @@ RimEclipseCase* RimEclipseView::eclipseCase() const
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RimEclipseView::syncronizeWellsWithResults()
|
||||
{
|
||||
if ( !( m_eclipseCase && m_eclipseCase->eclipseCaseData() ) ) return;
|
||||
if ( !( eclipseCase() && eclipseCase()->eclipseCaseData() ) ) return;
|
||||
|
||||
cvf::Collection<RigSimWellData> wellResults = m_eclipseCase->eclipseCaseData()->wellResults();
|
||||
cvf::Collection<RigSimWellData> wellResults = eclipseCase()->eclipseCaseData()->wellResults();
|
||||
|
||||
std::vector<caf::PdmPointer<RimSimWellInView>> newWells;
|
||||
|
||||
@@ -1880,6 +1911,10 @@ void RimEclipseView::defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering&
|
||||
caf::PdmUiGroup* nameGroup = uiOrdering.addNewGroup( "View Name" );
|
||||
nameConfig()->uiOrdering( uiConfigName, *nameGroup );
|
||||
|
||||
caf::PdmUiGroup* advancedGroup = uiOrdering.addNewGroup( "Advanced" );
|
||||
advancedGroup->setCollapsedByDefault();
|
||||
advancedGroup->add( &m_customEclipseCase );
|
||||
|
||||
uiOrdering.skipRemainingFields( true );
|
||||
}
|
||||
|
||||
@@ -1949,6 +1984,40 @@ std::set<RivCellSetEnum> RimEclipseView::allVisibleFaultGeometryTypes() const
|
||||
return faultGeoTypes;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
QList<caf::PdmOptionItemInfo> RimEclipseView::calculateValueOptions( const caf::PdmFieldHandle* fieldNeedingOptions )
|
||||
{
|
||||
if ( fieldNeedingOptions == &m_customEclipseCase )
|
||||
{
|
||||
QList<caf::PdmOptionItemInfo> options;
|
||||
|
||||
options.push_back( caf::PdmOptionItemInfo( "None", nullptr ) );
|
||||
|
||||
if ( m_eclipseCase && m_eclipseCase->mainGrid() )
|
||||
{
|
||||
auto currentGridCount = m_eclipseCase->mainGrid()->gridCount();
|
||||
|
||||
for ( auto eclCase : RimEclipseCaseTools::allEclipseGridCases() )
|
||||
{
|
||||
// Find all grid cases with same number of LGRs. If the grid count differs, a crash will happen related to
|
||||
// RimGridCollection::mainEclipseGrid(). This function is using firstAncestorOrThisOfType() to find the Eclipse case. If the
|
||||
// custom case in RimEclipseView has a different number of LGRs, a crash will happen
|
||||
|
||||
if ( eclCase && ( eclCase != m_eclipseCase ) && m_eclipseCase->mainGrid() && eclCase->mainGrid()->gridCount() == currentGridCount )
|
||||
{
|
||||
options.push_back( caf::PdmOptionItemInfo( eclCase->caseUserDescription(), eclCase, false, eclCase->uiIconProvider() ) );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return options;
|
||||
}
|
||||
|
||||
return RimGridView::calculateValueOptions( fieldNeedingOptions );
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
|
||||
@@ -184,6 +184,8 @@ protected:
|
||||
RimPropertyFilterCollection* nativePropertyFilterCollection();
|
||||
virtual std::set<RivCellSetEnum> allVisibleFaultGeometryTypes() const;
|
||||
|
||||
QList<caf::PdmOptionItemInfo> calculateValueOptions( const caf::PdmFieldHandle* fieldNeedingOptions ) override;
|
||||
|
||||
private:
|
||||
QString createAutoName() const override;
|
||||
|
||||
@@ -217,6 +219,8 @@ private:
|
||||
void setVisibleGridParts( const std::vector<RivCellSetEnum>& cellSets );
|
||||
void setVisibleGridPartsWatertight();
|
||||
|
||||
void propagateEclipseCaseToChildObjects();
|
||||
|
||||
protected:
|
||||
cvf::ref<cvf::ModelBasicList> m_faultReactVizModel;
|
||||
|
||||
@@ -241,7 +245,8 @@ private:
|
||||
caf::PdmChildField<RimEclipsePropertyFilterCollection*> m_propertyFilterCollection;
|
||||
caf::PdmPointer<RimEclipsePropertyFilterCollection> m_overridePropertyFilterCollection;
|
||||
|
||||
caf::PdmPointer<RimEclipseCase> m_eclipseCase;
|
||||
caf::PdmPointer<RimEclipseCase> m_eclipseCase;
|
||||
caf::PdmPtrField<RimEclipseCase*> m_customEclipseCase;
|
||||
|
||||
cvf::ref<RivReservoirViewPartMgr> m_reservoirGridPartManager;
|
||||
cvf::ref<RivReservoirSimWellsPartMgr> m_simWellsPartManager;
|
||||
|
||||
Reference in New Issue
Block a user