Add optional input value filter for calculation

This commit is contained in:
Magne Sjaastad 2023-11-27 15:26:33 +01:00
parent 3f6883b875
commit 537cead7f1
3 changed files with 22 additions and 11 deletions

View File

@ -318,11 +318,13 @@ void RimEclipseStatisticsCase::computeStatistics()
for ( auto calc : dependentCalculations ) for ( auto calc : dependentCalculations )
{ {
// A view filter is depending on active cells for a specific case, and the current implementation does not work for grids with cvf::UByteArray* inputValueVisibilityFilter = nullptr;
// different active cells. Disable use of view filter for now. if ( m_gridCalculationFilterView() )
const bool useViewFilter = false; {
inputValueVisibilityFilter = m_gridCalculationFilterView()->currentTotalCellVisibility().p();
}
calc->calculateForCases( sourceCases, useViewFilter, timeStepIndices ); calc->calculateForCases( sourceCases, inputValueVisibilityFilter, timeStepIndices );
} }
} }
@ -629,7 +631,7 @@ QList<caf::PdmOptionItemInfo> RimEclipseStatisticsCase::calculateValueOptions( c
{ {
QList<caf::PdmOptionItemInfo> options; QList<caf::PdmOptionItemInfo> options;
options.push_back( caf::PdmOptionItemInfo( nullptr, "None" ) ); options.push_back( caf::PdmOptionItemInfo( "None", nullptr ) );
for ( const auto& view : views() ) for ( const auto& view : views() )
{ {

View File

@ -127,9 +127,9 @@ bool RimGridCalculation::calculate()
} }
} }
auto timeSteps = std::nullopt; auto timeSteps = std::nullopt;
bool useViewFilter = true; auto inputValueVisibilityFilter = nullptr;
return calculateForCases( outputEclipseCases(), useViewFilter, timeSteps ); return calculateForCases( outputEclipseCases(), inputValueVisibilityFilter, timeSteps );
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@ -537,7 +537,7 @@ void RimGridCalculation::removeDependentObjects()
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
bool RimGridCalculation::calculateForCases( const std::vector<RimEclipseCase*>& calculationCases, bool RimGridCalculation::calculateForCases( const std::vector<RimEclipseCase*>& calculationCases,
bool useViewFilter, cvf::UByteArray* inputValueVisibilityFilter,
std::optional<std::vector<size_t>> timeSteps ) std::optional<std::vector<size_t>> timeSteps )
{ {
if ( calculationCases.empty() ) return true; if ( calculationCases.empty() ) return true;
@ -604,7 +604,16 @@ bool RimGridCalculation::calculateForCases( const std::vector<RimEclipseCase*>&
{ {
RimGridCalculationVariable* v = dynamic_cast<RimGridCalculationVariable*>( m_variables[i] ); RimGridCalculationVariable* v = dynamic_cast<RimGridCalculationVariable*>( m_variables[i] );
CAF_ASSERT( v != nullptr ); CAF_ASSERT( v != nullptr );
values.push_back( getInputVectorForVariable( v, tsId, porosityModel, calculationCase ) );
auto inputValues = getInputVectorForVariable( v, tsId, porosityModel, calculationCase );
if ( inputValueVisibilityFilter )
{
const double defaultValue = 0.0;
replaceFilteredValuesWithDefaultValue( defaultValue, inputValueVisibilityFilter, inputValues, porosityModel, calculationCase );
}
values.push_back( inputValues );
} }
ExpressionParser parser; ExpressionParser parser;

View File

@ -58,7 +58,7 @@ public:
std::vector<RimEclipseCase*> outputEclipseCases() const; std::vector<RimEclipseCase*> outputEclipseCases() const;
RigEclipseResultAddress outputAddress() const; RigEclipseResultAddress outputAddress() const;
bool calculateForCases( const std::vector<RimEclipseCase*>& calculationCases, bool calculateForCases( const std::vector<RimEclipseCase*>& calculationCases,
bool useViewFilter, cvf::UByteArray* inputValueVisibilityFilter,
std::optional<std::vector<size_t>> timeSteps ); std::optional<std::vector<size_t>> timeSteps );
void assignEclipseCaseForNullPointers( RimEclipseCase* eclipseCase ); void assignEclipseCaseForNullPointers( RimEclipseCase* eclipseCase );