/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#include "Models/Phold.H"
21
25namespace spades {
27template <typename Model>
28class SPADES : public amrex::AmrCore
29{
30 static_assert(
32 "The model must define a struct named ProcessOp.");
33
34public:
35 SPADES(const Model& model);
36 ~SPADES() override;
37
40
42 void evolve();
43
57 int lev,
58 amrex::Real time,
59 const amrex::BoxArray& ba,
60 const amrex::DistributionMapping& dm) override;
61
75 int lev,
76 amrex::Real time,
77 const amrex::BoxArray& ba,
78 const amrex::DistributionMapping& dm) override;
79
87 void ClearLevel(int lev) override;
88
102 int lev,
103 amrex::Real time,
104 const amrex::BoxArray& ba,
105 const amrex::DistributionMapping& dm) override;
106
113 int /*lev*/,
114 amrex::TagBoxArray& /*tags*/,
115 amrex::Real /*time*/,
116 int /*ngrow*/) override
117 {}
118
123 static amrex::Real est_time_step();
124
131 std::unique_ptr<amrex::MultiFab>
132 get_field(const std::string& name, const int ngrow);
133
136
141
144
149
153 void rollback();
154
159
164
169
171 static constexpr int LEV{0};
172
173private:
176
179
185 void time_step(const amrex::Real time);
186
192 void advance(const amrex::Real time, const amrex::Real dt);
193
195 static void post_time_step();
196
202 bool check_field_existence(const std::string& name);
203
211 const std::string& name, const amrex::Vector<std::string>& varnames);
212
214 void set_ics();
215
221 [[nodiscard]] std::string plot_file_name(const int step) const;
222
228 [[nodiscard]] std::string chk_file_name(const int step) const;
229
234 [[nodiscard]] amrex::Vector<std::string> plot_file_var_names() const;
235
238
241
244
249 void write_info_file(const std::string& path) const;
250
255 void write_rng_file(const std::string& path) const;
256
261 void read_rng_file(const std::string& path) const;
262
264 void initialize_rng() const;
265
270 void write_data_file(const bool is_init) const;
271
275 void summary();
276
278 int m_istep{0};
279
282
284 amrex::Real m_t_new{0.0};
285
288
291
294
296 amrex::Long m_ncells{0};
297
299 amrex::Long m_ntotal_messages{0};
300
302 amrex::Vector<amrex::Long> m_nmessages;
303
305 amrex::Vector<amrex::Long> m_min_messages;
306
308 amrex::Vector<amrex::Long> m_max_messages;
309
311 amrex::Long m_nprocessed_messages{0};
312
314 amrex::Long m_ntotal_entities{0};
315
317 amrex::Long m_nentities{0};
318
320 amrex::Vector<int> m_nrollbacks;
321
323 amrex::Vector<amrex::Real> m_min_timings;
324
326 amrex::Vector<amrex::Real> m_max_timings;
327
329 amrex::Vector<amrex::Real> m_avg_timings;
330
332 int m_max_step = std::numeric_limits<int>::max();
333
335 amrex::Real m_stop_time = std::numeric_limits<amrex::Real>::max();
336
338 amrex::Vector<std::string> m_spades_varnames;
339
341 amrex::Vector<std::string> m_state_varnames;
342
344 amrex::Vector<std::string> m_message_counts_varnames;
345
347 amrex::Vector<std::string> m_entity_counts_varnames;
348
350 amrex::MultiFab m_state;
351
353 amrex::MultiFab m_plt_mf;
354
356 const int m_state_ngrow = 0;
357
359 std::string m_restart_chkfile;
360
362 std::string m_plot_file{"plt"};
363
365 int m_plot_int = -1;
366
368 std::string m_chk_file{"chk"};
369
371 int m_chk_int = -1;
372
375
378
381
383 bool m_write_messages{false};
384
386 bool m_write_entities{false};
387
389 std::string m_data_fname{"data.csv"};
390
392 const int m_data_precision{6};
393
395 amrex::Real m_lookahead{1.0};
396
399
402
405
407 int m_seed{0};
408
410 std::unique_ptr<ic::InitializerBase> m_ic_op;
411
413 std::string m_ic_type;
414
416 std::unique_ptr<particles::MessageParticleContainer> m_message_pc;
417
419 std::unique_ptr<particles::EntityParticleContainer> m_entity_pc;
420
422 const Model& m_model;
423};
424
425} // namespace spades
426
427#include "SPADES.tpp"
428
429#endif
Main SPADES class.
Definition SPADES.H:29
int m_plot_int
Plotfile frequency (optional user input)
Definition SPADES.H:365
void ClearLevel(int lev) override
Delete level data.
int m_seed
Random number generator seed (optional user input)
Definition SPADES.H:407
std::string m_chk_file
Checkpoint prefix (optional user input)
Definition SPADES.H:368
void read_parameters()
Read parameters.
amrex::MultiFab m_state
Multifabs to store the solution.
Definition SPADES.H:350
std::string plot_file_name(const int step) const
Get plotfile name.
amrex::Real m_lookahead
Lookahead value (optional user input)
Definition SPADES.H:395
amrex::Real m_dt
Time step.
Definition SPADES.H:290
amrex::Vector< amrex::Real > m_max_timings
Max timings for each step.
Definition SPADES.H:326
amrex::Vector< amrex::Real > m_avg_timings
Average timings for each step.
Definition SPADES.H:329
int m_file_name_digits
Digits used in the plotfile and checkpoint file names.
Definition SPADES.H:377
amrex::Vector< amrex::Real > m_min_timings
Min timings for each step.
Definition SPADES.H:323
int m_nfiles
Number of plot and checkpoint data files per write.
Definition SPADES.H:374
SPADES(const Model &model)
void evolve()
Advance solution to final time.
void read_rng_file(const std::string &path) const
Read random number generator seed info.
void rollback()
Perform rollback.
std::unique_ptr< amrex::MultiFab > get_field(const std::string &name, const int ngrow)
Get a field based on a variable name.
void MakeNewLevelFromScratch(int lev, amrex::Real time, const amrex::BoxArray &ba, const amrex::DistributionMapping &dm) override
Make a level from scratch.
void initialize_data()
Initializes data.
std::string m_restart_chkfile
Restart file name, restart from this checkpoint if it is not empty.
Definition SPADES.H:359
amrex::Vector< int > m_nrollbacks
Number of rollbacks.
Definition SPADES.H:320
void initialize_state()
Initialize state.
amrex::Real m_t_old
Old time.
Definition SPADES.H:287
int m_chk_int
Checkpoint frequency (optional user input)
Definition SPADES.H:371
static int get_field_component(const std::string &name, const amrex::Vector< std::string > &varnames)
Get field component.
amrex::Real m_lbts
Lower bound on incoming time stamp.
Definition SPADES.H:293
std::string m_plot_file
Plotfile prefix (optional user input)
Definition SPADES.H:362
void write_checkpoint_file() const
Write checkpoint file to disk.
amrex::Real m_t_new
New time.
Definition SPADES.H:284
void set_ics()
Set the user defined IC functions.
std::string m_ic_type
Initial condition type (optional user input)
Definition SPADES.H:413
const int m_state_ngrow
Number of ghost cells.
Definition SPADES.H:356
std::string m_data_fname
Filename for simulation data.
Definition SPADES.H:389
void initialize_rng() const
Initialize the random number generator.
void advance(const amrex::Real time, const amrex::Real dt)
Advance for a single time step.
void time_step(const amrex::Real time)
Advance by the time step.
amrex::Vector< std::string > m_spades_varnames
All variable names for output.
Definition SPADES.H:338
static constexpr int LEV
Level index.
Definition SPADES.H:171
void write_rng_file(const std::string &path) const
Write random number generator seed info.
void rollback_statistics()
Print rollback statistics.
amrex::Vector< amrex::Long > m_nmessages
Message counts.
Definition SPADES.H:302
void write_data_file(const bool is_init) const
Write simulation information.
const int m_data_precision
Data precision for data output.
Definition SPADES.H:392
amrex::Long m_nentities
Entity count.
Definition SPADES.H:317
std::unique_ptr< ic::InitializerBase > m_ic_op
Initial condition operator.
Definition SPADES.H:410
~SPADES() override
amrex::Vector< amrex::Long > m_max_messages
Max of message counts.
Definition SPADES.H:308
int m_istep
Current step.
Definition SPADES.H:278
bool m_write_messages
Boolean to output messages (optional user input)
Definition SPADES.H:383
static amrex::Real est_time_step()
Compute the time step.
void read_checkpoint_file()
Read checkpoint file from disk.
int m_rng_file_name_digits
Digits used in the rng seed file names.
Definition SPADES.H:380
std::unique_ptr< particles::EntityParticleContainer > m_entity_pc
Entity article container.
Definition SPADES.H:419
amrex::Vector< std::string > plot_file_var_names() const
Set plotfile variables names.
amrex::Long m_nprocessed_messages
Count of processed messages.
Definition SPADES.H:311
const Model & m_model
Model.
Definition SPADES.H:422
void RemakeLevel(int lev, amrex::Real time, const amrex::BoxArray &ba, const amrex::DistributionMapping &dm) override
Remake an existing level.
void compute_dt()
Wrapper for EstTimeStep.
void summary()
Compute summary data.
std::unique_ptr< particles::MessageParticleContainer > m_message_pc
Message particle container.
Definition SPADES.H:416
void initialize_particle_containers()
Initialize the particle containers.
bool check_field_existence(const std::string &name)
Check if a field exists.
amrex::Real m_window_size
Window size for processing messages (optional user input)
Definition SPADES.H:398
amrex::Vector< std::string > m_state_varnames
State variable names for output.
Definition SPADES.H:341
amrex::MultiFab m_plt_mf
Multifabs for output.
Definition SPADES.H:353
int m_max_step
Maximum number of steps.
Definition SPADES.H:332
amrex::Real m_gvt
Global virtual time.
Definition SPADES.H:281
bool m_write_entities
Boolean to output entities (optional user input)
Definition SPADES.H:386
int m_messages_per_step
Number of messages to process in each step (optional user input)
Definition SPADES.H:401
void MakeNewLevelFromCoarse(int lev, amrex::Real time, const amrex::BoxArray &ba, const amrex::DistributionMapping &dm) override
Make a new level.
void write_plot_file()
Write plotfile to disk.
amrex::Vector< std::string > m_message_counts_varnames
Message count names for output.
Definition SPADES.H:344
void process_messages()
Process messages.
amrex::Long m_ncells
Cell count.
Definition SPADES.H:296
void write_info_file(const std::string &path) const
Write job info to disk.
amrex::Real m_stop_time
Stop time.
Definition SPADES.H:335
amrex::Long m_ntotal_entities
Total entity count.
Definition SPADES.H:314
std::string chk_file_name(const int step) const
Get checkpoint file name.
void update_gvt()
Update the global virtual time.
static void post_time_step()
Perform work after a time step.
int m_messages_per_lp
Number of messages per logical process (optional user input)
Definition SPADES.H:404
void update_lbts()
Update the Lower Bound on Incoming Time Stamp.
amrex::Vector< amrex::Long > m_min_messages
Min of message counts.
Definition SPADES.H:305
amrex::Vector< std::string > m_entity_counts_varnames
Entity count names for output.
Definition SPADES.H:347
void plot_file_mf()
Put together the MultiFab for output.
amrex::Long m_ntotal_messages
Total message count.
Definition SPADES.H:299
void ErrorEst(int, amrex::TagBoxArray &, amrex::Real, int) override
Tag cells for refinement.
Definition SPADES.H:112
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
Trait to determine if a class defines a nested struct named ProcessOp.
Definition Utilities.H:19