From 0cddc4516e74c93cba575a307bf93d6f5df56427 Mon Sep 17 00:00:00 2001 From: Arne Morten Kvarving Date: Wed, 9 Nov 2022 10:42:53 +0100 Subject: [PATCH] make relaxationFactorFractions an anon helper in StandardWellPrimaryVariables --- opm/simulators/wells/StandardWellGeneric.cpp | 28 -------------- opm/simulators/wells/StandardWellGeneric.hpp | 4 -- .../wells/StandardWellPrimaryVariables.cpp | 38 +++++++++++++++++-- 3 files changed, 34 insertions(+), 36 deletions(-) diff --git a/opm/simulators/wells/StandardWellGeneric.cpp b/opm/simulators/wells/StandardWellGeneric.cpp index f3821afb5..0e044f580 100644 --- a/opm/simulators/wells/StandardWellGeneric.cpp +++ b/opm/simulators/wells/StandardWellGeneric.cpp @@ -55,7 +55,6 @@ StandardWellGeneric(const WellInterfaceGeneric& baseif) { } - template double StandardWellGeneric:: @@ -81,33 +80,6 @@ relaxationFactorRate(const std::vector& primary_variables, return relaxation_factor; } -template -double -StandardWellGeneric:: -relaxationFactorFraction(const double old_value, - const double dx) -{ - assert(old_value >= 0. && old_value <= 1.0); - - double relaxation_factor = 1.; - - // updated values without relaxation factor - const double possible_updated_value = old_value - dx; - - // 0.95 is an experimental value remains to be optimized - if (possible_updated_value < 0.0) { - relaxation_factor = std::abs(old_value / dx) * 0.95; - } else if (possible_updated_value > 1.0) { - relaxation_factor = std::abs((1. - old_value) / dx) * 0.95; - } - // if possible_updated_value is between 0. and 1.0, then relaxation_factor - // remains to be one - - assert(relaxation_factor >= 0. && relaxation_factor <= 1.); - - return relaxation_factor; -} - template void StandardWellGeneric:: diff --git a/opm/simulators/wells/StandardWellGeneric.hpp b/opm/simulators/wells/StandardWellGeneric.hpp index 8d7133106..22a3c28bb 100644 --- a/opm/simulators/wells/StandardWellGeneric.hpp +++ b/opm/simulators/wells/StandardWellGeneric.hpp @@ -53,10 +53,6 @@ public: static double relaxationFactorRate(const std::vector& primary_variables, const double newton_update); - // relaxation factor considering only one fraction value - static double relaxationFactorFraction(const double old_value, - const double dx); - protected: StandardWellGeneric(const WellInterfaceGeneric& baseif); diff --git a/opm/simulators/wells/StandardWellPrimaryVariables.cpp b/opm/simulators/wells/StandardWellPrimaryVariables.cpp index 8bab865e9..d6f30e560 100644 --- a/opm/simulators/wells/StandardWellPrimaryVariables.cpp +++ b/opm/simulators/wells/StandardWellPrimaryVariables.cpp @@ -40,6 +40,36 @@ #include +namespace { + +//! \brief Relaxation factor considering only one fraction value. +template +Scalar relaxationFactorFraction(const Scalar old_value, + const Scalar dx) +{ + assert(old_value >= 0. && old_value <= 1.0); + + Scalar relaxation_factor = 1.; + + // updated values without relaxation factor + const Scalar possible_updated_value = old_value - dx; + + // 0.95 is an experimental value remains to be optimized + if (possible_updated_value < 0.0) { + relaxation_factor = std::abs(old_value / dx) * 0.95; + } else if (possible_updated_value > 1.0) { + relaxation_factor = std::abs((1. - old_value) / dx) * 0.95; + } + // if possible_updated_value is between 0. and 1.0, then relaxation_factor + // remains to be one + + assert(relaxation_factor >= 0. && relaxation_factor <= 1.); + + return relaxation_factor; +} + +} + namespace Opm { template @@ -538,14 +568,14 @@ relaxationFactorFractionsProducer(const std::vector& primary_variables, if (FluidSystem::numActivePhases() > 1) { if constexpr (has_wfrac_variable) { - const double relaxation_factor_w = StandardWellGeneric:: - relaxationFactorFraction(primary_variables[WFrac], dwells[0][WFrac]); + const double relaxation_factor_w = relaxationFactorFraction(primary_variables[WFrac], + dwells[0][WFrac]); relaxation_factor = std::min(relaxation_factor, relaxation_factor_w); } if constexpr (has_gfrac_variable) { - const double relaxation_factor_g = StandardWellGeneric:: - relaxationFactorFraction(primary_variables[GFrac], dwells[0][GFrac]); + const double relaxation_factor_g = relaxationFactorFraction(primary_variables[GFrac], + dwells[0][GFrac]); relaxation_factor = std::min(relaxation_factor, relaxation_factor_g); }