/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
11using namespace amrex::literals;
12
13namespace {
14AMREX_FORCE_INLINE amrex::Real get_enforced_dt_for_output(
15 const amrex::Real dt,
16 const amrex::Real cur_time,
17 const amrex::Real interval,
18 const amrex::Real tol)
19{
20 // Tolerance for being slightly under is relative to requested interval
21 return amrex::min<amrex::Real>(
22 dt,
23 (std::floor(cur_time / interval + tol) + 1.0_rt) * interval - cur_time);
24}
25} // namespace
26
27namespace amr_wind {
28
33{
34public:
35 static constexpr int max_time_states = 3;
36
37 SimTime() = default;
38
39 ~SimTime() = default;
40
45 bool new_timestep();
46
49 bool continue_simulation() const;
50
53 bool do_regrid() const;
54
57 bool write_plot_file() const;
58
61 bool write_checkpoint() const;
62
65 bool write_last_plot_file() const;
66
69 bool write_last_checkpoint() const;
70
74 void set_current_cfl(
75 const amrex::Real conv_cfl,
76 const amrex::Real diff_cfl,
77 const amrex::Real src_cfl);
78
82 void advance_time();
83
89 void set_restart_time(int tidx, amrex::Real time);
90
91 AMREX_FORCE_INLINE
92 amrex::Real delta_t() const { return m_dt[0]; }
93
94 AMREX_FORCE_INLINE
95 amrex::Real& delta_t() { return m_dt[0]; }
96
97 AMREX_FORCE_INLINE
98 amrex::Real delta_t_nm1() const { return m_dt[1]; }
99
100 AMREX_FORCE_INLINE
101 amrex::Real delta_t_nm2() const { return m_dt[2]; }
102
103 AMREX_FORCE_INLINE
104 amrex::Real& delta_t_nm1() { return m_dt[1]; }
105
106 AMREX_FORCE_INLINE
107 amrex::Real& delta_t_nm2() { return m_dt[2]; }
108
109 AMREX_FORCE_INLINE
110 amrex::Real current_time() const { return m_cur_time; }
111
112 AMREX_FORCE_INLINE
113 amrex::Real& current_time() { return m_cur_time; }
114
115 AMREX_FORCE_INLINE
116 amrex::Real new_time() const { return m_new_time; }
117
118 AMREX_FORCE_INLINE
119 amrex::Real max_cfl() const { return m_max_cfl; }
120
121 AMREX_FORCE_INLINE
123 {
124 return m_force_dt_abs_tol;
125 }
126
127 AMREX_FORCE_INLINE
128 int time_index() const { return m_time_index; }
129
130 AMREX_FORCE_INLINE
131 int& time_index() { return m_time_index; }
132
133 AMREX_FORCE_INLINE
134 bool adaptive_timestep() const { return m_adaptive; }
135
136 AMREX_FORCE_INLINE
137 bool use_force_cfl() const { return m_use_force_cfl; }
138
139 AMREX_FORCE_INLINE
140 int regrid_interval() const { return m_regrid_interval; }
141
142 AMREX_FORCE_INLINE
143 amrex::Real start_time() const { return m_start_time; }
144
145 AMREX_FORCE_INLINE
146 amrex::Real stop_time() const { return m_stop_time; }
147
148 AMREX_FORCE_INLINE
149 int start_time_index() const { return m_start_time_index; }
150
151 AMREX_FORCE_INLINE
152 int stop_time_index() const { return m_stop_time_index; }
153
154 AMREX_FORCE_INLINE
155 int chkpt_interval() const { return m_chkpt_interval; }
156
158 void parse_parameters();
159
162 const bool enforce_dt_flag,
163 const amrex::Real enforce_dt_tol,
164 const amrex::Real time_interval,
165 const amrex::Real time_delay)
166 {
167 m_postprocess_enforce_dt.emplace_back(enforce_dt_flag);
168 m_postprocess_enforce_dt_tol.emplace_back(enforce_dt_tol);
169 m_postprocess_time_interval.emplace_back(time_interval);
170 m_postprocess_time_delay.emplace_back(time_delay);
171 }
172
175
178 {
180 m_stop_time = -1.0_rt;
181 }
182
186 bool output_profiling_info() const;
187
188private:
190 amrex::Vector<amrex::Real> m_dt =
191 amrex::Vector<amrex::Real>(max_time_states, 0.0_rt);
192
194 amrex::Real m_cur_time{0.0_rt};
195
197 amrex::Real m_new_time{0.0_rt};
198
200 amrex::Real m_start_time{0.0_rt};
201
203 amrex::Real m_stop_time{-1.0_rt};
204
206 amrex::Real m_delay_time{-1.0_rt};
207
209 amrex::Real m_max_cfl{1.0_rt};
210
212 amrex::Real m_fixed_dt{-1.0_rt};
213
215 amrex::Real m_initial_dt{-1.0_rt};
216
218 amrex::Real m_max_dt{-1.0_rt};
219
221 amrex::Real m_min_dt{-1.0_rt};
222
224 amrex::Real m_current_cfl{0.0_rt};
225
227 amrex::Real m_conv_cfl{0.0_rt};
228 amrex::Real m_diff_cfl{0.0_rt};
229 amrex::Real m_src_cfl{0.0_rt};
230
232 amrex::Real m_dt_calc{0.0_rt};
233
235 amrex::Real m_init_shrink{0.1_rt};
236
238 amrex::Real m_dt_growth{0.1_rt};
239
241 amrex::Real m_chkpt_t_interval{-1.0_rt};
242
244 amrex::Real m_chkpt_t_delay{0.0_rt};
245
247 amrex::Real m_chkpt_t_tol{std::numeric_limits<float>::epsilon() * 1.0e1_rt};
248
250 amrex::Real m_force_chkpt_tol{1.0e-3_rt};
251
253 amrex::Real m_plt_t_interval{-1.0_rt};
254
256 amrex::Real m_plt_t_delay{0.0_rt};
257
259 amrex::Real m_plt_t_tol{std::numeric_limits<float>::epsilon() * 1.0e1_rt};
260
262 amrex::Real m_force_plt_tol{1.0e-3_rt};
263
265 amrex::Real m_force_dt_abs_tol{1.0e8_rt};
266
268 amrex::Real m_chkpt_start_time{0.0_rt};
269
271 amrex::Real m_plt_start_time{0.0_rt};
272
275
278
281
284
287
290
293
297
300
303
306
309
311 int m_verbose{0};
312
314 bool m_adaptive{false};
315
317 bool m_is_init{true};
318
320 bool m_use_force_cfl{true};
321
323 bool m_force_chkpt_dt{false};
324
326 bool m_force_plt_dt{false};
327
329 std::vector<bool> m_postprocess_enforce_dt;
330 amrex::Vector<amrex::Real> m_postprocess_enforce_dt_tol;
331 amrex::Vector<amrex::Real> m_postprocess_time_interval;
332 amrex::Vector<amrex::Real> m_postprocess_time_delay;
333};
334
335} // namespace amr_wind
336
337#endif /* SIMTIME_H */
amrex::Real m_plt_t_interval
Time interval for plot file output.
Definition SimTime.H:253
amrex::Vector< amrex::Real > m_postprocess_enforce_dt_tol
Definition SimTime.H:330
void set_current_cfl(const amrex::Real conv_cfl, const amrex::Real diff_cfl, const amrex::Real src_cfl)
Definition SimTime.cpp:158
int m_time_index
Counter for the number of timesteps since start of simulation.
Definition SimTime.H:274
bool write_plot_file() const
Definition SimTime.cpp:346
int m_plt_interval
Time step interval for plot file output.
Definition SimTime.H:299
amrex::Real m_force_dt_abs_tol
Smallest absolute tolerance for enforcing dt, considering all.
Definition SimTime.H:265
AMREX_FORCE_INLINE amrex::Real & delta_t_nm2()
Definition SimTime.H:107
int m_chkpt_start_index
Initial starting time index for generating checkpoint files.
Definition SimTime.H:280
amrex::Real m_chkpt_t_tol
Relative (to dt) tolerance for checkpoint time interval output.
Definition SimTime.H:247
int m_profiling_interval
Time step interval for profiling output.
Definition SimTime.H:308
bool continue_simulation() const
Definition SimTime.cpp:317
int m_chkpt_interval
Time step interval for writing checkpoint/restart files.
Definition SimTime.H:292
amrex::Real m_delay_time
Delayed adaptive stepping.
Definition SimTime.H:206
AMREX_FORCE_INLINE int time_index() const
Definition SimTime.H:128
AMREX_FORCE_INLINE amrex::Real delta_t_nm1() const
Definition SimTime.H:98
amrex::Real m_current_cfl
Current CFL.
Definition SimTime.H:224
int m_stop_time_index
Maximum timesteps for simulation.
Definition SimTime.H:289
void override_simulation_end_parameters()
Deactivate ending parameters (overset should be externally controlled)
Definition SimTime.H:177
int m_verbose
Verbosity.
Definition SimTime.H:311
AMREX_FORCE_INLINE amrex::Real new_time() const
Definition SimTime.H:116
bool m_is_init
Flag indicating if this is initialization.
Definition SimTime.H:317
amrex::Real m_chkpt_t_delay
Time delay for checkpoint/restart output.
Definition SimTime.H:244
bool m_force_chkpt_dt
Bool for if checkpoint time interval should be forced.
Definition SimTime.H:323
bool output_profiling_info() const
Definition SimTime.cpp:454
~SimTime()=default
int m_plt_start_index
Initial starting time index for generating output files.
Definition SimTime.H:283
amrex::Real m_force_chkpt_tol
Relative (to chkpt_t_interval) tolerance for enforcing dt.
Definition SimTime.H:250
int m_regrid_start_index
Initial starting time index for regriding.
Definition SimTime.H:286
bool write_last_plot_file() const
Definition SimTime.cpp:380
bool m_force_plt_dt
Bool for if plt time interval should be forced.
Definition SimTime.H:326
AMREX_FORCE_INLINE amrex::Real delta_t_nm2() const
Definition SimTime.H:101
void advance_time()
Definition SimTime.cpp:284
amrex::Real m_new_time
Time where a new timestep will advance to.
Definition SimTime.H:197
amrex::Real m_start_time
Starting simulation time (to track restart)
Definition SimTime.H:200
void calculate_minimum_enforce_dt_abs_tol()
Calculate minimum enforce dt tolerance based on all considerations.
Definition SimTime.cpp:432
AMREX_FORCE_INLINE amrex::Real max_cfl() const
Definition SimTime.H:119
bool new_timestep()
Definition SimTime.cpp:108
int m_regrid_interval
Time interval for regridding.
Definition SimTime.H:305
amrex::Real m_plt_start_time
Initial starting time for generating output files (time-based)
Definition SimTime.H:271
amrex::Real m_max_dt
Maximum delta_t indicated by user.
Definition SimTime.H:218
AMREX_FORCE_INLINE int start_time_index() const
Definition SimTime.H:149
AMREX_FORCE_INLINE amrex::Real stop_time() const
Definition SimTime.H:146
amrex::Real m_fixed_dt
Fixed delta_t indicated by user.
Definition SimTime.H:212
AMREX_FORCE_INLINE amrex::Real delta_t() const
Definition SimTime.H:92
AMREX_FORCE_INLINE amrex::Real get_minimum_enforce_dt_abs_tol() const
Definition SimTime.H:122
AMREX_FORCE_INLINE amrex::Real & current_time()
Definition SimTime.H:113
amrex::Real m_diff_cfl
Definition SimTime.H:228
amrex::Real m_dt_calc
delta_t calculated using CFL constraint
Definition SimTime.H:232
AMREX_FORCE_INLINE amrex::Real & delta_t_nm1()
Definition SimTime.H:104
bool m_adaptive
Flag indicating whether timestep is adaptive.
Definition SimTime.H:314
amrex::Real m_max_cfl
Maximum CFL constraint.
Definition SimTime.H:209
int m_chkpt_delay
Time step delay for checkpoint/restart output (this means that output only happens after the delay)
Definition SimTime.H:296
amrex::Vector< amrex::Real > m_postprocess_time_delay
Definition SimTime.H:332
AMREX_FORCE_INLINE int stop_time_index() const
Definition SimTime.H:152
amrex::Real m_src_cfl
Definition SimTime.H:229
amrex::Real m_dt_growth
Maximum growth of dt between timesteps.
Definition SimTime.H:238
amrex::Real m_plt_t_tol
Relative (to dt) tolerance for plot time interval output.
Definition SimTime.H:259
AMREX_FORCE_INLINE int & time_index()
Definition SimTime.H:131
bool write_last_checkpoint() const
Definition SimTime.cpp:394
static constexpr int max_time_states
Definition SimTime.H:35
amrex::Real m_init_shrink
Initial reduction in timestep size for startup.
Definition SimTime.H:235
void parse_parameters()
Read user defined options from input file.
Definition SimTime.cpp:11
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:161
AMREX_FORCE_INLINE int chkpt_interval() const
Definition SimTime.H:155
bool write_checkpoint() const
Definition SimTime.cpp:363
amrex::Real m_conv_cfl
Current CFL categories.
Definition SimTime.H:227
amrex::Vector< amrex::Real > m_dt
Timestep sizes.
Definition SimTime.H:190
AMREX_FORCE_INLINE int regrid_interval() const
Definition SimTime.H:140
bool m_use_force_cfl
Flag indicating if forcing should be included in CFL calculation.
Definition SimTime.H:320
AMREX_FORCE_INLINE bool adaptive_timestep() const
Definition SimTime.H:134
void set_restart_time(int tidx, amrex::Real time)
Definition SimTime.cpp:409
std::vector< bool > m_postprocess_enforce_dt
Timestep considerations from postprocessing instances.
Definition SimTime.H:329
AMREX_FORCE_INLINE bool use_force_cfl() const
Definition SimTime.H:137
AMREX_FORCE_INLINE amrex::Real & delta_t()
Definition SimTime.H:95
amrex::Real m_force_plt_tol
Relative (to plt_t_interval) tolerance for enforcing dt.
Definition SimTime.H:262
amrex::Real m_min_dt
Minimum delta_t indicated by user.
Definition SimTime.H:221
AMREX_FORCE_INLINE amrex::Real current_time() const
Definition SimTime.H:110
amrex::Real m_chkpt_t_interval
Time interval for writing checkpoint/restart files.
Definition SimTime.H:241
AMREX_FORCE_INLINE amrex::Real start_time() const
Definition SimTime.H:143
amrex::Real m_chkpt_start_time
Initial starting time for generating checkpoint files (time-based)
Definition SimTime.H:268
bool do_regrid() const
Definition SimTime.cpp:338
amrex::Vector< amrex::Real > m_postprocess_time_interval
Definition SimTime.H:331
amrex::Real m_plt_t_delay
Time delay for plot file output.
Definition SimTime.H:256
amrex::Real m_stop_time
Max time for simulation.
Definition SimTime.H:203
int m_plt_delay
Time step delay for plot file output.
Definition SimTime.H:302
amrex::Real m_cur_time
Current simulation time.
Definition SimTime.H:194
int m_start_time_index
Initial starting time index.
Definition SimTime.H:277
amrex::Real m_initial_dt
Initial delta_t indicated by user.
Definition SimTime.H:215
This test case is intended as an evaluation of the momentum advection scheme.
Definition BCInterface.cpp:10