From 022d4cd0ac19bd96c5d7743bbf4b8163ca7f51a8 Mon Sep 17 00:00:00 2001
From: Elias Pipping <elias.pipping@fu-berlin.de>
Date: Sun, 21 Jul 2013 11:26:08 +0200
Subject: [PATCH] [Cleanup] Parse Solver::VerbosityMode as enum

---
 src/enum_verbosity.cc      | 17 +++++++++++++++++
 src/one-body-sample.cc     | 10 ++++------
 src/one-body-sample.parset |  2 +-
 3 files changed, 22 insertions(+), 7 deletions(-)
 create mode 100644 src/enum_verbosity.cc

diff --git a/src/enum_verbosity.cc b/src/enum_verbosity.cc
new file mode 100644
index 00000000..eee21da1
--- /dev/null
+++ b/src/enum_verbosity.cc
@@ -0,0 +1,17 @@
+#include <dune/solvers/common/numproc.hh> // Solver::VerbosityMode
+#include <dune/common/exceptions.hh>
+
+template <> struct StringToEnum<Solver::VerbosityMode> {
+  static Solver::VerbosityMode convert(std::string const &s) {
+    if (s == "full")
+      return Solver::FULL;
+
+    if (s == "reduced")
+      return Solver::REDUCED;
+
+    if (s == "quiet")
+      return Solver::QUIET;
+
+    DUNE_THROW(Dune::Exception, "failed to parse enum");
+  }
+};
diff --git a/src/one-body-sample.cc b/src/one-body-sample.cc
index b78b4bfb..d17cdcef 100644
--- a/src/one-body-sample.cc
+++ b/src/one-body-sample.cc
@@ -83,6 +83,7 @@
 #include "enum_parser.cc"
 #include "enum_state_model.cc"
 #include "enum_scheme.cc"
+#include "enum_verbosity.cc"
 
 #include "timestepping.hh"
 
@@ -367,8 +368,7 @@ int main(int argc, char *argv[]) {
                                             refinements, 1e-12, // FIXME,
                                             *grid, displacementDirichletNodes);
       auto multigridStep = displacementFactory.getSolver();
-      Solver::VerbosityMode const verbosity =
-          parset.get<bool>("verbose") ? Solver::FULL : Solver::QUIET;
+      auto const verbosity = parset.get<Solver::VerbosityMode>("verbosity");
 
       typename LinearFactoryType::ConvexProblemType myConvexProblem(
           1.0, A, zeroNonlinearity, ell, u_initial);
@@ -420,8 +420,7 @@ int main(int argc, char *argv[]) {
                                             refinements, 1e-12, // FIXME,
                                             *grid, accelerationDirichletNodes);
       auto multigridStep = accelerationFactory.getSolver();
-      Solver::VerbosityMode const verbosity =
-          parset.get<bool>("verbose") ? Solver::FULL : Solver::QUIET;
+      auto const verbosity = parset.get<Solver::VerbosityMode>("verbosity");
 
       typename LinearFactoryType::ConvexProblemType myConvexProblem(
           1.0, M, zeroNonlinearity, problem_rhs_initial, a_initial);
@@ -452,8 +451,7 @@ int main(int argc, char *argv[]) {
                                  solverTolerance, *grid,
                                  velocityDirichletNodes);
     auto multigridStep = factory.getSolver();
-    Solver::VerbosityMode const verbosity =
-        parset.get<bool>("verbose") ? Solver::FULL : Solver::QUIET;
+    auto const verbosity = parset.get<Solver::VerbosityMode>("verbosity");
 
     {
       std::fstream coordinateWriter("coordinates", std::fstream::out);
diff --git a/src/one-body-sample.parset b/src/one-body-sample.parset
index d3eecdd8..e6945cbc 100644
--- a/src/one-body-sample.parset
+++ b/src/one-body-sample.parset
@@ -2,7 +2,7 @@
 timeSteps = 10000
 endOfTime = 15
 
-verbose = false
+verbosity = quiet
 printProgress = false
 
 writeVTK = false
-- 
GitLab