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