diff --git a/Applications/ApplicationsLib/UncoupledProcessesTimeLoop.cpp b/Applications/ApplicationsLib/UncoupledProcessesTimeLoop.cpp index 8ee784babcb5c3be3961c2dc06a8869b7e55cd6e..4eae2e6234e7717d5844329c3cede8b64992212a 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 8d61e3dc01cca949fdd1e70201fdd191c0445e7c..7cdce87b19e3bdf3174e71552567ca30f67d6e1e 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; } }