From 00121f10a49479b7dc4cf3309f70ce16e951f2ab Mon Sep 17 00:00:00 2001 From: Arne Morten Kvarving Date: Fri, 5 Jul 2024 17:49:51 +0200 Subject: [PATCH] move NumericDifferenceMethod to TypeTag-free parameter system --- examples/problems/fingerproblem.hh | 8 ++--- examples/problems/infiltrationproblem.hh | 6 +--- examples/problems/lensproblem.hh | 26 +++++++++----- examples/problems/richardslensproblem.hh | 12 ++++--- examples/problems/waterairproblem.hh | 36 +++++++++++-------- .../common/fvbasefdlocallinearizer.hh | 11 ++---- 6 files changed, 52 insertions(+), 47 deletions(-) diff --git a/examples/problems/fingerproblem.hh b/examples/problems/fingerproblem.hh index e79aac05f..98b5c24fb 100644 --- a/examples/problems/fingerproblem.hh +++ b/examples/problems/fingerproblem.hh @@ -164,11 +164,6 @@ template struct NewtonWriteConvergence { static constexpr bool value = false; }; -// Use forward differences instead of central differences -template -struct NumericDifferenceMethod -{ static constexpr int value = +1; }; - } // namespace Opm::Parameters namespace Opm { @@ -298,6 +293,9 @@ public: Parameters::SetDefault(1); Parameters::SetDefault>(0.1); } + + // Use forward differences + Parameters::SetDefault(+1); } /*! diff --git a/examples/problems/infiltrationproblem.hh b/examples/problems/infiltrationproblem.hh index 703ddba37..7063f1479 100644 --- a/examples/problems/infiltrationproblem.hh +++ b/examples/problems/infiltrationproblem.hh @@ -118,11 +118,6 @@ template struct NewtonWriteConvergence { static constexpr bool value = false; }; -// -1 backward differences, 0: central differences, +1: forward differences -template -struct NumericDifferenceMethod -{ static constexpr int value = 1; }; - } // namespace Opm::Parameters namespace Opm { @@ -247,6 +242,7 @@ public: ParentType::registerParameters(); Parameters::SetDefault("./data/infiltration_50x3.dgf"); + Parameters::SetDefault(1); } /*! diff --git a/examples/problems/lensproblem.hh b/examples/problems/lensproblem.hh index 663063083..f5de2d98a 100644 --- a/examples/problems/lensproblem.hh +++ b/examples/problems/lensproblem.hh @@ -228,7 +228,7 @@ namespace Opm { * water saturated medium. * * The domain is sized 6m times 4m and features a rectangular lens - * with low permeablility which spans from (1 m , 2 m) to (4 m, 3 m) + * with low permeablility which spans from (1m, 2m) to (4m, 3m) * and is surrounded by a medium with higher permability. Note that * this problem is discretized using only two dimensions, so from the * point of view of the model, the depth of the domain is implicitly @@ -371,6 +371,13 @@ public: Parameters::SetDefault(16); Parameters::SetDefault>(1.0); } + + // Use forward differences + using LLS = GetPropType; + constexpr bool useFD = std::is_same_v; + if constexpr (useFD) { + Parameters::SetDefault(+1); + } } /*! @@ -379,20 +386,21 @@ public: static std::string briefDescription() { std::string thermal = "isothermal"; - bool enableEnergy = getPropValue(); - if (enableEnergy) + constexpr bool enableEnergy = getPropValue(); + if constexpr (enableEnergy) thermal = "non-isothermal"; std::string deriv = "finite difference"; using LLS = GetPropType; - bool useAutoDiff = std::is_same::value; - if (useAutoDiff) + constexpr bool useAutoDiff = std::is_same_v; + if constexpr (useAutoDiff) { deriv = "automatic differentiation"; + } std::string disc = "vertex centered finite volume"; using D = GetPropType; - bool useEcfv = std::is_same>::value; - if (useEcfv) + constexpr bool useEcfv = std::is_same>::value; + if constexpr (useEcfv) disc = "element centered finite volume"; return std::string("")+ @@ -467,10 +475,10 @@ public: { using LLS = GetPropType; - bool useAutoDiff = std::is_same::value; + constexpr bool useAutoDiff = std::is_same_v; using FM = GetPropType; - bool useTrans = std::is_same>::value; + constexpr bool useTrans = std::is_same_v>; std::ostringstream oss; oss << "lens_" << Model::name() diff --git a/examples/problems/richardslensproblem.hh b/examples/problems/richardslensproblem.hh index e6f40335a..2e423d85a 100644 --- a/examples/problems/richardslensproblem.hh +++ b/examples/problems/richardslensproblem.hh @@ -139,11 +139,6 @@ template struct NewtonMaxIterations { static constexpr int value = 28; }; -// Use central differences to approximate the Jacobian matrix -template -struct NumericDifferenceMethod -{ static constexpr int value = 0; }; - } // namespace Opm::Parameters namespace Opm { @@ -270,6 +265,13 @@ public: ParentType::registerParameters(); Parameters::SetDefault("./data/richardslens_24x16.dgf"); + + // Use central differences to approximate the Jacobian matrix + using LLS = GetPropType; + constexpr bool useFD = std::is_same_v; + if constexpr (useFD) { + Parameters::SetDefault(0); + } } /*! diff --git a/examples/problems/waterairproblem.hh b/examples/problems/waterairproblem.hh index ecd9bc57b..058b934c5 100644 --- a/examples/problems/waterairproblem.hh +++ b/examples/problems/waterairproblem.hh @@ -28,25 +28,28 @@ #ifndef EWOMS_WATER_AIR_PROBLEM_HH #define EWOMS_WATER_AIR_PROBLEM_HH -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include +#include +#include #include #include -#include -#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include + +#include #include #include @@ -310,6 +313,9 @@ public: ParentType::registerParameters(); Parameters::SetDefault("./data/waterair.dgf"); + + // Use forward differences + Parameters::SetDefault(+1); } /*! diff --git a/opm/models/discretization/common/fvbasefdlocallinearizer.hh b/opm/models/discretization/common/fvbasefdlocallinearizer.hh index fe9fd3ea2..ab4765079 100644 --- a/opm/models/discretization/common/fvbasefdlocallinearizer.hh +++ b/opm/models/discretization/common/fvbasefdlocallinearizer.hh @@ -82,9 +82,6 @@ struct BaseEpsilon namespace Opm::Parameters { -template -struct NumericDifferenceMethod { using type = Properties::UndefinedProperty; }; - /*! * \brief Specify which kind of method should be used to numerically * calculate the partial derivatives of the residual. @@ -92,9 +89,7 @@ struct NumericDifferenceMethod { using type = Properties::UndefinedProperty; }; * -1 means backward differences, 0 means central differences, 1 means * forward differences. By default we use forward differences. */ -template -struct NumericDifferenceMethod -{ static constexpr int value = +1; }; +struct NumericDifferenceMethod { static constexpr int value = +1; }; } // namespace Opm::Parameters @@ -188,7 +183,7 @@ public: */ static void registerParameters() { - Parameters::registerParam + Parameters::Register ("The method used for numeric differentiation (-1: backward " "differences, 0: central differences, 1: forward differences)"); } @@ -342,7 +337,7 @@ protected: */ static int numericDifferenceMethod_() { - static int diff = Parameters::get(); + static int diff = Parameters::Get(); return diff; }