/home/runner/work/spades/spades/Source/SPADES.H Source File

SPADES API: /home/runner/work/spades/spades/Source/SPADES.H Source File
SPADES API
SPADES.H
Go to the documentation of this file.
1#ifndef SPADES_H
2#define SPADES_H
3#include <AMReX.H>
4#include <AMReX_AmrCore.H>
5#include <AMReX_MultiFab.H>
6#include <AMReX_MultiFabUtil.H>
7#include <AMReX_iMultiFab.H>
8#include <AMReX_REAL.H>
9#include <AMReX_ParmParse.H>
10#include <AMReX_FluxRegister.H>
11#include <AMReX_PlotFileUtil.H>
12#include <AMReX_ErrorList.H>
13#include <AMReX_Random.H>
14#include "Constants.H"
15#include "IC.H"
16#include "Utilities.H"
20
24namespace spades {
25
27class SPADES : public amrex::AmrCore
28{
29public:
30 SPADES();
31 ~SPADES() override;
32
34 void init_data();
35
37 void evolve();
38
52 int lev,
53 amrex::Real time,
54 const amrex::BoxArray& ba,
55 const amrex::DistributionMapping& dm) override;
56
69 void RemakeLevel(
70 int lev,
71 amrex::Real time,
72 const amrex::BoxArray& ba,
73 const amrex::DistributionMapping& dm) override;
74
82 void ClearLevel(int lev) override;
83
97 int lev,
98 amrex::Real time,
99 const amrex::BoxArray& ba,
100 const amrex::DistributionMapping& dm) override;
101
108 int /*lev*/,
109 amrex::TagBoxArray& /*tags*/,
110 amrex::Real /*time*/,
111 int /*ngrow*/) override
112 {}
113
118 static amrex::Real est_time_step();
119
126 std::unique_ptr<amrex::MultiFab>
127 get_field(const std::string& name, const int ngrow);
128
130 void plot_file_mf();
131
135 void initialize_state();
136
139
143 void process_messages();
144
148 void rollback();
149
153 void rollback_statistics();
154
158 void update_gvt();
159
163 void update_lbts();
164
166 static constexpr int LEV{0};
167
168private:
170 void read_parameters();
171
173 void compute_dt();
174
180 void time_step(const amrex::Real time);
181
187 void advance(const amrex::Real time, const amrex::Real dt);
188
190 static void post_time_step();
191
197 bool check_field_existence(const std::string& name);
198
205 static int get_field_component(
206 const std::string& name, const amrex::Vector<std::string>& varnames);
207
209 void set_ics();
210
216 [[nodiscard]] std::string plot_file_name(const int step) const;
217
223 [[nodiscard]] std::string chk_file_name(const int step) const;
224
229 [[nodiscard]] amrex::Vector<std::string> plot_file_var_names() const;
230
232 void write_plot_file();
233
235 void write_checkpoint_file() const;
236
239
244 void write_info_file(const std::string& path) const;
245
250 void write_rng_file(const std::string& path) const;
251
256 void read_rng_file(const std::string& path) const;
257
259 void init_rng() const;
260
265 void write_data_file(const bool is_init) const;
266
270 void summary();
271
273 int m_istep{0};
274
277
279 amrex::Real m_t_new{0.0};
280
283
286
289
291 amrex::Long m_ncells{0};
292
294 amrex::Long m_ntotal_messages{0};
295
297 amrex::Vector<amrex::Long> m_nmessages;
298
300 amrex::Vector<amrex::Long> m_min_messages;
301
303 amrex::Vector<amrex::Long> m_max_messages;
304
306 amrex::Long m_nprocessed_messages{0};
307
309 amrex::Long m_ntotal_entities{0};
310
312 amrex::Long m_nentities{0};
313
315 amrex::Vector<int> m_nrollbacks;
316
318 amrex::Vector<amrex::Real> m_min_timings;
319
321 amrex::Vector<amrex::Real> m_max_timings;
322
324 amrex::Vector<amrex::Real> m_avg_timings;
325
327 int m_max_step = std::numeric_limits<int>::max();
328
330 amrex::Real m_stop_time = std::numeric_limits<amrex::Real>::max();
331
333 amrex::Vector<std::string> m_spades_varnames;
334
336 amrex::Vector<std::string> m_state_varnames;
337
339 amrex::Vector<std::string> m_message_counts_varnames;
340
342 amrex::Vector<std::string> m_entity_counts_varnames;
343
345 amrex::MultiFab m_state;
346
348 amrex::MultiFab m_plt_mf;
349
351 const int m_state_ngrow = 0;
352
354 std::string m_restart_chkfile;
355
357 std::string m_plot_file{"plt"};
358
360 int m_plot_int = -1;
361
363 std::string m_chk_file{"chk"};
364
366 int m_chk_int = -1;
367
370
373
376
378 bool m_write_messages{false};
379
381 bool m_write_entities{false};
382
384 std::string m_data_fname{"data.csv"};
385
387 const int m_data_precision{6};
388
390 amrex::Real m_lookahead{1.0};
391
394
397
400
403
405 int m_seed{0};
406
410 amrex::Real m_lambda{1.0};
411
413 std::unique_ptr<ic::InitializerBase> m_ic_op;
414
416 std::string m_ic_type;
417
419 std::unique_ptr<particles::MessageParticleContainer> m_message_pc;
420
422 std::unique_ptr<particles::EntityParticleContainer> m_entity_pc;
423};
424} // namespace spades
425#endif
Main SPADES class.
Definition SPADES.H:28
int m_entities_per_lp
Number of entities per logical process (optional user input)
Definition SPADES.H:399
static amrex::Real est_time_step()
Compute the time step.
Definition SPADES.cpp:890
void advance(const amrex::Real time, const amrex::Real dt)
Advance for a single time step.
Definition SPADES.cpp:280
int m_max_step
Maximum number of steps.
Definition SPADES.H:327
void initialize_state()
Initialize state.
Definition SPADES.cpp:937
amrex::Real m_t_old
Old time.
Definition SPADES.H:282
std::string m_ic_type
Initial condition type (optional user input)
Definition SPADES.H:416
amrex::Vector< std::string > m_entity_counts_varnames
Entity count names for output.
Definition SPADES.H:342
amrex::Real m_lambda
Definition SPADES.H:410
static void post_time_step()
Perform work after a time step.
Definition SPADES.cpp:354
int m_messages_per_lp
Number of messages per logical process (optional user input)
Definition SPADES.H:402
amrex::Vector< amrex::Long > m_nmessages
Message counts.
Definition SPADES.H:297
void ErrorEst(int, amrex::TagBoxArray &, amrex::Real, int) override
Tag cells for refinement.
Definition SPADES.H:107
amrex::Vector< std::string > m_spades_varnames
All variable names for output.
Definition SPADES.H:333
void init_data()
Initializes data.
Definition SPADES.cpp:69
void ClearLevel(int lev) override
Delete level data.
Definition SPADES.cpp:956
void set_ics()
Set the user defined IC functions.
Definition SPADES.cpp:965
amrex::Vector< amrex::Real > m_max_timings
Max timings for each step.
Definition SPADES.H:321
void compute_dt()
Wrapper for EstTimeStep.
Definition SPADES.cpp:871
amrex::Real m_lbts
Lower bound on incoming time stamp.
Definition SPADES.H:288
int m_rng_file_name_digits
Digits used in the rng seed file names.
Definition SPADES.H:375
void rollback_statistics()
Print rollback statistics.
Definition SPADES.cpp:777
amrex::Vector< int > m_nrollbacks
Number of rollbacks.
Definition SPADES.H:315
amrex::Long m_ntotal_entities
Total entity count.
Definition SPADES.H:309
std::string plot_file_name(const int step) const
Get plotfile name.
Definition SPADES.cpp:1047
std::string m_restart_chkfile
Restart file name, restart from this checkpoint if it is not empty.
Definition SPADES.H:354
void write_rng_file(const std::string &path) const
Write random number generator seed info.
Definition SPADES.cpp:1343
void time_step(const amrex::Real time)
Advance by the time step.
Definition SPADES.cpp:265
std::string m_data_fname
Filename for simulation data.
Definition SPADES.H:384
amrex::Vector< amrex::Real > m_avg_timings
Average timings for each step.
Definition SPADES.H:324
amrex::Vector< amrex::Long > m_min_messages
Min of message counts.
Definition SPADES.H:300
std::unique_ptr< particles::MessageParticleContainer > m_message_pc
Message particle container.
Definition SPADES.H:419
amrex::Vector< amrex::Real > m_min_timings
Min timings for each step.
Definition SPADES.H:318
amrex::Real m_gvt
Global virtual time.
Definition SPADES.H:276
const int m_state_ngrow
Number of ghost cells.
Definition SPADES.H:351
std::string m_chk_file
Checkpoint prefix (optional user input)
Definition SPADES.H:363
amrex::Real m_t_new
New time.
Definition SPADES.H:279
bool check_field_existence(const std::string &name)
Check if a field exists.
Definition SPADES.cpp:978
int m_seed
Random number generator seed (optional user input)
Definition SPADES.H:405
void MakeNewLevelFromCoarse(int lev, amrex::Real time, const amrex::BoxArray &ba, const amrex::DistributionMapping &dm) override
Make a new level.
Definition SPADES.cpp:896
void plot_file_mf()
Put together the MultiFab for output.
Definition SPADES.cpp:1057
void read_rng_file(const std::string &path) const
Read random number generator seed info.
Definition SPADES.cpp:1358
amrex::Long m_ncells
Cell count.
Definition SPADES.H:291
std::string chk_file_name(const int step) const
Get checkpoint file name.
Definition SPADES.cpp:1052
amrex::Vector< std::string > m_state_varnames
State variable names for output.
Definition SPADES.H:336
void summary()
Compute summary data.
Definition SPADES.cpp:312
amrex::Vector< std::string > plot_file_var_names() const
Set plotfile variables names.
Definition SPADES.cpp:1042
void update_lbts()
Update the Lower Bound on Incoming Time Stamp.
Definition SPADES.cpp:830
void MakeNewLevelFromScratch(int lev, amrex::Real time, const amrex::BoxArray &ba, const amrex::DistributionMapping &dm) override
Make a level from scratch.
Definition SPADES.cpp:906
void read_parameters()
Read parameters.
Definition SPADES.cpp:123
int m_file_name_digits
Digits used in the plotfile and checkpoint file names.
Definition SPADES.H:372
amrex::Real m_stop_time
Stop time.
Definition SPADES.H:330
void read_checkpoint_file()
Read checkpoint file from disk.
Definition SPADES.cpp:1194
SPADES()
Definition SPADES.cpp:6
amrex::MultiFab m_state
Multifabs to store the solution.
Definition SPADES.H:345
void write_info_file(const std::string &path) const
Write job info to disk.
Definition SPADES.cpp:1288
int m_messages_per_step
Number of messages to process in each step (optional user input)
Definition SPADES.H:396
int m_chk_int
Checkpoint frequency (optional user input)
Definition SPADES.H:366
int m_nfiles
Number of plot and checkpoint data files per write.
Definition SPADES.H:369
void process_messages()
Process messages.
Definition SPADES.cpp:359
std::unique_ptr< particles::EntityParticleContainer > m_entity_pc
Entity article container.
Definition SPADES.H:422
static constexpr int LEV
Level index.
Definition SPADES.H:166
amrex::Vector< amrex::Long > m_max_messages
Max of message counts.
Definition SPADES.H:303
bool m_write_entities
Boolean to output entities (optional user input)
Definition SPADES.H:381
bool m_write_messages
Boolean to output messages (optional user input)
Definition SPADES.H:378
amrex::Long m_nentities
Entity count.
Definition SPADES.H:312
amrex::Long m_ntotal_messages
Total message count.
Definition SPADES.H:294
void init_rng() const
Initialize the random number generator.
Definition SPADES.cpp:1318
amrex::MultiFab m_plt_mf
Multifabs for output.
Definition SPADES.H:348
static int get_field_component(const std::string &name, const amrex::Vector< std::string > &varnames)
Get field component.
Definition SPADES.cpp:988
amrex::Real m_window_size
Window size for processing messages (optional user input)
Definition SPADES.H:393
std::unique_ptr< ic::InitializerBase > m_ic_op
Initial condition operator.
Definition SPADES.H:413
void rollback()
Perform rollback.
Definition SPADES.cpp:539
const int m_data_precision
Data precision for data output.
Definition SPADES.H:387
void write_checkpoint_file() const
Write checkpoint file to disk.
Definition SPADES.cpp:1107
amrex::Real m_dt
Time step.
Definition SPADES.H:285
void RemakeLevel(int lev, amrex::Real time, const amrex::BoxArray &ba, const amrex::DistributionMapping &dm) override
Remake an existing level.
Definition SPADES.cpp:946
void write_plot_file()
Write plotfile to disk.
Definition SPADES.cpp:1084
amrex::Vector< std::string > m_message_counts_varnames
Message count names for output.
Definition SPADES.H:339
amrex::Long m_nprocessed_messages
Count of processed messages.
Definition SPADES.H:306
int m_plot_int
Plotfile frequency (optional user input)
Definition SPADES.H:360
void write_data_file(const bool is_init) const
Write simulation information.
Definition SPADES.cpp:1381
void init_particle_containers()
Initialize the particle containers.
Definition SPADES.cpp:112
void evolve()
Advance solution to final time.
Definition SPADES.cpp:174
std::string m_plot_file
Plotfile prefix (optional user input)
Definition SPADES.H:357
int m_istep
Current step.
Definition SPADES.H:273
void update_gvt()
Update the global virtual time.
Definition SPADES.cpp:821
~SPADES() override
std::unique_ptr< amrex::MultiFab > get_field(const std::string &name, const int ngrow)
Get a field based on a variable name.
Definition SPADES.cpp:1000
amrex::Real m_lookahead
Lookahead value (optional user input)
Definition SPADES.H:390
static constexpr amrex::Real LARGE_NUM
A large number.
Definition Constants.H:34
static constexpr int FILE_NAME_DIGITS
Number of digits to use in output file names.
Definition Constants.H:42
static constexpr amrex::Real LOW_NUM
A large negative number.
Definition Constants.H:19
static constexpr int RNG_FILE_NAME_DIGITS
Number of digits to use in random seed file names.
Definition Constants.H:45
static constexpr int TWO_TO_EIGHT
Definition Constants.H:39
Solver for PArallel Discrete Event Simulation.
Definition ConsoleIO.cpp:14