WarpX
Diagnostics.H
Go to the documentation of this file.
1 #ifndef WARPX_DIAGNOSTICS_H_
2 #define WARPX_DIAGNOSTICS_H_
3 
5 
11 
12 #include <AMReX_IntVect.H>
13 #include <AMReX_REAL.H>
14 #include <AMReX_Vector.H>
15 #include <AMReX_AmrParticles.H>
16 
17 #include <AMReX_BaseFwd.H>
18 
19 #include <map>
20 #include <memory>
21 #include <string>
22 #include <vector>
23 
31 {
32 public:
38  Diagnostics (int i, std::string name);
39 
41  virtual ~Diagnostics ();
42 
43  Diagnostics (Diagnostics const &) = delete;
44  Diagnostics& operator= (Diagnostics const & ) = delete;
45  Diagnostics(Diagnostics&& ) = default;
47 
52  void ComputeAndPack ();
53 
69  virtual void Flush (int i_buffer, bool force_flush) = 0;
71  void InitData ();
72  void InitDataBeforeRestart ();
73  void InitDataAfterRestart ();
82  virtual void InitializeFieldFunctors (int lev) = 0;
89  virtual void InitializeFieldFunctorsRZopenPMD ([[maybe_unused]] int lev) { }
91  virtual void InitializeParticleFunctors () {}
97  virtual bool DoComputeAndPack(int step, bool force_flush=false) = 0;
104  virtual bool DoDump (int step, int i_buffer, bool force_flush=false) = 0;
106  void NewIteration () {m_already_done = false;}
113  void FilterComputePackFlush (int step, bool force_flush=false);
115  [[nodiscard]] bool DoDumpLastTimestep () const {return m_dump_last_timestep;}
117  [[nodiscard]] int getnumbuffers() const {return m_num_buffers;}
121  virtual amrex::Real gettlab ( [[maybe_unused]] int i_buffer) {return 0.;}
126  virtual void settlab ( [[maybe_unused]] int i_buffer, [[maybe_unused]] amrex::Real tlab) { }
130  virtual int get_buffer_k_index_hi ( [[maybe_unused]] int i_buffer) {return 0; }
135  virtual void set_buffer_k_index_hi ( [[maybe_unused]] int i_buffer, [[maybe_unused]] int kindex) { }
140  virtual amrex::Real get_snapshot_domain_lo ([[maybe_unused]] int i_buffer, [[maybe_unused]] int idim) {return 0.; }
145  virtual amrex::Real get_snapshot_domain_hi ([[maybe_unused]] int i_buffer, [[maybe_unused]] int idim) {return 0.; }
151  void setSnapshotDomainLo(int i_buffer, int idim, amrex::Real domain_lab_lo) {m_snapshot_domain_lab[i_buffer].setLo(idim, domain_lab_lo); }
157  void setSnapshotDomainHi(int i_buffer, int idim, amrex::Real domain_lab_hi) {m_snapshot_domain_lab[i_buffer].setHi(idim, domain_lab_hi); }
161  virtual int get_flush_counter ( [[maybe_unused]] int i_buffer) { return 0; }
166  virtual void set_flush_counter ( [[maybe_unused]] int i_buffer, [[maybe_unused]] int flush_counter) { }
170  virtual int get_last_valid_Zslice ( [[maybe_unused]] int i_buffer) { return 0; }
175  virtual void set_last_valid_Zslice ( [[maybe_unused]] int i_buffer, [[maybe_unused]] int last_valid_Zslice) { }
179  virtual int get_snapshot_full_flag ( [[maybe_unused]] int i_buffer) { return 0; }
184  virtual void set_snapshot_full ( [[maybe_unused]] int i_buffer, [[maybe_unused]] int snapshot_full) { }
185 
186 protected:
188  bool BaseReadParameters ();
190  void InitBaseData ();
195  virtual void InitializeBufferData (int i_buffer, int lev, bool restart=false) = 0;
199  virtual void DerivedInitData () {}
201  virtual void InitializeParticleBuffer () = 0;
205  virtual void PrepareBufferData () {}
209  virtual void UpdateBufferData () {}
213  virtual void PrepareFieldDataForOutput () {}
215  virtual void PrepareParticleDataForOutput () {}
221  virtual void MovingWindowAndGalileanDomainShift (int step) { amrex::ignore_unused(step); }
223  std::string m_diag_name;
225  std::string m_file_prefix;
237 
241  std::vector< std::string > m_pfield_species;
243  std::vector< bool > m_pfield_do_average;
245  std::vector< int > m_pfield_species_index;
247  std::vector< std::string > m_pfield_strings;
249  std::vector< bool> m_pfield_dofilter;
251  std::vector< std::string > m_pfield_filter_strings;
252 
254  bool m_dump_last_timestep = true;
258  std::string m_format = "plotfile";
260  int m_already_done = false;
262  std::unique_ptr<FlushFormat> m_flush_format;
269 
277  // a particle buffer here?
278  int nlev;
279  int nmax_lev;
283  std::vector< std::string > m_output_species_names;
285  std::vector< std::string > m_all_species_names;
311 
320 
321 };
322 
323 #endif // WARPX_DIAGNOSTICS_H_
base class for diagnostics. Contains main routines to filter, compute and flush diagnostics.
Definition: Diagnostics.H:31
std::vector< bool > m_pfield_do_average
Definition: Diagnostics.H:243
bool BaseReadParameters()
Definition: Diagnostics.cpp:48
void setSnapshotDomainHi(int i_buffer, int idim, amrex::Real domain_lab_hi)
Definition: Diagnostics.H:157
amrex::Vector< std::string > m_varnames_fields
Definition: Diagnostics.H:236
virtual void PrepareFieldDataForOutput()
Definition: Diagnostics.H:213
int nmax_lev
Definition: Diagnostics.H:279
virtual void PrepareBufferData()
Definition: Diagnostics.H:205
Diagnostics(Diagnostics &&)=default
std::string m_format
Definition: Diagnostics.H:258
virtual amrex::Real gettlab([[maybe_unused]] int i_buffer)
Definition: Diagnostics.H:121
virtual void set_last_valid_Zslice([[maybe_unused]] int i_buffer, [[maybe_unused]] int last_valid_Zslice)
Definition: Diagnostics.H:175
virtual int get_snapshot_full_flag([[maybe_unused]] int i_buffer)
Definition: Diagnostics.H:179
void InitDataAfterRestart()
Definition: Diagnostics.cpp:308
std::vector< std::string > m_pfield_strings
Definition: Diagnostics.H:247
amrex::Vector< std::string > m_pfield_varnames
Definition: Diagnostics.H:239
amrex::Vector< std::unique_ptr< ComputeParticleDiagFunctor > > m_all_particle_functors
Definition: Diagnostics.H:310
int m_already_done
Definition: Diagnostics.H:260
amrex::Vector< amrex::RealBox > m_snapshot_domain_lab
Definition: Diagnostics.H:319
virtual void set_snapshot_full([[maybe_unused]] int i_buffer, [[maybe_unused]] int snapshot_full)
Definition: Diagnostics.H:184
void InitData()
Definition: Diagnostics.cpp:377
amrex::Vector< amrex::Vector< amrex::MultiFab > > m_mf_output
Definition: Diagnostics.H:268
amrex::Vector< amrex::Real > m_hi
Definition: Diagnostics.H:302
int m_file_min_digits
Definition: Diagnostics.H:227
virtual void settlab([[maybe_unused]] int i_buffer, [[maybe_unused]] amrex::Real tlab)
Definition: Diagnostics.H:126
std::vector< std::string > m_output_species_names
Definition: Diagnostics.H:283
virtual int get_flush_counter([[maybe_unused]] int i_buffer)
Definition: Diagnostics.H:161
virtual void DerivedInitData()
Definition: Diagnostics.H:199
virtual void MovingWindowAndGalileanDomainShift(int step)
Definition: Diagnostics.H:221
bool DoDumpLastTimestep() const
Definition: Diagnostics.H:115
virtual void InitializeParticleFunctors()
Definition: Diagnostics.H:91
virtual void UpdateBufferData()
Definition: Diagnostics.H:209
std::string m_diag_name
Definition: Diagnostics.H:223
std::unique_ptr< FlushFormat > m_flush_format
Definition: Diagnostics.H:262
amrex::Vector< amrex::Vector< ParticleDiag > > m_output_species
Definition: Diagnostics.H:289
amrex::Vector< amrex::Real > m_lo
Definition: Diagnostics.H:300
amrex::IntVect m_crse_ratio
Definition: Diagnostics.H:298
virtual void set_flush_counter([[maybe_unused]] int i_buffer, [[maybe_unused]] int flush_counter)
Definition: Diagnostics.H:166
amrex::Vector< std::string > m_varnames
Definition: Diagnostics.H:234
virtual void InitializeBufferData(int i_buffer, int lev, bool restart=false)=0
virtual void InitializeFieldFunctorsRZopenPMD([[maybe_unused]] int lev)
Definition: Diagnostics.H:89
virtual void set_buffer_k_index_hi([[maybe_unused]] int i_buffer, [[maybe_unused]] int kindex)
Definition: Diagnostics.H:135
int getnumbuffers() const
Definition: Diagnostics.H:117
int m_num_buffers
Definition: Diagnostics.H:304
virtual amrex::Real get_snapshot_domain_hi([[maybe_unused]] int i_buffer, [[maybe_unused]] int idim)
Definition: Diagnostics.H:145
void InitBaseData()
Definition: Diagnostics.cpp:457
amrex::Vector< int > m_rho_per_species_index
Definition: Diagnostics.H:306
std::vector< std::string > m_pfield_species
Definition: Diagnostics.H:241
Diagnostics(Diagnostics const &)=delete
amrex::Vector< amrex::Vector< amrex::Geometry > > m_geom_output
Definition: Diagnostics.H:276
void setSnapshotDomainLo(int i_buffer, int idim, amrex::Real domain_lab_lo)
Definition: Diagnostics.H:151
virtual void InitializeParticleBuffer()=0
int nlev_output
Definition: Diagnostics.H:281
amrex::Vector< amrex::Vector< int > > m_totalParticles_in_buffer
Definition: Diagnostics.H:316
virtual amrex::Real get_snapshot_domain_lo([[maybe_unused]] int i_buffer, [[maybe_unused]] int idim)
Definition: Diagnostics.H:140
std::string m_file_prefix
Definition: Diagnostics.H:225
Diagnostics(int i, std::string name)
Definition: Diagnostics.cpp:40
Diagnostics & operator=(Diagnostics &&)=default
void FilterComputePackFlush(int step, bool force_flush=false)
Definition: Diagnostics.cpp:567
bool m_dump_last_timestep
Definition: Diagnostics.H:254
std::vector< int > m_pfield_species_index
Definition: Diagnostics.H:245
virtual bool DoComputeAndPack(int step, bool force_flush=false)=0
virtual bool DoDump(int step, int i_buffer, bool force_flush=false)=0
virtual ~Diagnostics()
virtual int get_last_valid_Zslice([[maybe_unused]] int i_buffer)
Definition: Diagnostics.H:170
virtual void Flush(int i_buffer, bool force_flush)=0
Flush particle and field buffers to file using the FlushFormat member variable.
virtual void PrepareParticleDataForOutput()
Definition: Diagnostics.H:215
virtual void InitializeFieldFunctors(int lev)=0
Diagnostics & operator=(Diagnostics const &)=delete
void InitDataBeforeRestart()
Definition: Diagnostics.cpp:298
int nlev
Definition: Diagnostics.H:278
void NewIteration()
Definition: Diagnostics.H:106
std::vector< std::string > m_all_species_names
Definition: Diagnostics.H:285
int m_diag_index
Definition: Diagnostics.H:229
std::vector< std::string > m_pfield_filter_strings
Definition: Diagnostics.H:251
void ComputeAndPack()
Definition: Diagnostics.cpp:522
amrex::Vector< amrex::Vector< std::unique_ptr< ComputeDiagFunctor > > > m_all_field_functors
Definition: Diagnostics.H:295
virtual int get_buffer_k_index_hi([[maybe_unused]] int i_buffer)
Definition: Diagnostics.H:130
std::vector< bool > m_pfield_dofilter
Definition: Diagnostics.H:249
amrex::Vector< amrex::Vector< std::unique_ptr< PinnedMemoryParticleContainer > > > m_particles_buffer
Definition: Diagnostics.H:308
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void ignore_unused(const Ts &...)
i
Definition: check_interp_points_and_weights.py:174
name
Definition: run_automated.py:229