/home/runner/work/amr-wind/amr-wind/amr-wind/core/SimTime.H Source File

AMR-Wind API: /home/runner/work/amr-wind/amr-wind/amr-wind/core/SimTime.H Source File
AMR-Wind API v0.1.0
CFD solver for wind plant simulations
Loading...
Searching...
No Matches
SimTime.H
Go to the documentation of this file.
1#ifndef SIMTIME_H
2#define SIMTIME_H
3
4#include "AMReX_REAL.H"
5#include "AMReX_GpuQualifiers.H"
6#include "AMReX_Extension.H"
7#include "AMReX_Vector.H"
8#include <algorithm>
9#include <cmath>
10
11namespace {
12AMREX_FORCE_INLINE amrex::Real get_enforced_dt_for_output(
13 const amrex::Real dt,
14 const amrex::Real cur_time,
15 const amrex::Real interval,
16 const amrex::Real tol)
17{
18 // Tolerance for being slightly under is relative to requested interval
19 return std::min(
20 dt, (std::floor(cur_time / interval + tol) + 1) * interval - cur_time);
21}
22} // namespace
23
24namespace amr_wind {
25
30{
31public:
32 static constexpr int max_time_states = 3;
33
34 SimTime() = default;
35
36 ~SimTime() = default;
37
42 bool new_timestep();
43
46 bool continue_simulation() const;
47
50 bool do_regrid() const;
51
54 bool write_plot_file() const;
55
58 bool write_checkpoint() const;
59
62 bool write_last_plot_file() const;
63
66 bool write_last_checkpoint() const;
67
71 void set_current_cfl(
72 const amrex::Real conv_cfl,
73 const amrex::Real diff_cfl,
74 const amrex::Real src_cfl);
75
79 void advance_time();
80
86 void set_restart_time(int tidx, amrex::Real time);
87
88 AMREX_FORCE_INLINE
89 amrex::Real delta_t() const { return m_dt[0]; }
90
91 AMREX_FORCE_INLINE
92 amrex::Real& delta_t() { return m_dt[0]; }
93
94 AMREX_FORCE_INLINE
95 amrex::Real delta_t_nm1() const { return m_dt[1]; }
96
97 AMREX_FORCE_INLINE
98 amrex::Real delta_t_nm2() const { return m_dt[2]; }
99
100 AMREX_FORCE_INLINE
101 amrex::Real& delta_t_nm1() { return m_dt[1]; }
102
103 AMREX_FORCE_INLINE
104 amrex::Real& delta_t_nm2() { return m_dt[2]; }
105
106 AMREX_FORCE_INLINE
107 amrex::Real current_time() const { return m_cur_time; }
108
109 AMREX_FORCE_INLINE
110 amrex::Real& current_time() { return m_cur_time; }
111
112 AMREX_FORCE_INLINE
113 amrex::Real new_time() const { return m_new_time; }
114
115 AMREX_FORCE_INLINE
116 amrex::Real max_cfl() const { return m_max_cfl; }
117
118 AMREX_FORCE_INLINE
120 {
121 return m_force_dt_abs_tol;
122 }
123
124 AMREX_FORCE_INLINE
125 int time_index() const { return m_time_index; }
126
127 AMREX_FORCE_INLINE
128 int& time_index() { return m_time_index; }
129
130 AMREX_FORCE_INLINE
131 bool adaptive_timestep() const { return m_adaptive; }
132
133 AMREX_FORCE_INLINE
134 bool use_force_cfl() const { return m_use_force_cfl; }
135
136 AMREX_FORCE_INLINE
137 int regrid_interval() const { return m_regrid_interval; }
138
139 AMREX_FORCE_INLINE
140 amrex::Real start_time() const { return m_start_time; }
141
142 AMREX_FORCE_INLINE
143 amrex::Real stop_time() const { return m_stop_time; }
144
145 AMREX_FORCE_INLINE
146 int start_time_index() const { return m_start_time_index; }
147
148 AMREX_FORCE_INLINE
149 int stop_time_index() const { return m_stop_time_index; }
150
151 AMREX_FORCE_INLINE
152 int chkpt_interval() const { return m_chkpt_interval; }
153
155 void parse_parameters();
156
159 const bool enforce_dt_flag,
160 const amrex::Real enforce_dt_tol,
161 const amrex::Real time_interval,
162 const amrex::Real time_delay)
163 {
164 m_postprocess_enforce_dt.emplace_back(enforce_dt_flag);
165 m_postprocess_enforce_dt_tol.emplace_back(enforce_dt_tol);
166 m_postprocess_time_interval.emplace_back(time_interval);
167 m_postprocess_time_delay.emplace_back(time_delay);
168 }
169
172
175 {
177 m_stop_time = -1.;
178 }
179
183 bool output_profiling_info() const;
184
185private:
187 amrex::Vector<amrex::Real> m_dt =
188 amrex::Vector<amrex::Real>(max_time_states, 0.0);
189
191 amrex::Real m_cur_time{0.0};
192
194 amrex::Real m_new_time{0.0};
195
197 amrex::Real m_start_time{0.0};
198
200 amrex::Real m_stop_time{-1.0};
201
203 amrex::Real m_delay_time{-1.0};
204
206 amrex::Real m_max_cfl{1.0};
207
209 amrex::Real m_fixed_dt{-1.0};
210
212 amrex::Real m_initial_dt{-1.0};
213
215 amrex::Real m_max_dt{-1.0};
216
218 amrex::Real m_min_dt{-1.0};
219
221 amrex::Real m_current_cfl{0.0};
222
224 amrex::Real m_conv_cfl{0.0};
225 amrex::Real m_diff_cfl{0.0};
226 amrex::Real m_src_cfl{0.0};
227
229 amrex::Real m_dt_calc{0.0};
230
232 amrex::Real m_init_shrink{0.1};
233
235 amrex::Real m_dt_growth{0.1};
236
238 amrex::Real m_chkpt_t_interval{-1.0};
239
241 amrex::Real m_chkpt_t_delay{0.0};
242
244 amrex::Real m_chkpt_t_tol{1e-8};
245
247 amrex::Real m_force_chkpt_tol{1e-3};
248
250 amrex::Real m_plt_t_interval{-1.0};
251
253 amrex::Real m_plt_t_delay{0.0};
254
256 amrex::Real m_plt_t_tol{1e-8};
257
259 amrex::Real m_force_plt_tol{1e-3};
260
262 amrex::Real m_force_dt_abs_tol{1e8};
263
266
269
272
275
278
281
284
288
291
294
297
300
302 int m_verbose{0};
303
305 bool m_adaptive{false};
306
308 bool m_is_init{true};
309
311 bool m_use_force_cfl{true};
312
314 bool m_force_chkpt_dt{false};
315
317 bool m_force_plt_dt{false};
318
320 std::vector<bool> m_postprocess_enforce_dt;
321 amrex::Vector<amrex::Real> m_postprocess_enforce_dt_tol;
322 amrex::Vector<amrex::Real> m_postprocess_time_interval;
323 amrex::Vector<amrex::Real> m_postprocess_time_delay;
324};
325
326} // namespace amr_wind
327
328#endif /* SIMTIME_H */
amrex::Real m_plt_t_interval
Time interval for plot file output.
Definition SimTime.H:250
amrex::Vector< amrex::Real > m_postprocess_enforce_dt_tol
Definition SimTime.H:321
void set_current_cfl(const amrex::Real conv_cfl, const amrex::Real diff_cfl, const amrex::Real src_cfl)
Definition SimTime.cpp:153
int m_time_index
Counter for the number of timesteps since start of simulation.
Definition SimTime.H:265
bool write_plot_file() const
Definition SimTime.cpp:339
int m_plt_interval
Time step interval for plot file output.
Definition SimTime.H:290
amrex::Real m_force_dt_abs_tol
Smallest absolute tolerance for enforcing dt, considering all.
Definition SimTime.H:262
AMREX_FORCE_INLINE amrex::Real & delta_t_nm2()
Definition SimTime.H:104
int m_chkpt_start_index
Initial starting time index for generating checkpoint files.
Definition SimTime.H:271
amrex::Real m_chkpt_t_tol
Relative (to dt) tolerance for checkpoint time interval output.
Definition SimTime.H:244
int m_profiling_interval
Time step interval for profiling output.
Definition SimTime.H:299
bool continue_simulation() const
Definition SimTime.cpp:311
int m_chkpt_interval
Time step interval for writing checkpoint/restart files.
Definition SimTime.H:283
amrex::Real m_delay_time
Delayed adaptive stepping.
Definition SimTime.H:203
AMREX_FORCE_INLINE int time_index() const
Definition SimTime.H:125
AMREX_FORCE_INLINE amrex::Real delta_t_nm1() const
Definition SimTime.H:95
amrex::Real m_current_cfl
Current CFL.
Definition SimTime.H:221
int m_stop_time_index
Maximum timesteps for simulation.
Definition SimTime.H:280
void override_simulation_end_parameters()
Deactivate ending parameters (overset should be externally controlled)
Definition SimTime.H:174
int m_verbose
Verbosity.
Definition SimTime.H:302
AMREX_FORCE_INLINE amrex::Real new_time() const
Definition SimTime.H:113
bool m_is_init
Flag indicating if this is initialization.
Definition SimTime.H:308
amrex::Real m_chkpt_t_delay
Time delay for checkpoint/restart output.
Definition SimTime.H:241
bool m_force_chkpt_dt
Bool for if checkpoint time interval should be forced.
Definition SimTime.H:314
bool output_profiling_info() const
Definition SimTime.cpp:423
~SimTime()=default
int m_plt_start_index
Initial starting time index for generating output files.
Definition SimTime.H:274
amrex::Real m_force_chkpt_tol
Relative (to chkpt_t_interval) tolerance for enforcing dt.
Definition SimTime.H:247
int m_regrid_start_index
Initial starting time index for regriding.
Definition SimTime.H:277
bool write_last_plot_file() const
Definition SimTime.cpp:369
bool m_force_plt_dt
Bool for if plt time interval should be forced.
Definition SimTime.H:317
AMREX_FORCE_INLINE amrex::Real delta_t_nm2() const
Definition SimTime.H:98
void advance_time()
Definition SimTime.cpp:278
amrex::Real m_new_time
Time where a new timestep will advance to.
Definition SimTime.H:194
amrex::Real m_start_time
Starting simulation time (to track restart)
Definition SimTime.H:197
void calculate_minimum_enforce_dt_abs_tol()
Calculate minimum enforce dt tolerance based on all considerations.
Definition SimTime.cpp:402
AMREX_FORCE_INLINE amrex::Real max_cfl() const
Definition SimTime.H:116
bool new_timestep()
Definition SimTime.cpp:103
int m_regrid_interval
Time interval for regridding.
Definition SimTime.H:296
amrex::Real m_max_dt
Maximum delta_t indicated by user.
Definition SimTime.H:215
AMREX_FORCE_INLINE int start_time_index() const
Definition SimTime.H:146
AMREX_FORCE_INLINE amrex::Real stop_time() const
Definition SimTime.H:143
amrex::Real m_fixed_dt
Fixed delta_t indicated by user.
Definition SimTime.H:209
AMREX_FORCE_INLINE amrex::Real delta_t() const
Definition SimTime.H:89
AMREX_FORCE_INLINE amrex::Real get_minimum_enforce_dt_abs_tol() const
Definition SimTime.H:119
AMREX_FORCE_INLINE amrex::Real & current_time()
Definition SimTime.H:110
amrex::Real m_diff_cfl
Definition SimTime.H:225
amrex::Real m_dt_calc
delta_t calculated using CFL constraint
Definition SimTime.H:229
AMREX_FORCE_INLINE amrex::Real & delta_t_nm1()
Definition SimTime.H:101
bool m_adaptive
Flag indicating whether timestep is adaptive.
Definition SimTime.H:305
amrex::Real m_max_cfl
Maximum CFL constraint.
Definition SimTime.H:206
int m_chkpt_delay
Time step delay for checkpoint/restart output (this means that output only happens after the delay)
Definition SimTime.H:287
amrex::Vector< amrex::Real > m_postprocess_time_delay
Definition SimTime.H:323
AMREX_FORCE_INLINE int stop_time_index() const
Definition SimTime.H:149
amrex::Real m_src_cfl
Definition SimTime.H:226
amrex::Real m_dt_growth
Maximum growth of dt between timesteps.
Definition SimTime.H:235
amrex::Real m_plt_t_tol
Relative (to dt) tolerance for plot time interval output.
Definition SimTime.H:256
AMREX_FORCE_INLINE int & time_index()
Definition SimTime.H:128
bool write_last_checkpoint() const
Definition SimTime.cpp:376
static constexpr int max_time_states
Definition SimTime.H:32
amrex::Real m_init_shrink
Initial reduction in timestep size for startup.
Definition SimTime.H:232
void parse_parameters()
Read user defined options from input file.
Definition SimTime.cpp:8
void add_postproc_dt_parameters(const bool enforce_dt_flag, const amrex::Real enforce_dt_tol, const amrex::Real time_interval, const amrex::Real time_delay)
Get timestep considerations from postprocessing instances.
Definition SimTime.H:158
AMREX_FORCE_INLINE int chkpt_interval() const
Definition SimTime.H:152
bool write_checkpoint() const
Definition SimTime.cpp:354
amrex::Real m_conv_cfl
Current CFL categories.
Definition SimTime.H:224
amrex::Vector< amrex::Real > m_dt
Timestep sizes.
Definition SimTime.H:187
AMREX_FORCE_INLINE int regrid_interval() const
Definition SimTime.H:137
bool m_use_force_cfl
Flag indicating if forcing should be included in CFL calculation.
Definition SimTime.H:311
AMREX_FORCE_INLINE bool adaptive_timestep() const
Definition SimTime.H:131
void set_restart_time(int tidx, amrex::Real time)
Definition SimTime.cpp:383
std::vector< bool > m_postprocess_enforce_dt
Timestep considerations from postprocessing instances.
Definition SimTime.H:320
AMREX_FORCE_INLINE bool use_force_cfl() const
Definition SimTime.H:134
AMREX_FORCE_INLINE amrex::Real & delta_t()
Definition SimTime.H:92
amrex::Real m_force_plt_tol
Relative (to plt_t_interval) tolerance for enforcing dt.
Definition SimTime.H:259
amrex::Real m_min_dt
Minimum delta_t indicated by user.
Definition SimTime.H:218
AMREX_FORCE_INLINE amrex::Real current_time() const
Definition SimTime.H:107
amrex::Real m_chkpt_t_interval
Time interval for writing checkpoint/restart files.
Definition SimTime.H:238
AMREX_FORCE_INLINE amrex::Real start_time() const
Definition SimTime.H:140
bool do_regrid() const
Definition SimTime.cpp:331
amrex::Vector< amrex::Real > m_postprocess_time_interval
Definition SimTime.H:322
amrex::Real m_plt_t_delay
Time delay for plot file output.
Definition SimTime.H:253
amrex::Real m_stop_time
Max time for simulation.
Definition SimTime.H:200
int m_plt_delay
Time step delay for plot file output.
Definition SimTime.H:293
amrex::Real m_cur_time
Current simulation time.
Definition SimTime.H:191
int m_start_time_index
Initial starting time index.
Definition SimTime.H:268
amrex::Real m_initial_dt
Initial delta_t indicated by user.
Definition SimTime.H:212
This test case is intended as an evaluation of the momentum advection scheme.
Definition BCInterface.cpp:7