From f8304ff3af0b4ac6e463c5c240baeffcd4524724 Mon Sep 17 00:00:00 2001
From: Elias Pipping <elias.pipping@fu-berlin.de>
Date: Sun, 25 Dec 2011 13:46:45 +0100
Subject: [PATCH] Control iterations per algorithm

Also rename some parset options
---
 src/one-body-sample.cc     | 31 +++++++++++++++++--------------
 src/one-body-sample.parset | 22 ++++++++++++++++------
 2 files changed, 33 insertions(+), 20 deletions(-)

diff --git a/src/one-body-sample.cc b/src/one-body-sample.cc
index 38ec83a9..7997cb11 100644
--- a/src/one-body-sample.cc
+++ b/src/one-body-sample.cc
@@ -185,8 +185,6 @@ int main(int argc, char *argv[]) {
 
     auto const E = parset.get<double>("body.E");
     auto const nu = parset.get<double>("body.nu");
-    auto const solver_maxIterations =
-        parset.get<size_t>("solver.maxiterations");
     auto const solver_tolerance = parset.get<double>("solver.tolerance");
 
     auto const refinements = parset.get<size_t>("grid.refinements");
@@ -325,20 +323,22 @@ int main(int argc, char *argv[]) {
       stiffnessMatrix.mmv(u3, b3);
       stiffnessMatrix.mmv(u4, b4);
 
-      if (parset.get<bool>("useNonlinearGS")) {
+      if (parset.get<bool>("solver.nonlineargs.use")) {
         MyConvexProblemType myConvexProblem(stiffnessMatrix,
                                             *myGlobalNonlinearity, b1, u1_diff);
         MyBlockProblemType myBlockProblem(parset, myConvexProblem);
         nonlinearGSStep.setProblem(u1_diff, myBlockProblem);
 
-        LoopSolver<VectorType> solver(&nonlinearGSStep, solver_maxIterations,
-                                      solver_tolerance, &energyNorm, verbosity);
+        LoopSolver<VectorType> solver(
+            &nonlinearGSStep,
+            parset.get<size_t>("solver.nonlineargs.maxiterations"),
+            solver_tolerance, &energyNorm, verbosity);
         solver.solve();
       }
 
       u1 += u1_diff;
 
-      if (parset.get<bool>("useTNNMG")) {
+      if (parset.get<bool>("solver.tnnmg.use")) {
         MyConvexProblemType myConvexProblem(stiffnessMatrix,
                                             *myGlobalNonlinearity, b4, u4_diff);
 
@@ -369,8 +369,8 @@ int main(int argc, char *argv[]) {
         multigridStep.setProblem(u4_diff, myBlockProblem);
 
         LoopSolver<VectorType> overallSolver(
-            &multigridStep, solver_maxIterations, solver_tolerance, &energyNorm,
-            verbosity);
+            &multigridStep, parset.get<size_t>("solver.tnnmg.maxiterations"),
+            solver_tolerance, &energyNorm, verbosity);
         overallSolver.solve();
       }
 
@@ -399,13 +399,14 @@ int main(int argc, char *argv[]) {
         writer.write(filename.c_str());
       }
 
-      if (parset.get<bool>("useGS")) {
+      if (parset.get<bool>("solver.gs.use")) {
         BlockGSStep<OperatorType, VectorType> blockGSStep(stiffnessMatrix,
                                                           u2_diff, b2);
         blockGSStep.ignoreNodes_ = &ignoreNodes;
 
-        LoopSolver<VectorType> solver(&blockGSStep, solver_maxIterations,
-                                      solver_tolerance, &energyNorm, verbosity);
+        LoopSolver<VectorType> solver(
+            &blockGSStep, parset.get<size_t>("solver.gs.maxiterations"),
+            solver_tolerance, &energyNorm, verbosity);
         solver.solve();
       }
 
@@ -413,13 +414,15 @@ int main(int argc, char *argv[]) {
 
       // Use a linear solver for comparison; should return roughly the
       // same results if phi vanishes (e.g. because the normalstress is zero)
-      if (parset.get<bool>("useTruncatedGS")) {
+      if (parset.get<bool>("solver.truncatedgs.use")) {
         TruncatedBlockGSStep<OperatorType, VectorType> blockGSStep(
             stiffnessMatrix, u3_diff, b3);
         blockGSStep.ignoreNodes_ = &ignoreNodes;
 
-        LoopSolver<VectorType> solver(&blockGSStep, solver_maxIterations,
-                                      solver_tolerance, &energyNorm, verbosity);
+        LoopSolver<VectorType> solver(
+            &blockGSStep,
+            parset.get<size_t>("solver.truncatedgs.maxiterations"),
+            solver_tolerance, &energyNorm, verbosity);
         solver.solve();
       }
 
diff --git a/src/one-body-sample.parset b/src/one-body-sample.parset
index fb9580dd..1a0ce4b2 100644
--- a/src/one-body-sample.parset
+++ b/src/one-body-sample.parset
@@ -6,11 +6,6 @@ printFrictionalBoundary = false
 printProgress = true
 printDifference = false
 
-useNonlinearGS = false # true
-useGS = false
-useTruncatedGS = false
-useTNNMG = true
-
 [grid]
 refinements = 3
 
@@ -22,9 +17,24 @@ E = 1e6 # 2e6 is okay; at 5e6 we basically have no convergence
 nu = 0.3 # WARNING: At 0.48 we hardly have convergence; at 0.45 it's weird
 
 [solver]
-maxiterations = 1000000
 tolerance = 1e-12
 
+[solver.nonlineargs]
+use = true
+maxiterations = 1000000
+
+[solver.gs]
+use = false
+maxiterations = 1000000
+
+[solver.truncatedgs]
+use = false
+maxiterations = 100000
+
+[solver.tnnmg]
+use = true
+maxiterations = 1000000
+
 [solver.tnnmg.linear]
 maxiterations = 1000000
 nu1 = 1
-- 
GitLab