WarpX
Loading...
Searching...
No Matches
Diagnostics.H
Go to the documentation of this file.
1#ifndef WARPX_DIAGNOSTICS_H_
2#define WARPX_DIAGNOSTICS_H_
3
5
10
11#include <AMReX_IntVect.H>
12#include <AMReX_REAL.H>
13#include <AMReX_Vector.H>
14#include <AMReX_AmrParticles.H>
15
16#include <AMReX_BaseFwd.H>
17
18#include <map>
19#include <memory>
20#include <string>
21#include <vector>
22
32{
33public:
40 Diagnostics (int i, std::string name, DiagTypes diag_type);
41
43 virtual ~Diagnostics ();
44
45 Diagnostics (Diagnostics const &) = delete;
46 Diagnostics& operator= (Diagnostics const & ) = delete;
47 Diagnostics(Diagnostics&& ) = default;
49
56 void ComputeAndPack ();
57
73 virtual void Flush (int i_buffer, bool force_flush) = 0;
74
76 void InitData (const MultiParticleContainer& mpc);
79
88 virtual void InitializeFieldFunctors (int lev) = 0;
95 virtual void InitializeFieldFunctorsRZopenPMD ([[maybe_unused]] int lev) { }
97 virtual void InitializeParticleFunctors () {}
103 virtual bool DoComputeAndPack(int step, bool force_flush=false) = 0;
110 virtual bool DoDump (int step, int i_buffer, bool force_flush=false) = 0;
112 void NewIteration () {m_already_done = false;}
119 void FilterComputePackFlush (int step, bool force_flush=false);
121 [[nodiscard]] bool DoDumpLastTimestep () const {return m_dump_last_timestep;}
123 [[nodiscard]] int getnumbuffers() const {return m_num_buffers;}
127 virtual amrex::Real gettlab ( [[maybe_unused]] int i_buffer) {return 0.;}
132 virtual void settlab ( [[maybe_unused]] int i_buffer, [[maybe_unused]] amrex::Real tlab) { }
136 virtual int get_buffer_k_index_hi ( [[maybe_unused]] int i_buffer) {return 0; }
141 virtual void set_buffer_k_index_hi ( [[maybe_unused]] int i_buffer, [[maybe_unused]] int kindex) { }
146 virtual amrex::Real get_snapshot_domain_lo ([[maybe_unused]] int i_buffer, [[maybe_unused]] int idim) {return 0.; }
151 virtual amrex::Real get_snapshot_domain_hi ([[maybe_unused]] int i_buffer, [[maybe_unused]] int idim) {return 0.; }
157 void setSnapshotDomainLo(int i_buffer, int idim, amrex::Real domain_lab_lo) {m_snapshot_domain_lab[i_buffer].setLo(idim, domain_lab_lo); }
163 void setSnapshotDomainHi(int i_buffer, int idim, amrex::Real domain_lab_hi) {m_snapshot_domain_lab[i_buffer].setHi(idim, domain_lab_hi); }
167 virtual int get_flush_counter ( [[maybe_unused]] int i_buffer) { return 0; }
172 virtual void set_flush_counter ( [[maybe_unused]] int i_buffer, [[maybe_unused]] int flush_counter) { }
176 virtual int get_last_valid_Zslice ( [[maybe_unused]] int i_buffer) { return 0; }
181 virtual void set_last_valid_Zslice ( [[maybe_unused]] int i_buffer, [[maybe_unused]] int last_valid_Zslice) { }
185 virtual int get_snapshot_full_flag ( [[maybe_unused]] int i_buffer) { return 0; }
190 virtual void set_snapshot_full ( [[maybe_unused]] int i_buffer, [[maybe_unused]] int snapshot_full) { }
191
192protected:
194 bool BaseReadParameters ();
196 int m_verbose = 2;
198 void InitBaseData ();
204 virtual void InitializeBufferData (int i_buffer, int lev, bool restart=false) = 0;
208 virtual void DerivedInitData () {}
209
214
218 virtual void PrepareBufferData () {}
222 virtual void UpdateBufferData () {}
226 virtual void PrepareFieldDataForOutput () {}
236 std::string m_diag_name;
238 std::string m_file_prefix;
250
254 std::vector< std::string > m_pfield_species;
256 std::vector< bool > m_pfield_do_average;
258 std::vector< int > m_pfield_species_index;
260 std::vector< std::string > m_pfield_strings;
262 std::vector< bool> m_pfield_dofilter;
264 std::vector< std::string > m_pfield_filter_strings;
265
271 std::string m_format = "plotfile";
273 int m_already_done = false;
275 std::unique_ptr<FlushFormat> m_flush_format;
288
296 // a particle buffer here?
297 int nlev;
302 std::vector< std::string > m_output_species_names;
304 std::vector< std::string > m_all_species_names;
332
341
342};
343
344#endif // WARPX_DIAGNOSTICS_H_
DiagTypes
Definition Diagnostics.H:24
@ BoundaryScraping
Definition Diagnostics.H:24
@ BackTransformed
Definition Diagnostics.H:24
@ Full
Definition Diagnostics.H:24
@ TimeAveraged
Definition Diagnostics.H:24
std::vector< bool > m_pfield_do_average
Definition Diagnostics.H:256
bool BaseReadParameters()
Definition Diagnostics.cpp:49
void setSnapshotDomainHi(int i_buffer, int idim, amrex::Real domain_lab_hi)
Definition Diagnostics.H:163
amrex::Vector< std::string > m_varnames_fields
Definition Diagnostics.H:249
virtual void PrepareFieldDataForOutput()
Definition Diagnostics.H:226
int nmax_lev
Definition Diagnostics.H:298
virtual void set_last_valid_Zslice(int i_buffer, int last_valid_Zslice)
Definition Diagnostics.H:181
virtual amrex::Real gettlab(int i_buffer)
Definition Diagnostics.H:127
virtual void PrepareBufferData()
Definition Diagnostics.H:218
Diagnostics(Diagnostics &&)=default
virtual int get_last_valid_Zslice(int i_buffer)
Definition Diagnostics.H:176
virtual void set_buffer_k_index_hi(int i_buffer, int kindex)
Definition Diagnostics.H:141
virtual void InitializeFieldFunctorsRZopenPMD(int lev)
Definition Diagnostics.H:95
std::string m_format
Definition Diagnostics.H:271
Diagnostics & operator=(Diagnostics const &)=delete
virtual void set_snapshot_full(int i_buffer, int snapshot_full)
Definition Diagnostics.H:190
std::vector< std::string > m_pfield_strings
Definition Diagnostics.H:260
amrex::Vector< std::string > m_pfield_varnames
Definition Diagnostics.H:252
amrex::Vector< std::unique_ptr< ComputeParticleDiagFunctor > > m_all_particle_functors
Definition Diagnostics.H:331
virtual void settlab(int i_buffer, amrex::Real tlab)
Definition Diagnostics.H:132
int m_already_done
Definition Diagnostics.H:273
amrex::Vector< amrex::RealBox > m_snapshot_domain_lab
Definition Diagnostics.H:340
DiagTypes m_diag_type
Definition Diagnostics.H:51
Diagnostics & operator=(Diagnostics &&)=default
amrex::Vector< amrex::Vector< amrex::MultiFab > > m_mf_output
Definition Diagnostics.H:281
amrex::Vector< amrex::Real > m_hi
Definition Diagnostics.H:321
void InitData(const MultiParticleContainer &mpc)
Definition Diagnostics.cpp:429
virtual amrex::Real get_snapshot_domain_lo(int i_buffer, int idim)
Definition Diagnostics.H:146
virtual int get_snapshot_full_flag(int i_buffer)
Definition Diagnostics.H:185
int m_file_min_digits
Definition Diagnostics.H:240
Diagnostics(int i, std::string name, DiagTypes diag_type)
Definition Diagnostics.cpp:41
std::vector< std::string > m_output_species_names
Definition Diagnostics.H:302
virtual void DerivedInitData()
Definition Diagnostics.H:208
virtual int get_buffer_k_index_hi(int i_buffer)
Definition Diagnostics.H:136
virtual void MovingWindowAndGalileanDomainShift(int step)
Definition Diagnostics.H:234
virtual void set_flush_counter(int i_buffer, int flush_counter)
Definition Diagnostics.H:172
virtual void InitializeParticleBuffer(const MultiParticleContainer &mpc)=0
amrex::Vector< amrex::Vector< amrex::MultiFab > > m_sum_mf_output
Definition Diagnostics.H:287
bool DoDumpLastTimestep() const
Definition Diagnostics.H:121
virtual void InitializeParticleFunctors()
Definition Diagnostics.H:97
virtual void UpdateBufferData()
Definition Diagnostics.H:222
std::string m_diag_name
Definition Diagnostics.H:236
int m_verbose
Definition Diagnostics.H:196
std::unique_ptr< FlushFormat > m_flush_format
Definition Diagnostics.H:275
amrex::Vector< amrex::Vector< std::unique_ptr< WarpXParticleContainer::Base > > > m_particles_buffer
Definition Diagnostics.H:329
amrex::Vector< amrex::Vector< ParticleDiag > > m_output_species
Definition Diagnostics.H:308
amrex::Vector< amrex::Real > m_lo
Definition Diagnostics.H:319
amrex::IntVect m_crse_ratio
Definition Diagnostics.H:317
amrex::Vector< std::string > m_varnames
Definition Diagnostics.H:247
virtual void InitializeBufferData(int i_buffer, int lev, bool restart=false)=0
void InitDataAfterRestart(const MultiParticleContainer &mpc)
Definition Diagnostics.cpp:360
int getnumbuffers() const
Definition Diagnostics.H:123
int m_num_buffers
Definition Diagnostics.H:323
void InitBaseData()
Definition Diagnostics.cpp:509
amrex::Vector< int > m_rho_per_species_index
Definition Diagnostics.H:325
std::vector< std::string > m_pfield_species
Definition Diagnostics.H:254
Diagnostics(Diagnostics const &)=delete
amrex::Vector< amrex::Vector< amrex::Geometry > > m_geom_output
Definition Diagnostics.H:295
void setSnapshotDomainLo(int i_buffer, int idim, amrex::Real domain_lab_lo)
Definition Diagnostics.H:157
int nlev_output
Definition Diagnostics.H:300
amrex::Vector< amrex::Vector< int > > m_totalParticles_in_buffer
Definition Diagnostics.H:337
virtual int get_flush_counter(int i_buffer)
Definition Diagnostics.H:167
std::string m_file_prefix
Definition Diagnostics.H:238
virtual amrex::Real get_snapshot_domain_hi(int i_buffer, int idim)
Definition Diagnostics.H:151
void FilterComputePackFlush(int step, bool force_flush=false)
Definition Diagnostics.cpp:641
bool m_dump_last_timestep
Definition Diagnostics.H:267
std::vector< int > m_pfield_species_index
Definition Diagnostics.H:258
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 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:228
virtual void InitializeFieldFunctors(int lev)=0
void InitDataBeforeRestart()
Definition Diagnostics.cpp:350
int nlev
Definition Diagnostics.H:297
void NewIteration()
Definition Diagnostics.H:112
std::vector< std::string > m_all_species_names
Definition Diagnostics.H:304
amrex::Vector< int > m_T_per_species_index
Definition Diagnostics.H:327
int m_diag_index
Definition Diagnostics.H:242
std::vector< std::string > m_pfield_filter_strings
Definition Diagnostics.H:264
void ComputeAndPack()
Definition Diagnostics.cpp:587
amrex::Vector< amrex::Vector< std::unique_ptr< ComputeDiagFunctor > > > m_all_field_functors
Definition Diagnostics.H:314
std::vector< bool > m_pfield_dofilter
Definition Diagnostics.H:262
Definition MultiParticleContainer.H:69
amrex_real Real
__host__ __device__ void ignore_unused(const Ts &...)
IntVectND< 3 > IntVect