/home/runner/work/kynema-sgf/kynema-sgf/src/core/SimTime.H Source File

Kynema-SGF API: /home/runner/work/kynema-sgf/kynema-sgf/src/core/SimTime.H Source File
Kynema-SGF 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#include <string>
11
12using namespace amrex::literals;
13
14namespace {
15AMREX_FORCE_INLINE amrex::Real get_enforced_dt_for_output(
16 const amrex::Real dt,
17 const amrex::Real cur_time,
18 const amrex::Real interval,
19 const amrex::Real tol)
20{
21 // Tolerance for being slightly under is relative to requested interval
22 return amrex::min<amrex::Real>(
23 dt, ((std::floor((cur_time / interval) + tol) + 1.0_rt) * interval) -
24 cur_time);
25}
26} // namespace
27
28namespace kynema_sgf {
29
34{
35public:
36 static constexpr int max_time_states = 3;
37
38 SimTime() = default;
39
40 ~SimTime() = default;
41
46 bool new_timestep();
47
50 [[nodiscard]] bool continue_simulation() const;
51
54 [[nodiscard]] bool do_regrid() const;
55
58 [[nodiscard]] bool write_plot_file() const;
59
62 [[nodiscard]] bool write_checkpoint() const;
63
66 [[nodiscard]] bool write_last_plot_file() const;
67
70 [[nodiscard]] bool write_last_checkpoint() const;
71
75 void set_current_cfl(
76 amrex::Real conv_cfl, amrex::Real diff_cfl, amrex::Real src_cfl);
77
81 void advance_time();
82
88 void set_restart_time(int tidx, amrex::Real time);
89
90 AMREX_FORCE_INLINE
91 amrex::Real delta_t() const { return m_dt[0]; }
92
93 AMREX_FORCE_INLINE
94 amrex::Real& delta_t() { return m_dt[0]; }
95
96 AMREX_FORCE_INLINE
97 amrex::Real delta_t_nm1() const { return m_dt[1]; }
98
99 AMREX_FORCE_INLINE
100 amrex::Real delta_t_nm2() const { return m_dt[2]; }
101
102 AMREX_FORCE_INLINE
103 amrex::Real& delta_t_nm1() { return m_dt[1]; }
104
105 AMREX_FORCE_INLINE
106 amrex::Real& delta_t_nm2() { return m_dt[2]; }
107
108 AMREX_FORCE_INLINE
109 amrex::Real current_time() const { return m_cur_time; }
110
111 AMREX_FORCE_INLINE
112 amrex::Real& current_time() { return m_cur_time; }
113
114 AMREX_FORCE_INLINE
115 amrex::Real new_time() const { return m_new_time; }
116
117 AMREX_FORCE_INLINE
118 amrex::Real max_cfl() const { return m_max_cfl; }
119
120 AMREX_FORCE_INLINE
122 {
123 return m_force_dt_abs_tol;
124 }
125
126 AMREX_FORCE_INLINE
127 int time_index() const { return m_time_index; }
128
129 AMREX_FORCE_INLINE
130 int& time_index() { return m_time_index; }
131
132 AMREX_FORCE_INLINE
133 bool adaptive_timestep() const { return m_adaptive; }
134
135 AMREX_FORCE_INLINE
136 bool use_force_cfl() const { return m_use_force_cfl; }
137
138 AMREX_FORCE_INLINE
139 int regrid_interval() const { return m_regrid_interval; }
140
141 AMREX_FORCE_INLINE
142 amrex::Real start_time() const { return m_start_time; }
143
144 AMREX_FORCE_INLINE
145 amrex::Real stop_time() const { return m_stop_time; }
146
147 AMREX_FORCE_INLINE
148 int start_time_index() const { return m_start_time_index; }
149
150 AMREX_FORCE_INLINE
151 int stop_time_index() const { return m_stop_time_index; }
152
153 AMREX_FORCE_INLINE
154 int chkpt_interval() const { return m_chkpt_interval; }
155
157 void parse_parameters();
158
161 const bool enforce_dt_flag,
162 const amrex::Real enforce_dt_tol,
163 const amrex::Real time_interval,
164 const amrex::Real time_delay)
165 {
166 m_postprocess_enforce_dt.emplace_back(enforce_dt_flag);
167 m_postprocess_enforce_dt_tol.emplace_back(enforce_dt_tol);
168 m_postprocess_time_interval.emplace_back(time_interval);
169 m_postprocess_time_delay.emplace_back(time_delay);
170 }
171
174
177 {
179 m_stop_time = -1.0_rt;
180 }
181
191 void request_stop(const std::string& reason)
192 {
193 m_stop_requested = true;
194 m_stop_reason = reason;
195 }
196
198 [[nodiscard]] bool stop_requested() const { return m_stop_requested; }
199
201 [[nodiscard]] const std::string& stop_reason() const
202 {
203 return m_stop_reason;
204 }
205
215 [[nodiscard]] bool write_final_plot_file() const
216 {
218 }
219
222 [[nodiscard]] bool write_final_checkpoint() const
223 {
225 }
226
228 void set_wall_start_time();
229
231 [[nodiscard]] bool exceed_max_wall_time() const;
232
236 [[nodiscard]] bool output_profiling_info() const;
237
238private:
240 bool m_stop_requested{false};
241
243 std::string m_stop_reason;
244
246 amrex::Vector<amrex::Real> m_dt =
247 amrex::Vector<amrex::Real>(max_time_states, 0.0_rt);
248
250 amrex::Real m_cur_time{0.0_rt};
251
253 amrex::Real m_new_time{0.0_rt};
254
256 amrex::Real m_start_time{0.0_rt};
257
259 amrex::Real m_stop_time{-1.0_rt};
260
262 amrex::Real m_max_wall_time{-1.0_rt};
263
265 amrex::Real m_wall_start{0.0_rt};
266
268 amrex::Real m_delay_time{-1.0_rt};
269
271 amrex::Real m_max_cfl{1.0_rt};
272
274 amrex::Real m_fixed_dt{-1.0_rt};
275
277 amrex::Real m_initial_dt{-1.0_rt};
278
280 amrex::Real m_max_dt{-1.0_rt};
281
283 amrex::Real m_min_dt{-1.0_rt};
284
286 amrex::Real m_current_cfl{0.0_rt};
287
289 amrex::Real m_conv_cfl{0.0_rt};
290 amrex::Real m_diff_cfl{0.0_rt};
291 amrex::Real m_src_cfl{0.0_rt};
292
294 amrex::Real m_dt_calc{0.0_rt};
295
297 amrex::Real m_init_shrink{0.1_rt};
298
300 amrex::Real m_dt_growth{0.1_rt};
301
303 amrex::Real m_chkpt_t_interval{-1.0_rt};
304
306 amrex::Real m_chkpt_t_delay{0.0_rt};
307
309 amrex::Real m_chkpt_t_tol{1.0e-2_rt};
310
312 amrex::Real m_force_chkpt_tol{1.0e-3_rt};
313
315 amrex::Real m_plt_t_interval{-1.0_rt};
316
318 amrex::Real m_plt_t_delay{0.0_rt};
319
321 amrex::Real m_plt_t_tol{1.0e-2_rt};
322
324 amrex::Real m_force_plt_tol{1.0e-3_rt};
325
329 amrex::Real m_force_dt_abs_tol{1.0e8_rt};
330
332 amrex::Real m_chkpt_start_time{0.0_rt};
333
335 amrex::Real m_plt_start_time{0.0_rt};
336
339
342
345
348
351
354
357
361
364
367
370
373
375 int m_verbose{0};
376
378 bool m_adaptive{false};
379
381 bool m_is_init{true};
382
384 bool m_use_force_cfl{true};
385
387 bool m_force_chkpt_dt{false};
388
390 bool m_force_plt_dt{false};
391
393 std::vector<bool> m_postprocess_enforce_dt;
394 amrex::Vector<amrex::Real> m_postprocess_enforce_dt_tol;
395 amrex::Vector<amrex::Real> m_postprocess_time_interval;
396 amrex::Vector<amrex::Real> m_postprocess_time_delay;
397};
398
399} // namespace kynema_sgf
400
401#endif /* SIMTIME_H */
amrex::Vector< amrex::Real > m_dt
Timestep sizes.
Definition SimTime.H:246
bool exceed_max_wall_time() const
Check if maximum wall clock time has been exceeded.
Definition SimTime.cpp:484
amrex::Real m_diff_cfl
Definition SimTime.H:290
AMREX_FORCE_INLINE bool adaptive_timestep() const
Definition SimTime.H:133
amrex::Real m_force_plt_tol
Relative (to plt_t_interval) tolerance for enforcing dt.
Definition SimTime.H:324
int m_chkpt_start_index
Initial starting time index for generating checkpoint files.
Definition SimTime.H:344
amrex::Real m_min_dt
Minimum delta_t indicated by user.
Definition SimTime.H:283
int m_regrid_start_index
Initial starting time index for regriding.
Definition SimTime.H:350
bool write_plot_file() const
Definition SimTime.cpp:363
AMREX_FORCE_INLINE amrex::Real & current_time()
Definition SimTime.H:112
void request_stop(const std::string &reason)
Definition SimTime.H:191
amrex::Real m_plt_t_tol
Relative (to dt) tolerance for plot time interval output.
Definition SimTime.H:321
std::string m_stop_reason
Reason recorded alongside the stop request.
Definition SimTime.H:243
int m_verbose
Verbosity.
Definition SimTime.H:375
int m_time_index
Counter for the number of timesteps since start of simulation.
Definition SimTime.H:338
AMREX_FORCE_INLINE int chkpt_interval() const
Definition SimTime.H:154
AMREX_FORCE_INLINE amrex::Real delta_t() const
Definition SimTime.H:91
bool do_regrid() const
Definition SimTime.cpp:355
amrex::Real m_current_cfl
Current CFL.
Definition SimTime.H:286
amrex::Real m_plt_start_time
Initial starting time for generating output files (time-based)
Definition SimTime.H:335
AMREX_FORCE_INLINE amrex::Real stop_time() const
Definition SimTime.H:145
amrex::Real m_new_time
Time where a new timestep will advance to.
Definition SimTime.H:253
AMREX_FORCE_INLINE int & time_index()
Definition SimTime.H:130
amrex::Real m_src_cfl
Definition SimTime.H:291
AMREX_FORCE_INLINE amrex::Real & delta_t()
Definition SimTime.H:94
bool m_force_plt_dt
Bool for if plt time interval should be forced.
Definition SimTime.H:390
bool write_last_plot_file() const
Definition SimTime.cpp:397
void set_wall_start_time()
Set the wall clock start time (captures current wall time)
Definition SimTime.cpp:478
amrex::Real m_max_wall_time
Maximum wall clock time in hours.
Definition SimTime.H:262
amrex::Real m_chkpt_t_interval
Time interval for writing checkpoint/restart files.
Definition SimTime.H:303
std::vector< bool > m_postprocess_enforce_dt
Timestep considerations from postprocessing instances.
Definition SimTime.H:393
int m_chkpt_delay
Time step delay for checkpoint/restart output (this means that output only happens after the delay)
Definition SimTime.H:360
void parse_parameters()
Read user defined options from input file.
Definition SimTime.cpp:11
amrex::Real m_dt_growth
Maximum growth of dt between timesteps.
Definition SimTime.H:300
void calculate_minimum_enforce_dt_abs_tol()
Calculate minimum enforce dt tolerance based on all considerations.
Definition SimTime.cpp:449
bool m_stop_requested
A post-processing utility has asked for a graceful stop.
Definition SimTime.H:240
int m_plt_start_index
Initial starting time index for generating output files.
Definition SimTime.H:347
int m_profiling_interval
Time step interval for profiling output.
Definition SimTime.H:372
AMREX_FORCE_INLINE amrex::Real start_time() const
Definition SimTime.H:142
amrex::Real m_dt_calc
delta_t calculated using CFL constraint
Definition SimTime.H:294
amrex::Real m_init_shrink
Initial reduction in timestep size for startup.
Definition SimTime.H:297
bool m_adaptive
Flag indicating whether timestep is adaptive.
Definition SimTime.H:378
amrex::Real m_fixed_dt
Fixed delta_t indicated by user.
Definition SimTime.H:274
AMREX_FORCE_INLINE int stop_time_index() const
Definition SimTime.H:151
AMREX_FORCE_INLINE amrex::Real get_minimum_enforce_dt_abs_tol() const
Definition SimTime.H:121
amrex::Real m_cur_time
Current simulation time.
Definition SimTime.H:250
void set_restart_time(int tidx, amrex::Real time)
Definition SimTime.cpp:426
amrex::Real m_wall_start
Initialization wall clock time in seconds.
Definition SimTime.H:265
AMREX_FORCE_INLINE amrex::Real & delta_t_nm1()
Definition SimTime.H:103
amrex::Real m_chkpt_t_tol
Relative (to dt) tolerance for checkpoint time interval output.
Definition SimTime.H:309
amrex::Vector< amrex::Real > m_postprocess_time_interval
Definition SimTime.H:395
bool write_last_checkpoint() const
Definition SimTime.cpp:411
static constexpr int max_time_states
Definition SimTime.H:36
void advance_time()
Definition SimTime.cpp:293
AMREX_FORCE_INLINE amrex::Real max_cfl() const
Definition SimTime.H:118
bool write_checkpoint() const
Definition SimTime.cpp:380
amrex::Vector< amrex::Real > m_postprocess_time_delay
Definition SimTime.H:396
bool output_profiling_info() const
Definition SimTime.cpp:471
void override_simulation_end_parameters()
Deactivate ending parameters (overset should be externally controlled)
Definition SimTime.H:176
amrex::Real m_force_dt_abs_tol
Smallest absolute tolerance for enforcing dt, considering all tolerance criteria.
Definition SimTime.H:329
amrex::Real m_chkpt_t_delay
Time delay for checkpoint/restart output.
Definition SimTime.H:306
AMREX_FORCE_INLINE amrex::Real new_time() const
Definition SimTime.H:115
amrex::Real m_delay_time
Delayed adaptive stepping.
Definition SimTime.H:268
int m_regrid_interval
Time interval for regridding.
Definition SimTime.H:369
amrex::Real m_max_dt
Maximum delta_t indicated by user.
Definition SimTime.H:280
bool m_force_chkpt_dt
Bool for if checkpoint time interval should be forced.
Definition SimTime.H:387
bool m_use_force_cfl
Flag indicating if forcing should be included in CFL calculation.
Definition SimTime.H:384
AMREX_FORCE_INLINE amrex::Real delta_t_nm2() const
Definition SimTime.H:100
amrex::Real m_start_time
Starting simulation time (to track restart)
Definition SimTime.H:256
amrex::Vector< amrex::Real > m_postprocess_enforce_dt_tol
Definition SimTime.H:394
int m_plt_delay
Time step delay for plot file output.
Definition SimTime.H:366
AMREX_FORCE_INLINE bool use_force_cfl() const
Definition SimTime.H:136
AMREX_FORCE_INLINE int regrid_interval() const
Definition SimTime.H:139
AMREX_FORCE_INLINE int start_time_index() const
Definition SimTime.H:148
amrex::Real m_chkpt_start_time
Initial starting time for generating checkpoint files (time-based)
Definition SimTime.H:332
void set_current_cfl(amrex::Real conv_cfl, amrex::Real diff_cfl, amrex::Real src_cfl)
Definition SimTime.cpp:162
bool write_final_checkpoint() const
Whether a checkpoint must be written once the time loop has ended; the same rule as write_final_plot_...
Definition SimTime.H:222
int m_start_time_index
Initial starting time index.
Definition SimTime.H:341
amrex::Real m_stop_time
Max time for simulation.
Definition SimTime.H:259
AMREX_FORCE_INLINE amrex::Real delta_t_nm1() const
Definition SimTime.H:97
amrex::Real m_initial_dt
Initial delta_t indicated by user.
Definition SimTime.H:277
bool new_timestep()
Definition SimTime.cpp:109
amrex::Real m_force_chkpt_tol
Relative (to chkpt_t_interval) tolerance for enforcing dt.
Definition SimTime.H:312
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:160
bool continue_simulation() const
Definition SimTime.cpp:326
AMREX_FORCE_INLINE int time_index() const
Definition SimTime.H:127
bool write_final_plot_file() const
Definition SimTime.H:215
amrex::Real m_conv_cfl
Current CFL categories.
Definition SimTime.H:289
int m_stop_time_index
Maximum timesteps for simulation.
Definition SimTime.H:353
amrex::Real m_max_cfl
Maximum CFL constraint.
Definition SimTime.H:271
int m_chkpt_interval
Time step interval for writing checkpoint/restart files.
Definition SimTime.H:356
amrex::Real m_plt_t_delay
Time delay for plot file output.
Definition SimTime.H:318
amrex::Real m_plt_t_interval
Time interval for plot file output.
Definition SimTime.H:315
AMREX_FORCE_INLINE amrex::Real & delta_t_nm2()
Definition SimTime.H:106
int m_plt_interval
Time step interval for plot file output.
Definition SimTime.H:363
AMREX_FORCE_INLINE amrex::Real current_time() const
Definition SimTime.H:109
bool stop_requested() const
Return true if a graceful stop has been requested.
Definition SimTime.H:198
const std::string & stop_reason() const
Text describing why a stop was requested.
Definition SimTime.H:201
bool m_is_init
Flag indicating if this is initialization.
Definition SimTime.H:381
This test case is intended as an evaluation of the momentum advection scheme.
Definition BCInterface.cpp:10