From ebeaa8088c518aa2b6d6bc45a5031ad0b9713808 Mon Sep 17 00:00:00 2001 From: Kristian Bendiksen Date: Wed, 22 Sep 2021 14:36:30 +0200 Subject: [PATCH] #8030 Ensemble Fracture Statistics: report area for individual fractures --- .../RimEnsembleFractureStatistics.cpp | 9 +++ ...igEnsembleFractureStatisticsCalculator.cpp | 72 +++++++++++-------- .../RigEnsembleFractureStatisticsCalculator.h | 4 ++ 3 files changed, 55 insertions(+), 30 deletions(-) diff --git a/ApplicationLibCode/ProjectDataModel/Completions/RimEnsembleFractureStatistics.cpp b/ApplicationLibCode/ProjectDataModel/Completions/RimEnsembleFractureStatistics.cpp index 6ca364472f..f32588a9f8 100644 --- a/ApplicationLibCode/ProjectDataModel/Completions/RimEnsembleFractureStatistics.cpp +++ b/ApplicationLibCode/ProjectDataModel/Completions/RimEnsembleFractureStatistics.cpp @@ -359,6 +359,15 @@ void RimEnsembleFractureStatistics::loadAndUpdateData() std::vector> stimPlanFractureDefinitions = readFractureDefinitions( m_filePaths.v(), unitSystem ); + // Log area for each fracture for debugging + std::vector area = + RigEnsembleFractureStatisticsCalculator::calculateProperty( stimPlanFractureDefinitions, + RigEnsembleFractureStatisticsCalculator::PropertyType::AREA ); + for ( size_t i = 0; i < m_filePaths.v().size(); i++ ) + { + RiaLogging::info( QString( "%1 Area: %2" ).arg( m_filePaths.v()[i].path() ).arg( area[i] ) ); + } + if ( m_excludeZeroWidthFractures() ) { size_t numBeforeFiltering = stimPlanFractureDefinitions.size(); diff --git a/ApplicationLibCode/ReservoirDataModel/RigEnsembleFractureStatisticsCalculator.cpp b/ApplicationLibCode/ReservoirDataModel/RigEnsembleFractureStatisticsCalculator.cpp index e3065fbcb8..7209122328 100644 --- a/ApplicationLibCode/ReservoirDataModel/RigEnsembleFractureStatisticsCalculator.cpp +++ b/ApplicationLibCode/ReservoirDataModel/RigEnsembleFractureStatisticsCalculator.cpp @@ -78,6 +78,47 @@ RigHistogramData RigEnsembleFractureStatisticsCalculator::createStatisticsData( const std::vector>& fractureDefinitions, PropertyType propertyType, int numBins ) +{ + std::vector samples = calculateProperty( fractureDefinitions, propertyType ); + + RigHistogramData histogramData; + + double sum; + double range; + double dev; + RigStatisticsMath::calculateBasicStatistics( samples, + &histogramData.min, + &histogramData.max, + &sum, + &range, + &histogramData.mean, + &dev ); + + double p50; + double mean; + RigStatisticsMath::calculateStatisticsCurves( samples, + &histogramData.p10, + &p50, + &histogramData.p90, + &mean, + RigStatisticsMath::PercentileStyle::SWITCHED ); + + std::vector histogram; + RigHistogramCalculator histogramCalculator( histogramData.min, histogramData.max, numBins, &histogram ); + for ( auto s : samples ) + histogramCalculator.addValue( s ); + + histogramData.histogram = histogram; + + return histogramData; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +std::vector RigEnsembleFractureStatisticsCalculator::calculateProperty( + const std::vector>& fractureDefinitions, + PropertyType propertyType ) { std::vector samples; if ( propertyType == PropertyType::HEIGHT ) @@ -112,36 +153,7 @@ RigHistogramData RigEnsembleFractureStatisticsCalculator::createStatisticsData( samples = calculateFormationDip( fractureDefinitions ); } - RigHistogramData histogramData; - - double sum; - double range; - double dev; - RigStatisticsMath::calculateBasicStatistics( samples, - &histogramData.min, - &histogramData.max, - &sum, - &range, - &histogramData.mean, - &dev ); - - double p50; - double mean; - RigStatisticsMath::calculateStatisticsCurves( samples, - &histogramData.p10, - &p50, - &histogramData.p90, - &mean, - RigStatisticsMath::PercentileStyle::SWITCHED ); - - std::vector histogram; - RigHistogramCalculator histogramCalculator( histogramData.min, histogramData.max, numBins, &histogram ); - for ( auto s : samples ) - histogramCalculator.addValue( s ); - - histogramData.histogram = histogram; - - return histogramData; + return samples; } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ReservoirDataModel/RigEnsembleFractureStatisticsCalculator.h b/ApplicationLibCode/ReservoirDataModel/RigEnsembleFractureStatisticsCalculator.h index 3c1c234bc6..4fb6f5da15 100644 --- a/ApplicationLibCode/ReservoirDataModel/RigEnsembleFractureStatisticsCalculator.h +++ b/ApplicationLibCode/ReservoirDataModel/RigEnsembleFractureStatisticsCalculator.h @@ -60,6 +60,10 @@ public: static std::vector> removeZeroWidthDefinitions( const std::vector>& fractureDefinitions ); + static std::vector + calculateProperty( const std::vector>& fractureDefinitions, + PropertyType propertyType ); + private: static std::vector calculateGridStatistics( const std::vector>& fractureDefinitions,