From 5bb66250338fd8f11c817fc4aceb9d1147fc88a4 Mon Sep 17 00:00:00 2001
From: Timo Koch <timo.koch@iws.uni-stuttgart.de>
Date: Tue, 17 Mar 2020 11:31:22 +0100
Subject: [PATCH] [params][solver] Deprecate oldstyle preconditioner parameters

---
 dumux/linear/solver.hh | 44 ++++++++++++++++++++++++++++++++++++------
 1 file changed, 38 insertions(+), 6 deletions(-)

diff --git a/dumux/linear/solver.hh b/dumux/linear/solver.hh
index 93d102b495..943545c42a 100644
--- a/dumux/linear/solver.hh
+++ b/dumux/linear/solver.hh
@@ -46,9 +46,9 @@ public:
      *       - LinearSolver.Verbosity the verbosity level of the linear solver
      *       - LinearSolver.MaxIterations the maximum iterations of the solver
      *       - LinearSolver.ResidualReduction the residual reduction threshold, i.e. stopping criterion
-     *       - LinearSolver.PreconditionerRelaxation precondition relaxation
-     *       - LinearSolver.PreconditionerIterations the number of preconditioner iterations
-     *       - LinearSolver.PreconditionerVerbosity the preconditioner verbosity level
+     *       - LinearSolver.Preconditioner.Relaxation precondition relaxation
+     *       - LinearSolver.Preconditioner.Iterations the number of preconditioner iterations
+     *       - LinearSolver.Preconditioner.Verbosity the preconditioner verbosity level
      */
     LinearSolver(const std::string& paramGroup = "")
     : paramGroup_(paramGroup)
@@ -56,9 +56,41 @@ public:
         verbosity_ = getParamFromGroup<int>(paramGroup, "LinearSolver.Verbosity", 0);
         maxIter_ = getParamFromGroup<int>(paramGroup, "LinearSolver.MaxIterations", 250);
         residReduction_ = getParamFromGroup<double>(paramGroup, "LinearSolver.ResidualReduction", 1e-13);
-        relaxation_ = getParamFromGroup<double>(paramGroup, "LinearSolver.PreconditionerRelaxation", 1);
-        precondIter_ = getParamFromGroup<int>(paramGroup, "LinearSolver.PreconditionerIterations", 1);
-        precondVerbosity_ = getParamFromGroup<int>(paramGroup, "LinearSolver.PreconditionerVerbosity", 0);
+
+        // for deprecation period we ask also for the "old" parameters but print a warning
+        // the "new" style parameter takes precedence
+        // TODO: Remove all this code after 3.2 and use commented code below
+        if (hasParamInGroup(paramGroup, "LinearSolver.PreconditionerRelaxation"))
+        {
+            std::cerr << "Deprecation warning: parameter LinearSolver.PreconditionerRelaxation is deprecated and will be removed after 3.2. "
+                      << "Use LinearSolver.Preconditioner.Relaxation instead (Preconditioner subgroup)." << std::endl;
+            relaxation_ = getParamFromGroup<double>(paramGroup, "LinearSolver.PreconditionerRelaxation");
+        }
+        else
+            relaxation_ = getParamFromGroup<double>(paramGroup, "LinearSolver.Preconditioner.Relaxation", 1);
+
+        if (hasParamInGroup(paramGroup, "LinearSolver.PreconditionerIterations"))
+        {
+            std::cerr << "Deprecation warning: parameter LinearSolver.PreconditionerIterations is deprecated and will be removed after 3.2. "
+                      << "Use LinearSolver.Preconditioner.Iterations instead (Preconditioner subgroup)." << std::endl;
+            precondIter_ = getParamFromGroup<int>(paramGroup, "LinearSolver.PreconditionerIterations");
+        }
+        else
+            precondIter_ = getParamFromGroup<int>(paramGroup, "LinearSolver.Preconditioner.Iterations", 1);
+
+        if (hasParamInGroup(paramGroup, "LinearSolver.PreconditionerVerbosity"))
+        {
+            std::cerr << "Deprecation warning: parameter LinearSolver.PreconditionerVerbosity is deprecated and will be removed after 3.2. "
+                      << "Use LinearSolver.Preconditioner.Verbosity instead (Preconditioner subgroup)." << std::endl;
+            precondVerbosity_ = getParamFromGroup<int>(paramGroup, "LinearSolver.PreconditionerVerbosity");
+        }
+        else
+            precondVerbosity_ = getParamFromGroup<int>(paramGroup, "LinearSolver.Preconditioner.Verbosity", 0);
+
+        // TODO: use this code instead of the above code after release 3.2
+        // relaxation_ = getParamFromGroup<double>(paramGroup, "LinearSolver.Preconditioner.Relaxation", 1);
+        // precondIter_ = getParamFromGroup<int>(paramGroup, "LinearSolver.Preconditioner.Iterations", 1);
+        // precondVerbosity_ = getParamFromGroup<int>(paramGroup, "LinearSolver.Preconditioner.Verbosity", 0);
     }
 
     /*!
-- 
GitLab