/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, ((std::floor((cur_time / interval) + tol) + 1.0_rt) * interval) -
23 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 [[nodiscard]] bool continue_simulation() const;
50
53 [[nodiscard]] bool do_regrid() const;
54
57 [[nodiscard]] bool write_plot_file() const;
58
61 [[nodiscard]] bool write_checkpoint() const;
62
65 [[nodiscard]] bool write_last_plot_file() const;
66
69 [[nodiscard]] bool write_last_checkpoint() const;
70
74 void set_current_cfl(
75 amrex::Real conv_cfl, amrex::Real diff_cfl, amrex::Real src_cfl);
76
80 void advance_time();
81
87 void set_restart_time(int tidx, amrex::Real time);
88
89 AMREX_FORCE_INLINE
90 amrex::Real delta_t() const { return m_dt[0]; }
91
92 AMREX_FORCE_INLINE
93 amrex::Real& delta_t() { return m_dt[0]; }
94
95 AMREX_FORCE_INLINE
96 amrex::Real delta_t_nm1() const { return m_dt[1]; }
97
98 AMREX_FORCE_INLINE
99 amrex::Real delta_t_nm2() const { return m_dt[2]; }
100
101 AMREX_FORCE_INLINE
102 amrex::Real& delta_t_nm1() { return m_dt[1]; }
103
104 AMREX_FORCE_INLINE
105 amrex::Real& delta_t_nm2() { return m_dt[2]; }
106
107 AMREX_FORCE_INLINE
108 amrex::Real current_time() const { return m_cur_time; }
109
110 AMREX_FORCE_INLINE
111 amrex::Real& current_time() { return m_cur_time; }
112
113 AMREX_FORCE_INLINE
114 amrex::Real new_time() const { return m_new_time; }
115
116 AMREX_FORCE_INLINE
117 amrex::Real max_cfl() const { return m_max_cfl; }
118
119 AMREX_FORCE_INLINE
121 {
122 return m_force_dt_abs_tol;
123 }
124
125 AMREX_FORCE_INLINE
126 int time_index() const { return m_time_index; }
127
128 AMREX_FORCE_INLINE
129 int& time_index() { return m_time_index; }
130
131 AMREX_FORCE_INLINE
132 bool adaptive_timestep() const { return m_adaptive; }
133
134 AMREX_FORCE_INLINE
135 bool use_force_cfl() const { return m_use_force_cfl; }
136
137 AMREX_FORCE_INLINE
138 int regrid_interval() const { return m_regrid_interval; }
139
140 AMREX_FORCE_INLINE
141 amrex::Real start_time() const { return m_start_time; }
142
143 AMREX_FORCE_INLINE
144 amrex::Real stop_time() const { return m_stop_time; }
145
146 AMREX_FORCE_INLINE
147 int start_time_index() const { return m_start_time_index; }
148
149 AMREX_FORCE_INLINE
150 int stop_time_index() const { return m_stop_time_index; }
151
152 AMREX_FORCE_INLINE
153 int chkpt_interval() const { return m_chkpt_interval; }
154
156 void parse_parameters();
157
160 const bool enforce_dt_flag,
161 const amrex::Real enforce_dt_tol,
162 const amrex::Real time_interval,
163 const amrex::Real time_delay)
164 {
165 m_postprocess_enforce_dt.emplace_back(enforce_dt_flag);
166 m_postprocess_enforce_dt_tol.emplace_back(enforce_dt_tol);
167 m_postprocess_time_interval.emplace_back(time_interval);
168 m_postprocess_time_delay.emplace_back(time_delay);
169 }
170
173
176 {
178 m_stop_time = -1.0_rt;
179 }
180
184 [[nodiscard]] bool output_profiling_info() const;
185
186private:
188 amrex::Vector<amrex::Real> m_dt =
189 amrex::Vector<amrex::Real>(max_time_states, 0.0_rt);
190
192 amrex::Real m_cur_time{0.0_rt};
193
195 amrex::Real m_new_time{0.0_rt};
196
198 amrex::Real m_start_time{0.0_rt};
199
201 amrex::Real m_stop_time{-1.0_rt};
202
204 amrex::Real m_delay_time{-1.0_rt};
205
207 amrex::Real m_max_cfl{1.0_rt};
208
210 amrex::Real m_fixed_dt{-1.0_rt};
211
213 amrex::Real m_initial_dt{-1.0_rt};
214
216 amrex::Real m_max_dt{-1.0_rt};
217
219 amrex::Real m_min_dt{-1.0_rt};
220
222 amrex::Real m_current_cfl{0.0_rt};
223
225 amrex::Real m_conv_cfl{0.0_rt};
226 amrex::Real m_diff_cfl{0.0_rt};
227 amrex::Real m_src_cfl{0.0_rt};
228
230 amrex::Real m_dt_calc{0.0_rt};
231
233 amrex::Real m_init_shrink{0.1_rt};
234
236 amrex::Real m_dt_growth{0.1_rt};
237
239 amrex::Real m_chkpt_t_interval{-1.0_rt};
240
242 amrex::Real m_chkpt_t_delay{0.0_rt};
243
245 amrex::Real m_chkpt_t_tol{std::numeric_limits<float>::epsilon() * 1.0e1_rt};
246
248 amrex::Real m_force_chkpt_tol{1.0e-3_rt};
249
251 amrex::Real m_plt_t_interval{-1.0_rt};
252
254 amrex::Real m_plt_t_delay{0.0_rt};
255
257 amrex::Real m_plt_t_tol{std::numeric_limits<float>::epsilon() * 1.0e1_rt};
258
260 amrex::Real m_force_plt_tol{1.0e-3_rt};
261
263 amrex::Real m_force_dt_abs_tol{1.0e8_rt};
264
266 amrex::Real m_chkpt_start_time{0.0_rt};
267
269 amrex::Real m_plt_start_time{0.0_rt};
270
273
276
279
282
285
288
291
295
298
301
304
307
309 int m_verbose{0};
310
312 bool m_adaptive{false};
313
315 bool m_is_init{true};
316
318 bool m_use_force_cfl{true};
319
321 bool m_force_chkpt_dt{false};
322
324 bool m_force_plt_dt{false};
325
327 std::vector<bool> m_postprocess_enforce_dt;
328 amrex::Vector<amrex::Real> m_postprocess_enforce_dt_tol;
329 amrex::Vector<amrex::Real> m_postprocess_time_interval;
330 amrex::Vector<amrex::Real> m_postprocess_time_delay;
331};
332
333} // namespace amr_wind
334
335#endif /* SIMTIME_H */
amrex::Real m_plt_t_interval
Time interval for plot file output.
Definition SimTime.H:251
amrex::Vector< amrex::Real > m_postprocess_enforce_dt_tol
Definition SimTime.H:328
int m_time_index
Counter for the number of timesteps since start of simulation.
Definition SimTime.H:272
bool write_plot_file() const
Definition SimTime.cpp:350
int m_plt_interval
Time step interval for plot file output.
Definition SimTime.H:297
amrex::Real m_force_dt_abs_tol
Smallest absolute tolerance for enforcing dt, considering all.
Definition SimTime.H:263
AMREX_FORCE_INLINE amrex::Real & delta_t_nm2()
Definition SimTime.H:105
int m_chkpt_start_index
Initial starting time index for generating checkpoint files.
Definition SimTime.H:278
amrex::Real m_chkpt_t_tol
Relative (to dt) tolerance for checkpoint time interval output.
Definition SimTime.H:245
int m_profiling_interval
Time step interval for profiling output.
Definition SimTime.H:306
bool continue_simulation() const
Definition SimTime.cpp:321
int m_chkpt_interval
Time step interval for writing checkpoint/restart files.
Definition SimTime.H:290
amrex::Real m_delay_time
Delayed adaptive stepping.
Definition SimTime.H:204
AMREX_FORCE_INLINE int time_index() const
Definition SimTime.H:126
void set_current_cfl(amrex::Real conv_cfl, amrex::Real diff_cfl, amrex::Real src_cfl)
Definition SimTime.cpp:157
AMREX_FORCE_INLINE amrex::Real delta_t_nm1() const
Definition SimTime.H:96
amrex::Real m_current_cfl
Current CFL.
Definition SimTime.H:222
int m_stop_time_index
Maximum timesteps for simulation.
Definition SimTime.H:287
void override_simulation_end_parameters()
Deactivate ending parameters (overset should be externally controlled)
Definition SimTime.H:175
int m_verbose
Verbosity.
Definition SimTime.H:309
AMREX_FORCE_INLINE amrex::Real new_time() const
Definition SimTime.H:114
bool m_is_init
Flag indicating if this is initialization.
Definition SimTime.H:315
amrex::Real m_chkpt_t_delay
Time delay for checkpoint/restart output.
Definition SimTime.H:242
bool m_force_chkpt_dt
Bool for if checkpoint time interval should be forced.
Definition SimTime.H:321
bool output_profiling_info() const
Definition SimTime.cpp:458
~SimTime()=default
int m_plt_start_index
Initial starting time index for generating output files.
Definition SimTime.H:281
amrex::Real m_force_chkpt_tol
Relative (to chkpt_t_interval) tolerance for enforcing dt.
Definition SimTime.H:248
int m_regrid_start_index
Initial starting time index for regriding.
Definition SimTime.H:284
bool write_last_plot_file() const
Definition SimTime.cpp:384
bool m_force_plt_dt
Bool for if plt time interval should be forced.
Definition SimTime.H:324
AMREX_FORCE_INLINE amrex::Real delta_t_nm2() const
Definition SimTime.H:99
void advance_time()
Definition SimTime.cpp:288
amrex::Real m_new_time
Time where a new timestep will advance to.
Definition SimTime.H:195
amrex::Real m_start_time
Starting simulation time (to track restart)
Definition SimTime.H:198
void calculate_minimum_enforce_dt_abs_tol()
Calculate minimum enforce dt tolerance based on all considerations.
Definition SimTime.cpp:436
AMREX_FORCE_INLINE amrex::Real max_cfl() const
Definition SimTime.H:117
bool new_timestep()
Definition SimTime.cpp:108
int m_regrid_interval
Time interval for regridding.
Definition SimTime.H:303
amrex::Real m_plt_start_time
Initial starting time for generating output files (time-based)
Definition SimTime.H:269
amrex::Real m_max_dt
Maximum delta_t indicated by user.
Definition SimTime.H:216
AMREX_FORCE_INLINE int start_time_index() const
Definition SimTime.H:147
AMREX_FORCE_INLINE amrex::Real stop_time() const
Definition SimTime.H:144
amrex::Real m_fixed_dt
Fixed delta_t indicated by user.
Definition SimTime.H:210
AMREX_FORCE_INLINE amrex::Real delta_t() const
Definition SimTime.H:90
AMREX_FORCE_INLINE amrex::Real get_minimum_enforce_dt_abs_tol() const
Definition SimTime.H:120
AMREX_FORCE_INLINE amrex::Real & current_time()
Definition SimTime.H:111
amrex::Real m_diff_cfl
Definition SimTime.H:226
amrex::Real m_dt_calc
delta_t calculated using CFL constraint
Definition SimTime.H:230
AMREX_FORCE_INLINE amrex::Real & delta_t_nm1()
Definition SimTime.H:102
bool m_adaptive
Flag indicating whether timestep is adaptive.
Definition SimTime.H:312
amrex::Real m_max_cfl
Maximum CFL constraint.
Definition SimTime.H:207
int m_chkpt_delay
Time step delay for checkpoint/restart output (this means that output only happens after the delay)
Definition SimTime.H:294
amrex::Vector< amrex::Real > m_postprocess_time_delay
Definition SimTime.H:330
AMREX_FORCE_INLINE int stop_time_index() const
Definition SimTime.H:150
amrex::Real m_src_cfl
Definition SimTime.H:227
amrex::Real m_dt_growth
Maximum growth of dt between timesteps.
Definition SimTime.H:236
amrex::Real m_plt_t_tol
Relative (to dt) tolerance for plot time interval output.
Definition SimTime.H:257
AMREX_FORCE_INLINE int & time_index()
Definition SimTime.H:129
bool write_last_checkpoint() const
Definition SimTime.cpp:398
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:233
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:159
AMREX_FORCE_INLINE int chkpt_interval() const
Definition SimTime.H:153
bool write_checkpoint() const
Definition SimTime.cpp:367
amrex::Real m_conv_cfl
Current CFL categories.
Definition SimTime.H:225
amrex::Vector< amrex::Real > m_dt
Timestep sizes.
Definition SimTime.H:188
AMREX_FORCE_INLINE int regrid_interval() const
Definition SimTime.H:138
bool m_use_force_cfl
Flag indicating if forcing should be included in CFL calculation.
Definition SimTime.H:318
AMREX_FORCE_INLINE bool adaptive_timestep() const
Definition SimTime.H:132
void set_restart_time(int tidx, amrex::Real time)
Definition SimTime.cpp:413
std::vector< bool > m_postprocess_enforce_dt
Timestep considerations from postprocessing instances.
Definition SimTime.H:327
AMREX_FORCE_INLINE bool use_force_cfl() const
Definition SimTime.H:135
AMREX_FORCE_INLINE amrex::Real & delta_t()
Definition SimTime.H:93
amrex::Real m_force_plt_tol
Relative (to plt_t_interval) tolerance for enforcing dt.
Definition SimTime.H:260
amrex::Real m_min_dt
Minimum delta_t indicated by user.
Definition SimTime.H:219
AMREX_FORCE_INLINE amrex::Real current_time() const
Definition SimTime.H:108
amrex::Real m_chkpt_t_interval
Time interval for writing checkpoint/restart files.
Definition SimTime.H:239
AMREX_FORCE_INLINE amrex::Real start_time() const
Definition SimTime.H:141
amrex::Real m_chkpt_start_time
Initial starting time for generating checkpoint files (time-based)
Definition SimTime.H:266
bool do_regrid() const
Definition SimTime.cpp:342
amrex::Vector< amrex::Real > m_postprocess_time_interval
Definition SimTime.H:329
amrex::Real m_plt_t_delay
Time delay for plot file output.
Definition SimTime.H:254
amrex::Real m_stop_time
Max time for simulation.
Definition SimTime.H:201
int m_plt_delay
Time step delay for plot file output.
Definition SimTime.H:300
amrex::Real m_cur_time
Current simulation time.
Definition SimTime.H:192
int m_start_time_index
Initial starting time index.
Definition SimTime.H:275
amrex::Real m_initial_dt
Initial delta_t indicated by user.
Definition SimTime.H:213
This test case is intended as an evaluation of the momentum advection scheme.
Definition BCInterface.cpp:10