OGS
TimeStep.h
Go to the documentation of this file.
1
13#pragma once
14
15#include <cstddef>
16#include <limits>
17
18namespace NumLib
19{
28class TimeStep final
29{
30public:
35 explicit TimeStep(double current_time)
36 : _previous(current_time),
37 _current(current_time),
40 {
41 }
42
49 TimeStep(double previous_time, double current_time, std::size_t n)
50 : _previous(previous_time),
51 _current(current_time),
54 {
55 }
56
58 TimeStep(const TimeStep& src) = default;
59
61 TimeStep& operator=(const TimeStep& src) = default;
62
64 TimeStep& operator+=(const double dt)
65 {
67 _current += dt;
68 _dt = dt;
70 return *this;
71 }
72
74 bool operator<(TimeStep const& ts) const
75 {
76 return (_current < ts._current);
77 }
79 bool operator<=(TimeStep const& ts) const
80 {
81 return (_current <= ts._current);
82 }
84 bool operator==(TimeStep const& ts) const
85 {
86 return (_current == ts._current);
87 }
89 double previous() const { return _previous; }
91 double current() const { return _current; }
93 double dt() const { return _dt; }
95 std::size_t timeStepNumber() const { return _time_step_number; }
96
97 void setAccepted(bool const accepted) { _is_accepted = accepted; }
98 bool isAccepted() const { return _is_accepted; }
99
100 static constexpr double minimalTimeStepSize =
101 1000 * std::numeric_limits<double>::epsilon();
102
103private:
105 double _previous;
107 double _current;
109 double _dt;
111 std::size_t _time_step_number;
113 bool _is_accepted = true;
114};
115
116inline void updateTimeSteps(double const dt, TimeStep& previous_timestep,
117 TimeStep& current_timestep)
118{
119 previous_timestep = current_timestep;
120 current_timestep += dt;
121}
122
123} // namespace NumLib
Time step object.
Definition TimeStep.h:29
double current() const
return current time step
Definition TimeStep.h:91
double _current
current time step
Definition TimeStep.h:107
void setAccepted(bool const accepted)
Definition TimeStep.h:97
TimeStep(const TimeStep &src)=default
copy a time step
TimeStep & operator+=(const double dt)
increment time step
Definition TimeStep.h:64
bool operator<(TimeStep const &ts) const
compare current time
Definition TimeStep.h:74
bool isAccepted() const
Definition TimeStep.h:98
TimeStep & operator=(const TimeStep &src)=default
copy a time step
static constexpr double minimalTimeStepSize
Definition TimeStep.h:100
bool operator<=(TimeStep const &ts) const
compare current time
Definition TimeStep.h:79
double dt() const
time step size from _previous
Definition TimeStep.h:93
std::size_t timeStepNumber() const
the time step number
Definition TimeStep.h:95
double _previous
previous time step
Definition TimeStep.h:105
TimeStep(double previous_time, double current_time, std::size_t n)
Definition TimeStep.h:49
bool operator==(TimeStep const &ts) const
compare current time
Definition TimeStep.h:84
TimeStep(double current_time)
Definition TimeStep.h:35
std::size_t _time_step_number
the number of time steps
Definition TimeStep.h:111
bool _is_accepted
is the timestep accepted
Definition TimeStep.h:113
double _dt
time step size
Definition TimeStep.h:109
double previous() const
return previous time step
Definition TimeStep.h:89
void updateTimeSteps(double const dt, TimeStep &previous_timestep, TimeStep &current_timestep)
Definition TimeStep.h:116