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 )
{
// A view filter is depending on active cells for a specific case, and the current implementation does not work for grids with
// different active cells. Disable use of view filter for now.
const bool useViewFilter = false;
cvf::UByteArray* inputValueVisibilityFilter = nullptr;
if ( m_gridCalculationFilterView() )
{
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;
options.push_back( caf::PdmOptionItemInfo( nullptr, "None" ) );
options.push_back( caf::PdmOptionItemInfo( "None", nullptr ) );
for ( const auto& view : views() )
{

View File

@ -128,8 +128,8 @@ bool RimGridCalculation::calculate()
}
auto timeSteps = std::nullopt;
bool useViewFilter = true;
return calculateForCases( outputEclipseCases(), useViewFilter, timeSteps );
auto inputValueVisibilityFilter = nullptr;
return calculateForCases( outputEclipseCases(), inputValueVisibilityFilter, timeSteps );
}
//--------------------------------------------------------------------------------------------------
@ -537,7 +537,7 @@ void RimGridCalculation::removeDependentObjects()
///
//--------------------------------------------------------------------------------------------------
bool RimGridCalculation::calculateForCases( const std::vector<RimEclipseCase*>& calculationCases,
bool useViewFilter,
cvf::UByteArray* inputValueVisibilityFilter,
std::optional<std::vector<size_t>> timeSteps )
{
if ( calculationCases.empty() ) return true;
@ -604,7 +604,16 @@ bool RimGridCalculation::calculateForCases( const std::vector<RimEclipseCase*>&
{
RimGridCalculationVariable* v = dynamic_cast<RimGridCalculationVariable*>( m_variables[i] );
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;

View File

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