diff --git a/ApplicationLibCode/ProjectDataModel/RimEclipseStatisticsCase.cpp b/ApplicationLibCode/ProjectDataModel/RimEclipseStatisticsCase.cpp index af91cc54eb..068085c345 100644 --- a/ApplicationLibCode/ProjectDataModel/RimEclipseStatisticsCase.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimEclipseStatisticsCase.cpp @@ -20,6 +20,7 @@ #include "RimEclipseStatisticsCase.h" +#include "RiaOptionItemFactory.h" #include "RiaResultNames.h" #include "RicNewViewFeature.h" @@ -93,6 +94,7 @@ RimEclipseStatisticsCase::RimEclipseStatisticsCase() CAF_PDM_InitFieldNoDefault( &m_dataSourceForStatistics, "DataSourceForStatistics", "Data Source" ); CAF_PDM_InitFieldNoDefault( &m_gridCalculation, "GridCalculation", "Grid Calculation" ); + CAF_PDM_InitFieldNoDefault( &m_gridCalculationFilterView, "GridCalculationFilterView", "Filter By View" ); CAF_PDM_InitScriptableFieldNoDefault( &m_selectedTimeSteps, "SelectedTimeSteps", "Time Step Selection" ); m_selectedTimeSteps.uiCapability()->setUiEditorTypeName( caf::PdmUiTreeSelectionEditor::uiEditorTypeName() ); @@ -424,7 +426,7 @@ void RimEclipseStatisticsCase::computeStatistics() stat.useZeroAsValueForInActiveCellsBasedOnUnionOfActiveCells(); } - stat.evaluateForResults( resultSpecification ); + stat.evaluateForResults( resultSpecification, m_gridCalculationFilterView() ); } //-------------------------------------------------------------------------------------------------- /// @@ -506,6 +508,7 @@ void RimEclipseStatisticsCase::defineUiOrdering( QString uiConfigName, caf::PdmU if ( m_dataSourceForStatistics() == DataSourceType::GRID_CALCULATION ) { group->add( &m_gridCalculation ); + group->add( &m_gridCalculationFilterView ); } else { @@ -622,6 +625,20 @@ QList RimEclipseStatisticsCase::calculateValueOptions( c return options; } + if ( &m_gridCalculationFilterView == fieldNeedingOptions ) + { + QList options; + + options.push_back( caf::PdmOptionItemInfo( nullptr, "None" ) ); + + for ( const auto& view : views() ) + { + RiaOptionItemFactory::appendOptionItemFromViewNameAndCaseName( view, &options ); + } + + return options; + } + if ( &m_selectedDynamicProperties == fieldNeedingOptions ) { QStringList varList = diff --git a/ApplicationLibCode/ProjectDataModel/RimEclipseStatisticsCase.h b/ApplicationLibCode/ProjectDataModel/RimEclipseStatisticsCase.h index 7c08e30a57..e9c0a825c2 100644 --- a/ApplicationLibCode/ProjectDataModel/RimEclipseStatisticsCase.h +++ b/ApplicationLibCode/ProjectDataModel/RimEclipseStatisticsCase.h @@ -110,6 +110,7 @@ class RimEclipseStatisticsCase : public RimEclipseCase caf::PdmField> m_dataSourceForStatistics; caf::PdmPtrField m_gridCalculation; + caf::PdmPtrField m_gridCalculationFilterView; caf::PdmField> m_selectedTimeSteps; diff --git a/ApplicationLibCode/ProjectDataModel/RimEclipseStatisticsCaseEvaluator.cpp b/ApplicationLibCode/ProjectDataModel/RimEclipseStatisticsCaseEvaluator.cpp index dbc20ecfcd..36f02c56be 100644 --- a/ApplicationLibCode/ProjectDataModel/RimEclipseStatisticsCaseEvaluator.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimEclipseStatisticsCaseEvaluator.cpp @@ -29,6 +29,7 @@ #include "RigResultModifierFactory.h" #include "RigStatisticsMath.h" +#include "RimEclipseView.h" #include "RimIdenticalGridCaseGroup.h" #include "RimReservoirCellResultsStorage.h" @@ -103,7 +104,7 @@ QString createResultNamePVal( const QString& resultName, double pValPos ) //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RimEclipseStatisticsCaseEvaluator::evaluateForResults( const QList& resultSpecification ) +void RimEclipseStatisticsCaseEvaluator::evaluateForResults( const QList& resultSpecification, RimEclipseView* filterView ) { CVF_ASSERT( m_destinationCase ); @@ -198,11 +199,20 @@ void RimEclipseStatisticsCaseEvaluator::evaluateForResults( const QList auto cellCount = static_cast( grid->cellCount() ); + cvf::ref visibility; + if ( filterView ) + { + visibility = filterView->currentTotalCellVisibility(); + } + // Loop over the cells in the grid, get the case values, and calculate the cell statistics #pragma omp parallel for schedule( dynamic ) firstprivate( statParams, values ) for ( int cellIdx = 0; cellIdx < cellCount; cellIdx++ ) { size_t reservoirCellIndex = grid->reservoirCellIndex( cellIdx ); + + if ( visibility.notNull() && !visibility->val( reservoirCellIndex ) ) continue; + if ( m_destinationCase->activeCellInfo( poroModel )->isActive( reservoirCellIndex ) ) { // Extract the cell values from each of the cases and assemble them into one vector diff --git a/ApplicationLibCode/ProjectDataModel/RimEclipseStatisticsCaseEvaluator.h b/ApplicationLibCode/ProjectDataModel/RimEclipseStatisticsCaseEvaluator.h index c92798276e..fd59666e53 100644 --- a/ApplicationLibCode/ProjectDataModel/RimEclipseStatisticsCaseEvaluator.h +++ b/ApplicationLibCode/ProjectDataModel/RimEclipseStatisticsCaseEvaluator.h @@ -81,7 +81,7 @@ class RimEclipseStatisticsCaseEvaluator void useZeroAsValueForInActiveCellsBasedOnUnionOfActiveCells(); - void evaluateForResults( const QList& resultSpecification ); + void evaluateForResults( const QList& resultSpecification, RimEclipseView* filterView ); private: void addNamedResults( const QList& resultSpecification );