WarpX
WarpX.H
Go to the documentation of this file.
1 /* Copyright 2016-2020 Andrew Myers, Ann Almgren, Aurore Blelly
2  * Axel Huebl, Burlen Loring, David Grote
3  * Glenn Richardson, Junmin Gu, Luca Fedeli
4  * Mathieu Lobet, Maxence Thevenet, Michael Rowan
5  * Remi Lehe, Revathi Jambunathan, Weiqun Zhang
6  * Yinjian Zhao
7  *
8  * This file is part of WarpX.
9  *
10  * License: BSD-3-Clause-LBNL
11  */
12 #ifndef WARPX_H_
13 #define WARPX_H_
14 
15 #include "Evolve/WarpXDtType.H"
17 #include "BoundaryConditions/PML.H"
20 #include "Filter/BilinearFilter.H"
23 #include "Utils/WarpXUtil.H"
25 #include "Utils/IntervalsParser.H"
27 
29 #ifdef WARPX_USE_PSATD
30 # ifdef WARPX_DIM_RZ
32 # else
34 # endif
35 #endif
36 
38 
39 #ifdef WARPX_USE_OPENPMD
41 #endif
42 
44 
45 #include <AMReX_AmrCore.H>
46 #include <AMReX_BLProfiler.H>
47 #include <AMReX_Print.H>
48 #include <AMReX_RealVect.H>
49 #include <AMReX_iMultiFab.H>
50 #include <AMReX_VisMF.H>
51 #include <AMReX_LayoutData.H>
52 #include <AMReX_Interpolater.H>
53 #include <AMReX_FillPatchUtil.H>
54 
55 #ifdef _OPENMP
56 # include <omp.h>
57 #endif
58 
59 #include <iostream>
60 #include <memory>
61 #include <array>
62 
63 enum struct PatchType : int
64 {
65  fine,
66  coarse
67 };
68 
69 class WarpX
70  : public amrex::AmrCore
71 {
72 public:
73 
74  friend class PML;
75 
76  static WarpX& GetInstance ();
77  static void ResetInstance ();
78 
79  WarpX ();
80  ~WarpX ();
81 
82  static std::string Version ();
83  static std::string PicsarVersion ();
84 
85  int Verbose () const { return verbose; }
86 
87 
88  void InitData ();
89 
90  void Evolve (int numsteps = -1);
91 
93 
94  static void shiftMF (amrex::MultiFab& mf, const amrex::Geometry& geom,
95  int num_shift, int dir, amrex::IntVect ng_extra,
96  amrex::Real external_field=0.0, bool useparser = false,
97  HostDeviceParser<3> const& field_parser={});
98 
99  static void GotoNextLine (std::istream& is);
100 
102  static std::string authors;
103 
104  // Initial field on the grid.
105  static amrex::Vector<amrex::Real> E_external_grid;
106  static amrex::Vector<amrex::Real> B_external_grid;
107 
108  // Initialization Type for External E and B on grid
109  static std::string B_ext_grid_s;
110  static std::string E_ext_grid_s;
111 
112  // Parser for B_external on the grid
113  static std::string str_Bx_ext_grid_function;
114  static std::string str_By_ext_grid_function;
115  static std::string str_Bz_ext_grid_function;
116  // Parser for E_external on the grid
117  static std::string str_Ex_ext_grid_function;
118  static std::string str_Ey_ext_grid_function;
119  static std::string str_Ez_ext_grid_function;
120 
121  // ParserWrapper for B_external on the grid
122  std::unique_ptr<ParserWrapper<3> > Bxfield_parser;
123  std::unique_ptr<ParserWrapper<3> > Byfield_parser;
124  std::unique_ptr<ParserWrapper<3> > Bzfield_parser;
125  // ParserWrapper for E_external on the grid
126  std::unique_ptr<ParserWrapper<3> > Exfield_parser;
127  std::unique_ptr<ParserWrapper<3> > Eyfield_parser;
128  std::unique_ptr<ParserWrapper<3> > Ezfield_parser;
129 
130  // Algorithms
133  static long field_gathering_algo;
134  static long particle_pusher_algo;
135  static int maxwell_solver_id;
137  static int em_solver_medium;
139 
140 #ifdef WARPX_USE_PSATD
141  // If true (overwritten by the user in the input file), the current correction
142  // defined in equation (19) of https://doi.org/10.1016/j.jcp.2013.03.010 is applied
143  bool current_correction = false;
144 #endif
145 
146 #ifdef WARPX_USE_PSATD
147  // If true, the update equation for E contains both J and rho (at times n and n+1):
148  // default is false for standard PSATD and true for Galilean PSATD (set in WarpX.cpp)
150 #endif
151 
152  // div E cleaning
153  static int do_dive_cleaning;
154 
155  // Interpolation order
156  static long nox;
157  static long noy;
158  static long noz;
159 
160  // Number of modes for the RZ multimode version
161  static long n_rz_azimuthal_modes;
162  static long ncomps;
163 
164  static bool use_fdtd_nci_corr;
166 
167  static bool use_filter;
168  static bool use_kspace_filter;
171  static bool serialize_ics;
172 
173  // Back transformation diagnostic
175  static std::string lab_data_directory;
176  static int num_snapshots_lab;
177  static amrex::Real dt_snapshots_lab;
180 
181  // Boosted frame parameters
182  static amrex::Real gamma_boost;
183  static amrex::Real beta_boost;
184  static amrex::Vector<int> boost_direction;
187 
189  static bool refine_plasma;
190 
192  static amrex::IntVect sort_bin_size;
193 
194  static int do_subcycling;
195 
197  static bool safe_guard_cells;
198 
199  // buffers
202 
203  // do nodal
204  static int do_nodal;
205 
206  std::array<const amrex::MultiFab* const, 3>
207  get_array_Bfield_aux (const int lev) const {
208  return {
209  Bfield_aux[lev][0].get(),
210  Bfield_aux[lev][1].get(),
211  Bfield_aux[lev][2].get()
212  };
213  }
214  std::array<const amrex::MultiFab* const, 3>
215  get_array_Efield_aux (const int lev) const {
216  return {
217  Efield_aux[lev][0].get(),
218  Efield_aux[lev][1].get(),
219  Efield_aux[lev][2].get()
220  };
221  }
222 
223  amrex::MultiFab * get_pointer_Efield_aux (int lev, int direction) const { return Efield_aux[lev][direction].get(); }
224  amrex::MultiFab * get_pointer_Bfield_aux (int lev, int direction) const { return Bfield_aux[lev][direction].get(); }
225 
226  amrex::MultiFab * get_pointer_Efield_fp (int lev, int direction) const { return Efield_fp[lev][direction].get(); }
227  amrex::MultiFab * get_pointer_Bfield_fp (int lev, int direction) const { return Bfield_fp[lev][direction].get(); }
228  amrex::MultiFab * get_pointer_current_fp (int lev, int direction) const { return current_fp[lev][direction].get(); }
229  amrex::MultiFab * get_pointer_rho_fp (int lev) const { return rho_fp[lev].get(); }
230  amrex::MultiFab * get_pointer_F_fp (int lev) const { return F_fp[lev].get(); }
231 
232  amrex::MultiFab * get_pointer_Efield_cp (int lev, int direction) const { return Efield_cp[lev][direction].get(); }
233  amrex::MultiFab * get_pointer_Bfield_cp (int lev, int direction) const { return Bfield_cp[lev][direction].get(); }
234  amrex::MultiFab * get_pointer_current_cp (int lev, int direction) const { return current_cp[lev][direction].get(); }
235  amrex::MultiFab * get_pointer_rho_cp (int lev) const { return rho_cp[lev].get(); }
236  amrex::MultiFab * get_pointer_F_cp (int lev) const { return F_cp[lev].get(); }
237 
238  const amrex::MultiFab& getcurrent (int lev, int direction) {return *current_fp[lev][direction];}
239  const amrex::MultiFab& getEfield (int lev, int direction) {return *Efield_aux[lev][direction];}
240  const amrex::MultiFab& getBfield (int lev, int direction) {return *Bfield_aux[lev][direction];}
241 
242  const amrex::MultiFab& getcurrent_cp (int lev, int direction) {return *current_cp[lev][direction];}
243  const amrex::MultiFab& getEfield_cp (int lev, int direction) {return *Efield_cp[lev][direction];}
244  const amrex::MultiFab& getBfield_cp (int lev, int direction) {return *Bfield_cp[lev][direction];}
245  const amrex::MultiFab& getrho_cp (int lev) {return *rho_cp[lev];}
246 
247  const amrex::MultiFab& getcurrent_fp (int lev, int direction) {return *current_fp[lev][direction];}
248  const amrex::MultiFab& getEfield_fp (int lev, int direction) {return *Efield_fp[lev][direction];}
249  const amrex::MultiFab& getBfield_fp (int lev, int direction) {return *Bfield_fp[lev][direction];}
250  const amrex::MultiFab& getrho_fp (int lev) {return *rho_fp[lev];}
251  const amrex::MultiFab& getF_fp (int lev) {return *F_fp[lev];}
252  bool DoPML () const {return do_pml;}
253 
255  std::vector<bool> getPMLdirections() const;
256 
257  static amrex::LayoutData<amrex::Real>* getCosts (int lev) {
258  if (m_instance) {
259  return m_instance->costs[lev].get();
260  } else
261  {
262  return nullptr;
263  }
264  }
265 
266  static amrex::IntVect filter_npass_each_dir;
268  amrex::Vector< std::unique_ptr<NCIGodfreyFilter> > nci_godfrey_filter_exeybz;
269  amrex::Vector< std::unique_ptr<NCIGodfreyFilter> > nci_godfrey_filter_bxbyez;
270 
271  amrex::Real time_of_last_gal_shift = 0;
272  amrex::Array<amrex::Real,3> m_v_galilean = {{0}};
273  amrex::Array<amrex::Real,3> m_galilean_shift = {{0}};
274 
275  static int num_mirrors;
276  amrex::Vector<amrex::Real> mirror_z;
277  amrex::Vector<amrex::Real> mirror_z_width;
278  amrex::Vector<int> mirror_z_npoints;
279 
282 
283  void applyMirrors(amrex::Real time);
284 
286  void ComputeDt ();
287 
288  // Compute max_step automatically for simulations in a boosted frame.
289  void computeMaxStepBoostAccelerator(const amrex::Geometry& geom);
290  int MoveWindow (bool move_j);
291 
297  void ShiftGalileanBoundary ();
298  void UpdatePlasmaInjectionPosition (amrex::Real dt);
299  void ResetProbDomain (const amrex::RealBox& rb);
300  void EvolveE ( amrex::Real dt);
301  void EvolveE (int lev, amrex::Real dt);
302  void EvolveB ( amrex::Real dt);
303  void EvolveB (int lev, amrex::Real dt);
304  void EvolveF ( amrex::Real dt, DtType dt_type);
305  void EvolveF (int lev, amrex::Real dt, DtType dt_type);
306  void EvolveB (int lev, PatchType patch_type, amrex::Real dt);
307  void EvolveE (int lev, PatchType patch_type, amrex::Real dt);
308  void EvolveF (int lev, PatchType patch_type, amrex::Real dt, DtType dt_type);
309 
310  void MacroscopicEvolveE ( amrex::Real dt);
311  void MacroscopicEvolveE (int lev, amrex::Real dt);
312  void MacroscopicEvolveE (int lev, PatchType patch_type, amrex::Real dt);
313 
317  void Hybrid_QED_Push ( amrex::Vector<amrex::Real> dt);
318 
323  void Hybrid_QED_Push (int lev, amrex::Real dt);
324 
330  void Hybrid_QED_Push (int lev, PatchType patch_type, amrex::Real dt);
331 
332  static amrex::Real quantum_xi_c2;
333 
336  void LoadBalance ();
339  void ResetCosts ();
340 
343  IntervalsParser get_load_balance_intervals () const {return load_balance_intervals;}
344 
352  void DampFieldsInGuards (std::array<std::unique_ptr<amrex::MultiFab>,3>& Efield,
353  std::array<std::unique_ptr<amrex::MultiFab>,3>& Bfield);
354 
355 #ifdef WARPX_DIM_RZ
356  void ApplyInverseVolumeScalingToCurrentDensity(amrex::MultiFab* Jx,
357  amrex::MultiFab* Jy,
358  amrex::MultiFab* Jz,
359  int lev);
360 
361  void ApplyInverseVolumeScalingToChargeDensity(amrex::MultiFab* Rho,
362  int lev);
363 #endif
364 
365  void DampPML ();
366  void DampPML (int lev);
367  void DampPML (int lev, PatchType patch_type);
368 
369  void DampJPML ();
370  void DampJPML (int lev);
371  void DampJPML (int lev, PatchType patch_type);
372 
373  void CopyJPML ();
374 
375  PML* GetPML (int lev);
376 
378  void doFieldIonization ();
382  void doFieldIonization (int lev);
383 
384 #ifdef WARPX_QED
385 
386  void doQEDEvents ();
390  void doQEDEvents (int lev);
391 #endif
392 
393  void PushParticlesandDepose (int lev, amrex::Real cur_time, DtType a_dt_type=DtType::Full);
394  void PushParticlesandDepose ( amrex::Real cur_time);
395 
396  // This function does aux(lev) = fp(lev) + I(aux(lev-1)-cp(lev)).
397  // Caller must make sure fp and cp have ghost cells filled.
398  void UpdateAuxilaryData ();
399  void UpdateAuxilaryDataStagToNodal ();
400  void UpdateAuxilaryDataSameType ();
401 
402  // Fill boundary cells including coarse/fine boundaries
403  void FillBoundaryB (amrex::IntVect ng, amrex::IntVect ng_extra_fine=amrex::IntVect::TheZeroVector());
404  void FillBoundaryE (amrex::IntVect ng, amrex::IntVect ng_extra_fine=amrex::IntVect::TheZeroVector());
405  void FillBoundaryB_avg (amrex::IntVect ng, amrex::IntVect ng_extra_fine=amrex::IntVect::TheZeroVector());
406  void FillBoundaryE_avg (amrex::IntVect ng, amrex::IntVect ng_extra_fine=amrex::IntVect::TheZeroVector());
407 
408  void FillBoundaryF (amrex::IntVect ng);
409  void FillBoundaryAux (amrex::IntVect ng);
410  void FillBoundaryE (int lev, amrex::IntVect ng, amrex::IntVect ng_extra_fine=amrex::IntVect::TheZeroVector());
411  void FillBoundaryB (int lev, amrex::IntVect ng, amrex::IntVect ng_extra_fine=amrex::IntVect::TheZeroVector());
412  void FillBoundaryE_avg (int lev, amrex::IntVect ng, amrex::IntVect ng_extra_fine=amrex::IntVect::TheZeroVector());
413  void FillBoundaryB_avg (int lev, amrex::IntVect ng, amrex::IntVect ng_extra_fine=amrex::IntVect::TheZeroVector());
414 
415  void FillBoundaryF (int lev, amrex::IntVect ng);
416  void FillBoundaryAux (int lev, amrex::IntVect ng);
417 
418  void SyncCurrent ();
419  void SyncRho ();
420 
421  amrex::Vector<int> getnsubsteps () const {return nsubsteps;}
422  int getnsubsteps (int lev) const {return nsubsteps[lev];}
423  amrex::Vector<int> getistep () const {return istep;}
424  int getistep (int lev) const {return istep[lev];}
425  void setistep (int lev, int ii) {istep[lev] = ii;}
426  amrex::Vector<amrex::Real> gett_old () const {return t_old;}
427  amrex::Real gett_old (int lev) const {return t_old[lev];}
428  amrex::Vector<amrex::Real> gett_new () const {return t_new;}
429  amrex::Real gett_new (int lev) const {return t_new[lev];}
430  void sett_new (int lev, amrex::Real time) {t_new[lev] = time;}
431  amrex::Vector<amrex::Real> getdt () const {return dt;}
432  amrex::Real getdt (int lev) const {return dt[lev];}
433  amrex::Real getmoving_window_x() const {return moving_window_x;}
434  bool getis_synchronized() const {return is_synchronized;}
435  void setplot_rho (bool a_plot_rho) {plot_rho = a_plot_rho;}
436 
437  int maxStep () const {return max_step;}
438  amrex::Real stopTime () const {return stop_time;}
439 
440  void AverageAndPackFields( amrex::Vector<std::string>& varnames,
441  amrex::Vector<amrex::MultiFab>& mf_avg, const int ngrow) const;
442 
443  void prepareFields( int const step, amrex::Vector<std::string>& varnames,
444  amrex::Vector<amrex::MultiFab>& mf_avg,
445  amrex::Vector<const amrex::MultiFab*>& output_mf,
446  amrex::Vector<amrex::Geometry>& output_geom ) const;
447 
448  static std::array<amrex::Real,3> CellSize (int lev);
449  static amrex::RealBox getRealBox(const amrex::Box& bx, int lev);
450  static std::array<amrex::Real,3> LowerCorner (const amrex::Box& bx,
451  std::array<amrex::Real,3> galilean_shift, int lev);
452  static std::array<amrex::Real,3> UpperCorner (const amrex::Box& bx, int lev);
453 
454  /*
455  /brief This computes the lower of the problem domain, taking into account any shift when using the Galilean algorithm.
456  */
457  std::array<amrex::Real,3> LowerCornerWithGalilean (const amrex::Box& bx, const amrex::Array<amrex::Real,3>& v_galilean, int lev);
458 
459  static amrex::IntVect RefRatio (int lev);
460 
461  static const amrex::iMultiFab* CurrentBufferMasks (int lev);
462  static const amrex::iMultiFab* GatherBufferMasks (int lev);
463 
464  static int do_electrostatic;
465  static int do_moving_window;
466  static int moving_window_dir;
467  static amrex::Real moving_window_v;
469 
470  // slice generation //
472  static amrex::Real dt_slice_snapshots_lab;
473  static amrex::Real particle_slice_width_lab;
474  amrex::RealBox getSliceRealBox() const {return slice_realbox;}
475 
476  // these should be private, but can't due to Cuda limitations
477  static void ComputeDivB (amrex::MultiFab& divB, int const dcomp,
478  const std::array<const amrex::MultiFab* const, 3>& B,
479  const std::array<amrex::Real,3>& dx);
480 
481  static void ComputeDivB (amrex::MultiFab& divB, int const dcomp,
482  const std::array<const amrex::MultiFab* const, 3>& B,
483  const std::array<amrex::Real,3>& dx, int const ngrow);
484 
485  void ComputeDivE(amrex::MultiFab& divE, const int lev);
486 
487  const amrex::IntVect getngE() const { return guard_cells.ng_alloc_EB; }
488  const amrex::IntVect getngF() const { return guard_cells.ng_alloc_F; }
489  const amrex::IntVect getngExtra() const { return guard_cells.ng_Extra; }
490  const amrex::IntVect getngUpdateAux() const { return guard_cells.ng_UpdateAux; }
491  const amrex::IntVect get_ng_depos_J() const {return guard_cells.ng_depos_J;}
492  const amrex::IntVect get_ng_depos_rho() const {return guard_cells.ng_depos_rho;}
493 
494  void ComputeSpaceChargeField (bool const reset_fields);
495  void AddSpaceChargeField (WarpXParticleContainer& pc);
496  void computePhi (const amrex::Vector<std::unique_ptr<amrex::MultiFab> >& rho,
497  amrex::Vector<std::unique_ptr<amrex::MultiFab> >& phi,
498  std::array<amrex::Real, 3> const beta = {{0,0,0}},
499  amrex::Real const required_precision=1.e-11 ) const;
500  void computeE (amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>, 3> >& E,
501  const amrex::Vector<std::unique_ptr<amrex::MultiFab> >& phi,
502  std::array<amrex::Real, 3> const beta = {{0,0,0}} ) const;
503  void computeB (amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>, 3> >& B,
504  const amrex::Vector<std::unique_ptr<amrex::MultiFab> >& phi,
505  std::array<amrex::Real, 3> const beta = {{0,0,0}} ) const;
506 
524  void InitializeExternalFieldsOnGridUsingParser (
525  amrex::MultiFab *mfx, amrex::MultiFab *mfy, amrex::MultiFab *mfz,
526  HostDeviceParser<3> const& xfield_parser, HostDeviceParser<3> const& yfield_parser,
527  HostDeviceParser<3> const& zfield_parser, const int lev);
528 
534  void ComputeCostsHeuristic (amrex::Vector<std::unique_ptr<amrex::LayoutData<amrex::Real> > >& costs);
535 
536 protected:
537 
563  void InitLevelData (int lev, amrex::Real time);
564 
566  virtual void ErrorEst (int lev, amrex::TagBoxArray& tags, amrex::Real time, int /*ngrow*/) final;
567 
570  virtual void PostProcessBaseGrids (amrex::BoxArray& ba0) const final;
571 
575  virtual void MakeNewLevelFromScratch (int lev, amrex::Real time, const amrex::BoxArray& ba,
576  const amrex::DistributionMapping& dm) final;
577 
581  virtual void MakeNewLevelFromCoarse (int /*lev*/, amrex::Real /*time*/, const amrex::BoxArray& /*ba*/,
582  const amrex::DistributionMapping& /*dm*/) final
583  { amrex::Abort("MakeNewLevelFromCoarse: To be implemented"); }
584 
588  virtual void RemakeLevel (int lev, amrex::Real time, const amrex::BoxArray& ba,
589  const amrex::DistributionMapping& dm) final;
590 
592  virtual void ClearLevel (int lev) final;
593 
594 private:
595 
596  // Singleton is used when the code is run from python
597  static WarpX* m_instance;
598 
602  void EvolveEM(int numsteps);
603 
604  void FillBoundaryB (int lev, PatchType patch_type, amrex::IntVect ng);
605  void FillBoundaryE (int lev, PatchType patch_type, amrex::IntVect ng);
606  void FillBoundaryF (int lev, PatchType patch_type, amrex::IntVect ng);
607 
608  void FillBoundaryB_avg (int lev, PatchType patch_type, amrex::IntVect ng);
609  void FillBoundaryE_avg (int lev, PatchType patch_type, amrex::IntVect ng);
610 
611  void OneStep_nosub (amrex::Real t);
612  void OneStep_sub1 (amrex::Real t);
613 
614  void RestrictCurrentFromFineToCoarsePatch (int lev);
615  void AddCurrentFromFineLevelandSumBoundary (int lev);
616  void StoreCurrent (int lev);
617  void RestoreCurrent (int lev);
618  void ApplyFilterandSumBoundaryJ (int lev, PatchType patch_type);
619  void NodalSyncJ (int lev, PatchType patch_type);
620 
621  void RestrictRhoFromFineToCoarsePatch (int lev);
622  void ApplyFilterandSumBoundaryRho (int lev, PatchType patch_type, int icomp, int ncomp);
623  void AddRhoFromFineLevelandSumBoundary (int lev, int icomp, int ncomp);
624  void NodalSyncRho (int lev, PatchType patch_type, int icomp, int ncomp);
625 
633  void CurrentCorrection ();
634 
642  void VayDeposition ();
643 
644  void ReadParameters ();
645 
648  void BackwardCompatibility ();
649 
650  void InitFromScratch ();
651 
652  void AllocLevelData (int lev, const amrex::BoxArray& new_grids,
653  const amrex::DistributionMapping& new_dmap);
654 
655  void InitFromCheckpoint ();
656  void PostRestart ();
657 
658  void InitPML ();
659  void ComputePMLFactors ();
660 
661  void InitFilter ();
662 
663  void InitDiagnostics ();
664 
665  void InitNCICorrector ();
666 
667  std::unique_ptr<amrex::MultiFab> GetCellCenteredData();
668 
669  void ExchangeWithPmlB (int lev);
670  void ExchangeWithPmlE (int lev);
671  void ExchangeWithPmlF (int lev);
672 
673  void BuildBufferMasks ();
674  void BuildBufferMasksInBox ( const amrex::Box tbx, amrex::IArrayBox &buffer_mask,
675  const amrex::IArrayBox &guard_mask, const int ng );
676  const amrex::iMultiFab* getCurrentBufferMasks (int lev) const {
677  return current_buffer_masks[lev].get();
678  }
679  const amrex::iMultiFab* getGatherBufferMasks (int lev) const {
680  return gather_buffer_masks[lev].get();
681  }
682 
683  void AllocLevelMFs (int lev, const amrex::BoxArray& ba, const amrex::DistributionMapping& dm,
684  const amrex::IntVect& ngE, const amrex::IntVect& ngJ,
685  const amrex::IntVect& ngRho, const amrex::IntVect& ngF,
686  const amrex::IntVect& ngextra, const bool aux_is_nodal);
687 
688  amrex::Vector<int> istep; // which step?
689  amrex::Vector<int> nsubsteps; // how many substeps on each level?
690 
691  amrex::Vector<amrex::Real> t_new;
692  amrex::Vector<amrex::Real> t_old;
693  amrex::Vector<amrex::Real> dt;
694 
695  // Particle container
696  std::unique_ptr<MultiParticleContainer> mypc;
697  std::unique_ptr<MultiDiagnostics> multi_diags;
698 
699  // Boosted Frame Diagnostics
700  std::unique_ptr<BackTransformedDiagnostic> myBFD;
701 
702  //
703  // Fields: First array for level, second for direction
704  //
705 
706  // Full solution
707  amrex::Vector<std::array< std::unique_ptr<amrex::MultiFab>, 3 > > Efield_aux;
708  amrex::Vector<std::array< std::unique_ptr<amrex::MultiFab>, 3 > > Bfield_aux;
709  amrex::Vector<std::array< std::unique_ptr<amrex::MultiFab>, 3 > > Efield_avg_aux;
710  amrex::Vector<std::array< std::unique_ptr<amrex::MultiFab>, 3 > > Bfield_avg_aux;
711 
712  // Fine patch
713  amrex::Vector< std::unique_ptr<amrex::MultiFab> > F_fp;
714  amrex::Vector< std::unique_ptr<amrex::MultiFab> > rho_fp;
715  amrex::Vector<std::array< std::unique_ptr<amrex::MultiFab>, 3 > > current_fp;
716  amrex::Vector<std::array< std::unique_ptr<amrex::MultiFab>, 3 > > Efield_fp;
717  amrex::Vector<std::array< std::unique_ptr<amrex::MultiFab>, 3 > > Bfield_fp;
718  amrex::Vector<std::array< std::unique_ptr<amrex::MultiFab>, 3 > > Efield_avg_fp;
719  amrex::Vector<std::array< std::unique_ptr<amrex::MultiFab>, 3 > > Bfield_avg_fp;
720  // store fine patch
721  amrex::Vector<std::array< std::unique_ptr<amrex::MultiFab>, 3 > > current_store;
722 
723  // Coarse patch
724  amrex::Vector< std::unique_ptr<amrex::MultiFab> > F_cp;
725  amrex::Vector< std::unique_ptr<amrex::MultiFab> > rho_cp;
726  amrex::Vector<std::array< std::unique_ptr<amrex::MultiFab>, 3 > > current_cp;
727  amrex::Vector<std::array< std::unique_ptr<amrex::MultiFab>, 3 > > Efield_cp;
728  amrex::Vector<std::array< std::unique_ptr<amrex::MultiFab>, 3 > > Bfield_cp;
729  amrex::Vector<std::array< std::unique_ptr<amrex::MultiFab>, 3 > > Efield_avg_cp;
730  amrex::Vector<std::array< std::unique_ptr<amrex::MultiFab>, 3 > > Bfield_avg_cp;
731 
732  // Copy of the coarse aux
733  amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>, 3 > > Efield_cax;
734  amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>, 3 > > Bfield_cax;
735  amrex::Vector<std::unique_ptr<amrex::iMultiFab> > current_buffer_masks;
736  amrex::Vector<std::unique_ptr<amrex::iMultiFab> > gather_buffer_masks;
737 
738  // If charge/current deposition buffers are used
739  amrex::Vector<std::array< std::unique_ptr<amrex::MultiFab>, 3 > > current_buf;
740  amrex::Vector<std::unique_ptr<amrex::MultiFab> > charge_buf;
741 
742  // PML
743  int do_pml = 1;
744  int pml_ncell = 10;
745  int pml_delta = 10;
746  int pml_has_particles = 0;
747  int do_pml_j_damping = 0;
748  int do_pml_in_domain = 0;
749  amrex::IntVect do_pml_Lo = amrex::IntVect::TheUnitVector();
750  amrex::IntVect do_pml_Hi = amrex::IntVect::TheUnitVector();
751  amrex::Vector<std::unique_ptr<PML> > pml;
752 
753  amrex::Real moving_window_x = std::numeric_limits<amrex::Real>::max();
754  amrex::Real current_injection_position = 0;
755 
756  // Plasma injection parameters
757  int warpx_do_continuous_injection = 0;
758  int num_injected_species = -1;
759  amrex::Vector<int> injected_plasma_species;
760 
761  int n_buffer = 4;
762  amrex::Real const_dt = 0.5e-11;
763 
764  // Macroscopic properties
765  std::unique_ptr<MacroscopicProperties> m_macroscopic_properties;
766 
767 
768  // Load balancing
774  amrex::Vector<std::unique_ptr<amrex::LayoutData<amrex::Real> > > costs;
776  int load_balance_with_sfc = 0;
781  amrex::Real load_balance_knapsack_factor = 1.24;
787  amrex::Real load_balance_efficiency_ratio_threshold = 1.1;
793  amrex::Real costs_heuristic_cells_wt = -1;
799  amrex::Real costs_heuristic_particles_wt = -1;
800 
801  // Determines timesteps for override sync
803 
804  // Other runtime parameters
805  int verbose = 1;
806 
807  bool use_hybrid_QED = 0;
808 
809  int max_step = std::numeric_limits<int>::max();
810  amrex::Real stop_time = std::numeric_limits<amrex::Real>::max();
811 
812  int regrid_int = -1;
813 
814  amrex::Real cfl = 0.7;
815 
816  std::string restart_chkfile;
817 
818  bool plot_rho = false;
819 
820  amrex::VisMF::Header::Version plotfile_headerversion = amrex::VisMF::Header::Version_v1;
821  amrex::VisMF::Header::Version slice_plotfile_headerversion = amrex::VisMF::Header::Version_v1;
822 
823  bool use_single_read = true;
824  bool use_single_write = true;
825  int mffile_nstreams = 4;
826  int field_io_nfiles = 1024;
827  int particle_io_nfiles = 1024;
828 
829  amrex::RealVect fine_tag_lo;
830  amrex::RealVect fine_tag_hi;
831 
832  bool is_synchronized = true;
833 
835 
836  //Slice Parameters
838  int slice_plot_int = -1;
839  amrex::RealBox slice_realbox;
840  amrex::IntVect slice_cr_ratio;
841  amrex::Vector< std::unique_ptr<amrex::MultiFab> > F_slice;
842  amrex::Vector< std::unique_ptr<amrex::MultiFab> > rho_slice;
843  amrex::Vector<std::array< std::unique_ptr<amrex::MultiFab>, 3 > > current_slice;
844  amrex::Vector<std::array< std::unique_ptr<amrex::MultiFab>, 3 > > Efield_slice;
845  amrex::Vector<std::array< std::unique_ptr<amrex::MultiFab>, 3 > > Bfield_slice;
846 
847  bool fft_periodic_single_box = false;
848  int nox_fft = 16;
849  int noy_fft = 16;
850  int noz_fft = 16;
851 
852  // Domain decomposition on Level 0
853  amrex::IntVect numprocs{0};
854 
855 #ifdef WARPX_USE_PSATD
856 private:
857  void EvolvePSATD (int numsteps);
858  void PushPSATD (amrex::Real dt);
859  void PushPSATD (int lev, amrex::Real dt);
860 
861  int fftw_plan_measure = 1;
862 
863 # ifdef WARPX_DIM_RZ
864  amrex::Vector<std::unique_ptr<SpectralSolverRZ>> spectral_solver_fp;
865  amrex::Vector<std::unique_ptr<SpectralSolverRZ>> spectral_solver_cp;
866 # else
867  amrex::Vector<std::unique_ptr<SpectralSolver>> spectral_solver_fp;
868  amrex::Vector<std::unique_ptr<SpectralSolver>> spectral_solver_cp;
869 # endif
870 #endif
871  amrex::Vector<std::unique_ptr<FiniteDifferenceSolver>> m_fdtd_solver_fp;
872  amrex::Vector<std::unique_ptr<FiniteDifferenceSolver>> m_fdtd_solver_cp;
873 };
874 
875 #endif
static std::string str_Bz_ext_grid_function
Definition: WarpX.H:115
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > current_fp
Definition: WarpX.H:715
static bool fft_do_time_averaging
Definition: WarpX.H:468
static int moving_window_dir
Definition: WarpX.H:466
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > Bfield_fp
Definition: WarpX.H:717
amrex::Vector< std::unique_ptr< NCIGodfreyFilter > > nci_godfrey_filter_bxbyez
Definition: WarpX.H:269
amrex::Vector< amrex::Real > getdt() const
Definition: WarpX.H:431
amrex::Vector< int > getistep() const
Definition: WarpX.H:423
static bool do_back_transformed_diagnostics
Definition: WarpX.H:174
static int do_subcycling
Definition: WarpX.H:194
DtType
Definition: WarpXDtType.H:10
amrex::Vector< std::unique_ptr< SpectralSolverRZ > > spectral_solver_cp
Definition: WarpX.H:865
std::unique_ptr< ParserWrapper< 3 > > Bxfield_parser
Definition: WarpX.H:122
std::unique_ptr< ParserWrapper< 3 > > Ezfield_parser
Definition: WarpX.H:128
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > Efield_avg_cp
Definition: WarpX.H:729
static bool refine_plasma
Definition: WarpX.H:189
amrex::RealVect fine_tag_hi
Definition: WarpX.H:830
static long particle_pusher_algo
Definition: WarpX.H:134
static int do_moving_window
Definition: WarpX.H:465
static bool do_back_transformed_particles
Definition: WarpX.H:179
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > Bfield_avg_fp
Definition: WarpX.H:719
static long load_balance_costs_update_algo
Definition: WarpX.H:136
This class is a parser for multiple slices of the form x,y,z,... where x, y and z are slices of the f...
Definition: IntervalsParser.H:82
static long noy
Definition: WarpX.H:157
const amrex::MultiFab & getrho_fp(int lev)
Definition: WarpX.H:250
std::unique_ptr< ParserWrapper< 3 > > Eyfield_parser
Definition: WarpX.H:127
amrex::Vector< int > injected_plasma_species
Definition: WarpX.H:759
std::unique_ptr< SpectralSolver > spectral_solver_cp
Definition: PML.H:182
static WarpX * m_instance
Definition: WarpX.H:597
static amrex::Vector< int > boost_direction
Definition: WarpX.H:184
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > current_store
Definition: WarpX.H:721
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > Bfield_avg_aux
Definition: WarpX.H:710
amrex::Real gett_new(int lev) const
Definition: WarpX.H:429
static int num_slice_snapshots_lab
Definition: WarpX.H:471
int maxStep() const
Definition: WarpX.H:437
void ComputePMLFactors(amrex::Real dt)
Definition: PML.cpp:706
amrex::Vector< std::unique_ptr< amrex::MultiFab > > F_cp
Definition: WarpX.H:724
MultiParticleContainer & GetPartContainer()
Definition: WarpX.H:92
void sett_new(int lev, amrex::Real time)
Definition: WarpX.H:430
const amrex::MultiFab & getBfield_cp(int lev, int direction)
Definition: WarpX.H:244
const amrex::MultiFab & getEfield_fp(int lev, int direction)
Definition: WarpX.H:248
std::unique_ptr< MultiDiagnostics > multi_diags
Definition: WarpX.H:697
static int n_field_gather_buffer
Definition: WarpX.H:200
std::unique_ptr< MultiParticleContainer > mypc
Definition: WarpX.H:696
float cfl
Definition: yt3d_mpi.py:38
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > Bfield_avg_cp
Definition: WarpX.H:730
const amrex::MultiFab & getEfield(int lev, int direction)
Definition: WarpX.H:239
IntervalsParser override_sync_intervals
Definition: WarpX.H:802
amrex::Vector< std::unique_ptr< amrex::iMultiFab > > gather_buffer_masks
Definition: WarpX.H:736
int dx
Definition: compute_domain.py:35
amrex::Vector< std::unique_ptr< amrex::MultiFab > > rho_cp
Definition: WarpX.H:725
amrex::MultiFab * get_pointer_rho_fp(int lev) const
Definition: WarpX.H:229
static amrex::Real moving_window_v
Definition: WarpX.H:467
static amrex::Real dt_slice_snapshots_lab
Definition: WarpX.H:472
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > Bfield_cp
Definition: WarpX.H:728
static amrex::LayoutData< amrex::Real > * getCosts(int lev)
Definition: WarpX.H:257
amrex::MultiFab * get_pointer_Efield_aux(int lev, int direction) const
Definition: WarpX.H:223
void FillBoundaryE()
Definition: PML.cpp:957
static amrex::Real dt_snapshots_lab
Definition: WarpX.H:177
bool getis_synchronized() const
Definition: WarpX.H:434
Definition: MultiReducedDiags.H:21
const amrex::IntVect get_ng_depos_J() const
Definition: WarpX.H:491
static int do_dive_cleaning
Definition: WarpX.H:153
amrex::MultiFab * get_pointer_Efield_cp(int lev, int direction) const
Definition: WarpX.H:232
Definition: MultiParticleContainer.H:53
bool DoPML() const
Definition: WarpX.H:252
static amrex::Real particle_slice_width_lab
Definition: WarpX.H:473
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > current_buf
Definition: WarpX.H:739
IntervalsParser load_balance_intervals
Definition: WarpX.H:771
amrex::RealBox slice_realbox
Definition: WarpX.H:839
amrex::Vector< std::unique_ptr< amrex::MultiFab > > charge_buf
Definition: WarpX.H:740
static std::string lab_data_directory
Definition: WarpX.H:175
amrex::MultiFab * get_pointer_Bfield_fp(int lev, int direction) const
Definition: WarpX.H:227
amrex::Vector< std::unique_ptr< amrex::LayoutData< amrex::Real > > > costs
Definition: WarpX.H:774
const amrex::MultiFab & getF_fp(int lev)
Definition: WarpX.H:251
static int em_solver_medium
Definition: WarpX.H:137
const amrex::MultiFab & getrho_cp(int lev)
Definition: WarpX.H:245
static std::string str_Ez_ext_grid_function
Definition: WarpX.H:119
amrex::Vector< int > istep
Definition: WarpX.H:688
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > Efield_aux
Definition: WarpX.H:707
amrex::MultiFab * get_pointer_rho_cp(int lev) const
Definition: WarpX.H:235
static int num_mirrors
Definition: WarpX.H:275
amrex::Vector< std::unique_ptr< amrex::iMultiFab > > current_buffer_masks
Definition: WarpX.H:735
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > Efield_avg_fp
Definition: WarpX.H:718
static int do_electrostatic
Definition: WarpX.H:464
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > Efield_avg_aux
Definition: WarpX.H:709
static long charge_deposition_algo
Definition: WarpX.H:132
const amrex::iMultiFab * getGatherBufferMasks(int lev) const
Definition: WarpX.H:679
amrex::Vector< std::unique_ptr< amrex::MultiFab > > F_fp
Definition: WarpX.H:713
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > Bfield_slice
Definition: WarpX.H:845
amrex::Vector< int > mirror_z_npoints
Definition: WarpX.H:278
void FillBoundaryF()
Definition: PML.cpp:1005
amrex::Vector< amrex::Real > gett_old() const
Definition: WarpX.H:426
amrex::Real getdt(int lev) const
Definition: WarpX.H:432
static IntervalsParser sort_intervals
Definition: WarpX.H:191
bool update_with_rho
Definition: WarpX.H:149
direction
Definition: AnyFFT.H:60
BilinearFilter bilinear_filter
Definition: WarpX.H:267
static int n_current_deposition_buffer
in number of cells from the edge (identical for each dimension)
Definition: WarpX.H:201
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > current_cp
Definition: WarpX.H:726
static bool use_fdtd_nci_corr
Definition: WarpX.H:164
static amrex::Real gamma_boost
Definition: WarpX.H:182
amrex::Vector< amrex::Real > t_new
Definition: WarpX.H:691
std::unique_ptr< ParserWrapper< 3 > > Byfield_parser
Definition: WarpX.H:123
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > Efield_slice
Definition: WarpX.H:844
int getnsubsteps(int lev) const
Definition: WarpX.H:422
static amrex::Vector< amrex::Real > E_external_grid
Definition: WarpX.H:105
const amrex::IntVect getngExtra() const
Definition: WarpX.H:489
static long ncomps
Definition: WarpX.H:162
Definition: PML.H:91
std::array< const amrex::MultiFab *const, 3 > get_array_Efield_aux(const int lev) const
Definition: WarpX.H:215
static amrex::Real beta_boost
Definition: WarpX.H:183
amrex::Vector< amrex::Real > dt
Definition: WarpX.H:693
std::array< const amrex::MultiFab *const, 3 > get_array_Bfield_aux(const int lev) const
Definition: WarpX.H:207
amrex::Real stopTime() const
Definition: WarpX.H:438
static bool use_damp_fields_in_z_guard
Definition: WarpX.H:170
static bool do_back_transformed_fields
Definition: WarpX.H:178
static std::string E_ext_grid_s
Definition: WarpX.H:110
amrex::Vector< std::unique_ptr< SpectralSolverRZ > > spectral_solver_fp
Definition: WarpX.H:864
const amrex::IntVect get_ng_depos_rho() const
Definition: WarpX.H:492
static bool use_filter
Definition: WarpX.H:167
ii
Definition: check_interp_points_and_weights.py:145
Definition: BilinearFilter.H:14
amrex::Vector< std::unique_ptr< PML > > pml
Definition: WarpX.H:751
static amrex::Real zmax_plasma_to_compute_max_step
Definition: WarpX.H:185
const amrex::MultiFab & getBfield_fp(int lev, int direction)
Definition: WarpX.H:249
amrex::MultiFab * get_pointer_Bfield_cp(int lev, int direction) const
Definition: WarpX.H:233
Definition: WarpX.H:69
amrex::MultiFab * get_pointer_current_fp(int lev, int direction) const
Definition: WarpX.H:228
const amrex::MultiFab & getcurrent(int lev, int direction)
Definition: WarpX.H:238
const amrex::MultiFab & getBfield(int lev, int direction)
Definition: WarpX.H:240
std::unique_ptr< MacroscopicProperties > m_macroscopic_properties
Definition: WarpX.H:765
static amrex::Real quantum_xi_c2
Definition: WarpX.H:332
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > Efield_cp
Definition: WarpX.H:727
const amrex::IntVect getngUpdateAux() const
Definition: WarpX.H:490
amrex::RealVect fine_tag_lo
Definition: WarpX.H:829
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > Efield_cax
Definition: WarpX.H:733
static long nox
Definition: WarpX.H:156
void FillBoundaryB()
Definition: PML.cpp:981
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > current_slice
Definition: WarpX.H:843
const amrex::IntVect getngF() const
Definition: WarpX.H:488
static std::string str_Bx_ext_grid_function
Definition: WarpX.H:113
amrex::RealBox getSliceRealBox() const
Definition: WarpX.H:474
void setplot_rho(bool a_plot_rho)
Definition: WarpX.H:435
int getistep(int lev) const
Definition: WarpX.H:424
static bool use_kspace_filter
Definition: WarpX.H:168
static bool use_filter_compensation
Definition: WarpX.H:169
static long current_deposition_algo
Definition: WarpX.H:131
amrex::Vector< std::unique_ptr< NCIGodfreyFilter > > nci_godfrey_filter_exeybz
Definition: WarpX.H:268
static bool do_device_synchronize_before_profile
Definition: WarpX.H:196
static int num_snapshots_lab
Definition: WarpX.H:176
amrex::Vector< int > getnsubsteps() const
Definition: WarpX.H:421
amrex::MultiFab * get_pointer_current_cp(int lev, int direction) const
Definition: WarpX.H:234
amrex::MultiFab * get_pointer_Efield_fp(int lev, int direction) const
Definition: WarpX.H:226
static int maxwell_solver_id
Definition: WarpX.H:135
std::unique_ptr< SpectralSolver > spectral_solver_fp
Definition: PML.H:181
static std::string str_Ex_ext_grid_function
Definition: WarpX.H:117
static bool serialize_ics
Definition: WarpX.H:171
amrex::Vector< amrex::Real > t_old
Definition: WarpX.H:692
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > Bfield_cax
Definition: WarpX.H:734
const amrex::IntVect getngE() const
Definition: WarpX.H:487
amrex::Vector< int > nsubsteps
Definition: WarpX.H:689
static long field_gathering_algo
Definition: WarpX.H:133
static long n_rz_azimuthal_modes
Definition: WarpX.H:161
static amrex::IntVect filter_npass_each_dir
Definition: WarpX.H:266
static bool galerkin_interpolation
Definition: WarpX.H:165
static std::string str_Ey_ext_grid_function
Definition: WarpX.H:118
amrex::IntVect slice_cr_ratio
Definition: WarpX.H:840
amrex::MultiFab * get_pointer_Bfield_aux(int lev, int direction) const
Definition: WarpX.H:224
static amrex::Vector< amrex::Real > B_external_grid
Definition: WarpX.H:106
amrex::Real getmoving_window_x() const
Definition: WarpX.H:433
static std::string B_ext_grid_s
Definition: WarpX.H:109
amrex::Vector< std::unique_ptr< FiniteDifferenceSolver > > m_fdtd_solver_fp
Definition: WarpX.H:871
static std::string str_By_ext_grid_function
Definition: WarpX.H:114
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > Bfield_aux
Definition: WarpX.H:708
IntervalsParser get_load_balance_intervals() const
returns the load balance interval
Definition: WarpX.H:343
PatchType
Definition: WarpX.H:63
std::unique_ptr< ParserWrapper< 3 > > Bzfield_parser
Definition: WarpX.H:124
std::string restart_chkfile
Definition: WarpX.H:816
int slice_max_grid_size
Definition: WarpX.H:837
amrex::Vector< amrex::Real > mirror_z
Definition: WarpX.H:276
int Verbose() const
Definition: WarpX.H:85
static bool do_dynamic_scheduling
Definition: WarpX.H:188
static int macroscopic_solver_algo
Definition: WarpX.H:138
void PushPSATD()
Definition: PML.cpp:1076
amrex::Vector< std::unique_ptr< amrex::MultiFab > > F_slice
Definition: WarpX.H:841
static std::string authors
Author of an input file / simulation setup.
Definition: WarpX.H:102
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > Efield_fp
Definition: WarpX.H:716
virtual void MakeNewLevelFromCoarse(int, amrex::Real, const amrex::BoxArray &, const amrex::DistributionMapping &) final
Definition: WarpX.H:581
static int do_nodal
in number of cells from the edge (identical for each dimension)
Definition: WarpX.H:204
static long noz
Definition: WarpX.H:158
static bool safe_guard_cells
Definition: WarpX.H:197
amrex::Vector< std::unique_ptr< amrex::MultiFab > > rho_slice
Definition: WarpX.H:842
const amrex::MultiFab & getcurrent_fp(int lev, int direction)
Definition: WarpX.H:247
amrex::Vector< std::unique_ptr< FiniteDifferenceSolver > > m_fdtd_solver_cp
Definition: WarpX.H:872
guardCellManager guard_cells
Definition: WarpX.H:834
amrex::MultiFab * get_pointer_F_cp(int lev) const
Definition: WarpX.H:236
amrex::Real gett_old(int lev) const
Definition: WarpX.H:427
amrex::Vector< amrex::Real > mirror_z_width
Definition: WarpX.H:277
std::unique_ptr< ParserWrapper< 3 > > Exfield_parser
Definition: WarpX.H:126
amrex::Vector< amrex::Real > gett_new() const
Definition: WarpX.H:428
const amrex::MultiFab & getcurrent_cp(int lev, int direction)
Definition: WarpX.H:242
const amrex::MultiFab & getEfield_cp(int lev, int direction)
Definition: WarpX.H:243
void setistep(int lev, int ii)
Definition: WarpX.H:425
const amrex::iMultiFab * getCurrentBufferMasks(int lev) const
Definition: WarpX.H:676
amrex::Vector< std::unique_ptr< amrex::MultiFab > > rho_fp
Definition: WarpX.H:714
This class computes and stores the number of guard cells needed for the allocation of the MultiFabs a...
Definition: GuardCellManager.H:16
Definition: WarpXParticleContainer.H:131
static amrex::IntVect sort_bin_size
Definition: WarpX.H:192
static int do_compute_max_step_from_zmax
Definition: WarpX.H:186
MultiReducedDiags * reduced_diags
object with all reduced diagnotics, similar to MultiParticleContainer for species.
Definition: WarpX.H:281
amrex::MultiFab * get_pointer_F_fp(int lev) const
Definition: WarpX.H:230
std::unique_ptr< BackTransformedDiagnostic > myBFD
Definition: WarpX.H:700
The HostDeviceParser struct is non-owning and is suitable for being value captured by device lamba...
Definition: WarpXParserWrapper.H:24