OGS
TimeStep.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 <spdlog/fmt/ostr.h>
7
8#include <cstddef>
9#include <limits>
10
11#include "Time.h"
12
13namespace NumLib
14{
23class TimeStep final
24{
25public:
30 explicit TimeStep(Time const& current_time)
31 : _previous(current_time),
32 _current(current_time),
33 _dt(0.0),
35 {
36 }
37
44 TimeStep(Time const& previous_time, Time const& current_time, std::size_t n)
45 : _previous(previous_time),
46 _current(current_time),
47 _dt(_current() - _previous()),
49 {
50 }
51
53 TimeStep(const TimeStep& src) = default;
54
56 TimeStep& operator=(const TimeStep& src) = default;
57
59 TimeStep& operator+=(const double dt)
60 {
62 _current += dt;
63 _dt = dt;
65 return *this;
66 }
67
69 Time previous() const { return _previous; }
71 Time current() const { return _current; }
73 double dt() const { return _dt; }
75 std::size_t timeStepNumber() const { return _time_step_number; }
76
77 void setAccepted(bool const accepted) { _is_accepted = accepted; }
78 bool isAccepted() const { return _is_accepted; }
79
80 friend inline std::ostream& operator<<(std::ostream& os, TimeStep const& ts)
81 {
82 return os << "previous: " << ts.previous()
83 << " | current: " << ts.current() << " | dt: " << ts.dt()
84 << " | timestep number: " << ts.timeStepNumber()
85 << " | is_accepted: " << ts.isAccepted();
86 }
87
88private:
94 double _dt;
96 std::size_t _time_step_number;
98 bool _is_accepted = true;
99};
100
101inline void updateTimeSteps(double const dt, TimeStep& previous_timestep,
102 TimeStep& current_timestep)
103{
104 previous_timestep = current_timestep;
105 current_timestep += dt;
106}
107
108} // namespace NumLib
109
110template <>
111struct fmt::formatter<NumLib::TimeStep> : fmt::ostream_formatter
112{
113};
Time step object.
Definition TimeStep.h:24
void setAccepted(bool const accepted)
Definition TimeStep.h:77
TimeStep(const TimeStep &src)=default
copy a time step
TimeStep & operator+=(const double dt)
increment time step
Definition TimeStep.h:59
Time _current
current time step
Definition TimeStep.h:92
Time current() const
return current time step
Definition TimeStep.h:71
bool isAccepted() const
Definition TimeStep.h:78
TimeStep & operator=(const TimeStep &src)=default
copy a time step
Time _previous
previous time step
Definition TimeStep.h:90
Time previous() const
return previous time step
Definition TimeStep.h:69
double dt() const
time step size from _previous
Definition TimeStep.h:73
std::size_t timeStepNumber() const
the time step number
Definition TimeStep.h:75
std::size_t _time_step_number
the number of time steps
Definition TimeStep.h:96
TimeStep(Time const &current_time)
Definition TimeStep.h:30
bool _is_accepted
is the timestep accepted
Definition TimeStep.h:98
double _dt
time step size
Definition TimeStep.h:94
friend std::ostream & operator<<(std::ostream &os, TimeStep const &ts)
Definition TimeStep.h:80
TimeStep(Time const &previous_time, Time const &current_time, std::size_t n)
Definition TimeStep.h:44
void updateTimeSteps(double const dt, TimeStep &previous_timestep, TimeStep &current_timestep)
Definition TimeStep.h:101