From fa25f448a18062e13f6c8692c4c61a647ccafc98 Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Wed, 15 Aug 2018 15:52:00 +0200 Subject: [PATCH] #3089 Non-Darcy longitudinal : Use weighted average calculator --- .../Tools/RiaWeightedAverageCalculator.cpp | 4 ++ .../RimStimPlanFractureTemplate.cpp | 67 ++++++++++--------- 2 files changed, 39 insertions(+), 32 deletions(-) diff --git a/ApplicationCode/Application/Tools/RiaWeightedAverageCalculator.cpp b/ApplicationCode/Application/Tools/RiaWeightedAverageCalculator.cpp index 233c816885..4d3874edb9 100644 --- a/ApplicationCode/Application/Tools/RiaWeightedAverageCalculator.cpp +++ b/ApplicationCode/Application/Tools/RiaWeightedAverageCalculator.cpp @@ -18,6 +18,8 @@ #include "RiaWeightedAverageCalculator.h" +#include "cvfAssert.h" + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -32,6 +34,8 @@ RiaWeightedAverageCalculator::RiaWeightedAverageCalculator() //-------------------------------------------------------------------------------------------------- void RiaWeightedAverageCalculator::addValueAndWeight(double value, double weight) { + CVF_ASSERT(weight >= 0.0); + m_aggregatedValue += value * weight; m_aggregatedWeight += weight; } diff --git a/ApplicationCode/ProjectDataModel/Completions/RimStimPlanFractureTemplate.cpp b/ApplicationCode/ProjectDataModel/Completions/RimStimPlanFractureTemplate.cpp index 81b478e850..fe5f9ca6cd 100644 --- a/ApplicationCode/ProjectDataModel/Completions/RimStimPlanFractureTemplate.cpp +++ b/ApplicationCode/ProjectDataModel/Completions/RimStimPlanFractureTemplate.cpp @@ -21,6 +21,7 @@ #include "RiaApplication.h" #include "RiaFractureDefines.h" #include "RiaLogging.h" +#include "RiaWeightedAverageCalculator.h" #include "RifStimPlanXmlReader.h" @@ -457,51 +458,53 @@ FractureWidthAndConductivity if (rimWellPath && rimWellPath->wellPathGeometry()) { - RigWellPathStimplanIntersector intersector(rimWellPath->wellPathGeometry(), fractureInstance); - - double totalLength = 0.0; - for (const auto& v : intersector.intersections()) - { - totalLength += v.second.computeLength(); - } - - std::vector widthResultValues; - { - auto nameUnit = widthParameterNameAndUnit(); - widthResultValues = fractureGridResultsForUnitSystem( - nameUnit.first, nameUnit.second, m_activeTimeStepIndex, fractureTemplateUnit()); - } - - std::vector conductivityResultValues; - { - auto nameUnit = conductivityParameterNameAndUnit(); - conductivityResultValues = fractureGridResultsForUnitSystem( - nameUnit.first, nameUnit.second, m_activeTimeStepIndex, fractureTemplateUnit()); - } - + double totalLength = 0.0; double weightedConductivity = 0.0; double weightedWidth = 0.0; - for (const auto& v : intersector.intersections()) { - size_t fractureGlobalCellIndex = v.first; - - if (fractureGlobalCellIndex < widthResultValues.size()) + std::vector widthResultValues; { - weightedWidth += widthResultValues[fractureGlobalCellIndex] * v.second.computeLength(); + auto nameUnit = widthParameterNameAndUnit(); + widthResultValues = fractureGridResultsForUnitSystem( + nameUnit.first, nameUnit.second, m_activeTimeStepIndex, fractureTemplateUnit()); } - if (fractureGlobalCellIndex < conductivityResultValues.size()) + std::vector conductivityResultValues; { - weightedConductivity += conductivityResultValues[fractureGlobalCellIndex] * v.second.computeLength(); + auto nameUnit = conductivityParameterNameAndUnit(); + conductivityResultValues = fractureGridResultsForUnitSystem( + nameUnit.first, nameUnit.second, m_activeTimeStepIndex, fractureTemplateUnit()); } + + RiaWeightedAverageCalculator widthCalc; + RiaWeightedAverageCalculator conductivityCalc; + + RigWellPathStimplanIntersector intersector(rimWellPath->wellPathGeometry(), fractureInstance); + for (const auto& v : intersector.intersections()) + { + size_t fractureGlobalCellIndex = v.first; + double intersectionLength = v.second.computeLength(); + + if (fractureGlobalCellIndex < widthResultValues.size()) + { + widthCalc.addValueAndWeight(widthResultValues[fractureGlobalCellIndex], intersectionLength); + } + + if (fractureGlobalCellIndex < conductivityResultValues.size()) + { + conductivityCalc.addValueAndWeight(conductivityResultValues[fractureGlobalCellIndex], + intersectionLength); + } + } + + weightedConductivity = conductivityCalc.weightedAverage(); + weightedWidth = widthCalc.weightedAverage(); + totalLength = widthCalc.aggregatedWeight(); } if (totalLength > 1e-7) { - weightedWidth /= totalLength; - weightedConductivity /= totalLength; - values.m_width = weightedWidth; values.m_conductivity = weightedConductivity; }