13#ifndef DUMUX_LINEAR_SOLVER_PARAMETERS_HH 
   14#define DUMUX_LINEAR_SOLVER_PARAMETERS_HH 
   20#include <dune/common/parametertree.hh> 
   21#include <dune/common/std/type_traits.hh> 
   29constexpr bool hasGridView = Dune::Std::is_detected<GVDetector, T>::value;
 
 
   38template<
class LinearSolverTraits>
 
   49        Dune::ParameterTree params;
 
 
   58        params[
"restart"] = 
"10";
 
   59        params[
"maxit"] = 
"250";
 
   60        params[
"reduction"] = 
"1e-13";
 
   61        params[
"verbose"] = 
"0";
 
   62        params[
"preconditioner.iterations"] = 
"1";
 
   63        params[
"preconditioner.relaxation"] = 
"1.0";
 
   64        params[
"preconditioner.verbosity"] = 
"0";
 
   65        params[
"preconditioner.defaultAggregationSizeMode"] = 
"isotropic";
 
   67            params[
"preconditioner.defaultAggregationDimension"] = std::to_string(LinearSolverTraits::GridView::dimension);
 
   69            params[
"preconditioner.defaultAggregationDimension"] = 
"3";
 
   70        params[
"preconditioner.maxLevel"] = 
"100";
 
   71        params[
"ParameterGroup"] = paramGroup;
 
   72        params[
"preconditioner.ParameterGroup"] = paramGroup;
 
 
   79        if (linearSolverGroups.empty()) 
 
   84            for (
const auto& group : linearSolverGroups)
 
   86                const auto fullDumuxKey = group + 
"." + dumuxKey;
 
   90                    params[istlKey] = value;
 
 
   99        params[
"verbose"] = 
"0";
 
  100        params[
"preconditioner.verbosity"] = 
"0";
 
 
 
  106template<
class LinearSolverTraits>
 
  107const std::vector<std::array<std::string, 2>>
 
  111    {
"Verbosity", 
"verbose"},
 
  112    {
"MaxIterations", 
"maxit"},
 
  113    {
"ResidualReduction", 
"reduction"},
 
  115    {
"GMResRestart", 
"restart"}, 
 
  116    {
"Restart", 
"restart"}, 
 
  117    {
"MaxOrthogonalizationVectors", 
"mmax"},
 
  120    {
"Preconditioner.Verbosity", 
"preconditioner.verbosity"},
 
  121    {
"Preconditioner.Type", 
"preconditioner.type"},
 
  122    {
"Preconditioner.Iterations", 
"preconditioner.iterations"},
 
  123    {
"Preconditioner.Relaxation", 
"preconditioner.relaxation"},
 
  124    {
"Preconditioner.ILUOrder", 
"preconditioner.n"},
 
  125    {
"Preconditioner.ILUResort", 
"preconditioner.resort"},
 
  126    {
"Preconditioner.AmgSmootherRelaxation", 
"preconditioner.smootherRelaxation"},
 
  127    {
"Preconditioner.AmgSmootherIterations", 
"preconditioner.smootherIterations"},
 
  128    {
"Preconditioner.AmgMaxLevel", 
"preconditioner.maxLevel"},
 
  129    {
"Preconditioner.AmgCoarsenTarget", 
"preconditioner.coarsenTarget"},
 
  130    {
"Preconditioner.AmgMinCoarseningRate", 
"preconditioner.minCoarseningRate"},
 
  131    {
"Preconditioner.AmgAccumulationMode", 
"preconditioner.accumulationMode"},
 
  132    {
"Preconditioner.AmgProlongationDampingFactor", 
"preconditioner.prolongationDampingFactor"},
 
  133    {
"Preconditioner.AmgAlpha", 
"preconditioner.alpha"},
 
  134    {
"Preconditioner.AmgBeta", 
"preconditioner.beta"},
 
  135    {
"Preconditioner.AmgAdditive", 
"preconditioner.additive"},
 
  136    {
"Preconditioner.AmgGamma", 
"preconditioner.gamma"},
 
  137    {
"Preconditioner.AmgPreSmoothingSteps", 
"preconditioner.preSteps"},
 
  138    {
"Preconditioner.AmgPostSmoothingSteps", 
"preconditioner.postSteps"},
 
  139    {
"Preconditioner.AmgCriterionSymmetric", 
"preconditioner.criterionSymmetric"},
 
  140    {
"Preconditioner.AmgStrengthMeasure", 
"preconditioner.strengthMeasure"},
 
  141    {
"Preconditioner.AmgDiagonalRowIndex", 
"preconditioner.diagonalRowIndex"},
 
  142    {
"Preconditioner.AmgDefaultAggregationSizeMode", 
"preconditioner.defaultAggregationSizeMode"},
 
  143    {
"Preconditioner.AmgDefaultAggregationDimension", 
"preconditioner.defaultAggregationDimension"},
 
  144    {
"Preconditioner.AmgMaxAggregateDistance", 
"preconditioner.maxAggregateDistance"},
 
  145    {
"Preconditioner.AmgMinAggregateSize", 
"preconditioner.minAggregateSize"},
 
  146    {
"Preconditioner.AmgMaxAggregateSize", 
"preconditioner.maxAggregateSize"}
 
 
Generates a parameter tree required for the linear solvers and precondioners of the Dune ISTL.
Definition linearsolverparameters.hh:40
static const std::vector< std::array< std::string, 2 > > dumuxToIstlSolverParams
Translation table for solver parameters.
Definition linearsolverparameters.hh:44
static void disableVerbosity(Dune::ParameterTree ¶ms)
Definition linearsolverparameters.hh:97
static void setDefaultParameters(Dune::ParameterTree ¶ms, const std::string ¶mGroup="")
Set some defaults for the solver parameters.
Definition linearsolverparameters.hh:56
static void fillValuesForIstlKeys(Dune::ParameterTree ¶ms, const std::string ¶mGroup="")
Iterate over all keys required by the ISTL, translate them to Dumux syntax and add values to tree.
Definition linearsolverparameters.hh:76
static Dune::ParameterTree createParameterTree(const std::string ¶mGroup="")
Create a tree containing parameters required for the linear solvers and precondioners of the Dune IST...
Definition linearsolverparameters.hh:47
std::vector< std::string > getParamSubGroups(const std::string &subGroupName, const std::string ¶mGroup)
Get a list of sub groups from the parameter tree sorted by relevance.
Definition parameters.hh:173
T getParam(Args &&... args)
A free function to get a parameter from the parameter tree singleton.
Definition parameters.hh:139
Definition linearsolverparameters.hh:24
typename T::GridView GVDetector
Definition linearsolverparameters.hh:26
constexpr bool hasGridView
Definition linearsolverparameters.hh:29
The infrastructure to retrieve run-time parameters from Dune::ParameterTrees.