From dd124f026831bf92251bfbe237112481656381e2 Mon Sep 17 00:00:00 2001
From: Christoph Lehmann <christoph.lehmann@ufz.de>
Date: Fri, 19 Aug 2016 10:52:36 +0200
Subject: [PATCH] [AppL] pass conv crit to nonlinear solvers

---
 .../ApplicationsLib/UncoupledProcessesTimeLoop.cpp   |  6 ++++--
 .../ApplicationsLib/UncoupledProcessesTimeLoop.h     | 12 ++++++++----
 2 files changed, 12 insertions(+), 6 deletions(-)

diff --git a/Applications/ApplicationsLib/UncoupledProcessesTimeLoop.cpp b/Applications/ApplicationsLib/UncoupledProcessesTimeLoop.cpp
index 8ee784babcb..4eae2e6234e 100644
--- a/Applications/ApplicationsLib/UncoupledProcessesTimeLoop.cpp
+++ b/Applications/ApplicationsLib/UncoupledProcessesTimeLoop.cpp
@@ -98,8 +98,9 @@ void UncoupledProcessesTimeLoop::setInitialConditions(
         {
             auto& nonlinear_solver = ppd.nonlinear_solver;
             auto& mat_strg = ppd.mat_strg;
+            auto& conv_crit = pcs.getConvergenceCriterion();
 
-            setEquationSystem(nonlinear_solver, ode_sys, nl_tag);
+            setEquationSystem(nonlinear_solver, ode_sys, conv_crit, nl_tag);
             nonlinear_solver.assemble(x0);
             time_disc.pushState(
                 t0, x0, mat_strg);  // TODO: that might do duplicate work
@@ -117,11 +118,12 @@ solveOneTimeStepOneProcess(
         ProcessLib::Output const& output_control)
 {
     auto& time_disc = process.getTimeDiscretization();
+    auto& conv_crit = process.getConvergenceCriterion();
     auto& ode_sys = *process_data.tdisc_ode_sys;
     auto& nonlinear_solver = process_data.nonlinear_solver;
     auto const nl_tag = process_data.nonlinear_solver_tag;
 
-    setEquationSystem(nonlinear_solver, ode_sys, nl_tag);
+    setEquationSystem(nonlinear_solver, ode_sys, conv_crit, nl_tag);
 
     // Note: Order matters!
     // First advance to the next timestep, then set known solutions at that
diff --git a/Applications/ApplicationsLib/UncoupledProcessesTimeLoop.h b/Applications/ApplicationsLib/UncoupledProcessesTimeLoop.h
index 8d61e3dc01c..7cdce87b19e 100644
--- a/Applications/ApplicationsLib/UncoupledProcessesTimeLoop.h
+++ b/Applications/ApplicationsLib/UncoupledProcessesTimeLoop.h
@@ -162,7 +162,8 @@ private:
     //! which is Picard or Newton depending on the NLTag.
     template <NumLib::NonlinearSolverTag NLTag>
     static void setEquationSystem(AbstractNLSolver& nonlinear_solver,
-                                  EquationSystem& eq_sys)
+                                  EquationSystem& eq_sys,
+                                  NumLib::ConvergenceCriterion& conv_crit)
     {
         using Solver = NumLib::NonlinearSolver<NLTag>;
         using EqSys = NumLib::NonlinearSystem<NLTag>;
@@ -173,23 +174,26 @@ private:
         auto& nl_solver_ = static_cast<Solver&>(nonlinear_solver);
         auto& eq_sys_ = static_cast<EqSys&>(eq_sys);
 
-        nl_solver_.setEquationSystem(eq_sys_);
+        nl_solver_.setEquationSystem(eq_sys_, conv_crit);
     }
 
     //! Sets the EquationSystem for the given nonlinear solver,
     //! transparently both for Picard and Newton solvers.
     static void setEquationSystem(AbstractNLSolver& nonlinear_solver,
                                   EquationSystem& eq_sys,
+                                  NumLib::ConvergenceCriterion& conv_crit,
                                   NumLib::NonlinearSolverTag nl_tag)
     {
         using Tag = NumLib::NonlinearSolverTag;
         switch (nl_tag)
         {
             case Tag::Picard:
-                setEquationSystem<Tag::Picard>(nonlinear_solver, eq_sys);
+                setEquationSystem<Tag::Picard>(nonlinear_solver, eq_sys,
+                                               conv_crit);
                 break;
             case Tag::Newton:
-                setEquationSystem<Tag::Newton>(nonlinear_solver, eq_sys);
+                setEquationSystem<Tag::Newton>(nonlinear_solver, eq_sys,
+                                               conv_crit);
                 break;
         }
     }
-- 
GitLab