OGS
TimeStep.h
Go to the documentation of this file.
1
13#pragma once
14
15#include <spdlog/fmt/ostr.h>
16
17#include <cstddef>
18#include <limits>
19
20#include "Time.h"
21
22namespace NumLib
23{
32class TimeStep final
33{
34public:
39 explicit TimeStep(Time const& current_time)
40 : _previous(current_time),
41 _current(current_time),
42 _dt(0.0),
44 {
45 }
46
53 TimeStep(Time const& previous_time, Time const& current_time, std::size_t n)
54 : _previous(previous_time),
55 _current(current_time),
56 _dt(_current() - _previous()),
58 {
59 }
60
62 TimeStep(const TimeStep& src) = default;
63
65 TimeStep& operator=(const TimeStep& src) = default;
66
68 TimeStep& operator+=(const double dt)
69 {
71 _current += dt;
72 _dt = dt;
74 return *this;
75 }
76
78 Time previous() const { return _previous; }
80 Time current() const { return _current; }
82 double dt() const { return _dt; }
84 std::size_t timeStepNumber() const { return _time_step_number; }
85
86 void setAccepted(bool const accepted) { _is_accepted = accepted; }
87 bool isAccepted() const { return _is_accepted; }
88
89 friend inline std::ostream& operator<<(std::ostream& os, TimeStep const& ts)
90 {
91 return os << "previous: " << ts.previous()
92 << " | current: " << ts.current() << " | dt: " << ts.dt()
93 << " | timestep number: " << ts.timeStepNumber()
94 << " | is_accepted: " << ts.isAccepted();
95 }
96
97private:
103 double _dt;
105 std::size_t _time_step_number;
107 bool _is_accepted = true;
108};
109
110inline void updateTimeSteps(double const dt, TimeStep& previous_timestep,
111 TimeStep& current_timestep)
112{
113 previous_timestep = current_timestep;
114 current_timestep += dt;
115}
116
117} // namespace NumLib
118
119template <>
120struct fmt::formatter<NumLib::TimeStep> : fmt::ostream_formatter
121{
122};
Time step object.
Definition TimeStep.h:33
void setAccepted(bool const accepted)
Definition TimeStep.h:86
TimeStep(const TimeStep &src)=default
copy a time step
TimeStep & operator+=(const double dt)
increment time step
Definition TimeStep.h:68
Time _current
current time step
Definition TimeStep.h:101
Time current() const
return current time step
Definition TimeStep.h:80
bool isAccepted() const
Definition TimeStep.h:87
TimeStep & operator=(const TimeStep &src)=default
copy a time step
Time _previous
previous time step
Definition TimeStep.h:99
Time previous() const
return previous time step
Definition TimeStep.h:78
double dt() const
time step size from _previous
Definition TimeStep.h:82
std::size_t timeStepNumber() const
the time step number
Definition TimeStep.h:84
std::size_t _time_step_number
the number of time steps
Definition TimeStep.h:105
TimeStep(Time const &current_time)
Definition TimeStep.h:39
bool _is_accepted
is the timestep accepted
Definition TimeStep.h:107
double _dt
time step size
Definition TimeStep.h:103
friend std::ostream & operator<<(std::ostream &os, TimeStep const &ts)
Definition TimeStep.h:89
TimeStep(Time const &previous_time, Time const &current_time, std::size_t n)
Definition TimeStep.h:53
void updateTimeSteps(double const dt, TimeStep &previous_timestep, TimeStep &current_timestep)
Definition TimeStep.h:110