OGS
TimeLoop.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: Copyright (c) OpenGeoSys Community (opengeosys.org)
2// SPDX-License-Identifier: BSD-3-Clause
3
4#pragma once
5
6#include <functional>
7#include <memory>
8
12#include "Process.h"
14
15namespace NumLib
16{
19struct Time;
20}
21
22namespace ChemistryLib
23{
25}
26
27namespace ProcessLib
28{
29struct ProcessData;
30
33{
34public:
35 TimeLoop(std::vector<Output>&& outputs,
36 std::vector<std::unique_ptr<ProcessData>>&& per_process_data,
37 std::unique_ptr<NumLib::StaggeredCoupling>&& staggered_coupling,
38 const NumLib::Time& start_time, const NumLib::Time& end_time);
39
40 void initialize();
41 void outputLastTimeStep() const;
42
43 ~TimeLoop();
44
45 bool executeTimeStep();
46
55
56 NumLib::Time endTime() const { return _end_time; }
59
60private:
61 bool preTsNonlinearSolvePostTs(NumLib::Time const& t, double const dt,
62 std::size_t const timesteps);
63
76 const NumLib::Time& t, const double dt, const std::size_t timestep_id);
77
89 const NumLib::Time& t, const double dt, const std::size_t timestep_id);
90
92 std::function<double(NumLib::Time const&, double)>;
108 std::pair<NumLib::TimeIncrement, bool> computeTimeStepping(
109 const double prev_dt, NumLib::Time& t, std::size_t& accepted_steps,
110 std::size_t& rejected_steps,
111 std::vector<TimeStepConstraintCallback> const& time_step_constraints);
112
113 template <typename OutputClassMember>
114 void outputSolutions(unsigned timestep,
115 const double t,
116 OutputClassMember output_class_member) const;
117
118private:
119 std::vector<TimeStepConstraintCallback> generateOutputTimeStepConstraints(
120 std::vector<double>&& fixed_times) const;
122 const double dt) const;
123 std::vector<GlobalVector*> _process_solutions;
124 std::vector<GlobalVector*> _process_solutions_prev;
125 std::vector<Output> _outputs;
126 std::vector<std::unique_ptr<ProcessData>> _per_process_data;
127
131 std::size_t _accepted_steps = 0;
132 std::size_t _rejected_steps = 0;
136
137 std::unique_ptr<NumLib::StaggeredCoupling> _staggered_coupling;
138};
139} // namespace ProcessLib
NumLib::NonlinearSolverStatus solveUncoupledEquationSystems(const NumLib::Time &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:642
NumLib::Time currentTime() const
Definition TimeLoop.h:57
void outputLastTimeStep() const
Definition TimeLoop.cpp:567
void preOutputInitialConditions(NumLib::Time const &t, const double dt) const
Definition TimeLoop.cpp:746
NumLib::TimeIncrement _dt
Definition TimeLoop.h:133
NumLib::Time _current_time
Definition TimeLoop.h:130
std::function< double(NumLib::Time const &, double)> TimeStepConstraintCallback
Definition TimeLoop.h:91
std::pair< NumLib::TimeIncrement, bool > computeTimeStepping(const double prev_dt, NumLib::Time &t, std::size_t &accepted_steps, std::size_t &rejected_steps, std::vector< TimeStepConstraintCallback > const &time_step_constraints)
Definition TimeLoop.cpp:290
TimeLoop(std::vector< Output > &&outputs, std::vector< std::unique_ptr< ProcessData > > &&per_process_data, std::unique_ptr< NumLib::StaggeredCoupling > &&staggered_coupling, const NumLib::Time &start_time, const NumLib::Time &end_time)
Definition TimeLoop.cpp:264
std::vector< std::unique_ptr< ProcessData > > _per_process_data
Definition TimeLoop.h:126
void outputSolutions(unsigned timestep, const double t, OutputClassMember output_class_member) const
Definition TimeLoop.cpp:708
std::vector< Output > _outputs
Definition TimeLoop.h:125
std::size_t _accepted_steps
Definition TimeLoop.h:131
std::vector< GlobalVector * > _process_solutions
Definition TimeLoop.h:123
std::unique_ptr< NumLib::StaggeredCoupling > _staggered_coupling
Definition TimeLoop.h:137
void initialize()
initialize output, convergence criterion, etc.
Definition TimeLoop.cpp:454
int _repeating_times_of_rejected_step
Definition TimeLoop.h:134
std::size_t _rejected_steps
Definition TimeLoop.h:132
const NumLib::Time _end_time
Definition TimeLoop.h:129
bool preTsNonlinearSolvePostTs(NumLib::Time const &t, double const dt, std::size_t const timesteps)
Definition TimeLoop.cpp:582
NumLib::Time endTime() const
Definition TimeLoop.h:56
NumLib::NonlinearSolverStatus solveCoupledEquationSystemsByStaggeredScheme(const NumLib::Time &t, const double dt, const std::size_t timestep_id)
Member to solver coupled systems of equations by the staggered scheme.
Definition TimeLoop.cpp:685
std::vector< TimeStepConstraintCallback > generateOutputTimeStepConstraints(std::vector< double > &&fixed_times) const
Definition TimeLoop.cpp:436
const NumLib::Time _start_time
Definition TimeLoop.h:128
std::vector< GlobalVector * > _process_solutions_prev
Definition TimeLoop.h:124
Status of the non-linear solver.