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
21namespace NumLib
22{
23class ConvergenceCriterion;
24class StaggeredCoupling;
25}
26
27namespace ChemistryLib
28{
29class ChemicalSolverInterface;
30}
31
32namespace ProcessLib
33{
34struct ProcessData;
35
38{
39public:
40 TimeLoop(std::vector<Output>&& outputs,
41 std::vector<std::unique_ptr<ProcessData>>&& per_process_data,
42 std::unique_ptr<NumLib::StaggeredCoupling>&& staggered_coupling,
43 const double start_time, const double end_time);
44
45 void initialize();
46 void outputLastTimeStep() const;
47
48 ~TimeLoop();
49
50 bool executeTimeStep();
51
60
61 double endTime() const { return _end_time; }
62 double currentTime() const { return _current_time; }
64
65private:
66 bool preTsNonlinearSolvePostTs(double const t, double const dt,
67 std::size_t const timesteps);
68
81 const double t, const double dt, const std::size_t timestep_id);
82
94 const double t, const double dt, const std::size_t timestep_id);
95
111 std::pair<double, bool> computeTimeStepping(
112 const double prev_dt, double& t, std::size_t& accepted_steps,
113 std::size_t& rejected_steps,
114 std::vector<std::function<double(double, double)>> const&
115 time_step_constraints);
116
117 template <typename OutputClassMember>
118 void outputSolutions(unsigned timestep,
119 const double t,
120 OutputClassMember output_class_member) const;
121
122private:
123 std::vector<std::function<double(double, double)>>
124 generateOutputTimeStepConstraints(std::vector<double>&& fixed_times) const;
125 void preOutputInitialConditions(const double t) const;
126 std::vector<GlobalVector*> _process_solutions;
127 std::vector<GlobalVector*> _process_solutions_prev;
128 std::vector<Output> _outputs;
129 std::vector<std::unique_ptr<ProcessData>> _per_process_data;
130
131 const double _start_time;
132 const double _end_time;
134 std::size_t _accepted_steps = 0;
135 std::size_t _rejected_steps = 0;
136 double _dt = 0;
139
140 std::unique_ptr<NumLib::StaggeredCoupling> _staggered_coupling;
141};
142} // namespace ProcessLib
Time loop capable of time-integrating several processes at once.
Definition TimeLoop.h:38
std::vector< std::function< double(double, double)> > generateOutputTimeStepConstraints(std::vector< double > &&fixed_times) const
Definition TimeLoop.cpp:445
std::pair< double, bool > computeTimeStepping(const double prev_dt, double &t, std::size_t &accepted_steps, std::size_t &rejected_steps, std::vector< std::function< double(double, double)> > const &time_step_constraints)
Definition TimeLoop.cpp:291
TimeLoop(std::vector< Output > &&outputs, std::vector< std::unique_ptr< ProcessData > > &&per_process_data, std::unique_ptr< NumLib::StaggeredCoupling > &&staggered_coupling, const double start_time, const double end_time)
Definition TimeLoop.cpp:266
void outputLastTimeStep() const
Definition TimeLoop.cpp:577
const double _start_time
Definition TimeLoop.h:131
double currentTime() const
Definition TimeLoop.h:62
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:650
std::vector< std::unique_ptr< ProcessData > > _per_process_data
Definition TimeLoop.h:129
void outputSolutions(unsigned timestep, const double t, OutputClassMember output_class_member) const
Definition TimeLoop.cpp:718
const double _end_time
Definition TimeLoop.h:132
std::vector< Output > _outputs
Definition TimeLoop.h:128
std::size_t _accepted_steps
Definition TimeLoop.h:134
std::vector< GlobalVector * > _process_solutions
Definition TimeLoop.h:126
std::unique_ptr< NumLib::StaggeredCoupling > _staggered_coupling
Definition TimeLoop.h:140
void initialize()
initialize output, convergence criterion, etc.
Definition TimeLoop.cpp:466
bool preTsNonlinearSolvePostTs(double const t, double const dt, std::size_t const timesteps)
Definition TimeLoop.cpp:592
int _repeating_times_of_rejected_step
Definition TimeLoop.h:137
std::size_t _rejected_steps
Definition TimeLoop.h:135
void preOutputInitialConditions(const double t) const
Definition TimeLoop.cpp:755
std::vector< GlobalVector * > _process_solutions_prev
Definition TimeLoop.h:127
double endTime() const
Definition TimeLoop.h:61
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:692
Status of the non-linear solver.