From db4418eb779ef1b2a337fb92923339c3b01b2784 Mon Sep 17 00:00:00 2001
From: Kilian <kilian.weishaupt@iws.uni-stuttgart.de>
Date: Wed, 25 Mar 2020 19:51:18 +0100
Subject: [PATCH] [linear] Use param tree class in solverfactorybackend

---
 dumux/linear/istlsolverfactorybackend.hh | 83 +-----------------------
 1 file changed, 3 insertions(+), 80 deletions(-)

diff --git a/dumux/linear/istlsolverfactorybackend.hh b/dumux/linear/istlsolverfactorybackend.hh
index 5fac31dacf..fa96f2e425 100644
--- a/dumux/linear/istlsolverfactorybackend.hh
+++ b/dumux/linear/istlsolverfactorybackend.hh
@@ -30,6 +30,8 @@
 #include <dune/common/parallel/mpihelper.hh>
 #include <dune/common/parametertree.hh>
 
+#include "linearsolverparameters.hh"
+
 // preconditioners
 #include <dune/istl/preconditioners.hh>
 #include <dune/istl/paamg/amg.hh>
@@ -56,8 +58,6 @@ template <class LinearSolverTraits>
 class IstlSolverFactoryBackend : public LinearSolver
 {
 public:
-    //! translation table for solver parameters
-    static std::vector<std::array<std::string, 2>> dumuxToIstlSolverParams;
 
     /*!
      * \brief Construct the backend for the sequential case only
@@ -114,26 +114,13 @@ public:
     void reset()
     {
         firstCall_ = true;
-        resetDefaultParameters();
-        convertParameterTree_(paramGroup_);
+        params_ = LinearSolverParameters<LinearSolverTraits>::createParameterTree(paramGroup_);
         checkMandatoryParameters_();
         name_ = params_.get<std::string>("preconditioner.type") + "-preconditioned " + params_.get<std::string>("type");
         if (params_.get<int>("verbose", 0) > 0)
             std::cout << "Initialized linear solver of type: " << name_ << std::endl;
     }
 
-    //! reset some defaults for the solver parameters
-    void resetDefaultParameters()
-    {
-        params_["restart"] = "10";
-        params_["maxit"] = "250";
-        params_["reduction"] = "1e-13";
-        params_["verbose"] = "0";
-        params_["preconditioner.iterations"] = "1";
-        params_["preconditioner.relaxation"] = "1.0";
-        params_["preconditioner.verbosity"] = "0";
-    }
-
     const Dune::InverseOperatorResult& result() const
     {
         return result_;
@@ -145,26 +132,6 @@ public:
     }
 
 private:
-    void convertParameterTree_(const std::string& paramGroup="")
-    {
-        auto linearSolverGroups = getParamSubGroups("LinearSolver", paramGroup);
-        if (linearSolverGroups.empty()) // no linear solver parameters were specified
-            return;
-
-        for (const auto& [dumuxKey, istlKey] : dumuxToIstlSolverParams)
-        {
-            for (const auto& group : linearSolverGroups)
-            {
-                const auto fullDumuxKey = group + "." + dumuxKey;
-                const auto value = getParam<std::string>(fullDumuxKey, "");
-                if (!value.empty())
-                {
-                    params_[istlKey] = value;
-                    break; // skip groups with smaller depth in the tree
-                }
-            }
-        }
-    }
 
     void checkMandatoryParameters_()
     {
@@ -269,50 +236,6 @@ private:
     std::string name_;
 };
 
-//! translation table for solver parameters
-template<class LinearSolverTraits>
-std::vector<std::array<std::string, 2>>
-IstlSolverFactoryBackend<LinearSolverTraits>::dumuxToIstlSolverParams =
-{
-    // solver params
-    {"Verbosity", "verbose"},
-    {"MaxIterations", "maxit"},
-    {"ResidualReduction", "reduction"},
-    {"Type", "type"},
-    {"GMResRestart", "restart"}, // cycles before restarting
-    {"Restart", "restart"}, // cycles before restarting
-    {"MaxOrthogonalizationVectors", "mmax"},
-
-    // preconditioner params
-    {"Preconditioner.Verbosity", "preconditioner.verbosity"},
-    {"Preconditioner.Type", "preconditioner.type"},
-    {"Preconditioner.Iterations", "preconditioner.iterations"},
-    {"Preconditioner.Relaxation", "preconditioner.relaxation"},
-    {"Preconditioner.ILUOrder", "preconditioner.n"},
-    {"Preconditioner.ILUResort", "preconditioner.resort"},
-    {"Preconditioner.AmgSmootherRelaxation", "preconditioner.smootherRelaxation"},
-    {"Preconditioner.AmgSmootherIterations", "preconditioner.smootherIterations"},
-    {"Preconditioner.AmgMaxLevel", "preconditioner.maxLevel"},
-    {"Preconditioner.AmgCoarsenTarget", "preconditioner.coarsenTarget"},
-    {"Preconditioner.AmgMinCoarseningRate", "preconditioner.minCoarseningRate"},
-    {"Preconditioner.AmgAccumulationMode", "preconditioner.accumulationMode"},
-    {"Preconditioner.AmgProlongationDampingFactor", "preconditioner.prolongationDampingFactor"},
-    {"Preconditioner.AmgAlpha", "preconditioner.alpha"},
-    {"Preconditioner.AmgBeta", "preconditioner.beta"},
-    {"Preconditioner.AmgAdditive", "preconditioner.additive"},
-    {"Preconditioner.AmgGamma", "preconditioner.gamma"},
-    {"Preconditioner.AmgPreSmoothingSteps", "preconditioner.preSteps"},
-    {"Preconditioner.AmgPostSmoothingSteps", "preconditioner.postSteps"},
-    {"Preconditioner.AmgCriterionSymmetric", "preconditioner.criterionSymmetric"},
-    {"Preconditioner.AmgStrengthMeasure", "preconditioner.strengthMeasure"},
-    {"Preconditioner.AmgDiagonalRowIndex", "preconditioner.diagonalRowIndex"},
-    {"Preconditioner.AmgDefaultAggregationSizeMode", "preconditioner.defaultAggregationSizeMode"},
-    {"Preconditioner.AmgDefaultAggregationDimension", "preconditioner.defaultAggregationDimension"},
-    {"Preconditioner.AmgMaxAggregateDistance", "preconditioner.maxAggregateDistance"},
-    {"Preconditioner.AmgMinAggregateSize", "preconditioner.minAggregateSize"},
-    {"Preconditioner.AmgMaxAggregateSize", "preconditioner.maxAggregateSize"}
-};
-
 } // end namespace Dumux
 
 #else
-- 
GitLab