diff --git a/ApplicationLibCode/ProjectDataModel/RimGridCalculation.cpp b/ApplicationLibCode/ProjectDataModel/RimGridCalculation.cpp index c100d1661c..ecad488259 100644 --- a/ApplicationLibCode/ProjectDataModel/RimGridCalculation.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimGridCalculation.cpp @@ -698,12 +698,13 @@ void RimGridCalculation::replaceFilteredValuesWithVector( const std::vector visibility, - std::vector& resultValues, - RigActiveCellInfo* activeCellInfo ) +size_t RimGridCalculation::replaceFilteredValuesWithDefaultValue( double defaultValue, + cvf::ref visibility, + std::vector& resultValues, + RigActiveCellInfo* activeCellInfo ) { auto activeReservoirCellIndices = activeCellInfo->activeReservoirCellIndices(); @@ -711,15 +712,20 @@ void RimGridCalculation::replaceFilteredValuesWithDefaultValue( double CAF_ASSERT( numActiveCells == (int)resultValues.size() ); -#pragma omp parallel for + size_t replacedCount = 0; + +#pragma omp parallel for reduction( + : replacedCount ) for ( int i = 0; i < numActiveCells; i++ ) { const auto reservoirCellIndex = activeReservoirCellIndices[i]; if ( !visibility->val( reservoirCellIndex.value() ) ) { resultValues[i] = defaultValue; + replacedCount++; } } + + return replacedCount; } //-------------------------------------------------------------------------------------------------- @@ -961,17 +967,30 @@ bool RimGridCalculation::calculateForCases( const std::vector& } else if ( hasAggregationExpression ) { - const double defaultValue = 0.0; + const double defaultValue = 0.0; + size_t nonVisibleCount = 0; if ( inputValueVisibilityFilter ) { auto activeCellInfo = calculationCase->eclipseCaseData()->activeCellInfo( porosityModel ); - replaceFilteredValuesWithDefaultValue( defaultValue, inputValueVisibilityFilter, dataForVariable, activeCellInfo ); + nonVisibleCount = + replaceFilteredValuesWithDefaultValue( defaultValue, inputValueVisibilityFilter, dataForVariable, activeCellInfo ); } // Aggregation functions include all values in the vector. Replace undefined values with the // default value to avoid contaminating aggregated values like sum() with infinity. Undefined // values are ignored by other statistics computations, like the histogram in the 3d view. - invalidValueCountPerVariable[i] += replaceInvalidValuesWithDefaultValue( defaultValue, dataForVariable ); + const size_t invalidCount = replaceInvalidValuesWithDefaultValue( defaultValue, dataForVariable ); + invalidValueCountPerVariable[i] += invalidCount; + + RiaLogging::debug( std::format( " Case '{}', time step {}: variable '{}': {} of {} values used in aggregation " + "({} non-visible and {} undefined values replaced with 0.0)", + calculationCase->caseUserDescription().toStdString(), + tsId, + v->name().toStdString(), + dataForVariable.size() - nonVisibleCount - invalidCount, + dataForVariable.size(), + nonVisibleCount, + invalidCount ) ); } dataForAllVariables.push_back( dataForVariable ); diff --git a/ApplicationLibCode/ProjectDataModel/RimGridCalculation.h b/ApplicationLibCode/ProjectDataModel/RimGridCalculation.h index ada563ec4e..a16680c2ac 100644 --- a/ApplicationLibCode/ProjectDataModel/RimGridCalculation.h +++ b/ApplicationLibCode/ProjectDataModel/RimGridCalculation.h @@ -120,10 +120,10 @@ protected: std::vector& resultValues, RigActiveCellInfo* activeCellInfo ); - static void replaceFilteredValuesWithDefaultValue( double defaultValue, - cvf::ref visibility, - std::vector& resultValues, - RigActiveCellInfo* activeCellInfo ); + static size_t replaceFilteredValuesWithDefaultValue( double defaultValue, + cvf::ref visibility, + std::vector& resultValues, + RigActiveCellInfo* activeCellInfo ); using DefaultValueConfig = std::pair; DefaultValueConfig defaultValueConfiguration() const; diff --git a/ApplicationLibCode/ReservoirDataModel/RigEclipseNativeVisibleCellsStatCalc.cpp b/ApplicationLibCode/ReservoirDataModel/RigEclipseNativeVisibleCellsStatCalc.cpp index 6d7ee8aa87..94a515a6b7 100644 --- a/ApplicationLibCode/ReservoirDataModel/RigEclipseNativeVisibleCellsStatCalc.cpp +++ b/ApplicationLibCode/ReservoirDataModel/RigEclipseNativeVisibleCellsStatCalc.cpp @@ -19,6 +19,7 @@ #include "RigEclipseNativeVisibleCellsStatCalc.h" +#include "RiaLogging.h" #include "RiaResultNames.h" #include "RigActiveCellInfo.h" @@ -27,6 +28,7 @@ #include "RigWeightedMeanCalc.h" #include +#include //-------------------------------------------------------------------------------------------------- /// @@ -104,6 +106,12 @@ void RigEclipseNativeVisibleCellsStatCalc::valueSumAndSampleCount( size_t timeSt traverseCells( acc, timeStepIndex ); valueSum = acc.valueSum; sampleCount = acc.sampleCount; + + RiaLogging::debug( std::format( "Visible cells statistics for '{}', time step {}: sum = {}, number of values used = {}", + m_resultAddress.resultName().toStdString(), + timeStepIndex, + valueSum, + sampleCount ) ); } //--------------------------------------------------------------------------------------------------