From 62a3fcadc2c2f908d0e15c1f0ef53aec98cf2dd1 Mon Sep 17 00:00:00 2001
From: Timo Koch <timo.koch@iws.uni-stuttgart.de>
Date: Wed, 29 Jan 2020 18:44:28 +0100
Subject: [PATCH] [istl][solver] Use subgroup Preconditioner

Backwards-compatible implementation. Legacy parameter names
e.g. PreconditionerIterations will still work but subgroup params
overwrite them, e.g. Preconditioner.Iterations.
---
 dumux/linear/istlsolverfactorybackend.hh      | 52 +++++++++++--------
 .../shallowwater/dambreak/params.input        |  8 +--
 .../richards/implicit/lens/params.input       |  4 +-
 3 files changed, 38 insertions(+), 26 deletions(-)

diff --git a/dumux/linear/istlsolverfactorybackend.hh b/dumux/linear/istlsolverfactorybackend.hh
index dae993adb1..65cca90660 100644
--- a/dumux/linear/istlsolverfactorybackend.hh
+++ b/dumux/linear/istlsolverfactorybackend.hh
@@ -209,32 +209,40 @@ IstlSolverFactoryBackend<Matrix, Vector, Geometry>::dumuxToIstlSolverParams =
     {"MaxOrthogonalizationVectors", "mmax"},
 
     // preconditioner params
+    // we expect parameters in the subgroup "Preconditioner"
+    // there are some legacy param names that are still supported
+    // subgroup parameters overwrite legacy parameters
     {"PreconditionerVerbosity", "preconditioner.verbosity"},
+    {"Preconditioner.Verbosity", "preconditioner.verbosity"},
     {"PreconditionerType", "preconditioner.type"},
+    {"Preconditioner.Type", "preconditioner.type"},
     {"PreconditionerIterations", "preconditioner.iterations"},
+    {"Preconditioner.Iterations", "preconditioner.iterations"},
     {"PreconditionerRelaxation", "preconditioner.relaxation"},
-    {"ILUOrder", "preconditioner.n"},
-    {"ILUResort", "preconditioner.resort"},
-    {"AmgSmootherRelaxation", "preconditioner.smootherRelaxation"},
-    {"AmgSmootherIterations", "preconditioner.smootherIterations"},
-    {"AmgMaxLevel", "preconditioner.maxLevel"},
-    {"AmgCoarsenTarget", "preconditioner.coarsenTarget"},
-    {"MinCoarseningRate", "preconditioner.minCoarseningRate"},
-    {"AmgProlongationDampingFactor", "preconditioner.prolongationDampingFactor"},
-    {"AmgAlpha", "preconditioner.alpha"},
-    {"AmgBeta", "preconditioner.beta"},
-    {"AmgAdditive", "preconditioner.additive"},
-    {"AmgGamma", "preconditioner.gamma"},
-    {"AmgPreSmoothingSteps", "preconditioner.preSteps"},
-    {"AmgPostSmoothingSteps", "preconditioner.postSteps"},
-    {"AmgCriterionSymmetric", "preconditioner.criterionSymmetric"},
-    {"AmgStrengthMeasure", "preconditioner.strengthMeasure"},
-    {"AmgDiagonalRowIndex", "preconditioner.diagonalRowIndex"},
-    {"DefaultAggregationSizeMode", "preconditioner.defaultAggregationSizeMode"},
-    {"defaultAggregationDimension", "preconditioner.defaultAggregationDimension"},
-    {"MaxAggregateDistance", "preconditioner.maxAggregateDistance"},
-    {"MinAggregateSize", "preconditioner.minAggregateSize"},
-    {"MaxAggregateSize", "preconditioner.maxAggregateSize"}
+    {"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
diff --git a/test/freeflow/shallowwater/dambreak/params.input b/test/freeflow/shallowwater/dambreak/params.input
index e6ccb7fe55..03b5a00414 100644
--- a/test/freeflow/shallowwater/dambreak/params.input
+++ b/test/freeflow/shallowwater/dambreak/params.input
@@ -19,9 +19,11 @@ EnableDynamicOutput = false
 [LinearSolver]
 Type = cgsolver
 MaxIterations = 80
-PreconditionerType = amg
-PreconditionerVerbosity = 0
+
+[LinearSolver.Preconditioner]
+Type = amg
+Verbosity = 0
 AmgMaxLevel = 2
 AmgPreSmoothingSteps = 1
 AmgPostSmoothingSteps = 1
-CriterionSymmetric = true
+AmgCriterionSymmetric = true
diff --git a/test/porousmediumflow/richards/implicit/lens/params.input b/test/porousmediumflow/richards/implicit/lens/params.input
index f247d2d9cf..72e9e5fedd 100644
--- a/test/porousmediumflow/richards/implicit/lens/params.input
+++ b/test/porousmediumflow/richards/implicit/lens/params.input
@@ -16,6 +16,8 @@ EnableChop = true # chop for better convergence
 
 [LinearSolver]
 Type = bicgstabsolver
-PreconditionerType = amg
+
+[LinearSolver.Preconditioner]
+Type = amg
 AmgMaxLevel = 2
 AmgAccumulationMode = atOnce
-- 
GitLab