OGS
TimeLoop.h
Go to the documentation of this file.
1 
11 #pragma once
12 
13 #include <functional>
14 #include <memory>
15 
18 #include "Process.h"
20 
21 namespace NumLib
22 {
23 class ConvergenceCriterion;
24 }
25 
26 namespace ChemistryLib
27 {
28 class ChemicalSolverInterface;
29 }
30 
31 namespace ProcessLib
32 {
33 struct ProcessData;
34 
36 class TimeLoop
37 {
38 public:
39  TimeLoop(std::unique_ptr<Output>&& output,
40  std::vector<std::unique_ptr<ProcessData>>&& per_process_data,
41  const int global_coupling_max_iterations,
42  std::vector<std::unique_ptr<NumLib::ConvergenceCriterion>>&&
43  global_coupling_conv_crit,
44  const double start_time, const double end_time);
45 
46  void initialize();
47  bool loop();
48 
49  ~TimeLoop();
50 
51 private:
58  void setCoupledSolutions();
59 
72  const double t, const double dt, const std::size_t timestep_id);
73 
85  const double t, const double dt, const std::size_t timestep_id);
86 
98  double computeTimeStepping(const double prev_dt, double& t,
99  std::size_t& accepted_steps,
100  std::size_t& rejected_steps);
101 
102  template <typename OutputClass, typename OutputClassMember>
103  void outputSolutions(bool const output_initial_condition, unsigned timestep,
104  const double t, OutputClass& output_object,
105  OutputClassMember output_class_member) const;
106 
107 private:
108  std::vector<GlobalVector*> _process_solutions;
109  std::vector<GlobalVector*> _process_solutions_prev;
110  std::unique_ptr<Output> _output;
111  std::vector<std::unique_ptr<ProcessData>> _per_process_data;
112 
113  bool _last_step_rejected = false;
115  const double _start_time;
116  const double _end_time;
117 
121  std::vector<std::unique_ptr<NumLib::ConvergenceCriterion>>
123 
126  std::vector<GlobalVector*> _solutions_of_last_cpl_iteration;
127 
131  std::vector<std::size_t> _xdot_vector_ids;
132 };
133 } // namespace ProcessLib
Time loop capable of time-integrating several processes at once.
Definition: TimeLoop.h:37
void outputSolutions(bool const output_initial_condition, unsigned timestep, const double t, OutputClass &output_object, OutputClassMember output_class_member) const
Definition: TimeLoop.cpp:868
std::vector< GlobalVector * > _solutions_of_last_cpl_iteration
Definition: TimeLoop.h:126
const double _start_time
Definition: TimeLoop.h:115
std::vector< std::size_t > _xdot_vector_ids
Definition: TimeLoop.h:131
NumLib::NonlinearSolverStatus solveUncoupledEquationSystems(const double t, const double dt, const std::size_t timestep_id)
Member to solver non coupled systems of equations, which can be a single system of equations,...
Definition: TimeLoop.cpp:706
std::vector< std::unique_ptr< ProcessData > > _per_process_data
Definition: TimeLoop.h:111
const double _end_time
Definition: TimeLoop.h:116
double computeTimeStepping(const double prev_dt, double &t, std::size_t &accepted_steps, std::size_t &rejected_steps)
Definition: TimeLoop.cpp:358
std::vector< std::unique_ptr< NumLib::ConvergenceCriterion > > _global_coupling_conv_crit
Convergence criteria of processes for the global coupling iterations.
Definition: TimeLoop.h:122
void setCoupledSolutions()
Definition: TimeLoop.cpp:343
const int _global_coupling_max_iterations
Maximum iterations of the global coupling.
Definition: TimeLoop.h:119
std::vector< GlobalVector * > _process_solutions
Definition: TimeLoop.h:108
std::unique_ptr< Output > _output
Definition: TimeLoop.h:110
void initialize()
initialize output, convergence criterion, etc.
Definition: TimeLoop.cpp:525
int _repeating_times_of_rejected_step
Definition: TimeLoop.h:114
TimeLoop(std::unique_ptr< Output > &&output, std::vector< std::unique_ptr< ProcessData >> &&per_process_data, const int global_coupling_max_iterations, std::vector< std::unique_ptr< NumLib::ConvergenceCriterion >> &&global_coupling_conv_crit, const double start_time, const double end_time)
Definition: TimeLoop.cpp:328
std::vector< GlobalVector * > _process_solutions_prev
Definition: TimeLoop.h:109
NumLib::NonlinearSolverStatus solveCoupledEquationSystemsByStaggeredScheme(const double t, const double dt, const std::size_t timestep_id)
Member to solver coupled systems of equations by the staggered scheme.
Definition: TimeLoop.cpp:747
Status of the non-linear solver.