WarpX
BTD_Plotfile_Header_Impl.H
Go to the documentation of this file.
1 /* Copyright 2021 Revathi Jambunathan
2  *
3  * This file is part of WarpX.
4  *
5  * License: BSD-3-Clause-LBNL
6  */
7 #ifndef WARPX_BTD_PLOTFILE_HEADER_IMPL_H
8 #define WARPX_BTD_PLOTFILE_HEADER_IMPL_H
9 
10 #include <AMReX_Array.H>
11 #include <AMReX_Box.H>
12 #include <AMReX_BoxArray.H>
13 #include <AMReX_Config.H>
14 #include <AMReX_REAL.H>
15 #include <AMReX_SPACE.H>
16 #include <AMReX_Vector.H>
17 
18 #include <string>
19 
28 {
29 public:
33  BTDPlotfileHeaderImpl (std::string const& Headerfile_path);
34 
36  [[nodiscard]] std::string fileVersion () const noexcept {return m_file_version; }
38  [[nodiscard]] int ncomp () const noexcept {return m_nComp; }
40  [[nodiscard]] const amrex::Vector<std::string>& varnames () const noexcept {return m_varnames; }
42  [[nodiscard]] int spaceDim () const noexcept {return m_spacedim; }
44  [[nodiscard]] amrex::Real time () const noexcept {return m_time; }
46  [[nodiscard]] int finestLevel () const noexcept { return m_finest_level; }
50  [[nodiscard]] amrex::Real problo (int dim) const noexcept {return m_prob_lo[dim]; }
54  [[nodiscard]] amrex::Real probhi (int dim) const noexcept {return m_prob_hi[dim]; }
55 
57  [[nodiscard]] amrex::Box probDomain () const noexcept {return m_prob_domain; }
59  [[nodiscard]] int timestep () const noexcept {return m_timestep; }
60  [[nodiscard]] int numFabs () const noexcept {return m_numFabs; }
61 
66  [[nodiscard]] amrex::Array<amrex::Real, AMREX_SPACEDIM> FabLo (int iFab) const noexcept {return m_glo[iFab]; }
71  [[nodiscard]] amrex::Array<amrex::Real, AMREX_SPACEDIM> FabHi (int iFab) const noexcept {return m_ghi[iFab]; }
73  [[nodiscard]] std::string CellPath () const noexcept {return m_CellPath; }
74 
76  void ReadHeaderData ();
78  void WriteHeader ();
79 
83  void set_time ( amrex::Real new_time) { m_time = new_time;}
87  void set_timestep (int new_timestep) { m_timestep = new_timestep; }
92  void set_problo (int dim, amrex::Real lo) { m_prob_lo[dim] = lo;}
97  void set_probhi (int dim, amrex::Real hi) { m_prob_hi[dim] = hi;}
101  void set_probDomain (amrex::Box domainBox) {m_prob_domain = domainBox; }
104  void ResizeFabLo () { m_glo.resize(m_numFabs); }
105  void ResizeFabHi () { m_ghi.resize(m_numFabs); }
118 private:
120  std::string m_Header_path;
122  std::string m_file_version;
124  int m_nComp;
130  amrex::Real m_time;
142  int m_bwidth;
150  std::string m_CellPath;
151 
152 };
153 
161 {
162  public:
166  BTDMultiFabHeaderImpl (std::string const& Headerfile_path);
167 
169  void ReadMultiFabHeader ();
171  void WriteMultiFabHeader ();
172 
174  [[nodiscard]] int ba_size () const {return m_ba_size;}
178  [[nodiscard]] amrex::Box ba_box (int ibox) const {return m_ba[ibox]; }
182  std::string fodPrefix (int ifab) {return m_FabOnDiskPrefix[ifab]; }
184  std::string FabName (int ifab) {return m_fabname[ifab]; }
186  int FabHead (int ifab) {return m_fabhead[ifab]; }
188  amrex::Vector<amrex::Real> minval(int ifab) { return m_minval[ifab];}
190  amrex::Vector<amrex::Real> maxval(int ifab) { return m_maxval[ifab];}
191  void ResizeFabData ();
196  void IncreaseMultiFabSize (int add_mf_size) {m_ba_size += add_mf_size;}
201  void SetBox (int ibox, amrex::Box ba_box) { m_ba.set(ibox, ba_box); }
203  void SetFabName (int ifab, const std::string& fodPrefix, const std::string& FabName,
204  int FabHead);
206  void SetMinVal (int ifab, const amrex::Vector<amrex::Real>& minval);
208  void SetMaxVal (int ifab, const amrex::Vector<amrex::Real>& maxval);
209  private:
211  std::string m_Header_path;
212  int m_vers;
213  int m_how;
215  int m_ncomp;
217  int m_ngrow;
234 };
235 
243 {
244 public:
249  BTDSpeciesHeaderImpl (std::string const& Headerfile_path, std::string const& species_name);
250 
252  void ReadHeader ();
254  void WriteHeader ();
256  void set_DataIndex (int lev, int box_id, int data_index);
260  void AddTotalParticles (const int new_particles) { m_total_particles += new_particles;}
266  void AppendParticleInfoForNewBox (int data_index, int particles_per_box, int offset);
278  int m_nextid;
281  private:
283  std::string m_Header_path;
285  std::string m_species_name;
287  std::string m_file_version;
300 };
301 
309 {
310 public:
314  BTDParticleDataHeaderImpl (std::string const& Headerfile_path);
315 
317  void ReadHeader ();
319  void WriteHeader () const;
321  [[nodiscard]] int ba_size () const {return m_ba_size; }
325  void IncreaseBoxArraySize ( const int add_size) { m_ba_size += add_size;}
329  [[nodiscard]] amrex::Box ba_box (int ibox) const {return m_ba[ibox]; }
336  void SetBox (int ibox, amrex::Box ba_box) { m_ba.set(ibox, ba_box); }
342  std::string m_Header_path;
343 };
344 
345 #endif //WARPX_BTD_PLOTFILE_HEADER_IMPL_H
#define AMREX_D_DECL(a, b, c)
Class to read, modify, and write MultiFab header in Level_0/Cell_H when back-transformed diag format ...
Definition: BTD_Plotfile_Header_Impl.H:161
amrex::Box ba_box(int ibox) const
Definition: BTD_Plotfile_Header_Impl.H:178
amrex::Vector< int > m_fabhead
Definition: BTD_Plotfile_Header_Impl.H:224
void ResizeFabData()
Definition: BTD_Plotfile_Header_Impl.cpp:315
BTDMultiFabHeaderImpl(std::string const &Headerfile_path)
Definition: BTD_Plotfile_Header_Impl.cpp:182
void SetMaxVal(int ifab, const amrex::Vector< amrex::Real > &maxval)
Definition: BTD_Plotfile_Header_Impl.cpp:342
amrex::Vector< amrex::Vector< amrex::Real > > m_minval
Definition: BTD_Plotfile_Header_Impl.H:227
void ReadMultiFabHeader()
Definition: BTD_Plotfile_Header_Impl.cpp:189
void CopyVec(amrex::Vector< amrex::Real > &dst, amrex::Vector< amrex::Real > src)
Definition: BTD_Plotfile_Header_Impl.cpp:348
int m_ba_size
Definition: BTD_Plotfile_Header_Impl.H:219
amrex::Vector< std::string > m_fabname
Definition: BTD_Plotfile_Header_Impl.H:223
amrex::Vector< amrex::Vector< amrex::Real > > m_maxval
Definition: BTD_Plotfile_Header_Impl.H:230
int m_how
Definition: BTD_Plotfile_Header_Impl.H:213
amrex::Vector< amrex::Real > maxval(int ifab)
Definition: BTD_Plotfile_Header_Impl.H:190
amrex::BoxArray m_ba
Definition: BTD_Plotfile_Header_Impl.H:221
void SetBox(int ibox, amrex::Box ba_box)
Definition: BTD_Plotfile_Header_Impl.H:201
int FabHead(int ifab)
Definition: BTD_Plotfile_Header_Impl.H:186
amrex::Vector< amrex::Real > minval(int ifab)
Definition: BTD_Plotfile_Header_Impl.H:188
int m_ngrow
Definition: BTD_Plotfile_Header_Impl.H:217
int m_ncomp
Definition: BTD_Plotfile_Header_Impl.H:215
std::string FabName(int ifab)
Definition: BTD_Plotfile_Header_Impl.H:184
void WriteMultiFabHeader()
Definition: BTD_Plotfile_Header_Impl.cpp:264
void SetFabName(int ifab, const std::string &fodPrefix, const std::string &FabName, int FabHead)
Definition: BTD_Plotfile_Header_Impl.cpp:326
void SetMinVal(int ifab, const amrex::Vector< amrex::Real > &minval)
Definition: BTD_Plotfile_Header_Impl.cpp:336
std::string m_Header_path
Definition: BTD_Plotfile_Header_Impl.H:211
int ba_size() const
Definition: BTD_Plotfile_Header_Impl.H:174
std::string fodPrefix(int ifab)
Definition: BTD_Plotfile_Header_Impl.H:182
amrex::Vector< std::string > m_FabOnDiskPrefix
Definition: BTD_Plotfile_Header_Impl.H:222
void IncreaseMultiFabSize(int add_mf_size)
Definition: BTD_Plotfile_Header_Impl.H:196
int m_vers
Definition: BTD_Plotfile_Header_Impl.H:212
Class to read, modify, and write particle header file, Particle_H, when back-transformed diag format ...
Definition: BTD_Plotfile_Header_Impl.H:309
BTDParticleDataHeaderImpl(std::string const &Headerfile_path)
Definition: BTD_Plotfile_Header_Impl.cpp:477
amrex::Box ba_box(int ibox) const
Definition: BTD_Plotfile_Header_Impl.H:329
int ba_size() const
Definition: BTD_Plotfile_Header_Impl.H:321
int m_ba_size
Definition: BTD_Plotfile_Header_Impl.H:338
void IncreaseBoxArraySize(const int add_size)
Definition: BTD_Plotfile_Header_Impl.H:325
amrex::BoxArray m_ba
Definition: BTD_Plotfile_Header_Impl.H:340
void ResizeBoxArray()
Definition: BTD_Plotfile_Header_Impl.H:331
void WriteHeader() const
Definition: BTD_Plotfile_Header_Impl.cpp:521
std::string m_Header_path
Definition: BTD_Plotfile_Header_Impl.H:342
void SetBox(int ibox, amrex::Box ba_box)
Definition: BTD_Plotfile_Header_Impl.H:336
void ReadHeader()
Definition: BTD_Plotfile_Header_Impl.cpp:484
Class to read, modify, and write plotfile header when back-transformed diag format is selected as plo...
Definition: BTD_Plotfile_Header_Impl.H:28
amrex::Real m_time
Definition: BTD_Plotfile_Header_Impl.H:130
int spaceDim() const noexcept
Definition: BTD_Plotfile_Header_Impl.H:42
amrex::Vector< amrex::Array< amrex::Real, AMREX_SPACEDIM > > m_ghi
Definition: BTD_Plotfile_Header_Impl.H:149
int m_coordsys
Definition: BTD_Plotfile_Header_Impl.H:141
int m_nlevel
Definition: BTD_Plotfile_Header_Impl.H:131
void set_probhi(int dim, amrex::Real hi)
Definition: BTD_Plotfile_Header_Impl.H:97
int numFabs() const noexcept
Definition: BTD_Plotfile_Header_Impl.H:60
amrex::Vector< std::string > m_varnames
Definition: BTD_Plotfile_Header_Impl.H:126
BTDPlotfileHeaderImpl(std::string const &Headerfile_path)
Definition: BTD_Plotfile_Header_Impl.cpp:24
std::string fileVersion() const noexcept
Definition: BTD_Plotfile_Header_Impl.H:36
int m_numFabs
Definition: BTD_Plotfile_Header_Impl.H:145
amrex::Vector< amrex::Array< amrex::Real, AMREX_SPACEDIM > > m_glo
Definition: BTD_Plotfile_Header_Impl.H:147
int m_nComp
Definition: BTD_Plotfile_Header_Impl.H:124
amrex::Array< amrex::Real, AMREX_SPACEDIM > FabLo(int iFab) const noexcept
Definition: BTD_Plotfile_Header_Impl.H:66
void IncrementNumFabs()
Definition: BTD_Plotfile_Header_Impl.H:103
void set_problo(int dim, amrex::Real lo)
Definition: BTD_Plotfile_Header_Impl.H:92
int m_timestep
Definition: BTD_Plotfile_Header_Impl.H:140
std::string m_CellPath
Definition: BTD_Plotfile_Header_Impl.H:150
std::string CellPath() const noexcept
Definition: BTD_Plotfile_Header_Impl.H:73
void set_time(amrex::Real new_time)
Definition: BTD_Plotfile_Header_Impl.H:83
void ReadHeaderData()
Definition: BTD_Plotfile_Header_Impl.cpp:33
void WriteHeader()
Definition: BTD_Plotfile_Header_Impl.cpp:114
amrex::Real time() const noexcept
Definition: BTD_Plotfile_Header_Impl.H:44
int ncomp() const noexcept
Definition: BTD_Plotfile_Header_Impl.H:38
void ResizeFabLo()
Definition: BTD_Plotfile_Header_Impl.H:104
int finestLevel() const noexcept
Definition: BTD_Plotfile_Header_Impl.H:46
std::string m_Header_path
Definition: BTD_Plotfile_Header_Impl.H:120
int m_cur_level
Definition: BTD_Plotfile_Header_Impl.H:143
amrex::Box probDomain() const noexcept
Definition: BTD_Plotfile_Header_Impl.H:57
amrex::Array< amrex::Real, AMREX_SPACEDIM > m_prob_lo
Definition: BTD_Plotfile_Header_Impl.H:133
void AppendNewFabLo(amrex::Array< amrex::Real, AMREX_SPACEDIM > newFabLo)
Definition: BTD_Plotfile_Header_Impl.cpp:100
void AppendNewFabHi(amrex::Array< amrex::Real, AMREX_SPACEDIM > newFabHi)
Definition: BTD_Plotfile_Header_Impl.cpp:107
amrex::Array< amrex::Real, AMREX_SPACEDIM > m_cell_size
Definition: BTD_Plotfile_Header_Impl.H:137
amrex::Array< amrex::Real, AMREX_SPACEDIM > FabHi(int iFab) const noexcept
Definition: BTD_Plotfile_Header_Impl.H:71
int m_finest_level
Definition: BTD_Plotfile_Header_Impl.H:131
amrex::Real probhi(int dim) const noexcept
Definition: BTD_Plotfile_Header_Impl.H:54
void ResizeFabHi()
Definition: BTD_Plotfile_Header_Impl.H:105
const amrex::Vector< std::string > & varnames() const noexcept
Definition: BTD_Plotfile_Header_Impl.H:40
std::string m_file_version
Definition: BTD_Plotfile_Header_Impl.H:122
int m_bwidth
Definition: BTD_Plotfile_Header_Impl.H:142
amrex::Array< amrex::Real, AMREX_SPACEDIM > m_prob_hi
Definition: BTD_Plotfile_Header_Impl.H:135
amrex::Box m_prob_domain
Definition: BTD_Plotfile_Header_Impl.H:139
void set_timestep(int new_timestep)
Definition: BTD_Plotfile_Header_Impl.H:87
void set_probDomain(amrex::Box domainBox)
Definition: BTD_Plotfile_Header_Impl.H:101
amrex::Real problo(int dim) const noexcept
Definition: BTD_Plotfile_Header_Impl.H:50
int timestep() const noexcept
Definition: BTD_Plotfile_Header_Impl.H:59
int m_spacedim
Definition: BTD_Plotfile_Header_Impl.H:128
Class to read, modify, and write species header when back-transformed diag format is selected as plot...
Definition: BTD_Plotfile_Header_Impl.H:243
int m_num_output_real
Definition: BTD_Plotfile_Header_Impl.H:291
void IncrementParticleBoxArraySize()
Definition: BTD_Plotfile_Header_Impl.H:262
int m_finestLevel
Definition: BTD_Plotfile_Header_Impl.H:280
amrex::Vector< amrex::Vector< int > > m_particles_per_box
Definition: BTD_Plotfile_Header_Impl.H:270
int m_nextid
Definition: BTD_Plotfile_Header_Impl.H:278
int m_spacedim
Definition: BTD_Plotfile_Header_Impl.H:289
amrex::Vector< std::string > m_int_comp_names
Definition: BTD_Plotfile_Header_Impl.H:297
std::string m_file_version
Definition: BTD_Plotfile_Header_Impl.H:287
bool m_is_checkpoint
Definition: BTD_Plotfile_Header_Impl.H:299
void AddTotalParticles(const int new_particles)
Definition: BTD_Plotfile_Header_Impl.H:260
std::string m_Header_path
Definition: BTD_Plotfile_Header_Impl.H:283
amrex::Vector< std::string > m_real_comp_names
Definition: BTD_Plotfile_Header_Impl.H:295
int m_total_particles
Definition: BTD_Plotfile_Header_Impl.H:276
amrex::Vector< amrex::Vector< int > > m_offset_per_box
Definition: BTD_Plotfile_Header_Impl.H:272
void ReadHeader()
Definition: BTD_Plotfile_Header_Impl.cpp:365
amrex::Vector< int > m_particleBoxArray_size
Definition: BTD_Plotfile_Header_Impl.H:274
int m_num_output_int
Definition: BTD_Plotfile_Header_Impl.H:293
std::string m_species_name
Definition: BTD_Plotfile_Header_Impl.H:285
BTDSpeciesHeaderImpl(std::string const &Headerfile_path, std::string const &species_name)
Definition: BTD_Plotfile_Header_Impl.cpp:358
void WriteHeader()
Definition: BTD_Plotfile_Header_Impl.cpp:417
void set_DataIndex(int lev, int box_id, int data_index)
Definition: BTD_Plotfile_Header_Impl.cpp:456
void AppendParticleInfoForNewBox(int data_index, int particles_per_box, int offset)
Definition: BTD_Plotfile_Header_Impl.cpp:462
amrex::Vector< amrex::Vector< int > > m_which_data
Definition: BTD_Plotfile_Header_Impl.H:268
void resize(Long len)
void set(int i, const Box &ibox)
std::array< T, N > Array