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 
25 #ifdef WARPX_USE_PSATD
26 # ifdef WARPX_DIM_RZ
29 # else
31 # endif
32 #endif
33 #include "Evolve/WarpXDtType.H"
36 #include "Filter/BilinearFilter.H"
41 
42 #include <AMReX.H>
43 #include <AMReX_AmrCore.H>
44 #include <AMReX_Array.H>
45 #include <AMReX_Config.H>
46 #ifdef AMREX_USE_EB
47 # include <AMReX_EBFabFactory.H>
48 #endif
49 #include <AMReX_GpuContainers.H>
50 #include <AMReX_IntVect.H>
51 #include <AMReX_LayoutData.H>
52 #include <AMReX_Parser.H>
53 #include <AMReX_REAL.H>
54 #include <AMReX_RealBox.H>
55 #include <AMReX_RealVect.H>
56 #include <AMReX_Vector.H>
57 #include <AMReX_VisMF.H>
58 
59 #include <AMReX_BaseFwd.H>
60 #include <AMReX_AmrCoreFwd.H>
61 
62 #include <array>
63 #include <iostream>
64 #include <limits>
65 #include <memory>
66 #include <optional>
67 #include <string>
68 #include <vector>
69 #include <map>
70 
71 enum struct PatchType : int
72 {
73  fine,
74  coarse
75 };
76 
77 class WarpX
78  : public amrex::AmrCore
79 {
80 public:
81 
82  friend class PML;
83 
84  static WarpX& GetInstance ();
85  static void ResetInstance ();
86 
87  WarpX ();
88  ~WarpX ();
89 
90  static std::string Version ();
91  static std::string PicsarVersion ();
92 
93  int Verbose () const { return verbose; }
94 
95  void InitData ();
96 
97  void Evolve (int numsteps = -1);
98 
102 
104 
105  static void shiftMF (amrex::MultiFab& mf, const amrex::Geometry& geom,
106  int num_shift, int dir, const int lev, bool update_cost_flag,
107  amrex::Real external_field=0.0, bool useparser = false,
108  amrex::ParserExecutor<3> const& field_parser={});
109 
110  static void GotoNextLine (std::istream& is);
111 
113  static std::string authors;
114 
119 
121  static std::string B_ext_grid_s;
123  static std::string E_ext_grid_s;
124 
126  static bool add_external_E_field;
128  static bool add_external_B_field;
129 
131  static std::string str_Bx_ext_grid_function;
133  static std::string str_By_ext_grid_function;
135  static std::string str_Bz_ext_grid_function;
137  static std::string str_Ex_ext_grid_function;
139  static std::string str_Ey_ext_grid_function;
141  static std::string str_Ez_ext_grid_function;
142 
144  std::unique_ptr<amrex::Parser> Bxfield_parser;
146  std::unique_ptr<amrex::Parser> Byfield_parser;
148  std::unique_ptr<amrex::Parser> Bzfield_parser;
150  std::unique_ptr<amrex::Parser> Exfield_parser;
152  std::unique_ptr<amrex::Parser> Eyfield_parser;
154  std::unique_ptr<amrex::Parser> Ezfield_parser;
155 
156  // Algorithms
162  static short field_gathering_algo;
164  static short particle_pusher_algo;
172  static int em_solver_medium;
197 
201  static short psatd_solution_type;
202 
205  static short J_in_time;
206  static short rho_in_time;
207 
211  static bool do_current_centering;
212 
214  // to satisfy the continuity equation and charge conservation
216 
219  bool update_with_rho = false;
220 
223 
226 
229 
232 
235 
238 
241 
244  static bool do_dive_cleaning;
246  static bool do_divb_cleaning;
247 
249  static int nox;
251  static int noy;
253  static int noz;
254 
261 
268 
275  static int ncomps;
276 
279  static bool use_fdtd_nci_corr;
290 
294 
296  static bool use_filter;
298  static bool use_kspace_filter;
301 
304 
306  static amrex::Real gamma_boost;
308  static amrex::Real beta_boost;
321  static amrex::Real zmin_domain_boost_step_0;
322 
325 
327  static bool refine_plasma;
328 
331 
336 
337  static bool do_subcycling;
338  static bool do_multi_J;
340 
342  static bool safe_guard_cells;
343 
352 
355  static short grid_type;
356 
357  // Global rho nodal flag to know about rho index type when rho MultiFab is not allocated
359 
374  static void AllocInitMultiFab (
375  std::unique_ptr<amrex::MultiFab>& mf,
376  const amrex::BoxArray& ba,
377  const amrex::DistributionMapping& dm,
378  const int ncomp,
379  const amrex::IntVect& ngrow,
380  const std::string& name,
381  std::optional<const amrex::Real> initial_value = {});
382 
397  static void AllocInitMultiFab (
398  std::unique_ptr<amrex::iMultiFab>& mf,
399  const amrex::BoxArray& ba,
400  const amrex::DistributionMapping& dm,
401  const int ncomp,
402  const amrex::IntVect& ngrow,
403  const std::string& name,
404  std::optional<const int> initial_value = {});
405 
416  static void AliasInitMultiFab (
417  std::unique_ptr<amrex::MultiFab>& mf,
418  const amrex::MultiFab& mf_to_alias,
419  const int scomp,
420  const int ncomp,
421  const std::string& name,
422  std::optional<const amrex::Real> initial_value);
423 
424  // Maps of all of the MultiFabs and iMultiFabs used (this can include MFs from other classes)
425  // This is a convenience for the Python interface, allowing all MultiFabs
426  // to be easily referenced from Python.
427  static std::map<std::string, amrex::MultiFab *> multifab_map;
428  static std::map<std::string, amrex::iMultiFab *> imultifab_map;
429 
436  static void AddToMultiFabMap(const std::string& name, const std::unique_ptr<amrex::MultiFab>& mf) {
437  multifab_map[name] = mf.get();
438  }
439 
446  static void AddToMultiFabMap(const std::string& name, const std::unique_ptr<amrex::iMultiFab>& mf) {
447  imultifab_map[name] = mf.get();
448  }
449 
450  std::array<const amrex::MultiFab* const, 3>
451  get_array_Bfield_aux (const int lev) const {
452  return {
453  Bfield_aux[lev][0].get(),
454  Bfield_aux[lev][1].get(),
455  Bfield_aux[lev][2].get()
456  };
457  }
458  std::array<const amrex::MultiFab* const, 3>
459  get_array_Efield_aux (const int lev) const {
460  return {
461  Efield_aux[lev][0].get(),
462  Efield_aux[lev][1].get(),
463  Efield_aux[lev][2].get()
464  };
465  }
466 
467  amrex::MultiFab * get_pointer_Efield_aux (int lev, int direction) const { return Efield_aux[lev][direction].get(); }
468  amrex::MultiFab * get_pointer_Bfield_aux (int lev, int direction) const { return Bfield_aux[lev][direction].get(); }
469 
470  amrex::MultiFab * get_pointer_Efield_fp (int lev, int direction) const { return Efield_fp[lev][direction].get(); }
471  amrex::MultiFab * get_pointer_Bfield_fp (int lev, int direction) const { return Bfield_fp[lev][direction].get(); }
472  amrex::MultiFab * get_pointer_current_fp (int lev, int direction) const { return current_fp[lev][direction].get(); }
473  amrex::MultiFab * get_pointer_current_fp_nodal (int lev, int direction) const { return current_fp_nodal[lev][direction].get(); }
474  amrex::MultiFab * get_pointer_rho_fp (int lev) const { return rho_fp[lev].get(); }
475  amrex::MultiFab * get_pointer_F_fp (int lev) const { return F_fp[lev].get(); }
476  amrex::MultiFab * get_pointer_G_fp (int lev) const { return G_fp[lev].get(); }
477  amrex::MultiFab * get_pointer_phi_fp (int lev) const { return phi_fp[lev].get(); }
479 
480  amrex::MultiFab * get_pointer_Efield_cp (int lev, int direction) const { return Efield_cp[lev][direction].get(); }
481  amrex::MultiFab * get_pointer_Bfield_cp (int lev, int direction) const { return Bfield_cp[lev][direction].get(); }
482  amrex::MultiFab * get_pointer_current_cp (int lev, int direction) const { return current_cp[lev][direction].get(); }
483  amrex::MultiFab * get_pointer_rho_cp (int lev) const { return rho_cp[lev].get(); }
484  amrex::MultiFab * get_pointer_F_cp (int lev) const { return F_cp[lev].get(); }
485  amrex::MultiFab * get_pointer_G_cp (int lev) const { return G_cp[lev].get(); }
486 
487  amrex::MultiFab * get_pointer_edge_lengths (int lev, int direction) const { return m_edge_lengths[lev][direction].get(); }
488  amrex::MultiFab * get_pointer_face_areas (int lev, int direction) const { return m_face_areas[lev][direction].get(); }
489 
490  const amrex::MultiFab& getEfield (int lev, int direction) {return *Efield_aux[lev][direction];}
491  const amrex::MultiFab& getBfield (int lev, int direction) {return *Bfield_aux[lev][direction];}
492 
493  const amrex::MultiFab& getcurrent_cp (int lev, int direction) {return *current_cp[lev][direction];}
494  const amrex::MultiFab& getEfield_cp (int lev, int direction) {return *Efield_cp[lev][direction];}
495  const amrex::MultiFab& getBfield_cp (int lev, int direction) {return *Bfield_cp[lev][direction];}
496  const amrex::MultiFab& getrho_cp (int lev) {return *rho_cp[lev];}
497  const amrex::MultiFab& getF_cp (int lev) {return *F_cp[lev];}
498  const amrex::MultiFab& getG_cp (int lev) {return *G_cp[lev];}
499 
500  const amrex::MultiFab& getcurrent_fp (int lev, int direction) {return *current_fp[lev][direction];}
501  const amrex::MultiFab& getEfield_fp (int lev, int direction) {return *Efield_fp[lev][direction];}
502  const amrex::MultiFab& getBfield_fp (int lev, int direction) {return *Bfield_fp[lev][direction];}
503  const amrex::MultiFab& getrho_fp (int lev) {return *rho_fp[lev];}
504  const amrex::MultiFab& getphi_fp (int lev) {return *phi_fp[lev];}
505  const amrex::MultiFab& getF_fp (int lev) {return *F_fp[lev];}
506  const amrex::MultiFab& getG_fp (int lev) {return *G_fp[lev];}
507 
508  const amrex::MultiFab& getEfield_avg_fp (int lev, int direction) {return *Efield_avg_fp[lev][direction];}
509  const amrex::MultiFab& getBfield_avg_fp (int lev, int direction) {return *Bfield_avg_fp[lev][direction];}
510  const amrex::MultiFab& getEfield_avg_cp (int lev, int direction) {return *Efield_avg_cp[lev][direction];}
511  const amrex::MultiFab& getBfield_avg_cp (int lev, int direction) {return *Bfield_avg_cp[lev][direction];}
512 
513  bool DoPML () const {return do_pml;}
514 
515 #if (defined WARPX_DIM_RZ) && (defined WARPX_USE_PSATD)
516  const PML_RZ* getPMLRZ() {return pml_rz[0].get();}
517 #endif
518 
520  std::vector<bool> getPMLdirections() const;
521 
522  static amrex::LayoutData<amrex::Real>* getCosts (int lev);
523 
524  void setLoadBalanceEfficiency (const int lev, const amrex::Real efficiency)
525  {
526  if (m_instance)
527  {
528  m_instance->load_balance_efficiency[lev] = efficiency;
529  } else
530  {
531  return;
532  }
533  }
534 
535  amrex::Real getLoadBalanceEfficiency (const int lev)
536  {
537  if (m_instance)
538  {
539  return m_instance->load_balance_efficiency[lev];
540  } else
541  {
542  return -1;
543  }
544  }
545 
550 
551  amrex::Real time_of_last_gal_shift = 0;
554 
556 
557  static int num_mirrors;
561 
563  std::unique_ptr<MultiReducedDiags> reduced_diags;
564 
565  void applyMirrors(amrex::Real time);
566 
568  void ComputeDt ();
569 
572 
574  void WriteUsedInputsFile () const;
575 
577  void PrintDtDxDyDz ();
578 
584  void ComputeMaxStep ();
585  // Compute max_step automatically for simulations in a boosted frame.
587 
592  int MoveWindow (const int step, bool move_j);
593 
599  void ShiftGalileanBoundary ();
600  void UpdatePlasmaInjectionPosition (amrex::Real dt);
601  void ResetProbDomain (const amrex::RealBox& rb);
602  void EvolveE ( amrex::Real dt);
603  void EvolveE (int lev, amrex::Real dt);
604  void EvolveB ( amrex::Real dt, DtType dt_type);
605  void EvolveB (int lev, amrex::Real dt, DtType dt_type);
606  void EvolveF ( amrex::Real dt, DtType dt_type);
607  void EvolveF (int lev, amrex::Real dt, DtType dt_type);
608  void EvolveG ( amrex::Real dt, DtType dt_type);
609  void EvolveG (int lev, amrex::Real dt, DtType dt_type);
610  void EvolveB (int lev, PatchType patch_type, amrex::Real dt, DtType dt_type);
611  void EvolveE (int lev, PatchType patch_type, amrex::Real dt);
612  void EvolveF (int lev, PatchType patch_type, amrex::Real dt, DtType dt_type);
613  void EvolveG (int lev, PatchType patch_type, amrex::Real dt, DtType dt_type);
614 
615  void MacroscopicEvolveE ( amrex::Real dt);
616  void MacroscopicEvolveE (int lev, amrex::Real dt);
617  void MacroscopicEvolveE (int lev, PatchType patch_type, amrex::Real dt);
618 
624 
630  void Hybrid_QED_Push (int lev, amrex::Real dt);
631 
638  void Hybrid_QED_Push (int lev, PatchType patch_type, amrex::Real dt);
639 
640  static amrex::Real quantum_xi_c2;
641 
644  void LoadBalance ();
647  void ResetCosts ();
648 
652  {
653  return load_balance_intervals;
654  }
655 
663  void DampFieldsInGuards (const int lev,
664  const std::array<std::unique_ptr<amrex::MultiFab>,3>& Efield,
665  const std::array<std::unique_ptr<amrex::MultiFab>,3>& Bfield);
666 
674  void DampFieldsInGuards (const int lev, std::unique_ptr<amrex::MultiFab>& mf);
675 
676 #ifdef WARPX_DIM_RZ
678  amrex::MultiFab* Jy,
679  amrex::MultiFab* Jz,
680  int lev);
681 
683  int lev);
684 #endif
685 
691  void ApplyRhofieldBoundary (const int lev, amrex::MultiFab* Rho,
692  PatchType patch_type);
693 
699  void ApplyJfieldBoundary (const int lev, amrex::MultiFab* Jx,
701  PatchType patch_type);
702 
703  void ApplyEfieldBoundary (const int lev, PatchType patch_type);
704  void ApplyBfieldBoundary (const int lev, PatchType patch_type, DtType dt_type);
705 
706  void DampPML ();
707  void DampPML (const int lev);
708  void DampPML (const int lev, PatchType patch_type);
709  void DampPML_Cartesian (const int lev, PatchType patch_type);
710 
711  void DampJPML ();
712  void DampJPML (int lev);
713  void DampJPML (int lev, PatchType patch_type);
714 
715  void CopyJPML ();
716  bool isAnyBoundaryPML();
717 
721  void NodalSyncPML ();
722 
726  void NodalSyncPML (int lev);
727 
731  void NodalSyncPML (int lev, PatchType patch_type);
732 
733  PML* GetPML (int lev);
734 #if (defined WARPX_DIM_RZ) && (defined WARPX_USE_PSATD)
735  PML_RZ* GetPML_RZ (int lev);
736 #endif
737 
739  void doFieldIonization ();
743  void doFieldIonization (int lev);
744 
745 #ifdef WARPX_QED
747  void doQEDEvents ();
751  void doQEDEvents (int lev);
752 #endif
753 
754  void PushParticlesandDepose (int lev, amrex::Real cur_time, DtType a_dt_type=DtType::Full, bool skip_current=false);
755  void PushParticlesandDepose ( amrex::Real cur_time, bool skip_current=false);
756 
757  // This function does aux(lev) = fp(lev) + I(aux(lev-1)-cp(lev)).
758  // Caller must make sure fp and cp have ghost cells filled.
759  void UpdateAuxilaryData ();
762 
772 
773  // Fill boundary cells including coarse/fine boundaries
774  void FillBoundaryB (amrex::IntVect ng, std::optional<bool> nodal_sync = std::nullopt);
775  void FillBoundaryE (amrex::IntVect ng, std::optional<bool> nodal_sync = std::nullopt);
778 
779  void FillBoundaryF (amrex::IntVect ng, std::optional<bool> nodal_sync = std::nullopt);
780  void FillBoundaryG (amrex::IntVect ng, std::optional<bool> nodal_sync = std::nullopt);
782  void FillBoundaryE (int lev, amrex::IntVect ng, std::optional<bool> nodal_sync = std::nullopt);
783  void FillBoundaryB (int lev, amrex::IntVect ng, std::optional<bool> nodal_sync = std::nullopt);
784  void FillBoundaryE_avg (int lev, amrex::IntVect ng);
785  void FillBoundaryB_avg (int lev, amrex::IntVect ng);
786 
787  void FillBoundaryF (int lev, amrex::IntVect ng, std::optional<bool> nodal_sync = std::nullopt);
788  void FillBoundaryG (int lev, amrex::IntVect ng, std::optional<bool> nodal_sync = std::nullopt);
789  void FillBoundaryAux (int lev, amrex::IntVect ng);
790 
796  void SyncCurrentAndRho ();
797 
809  void SyncCurrent (
810  const amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>,3>>& J_fp,
811  const amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>,3>>& J_cp);
812 
813  void SyncRho ();
814 
815  void SyncRho (
816  const amrex::Vector<std::unique_ptr<amrex::MultiFab>>& charge_fp,
817  const amrex::Vector<std::unique_ptr<amrex::MultiFab>>& charge_cp);
818 
820  int getnsubsteps (int lev) const {return nsubsteps[lev];}
821  amrex::Vector<int> getistep () const {return istep;}
822  int getistep (int lev) const {return istep[lev];}
823  void setistep (int lev, int ii) {istep[lev] = ii;}
825  amrex::Real gett_old (int lev) const {return t_old[lev];}
827  amrex::Real gett_new (int lev) const {return t_new[lev];}
828  void sett_new (int lev, amrex::Real time) {t_new[lev] = time;}
830  amrex::Real getdt (int lev) const {return dt[lev];}
831  int getdo_moving_window() const {return do_moving_window;}
832  amrex::Real getmoving_window_x() const {return moving_window_x;}
834  bool getis_synchronized() const {return is_synchronized;}
835 
836  int maxStep () const {return max_step;}
837  void updateMaxStep (const int new_max_step) {max_step = new_max_step;}
838  amrex::Real stopTime () const {return stop_time;}
839  void updateStopTime (const amrex::Real new_stop_time) {stop_time = new_stop_time;}
840 
842  amrex::Vector<amrex::MultiFab>& mf_avg, const amrex::IntVect ngrow) const;
843 
844  void prepareFields( int const step, amrex::Vector<std::string>& varnames,
847  amrex::Vector<amrex::Geometry>& output_geom ) const;
848 
849  static std::array<amrex::Real,3> CellSize (int lev);
850  static amrex::RealBox getRealBox(const amrex::Box& bx, int lev);
851 
860  static std::array<amrex::Real,3> LowerCorner (const amrex::Box& bx, const int lev, const amrex::Real time_shift_delta);
869  static std::array<amrex::Real,3> UpperCorner (const amrex::Box& bx, const int lev, const amrex::Real time_shift_delta);
870 
871  static amrex::IntVect RefRatio (int lev);
872 
873  static const amrex::iMultiFab* CurrentBufferMasks (int lev);
874  static const amrex::iMultiFab* GatherBufferMasks (int lev);
875 
877 
878  // Parameters for lab frame electrostatic
879  static amrex::Real self_fields_required_precision;
880  static amrex::Real self_fields_absolute_tolerance;
883 
884  static int do_moving_window; // boolean
885  static int start_moving_window_step; // the first step to move window
886  static int end_moving_window_step; // the last step to move window
892  static int moving_window_active (int const step) {
893  bool const step_before_end = (step < end_moving_window_step) || (end_moving_window_step < 0);
894  bool const step_after_start = (step >= start_moving_window_step);
895  return do_moving_window && step_before_end && step_after_start;
896  }
897  static int moving_window_dir;
898  static amrex::Real moving_window_v;
900 
901  // these should be private, but can't due to Cuda limitations
902  static void ComputeDivB (amrex::MultiFab& divB, int const dcomp,
903  const std::array<const amrex::MultiFab* const, 3>& B,
904  const std::array<amrex::Real,3>& dx);
905 
906  static void ComputeDivB (amrex::MultiFab& divB, int const dcomp,
907  const std::array<const amrex::MultiFab* const, 3>& B,
908  const std::array<amrex::Real,3>& dx, amrex::IntVect const ngrow);
909 
910  void ComputeDivE(amrex::MultiFab& divE, const int lev);
911 
912  const amrex::IntVect getngEB() const { return guard_cells.ng_alloc_EB; }
913  const amrex::IntVect getngF() const { return guard_cells.ng_alloc_F; }
918 
926  const amrex::IntVect get_numprocs() const {return numprocs;}
927 
929  void ComputeSpaceChargeField (bool const reset_fields);
930  void AddBoundaryField ();
933  void computePhi (const amrex::Vector<std::unique_ptr<amrex::MultiFab> >& rho,
934  amrex::Vector<std::unique_ptr<amrex::MultiFab> >& phi,
935  std::array<amrex::Real, 3> const beta = {{0,0,0}},
936  amrex::Real const required_precision=amrex::Real(1.e-11),
937  amrex::Real absolute_tolerance=amrex::Real(0.0),
938  const int max_iters=200,
939  const int verbosity=2) const;
940 
941  void setPhiBC (amrex::Vector<std::unique_ptr<amrex::MultiFab> >& phi ) const;
942 
943  void computeE (amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>, 3> >& E,
944  const amrex::Vector<std::unique_ptr<amrex::MultiFab> >& phi,
945  std::array<amrex::Real, 3> const beta = {{0,0,0}} ) const;
946  void computeB (amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>, 3> >& B,
947  const amrex::Vector<std::unique_ptr<amrex::MultiFab> >& phi,
948  std::array<amrex::Real, 3> const beta = {{0,0,0}} ) const;
949  void computePhiTriDiagonal (const amrex::Vector<std::unique_ptr<amrex::MultiFab> >& rho,
950  amrex::Vector<std::unique_ptr<amrex::MultiFab> >& phi) const;
951 
952  // Magnetostatic Solver Interface
956  void computeVectorPotential (const amrex::Vector<amrex::Array<std::unique_ptr<amrex::MultiFab>, 3> >& curr,
957  amrex::Vector<amrex::Array<std::unique_ptr<amrex::MultiFab>, 3> >& A,
958  amrex::Real const required_precision=amrex::Real(1.e-11),
959  amrex::Real absolute_tolerance=amrex::Real(0.0),
960  const int max_iters=200,
961  const int verbosity=2) const;
962 
963  void setVectorPotentialBC (amrex::Vector<amrex::Array<std::unique_ptr<amrex::MultiFab>, 3> >& A) const;
964 
988  amrex::ParserExecutor<3> const& xfield_parser,
989  amrex::ParserExecutor<3> const& yfield_parser,
990  amrex::ParserExecutor<3> const& zfield_parser,
991  std::array< std::unique_ptr<amrex::MultiFab>, 3 > const& edge_lengths,
992  std::array< std::unique_ptr<amrex::MultiFab>, 3 > const& face_areas,
993  const char field,
994  const int lev, PatchType patch_type);
995 
997  std::string read_fields_from_path, amrex::MultiFab* mf,
998  std::string F_name, std::string F_component);
999 
1008  void InitializeEBGridData(int lev);
1009 
1016 
1017  void ApplyFilterandSumBoundaryRho (int lev, int glev, amrex::MultiFab& rho, int icomp, int ncomp);
1018 
1027  static amrex::Vector<amrex::Real> getFornbergStencilCoefficients(const int n_order, const short a_grid_type);
1028 
1029  // Device vectors of stencil coefficients used for finite-order centering of fields
1033 
1034  // Device vectors of stencil coefficients used for finite-order centering of currents
1038 
1039  // This needs to be public for CUDA.
1041  virtual void ErrorEst (int lev, amrex::TagBoxArray& tags, amrex::Real time, int /*ngrow*/) final;
1042 
1043  // Return the accelerator lattice instance defined at the given refinement level
1045 
1046 protected:
1047 
1073  void InitLevelData (int lev, amrex::Real time);
1074 
1077  virtual void PostProcessBaseGrids (amrex::BoxArray& ba0) const final;
1078 
1082  virtual void MakeNewLevelFromScratch (int lev, amrex::Real time, const amrex::BoxArray& ba,
1083  const amrex::DistributionMapping& dm) final;
1084 
1088  virtual void MakeNewLevelFromCoarse (int /*lev*/, amrex::Real /*time*/, const amrex::BoxArray& /*ba*/,
1089  const amrex::DistributionMapping& /*dm*/) final;
1090 
1094  virtual void RemakeLevel (int lev, amrex::Real time, const amrex::BoxArray& ba,
1095  const amrex::DistributionMapping& dm) final;
1096 
1098  virtual void ClearLevel (int lev) final;
1099 
1100 private:
1101 
1102  // Singleton is used when the code is run from python
1104 
1106  static void CheckSignals ();
1108  void HandleSignals ();
1109 
1113  void EvolveEM(int numsteps);
1114 
1115  void FillBoundaryB (const int lev, const PatchType patch_type, const amrex::IntVect ng, std::optional<bool> nodal_sync = std::nullopt);
1116  void FillBoundaryE (const int lev, const PatchType patch_type, const amrex::IntVect ng, std::optional<bool> nodal_sync = std::nullopt);
1117  void FillBoundaryF (int lev, PatchType patch_type, amrex::IntVect ng, std::optional<bool> nodal_sync = std::nullopt);
1118  void FillBoundaryG (int lev, PatchType patch_type, amrex::IntVect ng, std::optional<bool> nodal_sync = std::nullopt);
1119 
1120  void FillBoundaryB_avg (int lev, PatchType patch_type, amrex::IntVect ng);
1121  void FillBoundaryE_avg (int lev, PatchType patch_type, amrex::IntVect ng);
1122 
1124 
1125  void OneStep_nosub (amrex::Real t);
1126  void OneStep_sub1 (amrex::Real t);
1127 
1131  void OneStep_multiJ (const amrex::Real t);
1132 
1134  const amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>,3>>& J_fp,
1135  const amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>,3>>& J_cp,
1136  const int lev);
1138  const amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>,3>>& J_fp,
1139  const amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>,3>>& J_cp,
1140  const int lev);
1141  void StoreCurrent (const int lev);
1142  void RestoreCurrent (const int lev);
1143  void ApplyFilterJ (
1144  const amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>,3>>& current,
1145  const int lev,
1146  const int idim);
1147  void ApplyFilterJ (
1148  const amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>,3>>& current,
1149  const int lev);
1150  void SumBoundaryJ (
1151  const amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>,3>>& current,
1152  const int lev,
1153  const int idim,
1154  const amrex::Periodicity& period);
1155  void SumBoundaryJ (
1156  const amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>,3>>& current,
1157  const int lev,
1158  const amrex::Periodicity& period);
1159  void NodalSyncJ (
1160  const amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>,3>>& J_fp,
1161  const amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>,3>>& J_cp,
1162  const int lev,
1163  PatchType patch_type);
1164 
1166  const amrex::Vector<std::unique_ptr<amrex::MultiFab>>& charge_fp,
1167  const amrex::Vector<std::unique_ptr<amrex::MultiFab>>& charge_cp,
1168  const int lev);
1170  const amrex::Vector<std::unique_ptr<amrex::MultiFab>>& charge_fp,
1171  const amrex::Vector<std::unique_ptr<amrex::MultiFab>>& charge_cp,
1172  const int lev,
1173  PatchType patch_type,
1174  const int icomp,
1175  const int ncomp);
1177  const amrex::Vector<std::unique_ptr<amrex::MultiFab>>& charge_fp,
1178  const amrex::Vector<std::unique_ptr<amrex::MultiFab>>& charge_cp,
1179  const int lev,
1180  const int icomp,
1181  const int ncomp);
1182  void NodalSyncRho (
1183  const amrex::Vector<std::unique_ptr<amrex::MultiFab>>& charge_fp,
1184  const amrex::Vector<std::unique_ptr<amrex::MultiFab>>& charge_cp,
1185  const int lev,
1186  PatchType patch_type,
1187  const int icomp,
1188  const int ncomp);
1189 
1190  void ReadParameters ();
1191 
1194  void BackwardCompatibility ();
1195 
1197 
1198  void AllocLevelData (int lev, const amrex::BoxArray& new_grids,
1199  const amrex::DistributionMapping& new_dmap);
1200 
1202  GetRestartDMap (const std::string& chkfile, const amrex::BoxArray& ba, int lev) const;
1203 
1204  void InitFromCheckpoint ();
1205  void PostRestart ();
1206 
1207  void InitPML ();
1209 
1210  void InitFilter ();
1211 
1213 
1215 
1221 
1227 
1232 
1235 
1236  void BuildBufferMasks ();
1237 public: // for cuda
1238  void BuildBufferMasksInBox ( const amrex::Box tbx, amrex::IArrayBox &buffer_mask,
1239  const amrex::IArrayBox &guard_mask, const int ng );
1240 private:
1241  const amrex::iMultiFab* getCurrentBufferMasks (int lev) const {
1242  return current_buffer_masks[lev].get();
1243  }
1244  const amrex::iMultiFab* getGatherBufferMasks (int lev) const {
1245  return gather_buffer_masks[lev].get();
1246  }
1247 
1258  amrex::Vector<amrex::Real>& unordered_coeffs,
1259  const int order);
1272  void AllocateCenteringCoefficients (amrex::Gpu::DeviceVector<amrex::Real>& device_centering_stencil_coeffs_x,
1273  amrex::Gpu::DeviceVector<amrex::Real>& device_centering_stencil_coeffs_y,
1274  amrex::Gpu::DeviceVector<amrex::Real>& device_centering_stencil_coeffs_z,
1275  const int centering_nox,
1276  const int centering_noy,
1277  const int centering_noz,
1278  const short a_grid_type);
1279 
1280  void AllocLevelMFs (int lev, const amrex::BoxArray& ba, const amrex::DistributionMapping& dm,
1281  const amrex::IntVect& ngEB, amrex::IntVect& ngJ,
1282  const amrex::IntVect& ngRho, const amrex::IntVect& ngF,
1283  const amrex::IntVect& ngG, const bool aux_is_nodal);
1284 
1285 #ifdef WARPX_USE_PSATD
1286 # ifdef WARPX_DIM_RZ
1287  void AllocLevelSpectralSolverRZ (amrex::Vector<std::unique_ptr<SpectralSolverRZ>>& spectral_solver,
1288  const int lev,
1289  const amrex::BoxArray& realspace_ba,
1290  const amrex::DistributionMapping& dm,
1291  const std::array<amrex::Real,3>& dx);
1292 # else
1293  void AllocLevelSpectralSolver (amrex::Vector<std::unique_ptr<SpectralSolver>>& spectral_solver,
1294  const int lev,
1295  const amrex::BoxArray& realspace_ba,
1296  const amrex::DistributionMapping& dm,
1297  const std::array<amrex::Real,3>& dx,
1298  const bool pml_flag=false);
1299 # endif
1300 #endif
1301 
1302  amrex::Vector<int> istep; // which step?
1303  amrex::Vector<int> nsubsteps; // how many substeps on each level?
1304 
1308 
1309  // Particle container
1310  std::unique_ptr<MultiParticleContainer> mypc;
1311  std::unique_ptr<MultiDiagnostics> multi_diags;
1312 
1313  //
1314  // Fields: First array for level, second for direction
1315  //
1316 
1317  // Full solution
1320 
1321  // Fine patch
1332 
1333  // Memory buffers for computing magnetostatic fields
1334  // Vector Potential A and previous step. Time buffer needed for computing dA/dt to first order
1338 
1339  // Same as Bfield_fp/Efield_fp for reading external field data
1342 
1347 
1370 
1383 
1384  //EB level set
1386 
1387  // store fine patch
1389 
1390  // Nodal MultiFab for nodal current deposition if warpx.do_current_centering = 1
1392 
1393  // Coarse patch
1402 
1403  // Copy of the coarse aux
1408 
1409  // If charge/current deposition buffers are used
1412 
1413  // PML
1414  int do_pml = 0;
1416  int pml_ncell = 10;
1417  int pml_delta = 10;
1421  static int do_similar_dm_pml;
1422  bool do_pml_dive_cleaning; // default set in WarpX.cpp
1423  bool do_pml_divb_cleaning; // default set in WarpX.cpp
1427 #if (defined WARPX_DIM_RZ) && (defined WARPX_USE_PSATD)
1429 #endif
1430  amrex::Real v_particle_pml;
1431 
1432  amrex::Real moving_window_x = std::numeric_limits<amrex::Real>::max();
1434 
1435  // Plasma injection parameters
1439 
1440  std::optional<amrex::Real> m_const_dt;
1441 
1442  // Macroscopic properties
1443  std::unique_ptr<MacroscopicProperties> m_macroscopic_properties;
1444 
1445  // Load balancing
1458  amrex::Real load_balance_knapsack_factor = amrex::Real(1.24);
1464  amrex::Real load_balance_efficiency_ratio_threshold = amrex::Real(1.1);
1472  amrex::Real costs_heuristic_cells_wt = amrex::Real(0);
1478  amrex::Real costs_heuristic_particles_wt = amrex::Real(0);
1479 
1480  // Determines timesteps for override sync
1482 
1483  // Other runtime parameters
1484  int verbose = 1;
1485 
1486  bool use_hybrid_QED = 0;
1487 
1488  int max_step = std::numeric_limits<int>::max();
1489  amrex::Real stop_time = std::numeric_limits<amrex::Real>::max();
1490 
1491  int regrid_int = -1;
1492 
1493  amrex::Real cfl = amrex::Real(0.999);
1494 
1495  std::string restart_chkfile;
1496 
1499 
1500  bool use_single_read = true;
1501  bool use_single_write = true;
1503  int field_io_nfiles = 1024;
1505 
1508 
1509  bool is_synchronized = true;
1510 
1511  // Synchronization of nodal points
1512  const bool sync_nodal_points = true;
1513 
1515 
1516  //Slice Parameters
1518  int slice_plot_int = -1;
1527 
1529  int nox_fft = 16;
1530  int noy_fft = 16;
1531  int noz_fft = 16;
1532 
1535 
1537  std::unique_ptr<ParticleBoundaryBuffer> m_particle_boundary_buffer;
1538 
1539  // Accelerator lattice elements
1541 
1542  //
1543  // Embedded Boundary
1544  //
1545 
1546  // Factory for field data
1548 
1549  amrex::FabFactory<amrex::FArrayBox> const& fieldFactory (int lev) const noexcept {
1550  return *m_field_factory[lev];
1551  }
1552 #ifdef AMREX_USE_EB
1553 public:
1554  amrex::EBFArrayBoxFactory const& fieldEBFactory (int lev) const noexcept {
1555  return static_cast<amrex::EBFArrayBoxFactory const&>(*m_field_factory[lev]);
1556  }
1557 #endif
1558 
1559 public:
1560  void InitEB ();
1566 public:
1567 #ifdef AMREX_USE_EB
1568  static void ComputeEdgeLengths (std::array< std::unique_ptr<amrex::MultiFab>, 3 >& edge_lengths,
1569  const amrex::EBFArrayBoxFactory& eb_fact);
1574  static void ComputeFaceAreas (std::array< std::unique_ptr<amrex::MultiFab>, 3 >& face_areas,
1575  const amrex::EBFArrayBoxFactory& eb_fact);
1576 
1580  static void ScaleEdges (std::array< std::unique_ptr<amrex::MultiFab>, 3 >& edge_lengths,
1581  const std::array<amrex::Real,3>& cell_size);
1585  static void ScaleAreas (std::array< std::unique_ptr<amrex::MultiFab>, 3 >& face_areas,
1586  const std::array<amrex::Real,3>& cell_size);
1595  void MarkCells();
1599 #endif
1600  void ComputeDistanceToEB ();
1609  void ComputeFaceExtensions();
1613  void InitBorrowing();
1617  void ShrinkBorrowing();
1621  void ComputeOneWayExtensions();
1634  void ApplyBCKCorrection(const int idim);
1635 
1641 
1642 private:
1644 
1645  void PushPSATD ();
1646 
1647 #ifdef WARPX_USE_PSATD
1648 
1662  const amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>,3>>& E_fp,
1663  const amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>,3>>& B_fp,
1664  const amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>,3>>& E_cp,
1665  const amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>,3>>& B_cp);
1666 
1681  const amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>,3>>& E_fp,
1682  const amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>,3>>& B_fp,
1683  const amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>,3>>& E_cp,
1684  const amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>,3>>& B_cp);
1685 
1699  const amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>,3>>& E_avg_fp,
1700  const amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>,3>>& B_avg_fp,
1701  const amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>,3>>& E_avg_cp,
1702  const amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>,3>>& B_avg_cp);
1703 
1715  void PSATDForwardTransformJ (
1716  const amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>,3>>& J_fp,
1717  const amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>,3>>& J_cp,
1718  const bool apply_kspace_filter=true);
1719 
1729  const amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>,3>>& J_fp,
1730  const amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>,3>>& J_cp);
1731 
1744  const amrex::Vector<std::unique_ptr<amrex::MultiFab>>& charge_fp,
1745  const amrex::Vector<std::unique_ptr<amrex::MultiFab>>& charge_cp,
1746  const int icomp, const int dcomp, const bool apply_kspace_filter=true);
1747 
1751  void PSATDMoveRhoNewToRhoOld ();
1752 
1756  void PSATDMoveJNewToJOld ();
1757 
1761  void PSATDForwardTransformF ();
1762 
1766  void PSATDBackwardTransformF ();
1767 
1771  void PSATDForwardTransformG ();
1772 
1776  void PSATDBackwardTransformG ();
1777 
1781  void PSATDCurrentCorrection ();
1782 
1786  void PSATDVayDeposition ();
1787 
1791  void PSATDPushSpectralFields ();
1792 
1798  void PSATDScaleAverageFields (const amrex::Real scale_factor);
1799 
1803  void PSATDEraseAverageFields ();
1804 
1805 # ifdef WARPX_DIM_RZ
1808 # else
1811 # endif
1812 
1813 public:
1814 
1815 # ifdef WARPX_DIM_RZ
1817 # else
1819 # endif
1820  get_spectral_solver_fp (int lev) {return *spectral_solver_fp[lev];}
1821 #endif
1822 
1823 private:
1826 };
1827 
1828 #endif
PatchType
Definition: WarpX.H:72
DtType
Definition: WarpXDtType.H:11
Definition: AcceleratorLattice.H:21
Definition: BilinearFilter.H:17
Definition: ElectrostaticSolver.H:35
This class contains the macroscopic properties of the medium needed to evaluate macroscopic Maxwell e...
Definition: MacroscopicProperties.H:32
Definition: MagnetostaticSolver.H:21
This class contains a vector of all diagnostics in the simulation.
Definition: MultiDiagnostics.H:21
Definition: MultiParticleContainer.H:65
Definition: PML_RZ.H:30
Definition: PML.H:128
Definition: ParticleBoundaryBuffer.H:20
Top-level class for the electromagnetic spectral solver.
Definition: SpectralSolver.H:33
Definition: SpectralSolverRZ.H:22
Definition: WarpX.H:79
void DampFieldsInGuards(const int lev, const std::array< std::unique_ptr< amrex::MultiFab >, 3 > &Efield, const std::array< std::unique_ptr< amrex::MultiFab >, 3 > &Bfield)
Private function for spectral solver Applies a damping factor in the guards cells that extend beyond ...
Definition: WarpXPushFieldsEM.cpp:1065
std::unique_ptr< ParticleBoundaryBuffer > m_particle_boundary_buffer
particle buffer for scraped particles on the boundaries
Definition: WarpX.H:1537
static int self_fields_max_iters
Definition: WarpX.H:881
void PSATDMoveRhoNewToRhoOld()
Copy rho_new to rho_old in spectral space (when rho is linear in time)
Definition: WarpXPushFieldsEM.cpp:560
const amrex::MultiFab & getrho_fp(int lev)
Definition: WarpX.H:503
static int field_centering_nox
Order of finite centering of fields (from staggered grid to nodal grid), along x.
Definition: WarpX.H:256
amrex::Vector< std::unique_ptr< amrex::LayoutData< amrex::Real > > > costs
Definition: WarpX.H:1451
static short current_deposition_algo
Integer that corresponds to the current deposition algorithm (Esirkepov, direct, Vay)
Definition: WarpX.H:158
amrex::Vector< std::unique_ptr< amrex::MultiFab > > G_fp
Definition: WarpX.H:1323
amrex::Gpu::DeviceVector< amrex::Real > device_field_centering_stencil_coeffs_y
Definition: WarpX.H:1031
static int moving_window_dir
Definition: WarpX.H:897
amrex::Gpu::DeviceVector< amrex::Real > device_current_centering_stencil_coeffs_x
Definition: WarpX.H:1035
void computePhi(const amrex::Vector< std::unique_ptr< amrex::MultiFab > > &rho, amrex::Vector< std::unique_ptr< amrex::MultiFab > > &phi, std::array< amrex::Real, 3 > const beta={{0, 0, 0}}, amrex::Real const required_precision=amrex::Real(1.e-11), amrex::Real absolute_tolerance=amrex::Real(0.0), const int max_iters=200, const int verbosity=2) const
Definition: ElectrostaticSolver.cpp:275
void InitFilter()
void ComputeSpaceChargeField(bool const reset_fields)
Definition: ElectrostaticSolver.cpp:58
void BuildBufferMasks()
Definition: WarpX.cpp:2853
bool use_hybrid_QED
Definition: WarpX.H:1486
static bool do_dive_cleaning
Definition: WarpX.H:244
static amrex::Real zmax_plasma_to_compute_max_step
Definition: WarpX.H:314
void doFieldIonization()
Definition: WarpXEvolve.cpp:913
amrex::MultiFab * get_pointer_edge_lengths(int lev, int direction) const
Definition: WarpX.H:487
const amrex::IntVect get_ng_fieldgather() const
Definition: WarpX.H:917
amrex::MultiFab * get_pointer_Efield_fp(int lev, int direction) const
Definition: WarpX.H:470
const amrex::MultiFab & getEfield_fp(int lev, int direction)
Definition: WarpX.H:501
const amrex::IntVect getngEB() const
Definition: WarpX.H:912
static std::string Version()
Version of WarpX executable.
Definition: WarpXVersion.cpp:14
amrex::Vector< int > getnsubsteps() const
Definition: WarpX.H:819
void PSATDVayDeposition()
Vay deposition in Fourier space (https://doi.org/10.1016/j.jcp.2013.03.010)
Definition: WarpXPushFieldsEM.cpp:417
static bool do_multi_J
Definition: WarpX.H:338
std::unique_ptr< MacroscopicProperties > m_macroscopic_properties
Definition: WarpX.H:1443
MultiDiagnostics & GetMultiDiags()
Definition: WarpX.H:101
bool DoPML() const
Definition: WarpX.H:513
const amrex::MultiFab & getcurrent_cp(int lev, int direction)
Definition: WarpX.H:493
static short rho_in_time
Definition: WarpX.H:206
void UpdateAuxilaryDataSameType()
Definition: WarpXComm.cpp:274
virtual void PostProcessBaseGrids(amrex::BoxArray &ba0) const final
Definition: WarpXInitData.cpp:85
int pml_delta
Definition: WarpX.H:1417
amrex::Vector< std::unique_ptr< amrex::FabFactory< amrex::FArrayBox > > > m_field_factory
Definition: WarpX.H:1547
bool getis_synchronized() const
Definition: WarpX.H:834
int do_pml_j_damping
Definition: WarpX.H:1419
int noy_fft
Definition: WarpX.H:1530
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > current_cp
Definition: WarpX.H:1397
amrex::Vector< std::unique_ptr< amrex::MultiFab > > m_distance_to_eb
Definition: WarpX.H:1385
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > Efield_slice
Definition: WarpX.H:1525
void PSATDBackwardTransformEB(const amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 >> &E_fp, const amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 >> &B_fp, const amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 >> &E_cp, const amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 >> &B_cp)
Backward FFT of E,B on all mesh refinement levels, with field damping in the guard cells (if needed)
Definition: WarpXPushFieldsEM.cpp:123
void NodalSyncPML()
Synchronize the nodal points of the PML MultiFabs.
Definition: WarpXComm.cpp:1314
static std::string str_Ex_ext_grid_function
String storing parser function to initialize x-component of the electric field on the grid.
Definition: WarpX.H:137
void ComputeFaceExtensions()
Main function computing the cell extension. Where possible it computes one-way extensions and,...
Definition: WarpXFaceExtensions.cpp:183
static void CheckSignals()
Check and clear signal flags and asynchronously broadcast them from process 0.
Definition: WarpXEvolve.cpp:1092
amrex::Vector< amrex::Real > m_v_galilean
Definition: WarpX.H:552
void DampJPML()
Definition: WarpXEvolvePML.cpp:220
static short psatd_solution_type
Definition: WarpX.H:201
void ResetProbDomain(const amrex::RealBox &rb)
Definition: WarpXMovingWindow.cpp:579
amrex::Vector< std::unique_ptr< amrex::iMultiFab > > gather_buffer_masks
Definition: WarpX.H:1407
void updateStopTime(const amrex::Real new_stop_time)
Definition: WarpX.H:839
std::array< const amrex::MultiFab *const, 3 > get_array_Efield_aux(const int lev) const
Definition: WarpX.H:459
amrex::Vector< int > mirror_z_npoints
Definition: WarpX.H:560
static amrex::Real zmin_domain_boost_step_0
Definition: WarpX.H:321
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > current_slice
Definition: WarpX.H:1524
static const amrex::iMultiFab * GatherBufferMasks(int lev)
Definition: WarpX.cpp:3037
static bool do_compute_max_step_from_zmax
Definition: WarpX.H:318
static amrex::Vector< int > field_boundary_lo
Definition: WarpX.H:181
static bool sort_particles_for_deposition
If true, particles will be sorted in the order x -> y -> z -> ppc for faster deposition.
Definition: WarpX.H:333
SpectralSolverRZ & get_spectral_solver_fp(int lev)
Definition: WarpX.H:1820
static int n_field_gather_buffer
Definition: WarpX.H:347
static void shiftMF(amrex::MultiFab &mf, const amrex::Geometry &geom, int num_shift, int dir, const int lev, bool update_cost_flag, amrex::Real external_field=0.0, bool useparser=false, amrex::ParserExecutor< 3 > const &field_parser={})
Definition: WarpXMovingWindow.cpp:357
static int do_multi_J_n_depositions
Definition: WarpX.H:339
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > current_fp_nodal
Definition: WarpX.H:1391
void MacroscopicEvolveE(amrex::Real dt)
Definition: WarpXPushFieldsEM.cpp:1010
amrex::Vector< amrex::Real > t_new
Definition: WarpX.H:1305
static bool do_single_precision_comms
perform field communications in single precision
Definition: WarpX.H:222
amrex::IntVect slice_cr_ratio
Definition: WarpX.H:1520
void SyncCurrentAndRho()
Synchronize J and rho: filter (if used), exchange guard cells, interpolate across MR levels....
Definition: WarpXEvolve.cpp:498
int field_io_nfiles
Definition: WarpX.H:1503
static amrex::Vector< ParticleBoundaryType > particle_boundary_lo
Definition: WarpX.H:191
void AddSpaceChargeFieldLabFrame()
Definition: ElectrostaticSolver.cpp:194
static amrex::Vector< amrex::Real > B_external_grid
Initial magnetic field on the grid.
Definition: WarpX.H:118
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > current_store
Definition: WarpX.H:1388
void prepareFields(int const step, amrex::Vector< std::string > &varnames, amrex::Vector< amrex::MultiFab > &mf_avg, amrex::Vector< const amrex::MultiFab * > &output_mf, amrex::Vector< amrex::Geometry > &output_geom) const
void CheckKnownIssues()
Checks for known numerical issues involving different WarpX modules.
guardCellManager guard_cells
Definition: WarpX.H:1514
static bool do_shared_mem_charge_deposition
used shared memory algorithm for charge deposition
Definition: WarpX.H:225
amrex::VisMF::Header::Version slice_plotfile_headerversion
Definition: WarpX.H:1498
static int em_solver_medium
Integer that corresponds to electromagnetic Maxwell solver (vacuum - 0, macroscopic - 1)
Definition: WarpX.H:172
void ComputeMagnetostaticField()
Definition: MagnetostaticSolver.cpp:59
void computeB(amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > &B, const amrex::Vector< std::unique_ptr< amrex::MultiFab > > &phi, std::array< amrex::Real, 3 > const beta={{0, 0, 0}}) const
Definition: ElectrostaticSolver.cpp:568
amrex::Real stop_time
Definition: WarpX.H:1489
MultiParticleContainer & GetPartContainer()
Definition: WarpX.H:99
static amrex::Vector< int > boost_direction
Direction of the Lorentz transform that defines the boosted frame of the simulation.
Definition: WarpX.H:310
void ComputeDt()
Definition: WarpXComputeDt.cpp:33
void PSATDSubtractCurrentPartialSumsAvg()
Subtract the average of the cumulative sums of the preliminary current D from the current J (computed...
Definition: WarpXPushFieldsEM.cpp:430
static bool use_fdtd_nci_corr
Definition: WarpX.H:279
static bool verboncoeur_axis_correction
Definition: WarpX.H:293
static amrex::Real moving_window_v
Definition: WarpX.H:898
static bool do_shared_mem_current_deposition
use shared memory algorithm for current deposition
Definition: WarpX.H:228
amrex::Vector< amrex::IntVect > do_pml_Hi
Definition: WarpX.H:1425
void setistep(int lev, int ii)
Definition: WarpX.H:823
amrex::MultiFab * get_pointer_vector_potential_fp(int lev, int direction) const
Definition: WarpX.H:478
void BuildBufferMasksInBox(const amrex::Box tbx, amrex::IArrayBox &buffer_mask, const amrex::IArrayBox &guard_mask, const int ng)
Build buffer mask within given FArrayBox.
Definition: WarpX.cpp:2894
static bool fft_do_time_averaging
Definition: WarpX.H:899
void EvolveF(amrex::Real dt, DtType dt_type)
Definition: WarpXPushFieldsEM.cpp:916
static short particle_pusher_algo
Integer that corresponds to the particle push algorithm (Boris, Vay, Higuera-Cary)
Definition: WarpX.H:164
virtual void ClearLevel(int lev) final
Delete level data. Called by AmrCore::regrid.
Definition: WarpX.cpp:1863
amrex::Vector< std::unique_ptr< PML > > pml
Definition: WarpX.H:1426
void FillBoundaryE_avg(amrex::IntVect ng)
Definition: WarpXComm.cpp:521
amrex::RealVect fine_tag_lo
Definition: WarpX.H:1506
std::string restart_chkfile
Definition: WarpX.H:1495
static WarpX * m_instance
Definition: WarpX.H:1103
const amrex::MultiFab & getG_fp(int lev)
Definition: WarpX.H:506
amrex::Vector< std::unique_ptr< amrex::MultiFab > > rho_cp
Definition: WarpX.H:1396
amrex::MultiFab * get_pointer_G_fp(int lev) const
Definition: WarpX.H:476
static amrex::RealBox getRealBox(const amrex::Box &bx, int lev)
Definition: WarpX.cpp:2646
static bool do_dynamic_scheduling
Definition: WarpX.H:326
void PostRestart()
const amrex::MultiFab & getBfield_cp(int lev, int direction)
Definition: WarpX.H:495
void ReorderFornbergCoefficients(amrex::Vector< amrex::Real > &ordered_coeffs, amrex::Vector< amrex::Real > &unordered_coeffs, const int order)
Re-orders the Fornberg coefficients so that they can be used more conveniently for finite-order cente...
Definition: WarpX.cpp:2959
void InitFromCheckpoint()
Definition: WarpXIO.cpp:94
void SumBoundaryJ(const amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 >> &current, const int lev, const int idim, const amrex::Periodicity &period)
Definition: WarpXComm.cpp:989
void RestrictCurrentFromFineToCoarsePatch(const amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 >> &J_fp, const amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 >> &J_cp, const int lev)
Fills the values of the current on the coarse patch by averaging the values of the current of the fin...
Definition: WarpXComm.cpp:940
static std::array< amrex::Real, 3 > CellSize(int lev)
Definition: WarpX.cpp:2632
static std::string E_ext_grid_s
Initialization type for external electric field on the grid.
Definition: WarpX.H:123
amrex::Gpu::DeviceVector< amrex::Real > device_field_centering_stencil_coeffs_z
Definition: WarpX.H:1032
void AllocateCenteringCoefficients(amrex::Gpu::DeviceVector< amrex::Real > &device_centering_stencil_coeffs_x, amrex::Gpu::DeviceVector< amrex::Real > &device_centering_stencil_coeffs_y, amrex::Gpu::DeviceVector< amrex::Real > &device_centering_stencil_coeffs_z, const int centering_nox, const int centering_noy, const int centering_noz, const short a_grid_type)
Allocates and initializes the stencil coefficients used for the finite-order centering of fields and ...
Definition: WarpX.cpp:2972
amrex::MultiFab * get_pointer_phi_fp(int lev) const
Definition: WarpX.H:477
void PSATDForwardTransformEB(const amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 >> &E_fp, const amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 >> &B_fp, const amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 >> &E_cp, const amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 >> &B_cp)
Forward FFT of E,B on all mesh refinement levels.
Definition: WarpXPushFieldsEM.cpp:102
static int self_fields_verbosity
Definition: WarpX.H:882
amrex::Real stopTime() const
Definition: WarpX.H:838
std::unique_ptr< amrex::Parser > Byfield_parser
User-defined parser to initialize y-component of the magnetic field on the grid.
Definition: WarpX.H:146
amrex::Vector< std::unique_ptr< PML_RZ > > pml_rz
Definition: WarpX.H:1428
void FillBoundaryE(amrex::IntVect ng, std::optional< bool > nodal_sync=std::nullopt)
Definition: WarpXComm.cpp:485
amrex::Array1D< int, 0, 2 > CountExtFaces()
Auxiliary function to count the amount of faces which still need to be extended.
Definition: WarpXFaceExtensions.cpp:147
const amrex::MultiFab & getphi_fp(int lev)
Definition: WarpX.H:504
amrex::Vector< amrex::Real > m_v_comoving
Definition: WarpX.H:555
void InitData()
static std::map< std::string, amrex::MultiFab * > multifab_map
Definition: WarpX.H:427
void RestoreCurrent(const int lev)
Definition: WarpX.cpp:3054
void InitializeExternalFieldsOnGridUsingParser(amrex::MultiFab *mfx, amrex::MultiFab *mfy, amrex::MultiFab *mfz, amrex::ParserExecutor< 3 > const &xfield_parser, amrex::ParserExecutor< 3 > const &yfield_parser, amrex::ParserExecutor< 3 > const &zfield_parser, std::array< std::unique_ptr< amrex::MultiFab >, 3 > const &edge_lengths, std::array< std::unique_ptr< amrex::MultiFab >, 3 > const &face_areas, const char field, const int lev, PatchType patch_type)
This function initializes the E and B fields on each level using the parser and the user-defined func...
void PSATDBackwardTransformG()
Backward FFT of G on all mesh refinement levels.
Definition: WarpXPushFieldsEM.cpp:242
amrex::Array< amrex::Real, 3 > m_galilean_shift
Definition: WarpX.H:553
amrex::Gpu::DeviceVector< amrex::Real > device_field_centering_stencil_coeffs_x
Definition: WarpX.H:1030
amrex::MultiFab * get_pointer_current_fp(int lev, int direction) const
Definition: WarpX.H:472
void AddExternalFields()
void UpdateCurrentNodalToStag(amrex::MultiFab &dst, amrex::MultiFab const &src)
This function is called if warpx.do_current_centering = 1 and it centers the currents from a nodal gr...
Definition: WarpXComm.cpp:428
const amrex::IntVect get_ng_depos_rho() const
Definition: WarpX.H:916
amrex::MultiFab * get_pointer_current_cp(int lev, int direction) const
Definition: WarpX.H:482
amrex::Vector< amrex::Real > getdt() const
Definition: WarpX.H:829
static int noz
Order of the particle shape factors (splines) along z.
Definition: WarpX.H:253
amrex::Gpu::DeviceVector< amrex::Real > device_current_centering_stencil_coeffs_z
Definition: WarpX.H:1037
amrex::Vector< amrex::Real > gett_new() const
Definition: WarpX.H:826
const amrex::MultiFab & getBfield_avg_cp(int lev, int direction)
Definition: WarpX.H:511
int mffile_nstreams
Definition: WarpX.H:1502
static int num_mirrors
Definition: WarpX.H:557
std::vector< bool > getPMLdirections() const
Definition: WarpX.cpp:2823
amrex::MultiFab * get_pointer_face_areas(int lev, int direction) const
Definition: WarpX.H:488
amrex::Vector< std::unique_ptr< amrex::MultiFab > > phi_fp
Definition: WarpX.H:1325
void AddMagnetostaticFieldLabFrame()
Definition: MagnetostaticSolver.cpp:71
ParticleBoundaryBuffer & GetParticleBoundaryBuffer()
Definition: WarpX.H:103
void WriteUsedInputsFile() const
void AddSpaceChargeField(WarpXParticleContainer &pc)
Definition: ElectrostaticSolver.cpp:140
void OneStep_nosub(amrex::Real t)
Definition: WarpXEvolve.cpp:394
bool do_pml_divb_cleaning
Definition: WarpX.H:1423
amrex::Vector< int > getistep() const
Definition: WarpX.H:821
static int current_centering_noy
Order of finite centering of currents (from nodal grid to staggered grid), along y.
Definition: WarpX.H:265
void ReadParameters()
Definition: WarpX.cpp:483
static void ResetInstance()
Definition: WarpX.cpp:244
static void AddToMultiFabMap(const std::string &name, const std::unique_ptr< amrex::MultiFab > &mf)
Add the MultiFab to the map of MultiFabs.
Definition: WarpX.H:436
int verbose
Definition: WarpX.H:1484
amrex::Gpu::DeviceVector< amrex::Real > device_current_centering_stencil_coeffs_y
Definition: WarpX.H:1036
static bool add_external_E_field
Whether to apply the effect of an externally-defined electric field.
Definition: WarpX.H:126
amrex::MultiFab * get_pointer_Efield_aux(int lev, int direction) const
Definition: WarpX.H:467
void InitDiagnostics()
int MoveWindow(const int step, bool move_j)
Move the moving window.
Definition: WarpXMovingWindow.cpp:82
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > Efield_avg_cp
Definition: WarpX.H:1400
void InitLevelData(int lev, amrex::Real time)
This function initializes E, B, rho, and F, at all the levels of the multifab. rho and F are initiali...
const amrex::MultiFab & getrho_cp(int lev)
Definition: WarpX.H:496
amrex::Real load_balance_knapsack_factor
Definition: WarpX.H:1458
void setVectorPotentialBC(amrex::Vector< amrex::Array< std::unique_ptr< amrex::MultiFab >, 3 > > &A) const
Definition: MagnetostaticSolver.cpp:206
amrex::Vector< amrex::Real > load_balance_efficiency
Definition: WarpX.H:1466
static amrex::Real self_fields_required_precision
Definition: WarpX.H:879
static amrex::IntVect sort_bin_size
Definition: WarpX.H:330
static std::string str_Bx_ext_grid_function
String storing parser function to initialize x-component of the magnetic field on the grid.
Definition: WarpX.H:131
amrex::IntVect m_rho_nodal_flag
Definition: WarpX.H:358
static std::map< std::string, amrex::iMultiFab * > imultifab_map
Definition: WarpX.H:428
utils::parser::IntervalsParser load_balance_intervals
Definition: WarpX.H:1448
amrex::Vector< std::array< std::unique_ptr< amrex::iMultiFab >, 3 > > m_flag_ext_face
Definition: WarpX.H:1361
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > current_fp
Definition: WarpX.H:1326
static std::array< amrex::Real, 3 > LowerCorner(const amrex::Box &bx, const int lev, const amrex::Real time_shift_delta)
Return the lower corner of the box in real units.
Definition: WarpX.cpp:2654
utils::parser::IntervalsParser override_sync_intervals
Definition: WarpX.H:1481
void EvolveB(amrex::Real dt, DtType dt_type)
Definition: WarpXPushFieldsEM.cpp:794
std::unique_ptr< amrex::Parser > Bxfield_parser
User-defined parser to initialize x-component of the magnetic field on the grid.
Definition: WarpX.H:144
bool isAnyBoundaryPML()
Definition: WarpX.cpp:3064
utils::parser::IntervalsParser get_load_balance_intervals() const
returns the load balance interval
Definition: WarpX.H:651
void ComputeCostsHeuristic(amrex::Vector< std::unique_ptr< amrex::LayoutData< amrex::Real > > > &costs)
adds particle and cell contributions in cells to compute heuristic cost in each box on each level,...
Definition: WarpXRegrid.cpp:369
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > m_face_areas
EB: Areas of the mesh faces.
Definition: WarpX.H:1346
amrex::Real gett_old(int lev) const
Definition: WarpX.H:825
std::unique_ptr< amrex::Parser > Exfield_parser
User-defined parser to initialize x-component of the electric field on the grid.
Definition: WarpX.H:150
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > Bfield_cax
Definition: WarpX.H:1405
amrex::MultiFab * get_pointer_F_cp(int lev) const
Definition: WarpX.H:484
const amrex::MultiFab & getF_fp(int lev)
Definition: WarpX.H:505
void StoreCurrent(const int lev)
Definition: WarpX.cpp:3043
static int do_moving_window
Definition: WarpX.H:884
virtual void MakeNewLevelFromCoarse(int, amrex::Real, const amrex::BoxArray &, const amrex::DistributionMapping &) final
Definition: WarpX.cpp:1856
amrex::Real moving_window_x
Definition: WarpX.H:1432
amrex::MultiFab * get_pointer_Efield_cp(int lev, int direction) const
Definition: WarpX.H:480
void ReadExternalFieldFromFile(std::string read_fields_from_path, amrex::MultiFab *mf, std::string F_name, std::string F_component)
static std::string str_By_ext_grid_function
String storing parser function to initialize y-component of the magnetic field on the grid.
Definition: WarpX.H:133
int maxStep() const
Definition: WarpX.H:836
static int nox
Order of the particle shape factors (splines) along x.
Definition: WarpX.H:249
int getnsubsteps(int lev) const
Definition: WarpX.H:820
static void AllocInitMultiFab(std::unique_ptr< amrex::MultiFab > &mf, const amrex::BoxArray &ba, const amrex::DistributionMapping &dm, const int ncomp, const amrex::IntVect &ngrow, const std::string &name, std::optional< const amrex::Real > initial_value={})
Allocate and optionally initialize the MultiFab. This also adds the MultiFab to the map of MultiFabs ...
Definition: WarpX.cpp:3074
static amrex::Real quantum_xi_c2
Definition: WarpX.H:640
const amrex::IntVect getngF() const
Definition: WarpX.H:913
static void GotoNextLine(std::istream &is)
Definition: WarpXIO.cpp:54
void InitFromScratch()
static amrex::Vector< amrex::Real > getFornbergStencilCoefficients(const int n_order, const short a_grid_type)
Returns an array of coefficients (Fornberg coefficients), corresponding to the weight of each point i...
Definition: WarpX.cpp:2916
void AllocLevelData(int lev, const amrex::BoxArray &new_grids, const amrex::DistributionMapping &new_dmap)
Definition: WarpX.cpp:1926
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > Bfield_slice
Definition: WarpX.H:1526
void AverageAndPackFields(amrex::Vector< std::string > &varnames, amrex::Vector< amrex::MultiFab > &mf_avg, const amrex::IntVect ngrow) const
amrex::Vector< std::array< std::unique_ptr< amrex::iMultiFab >, 3 > > m_flag_info_face
Definition: WarpX.H:1354
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > current_fp_vay
Definition: WarpX.H:1327
static void AddToMultiFabMap(const std::string &name, const std::unique_ptr< amrex::iMultiFab > &mf)
Add the iMultiFab to the map of MultiFabs.
Definition: WarpX.H:446
void AddRhoFromFineLevelandSumBoundary(const amrex::Vector< std::unique_ptr< amrex::MultiFab >> &charge_fp, const amrex::Vector< std::unique_ptr< amrex::MultiFab >> &charge_cp, const int lev, const int icomp, const int ncomp)
Definition: WarpXComm.cpp:1186
void updateMaxStep(const int new_max_step)
Definition: WarpX.H:837
void PSATDMoveJNewToJOld()
Copy J_new to J_old in spectral space (when J is linear in time)
Definition: WarpXPushFieldsEM.cpp:576
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > Bfield_cp
Definition: WarpX.H:1399
static bool serialize_initial_conditions
If true, the initial conditions from random number generators are serialized (useful for reproducible...
Definition: WarpX.H:303
const amrex::iMultiFab * getGatherBufferMasks(int lev) const
Definition: WarpX.H:1244
std::unique_ptr< amrex::Parser > Bzfield_parser
User-defined parser to initialize z-component of the magnetic field on the grid.
Definition: WarpX.H:148
void doQEDEvents()
Definition: WarpXEvolve.cpp:930
amrex::Vector< std::unique_ptr< SpectralSolverRZ > > spectral_solver_fp
Definition: WarpX.H:1806
void ApplyInverseVolumeScalingToChargeDensity(amrex::MultiFab *Rho, int lev)
Definition: WarpXPushFieldsEM.cpp:1386
static amrex::IntVect m_fill_guards_fields
Whether to fill guard cells when computing inverse FFTs of fields.
Definition: WarpX.H:237
void CopyJPML()
Copy the current J from the regular grid to the PML.
Definition: WarpXEvolvePML.cpp:340
static short grid_type
Definition: WarpX.H:355
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > vector_potential_grad_buf_b_stag
Definition: WarpX.H:1337
void NodalSyncJ(const amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 >> &J_fp, const amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 >> &J_cp, const int lev, PatchType patch_type)
Definition: WarpXComm.cpp:1266
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > Efield_aux
Definition: WarpX.H:1318
const amrex::MultiFab & getEfield_cp(int lev, int direction)
Definition: WarpX.H:494
void PSATDCurrentCorrection()
Correct current in Fourier space so that the continuity equation is satisfied.
Definition: WarpXPushFieldsEM.cpp:404
static int current_centering_nox
Order of finite centering of currents (from nodal grid to staggered grid), along x.
Definition: WarpX.H:263
amrex::MultiFab * get_pointer_Bfield_aux(int lev, int direction) const
Definition: WarpX.H:468
static bool use_filter_compensation
If true, a compensation step is added to the bilinear filtering of charge and currents.
Definition: WarpX.H:300
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > vector_potential_grad_buf_e_stag
Definition: WarpX.H:1336
amrex::Vector< std::array< std::unique_ptr< amrex::LayoutData< FaceInfoBox > >, 3 > > m_borrowing
Definition: WarpX.H:1369
void PSATDPushSpectralFields()
Update all necessary fields in spectral space.
Definition: WarpXPushFieldsEM.cpp:546
static bool add_external_B_field
Whether to apply the effect of an externally-defined magnetic field.
Definition: WarpX.H:128
static short charge_deposition_algo
Integer that corresponds to the charge deposition algorithm (only standard deposition)
Definition: WarpX.H:160
void PushParticlesandDepose(int lev, amrex::Real cur_time, DtType a_dt_type=DtType::Full, bool skip_current=false)
Definition: WarpXEvolve.cpp:957
amrex::Real cfl
Definition: WarpX.H:1493
amrex::Real gett_new(int lev) const
Definition: WarpX.H:827
amrex::Vector< amrex::Real > dt
Definition: WarpX.H:1307
amrex::Vector< std::unique_ptr< amrex::MultiFab > > rho_slice
Definition: WarpX.H:1523
amrex::Vector< std::unique_ptr< amrex::MultiFab > > F_cp
Definition: WarpX.H:1394
int nox_fft
Definition: WarpX.H:1529
void UpdateAuxilaryData()
Definition: WarpXComm.cpp:53
int particle_io_nfiles
Definition: WarpX.H:1504
bool is_synchronized
Definition: WarpX.H:1509
amrex::Real current_injection_position
Definition: WarpX.H:1433
static WarpX & GetInstance()
Definition: WarpX.cpp:235
amrex::Real getcurrent_injection_position() const
Definition: WarpX.H:833
amrex::RealVect fine_tag_hi
Definition: WarpX.H:1507
static int start_moving_window_step
Definition: WarpX.H:885
PML_RZ * GetPML_RZ(int lev)
Definition: WarpX.cpp:2800
void PSATDForwardTransformF()
Forward FFT of F on all mesh refinement levels.
Definition: WarpXPushFieldsEM.cpp:180
int do_silver_mueller
Definition: WarpX.H:1415
void setPhiBC(amrex::Vector< std::unique_ptr< amrex::MultiFab > > &phi) const
Definition: ElectrostaticSolver.cpp:369
amrex::Vector< int > istep
Definition: WarpX.H:1302
static int electrostatic_solver_id
Definition: WarpX.H:876
void PrintMainPICparameters()
void FillBoundaryB(amrex::IntVect ng, std::optional< bool > nodal_sync=std::nullopt)
Definition: WarpXComm.cpp:476
void UpdatePlasmaInjectionPosition(amrex::Real dt)
Definition: WarpXMovingWindow.cpp:56
void RestrictRhoFromFineToCoarsePatch(const amrex::Vector< std::unique_ptr< amrex::MultiFab >> &charge_fp, const amrex::Vector< std::unique_ptr< amrex::MultiFab >> &charge_cp, const int lev)
Definition: WarpXComm.cpp:1128
const AcceleratorLattice & get_accelerator_lattice(int lev)
Definition: WarpX.H:1044
void HandleSignals()
Complete the asynchronous broadcast of signal flags, and initiate a checkpoint if requested.
Definition: WarpXEvolve.cpp:1098
amrex::Vector< std::unique_ptr< amrex::MultiFab > > G_slice
Definition: WarpX.H:1522
static int n_current_deposition_buffer
Definition: WarpX.H:351
static void AliasInitMultiFab(std::unique_ptr< amrex::MultiFab > &mf, const amrex::MultiFab &mf_to_alias, const int scomp, const int ncomp, const std::string &name, std::optional< const amrex::Real > initial_value)
Create an alias of a MultiFab, adding the alias to the MultiFab map.
Definition: WarpX.cpp:3110
amrex::Vector< std::unique_ptr< amrex::MultiFab > > F_fp
Definition: WarpX.H:1322
static amrex::Vector< int > field_boundary_hi
Definition: WarpX.H:186
void UpdateAuxilaryDataStagToNodal()
Definition: WarpXComm.cpp:65
int Verbose() const
Definition: WarpX.H:93
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > Efield_cax
Definition: WarpX.H:1404
amrex::Vector< std::unique_ptr< amrex::MultiFab > > charge_buf
Definition: WarpX.H:1411
amrex::DistributionMapping GetRestartDMap(const std::string &chkfile, const amrex::BoxArray &ba, int lev) const
Definition: WarpXIO.cpp:61
std::array< const amrex::MultiFab *const, 3 > get_array_Bfield_aux(const int lev) const
Definition: WarpX.H:451
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > m_edge_lengths
EB: Lengths of the mesh edges.
Definition: WarpX.H:1344
const amrex::iMultiFab * getCurrentBufferMasks(int lev) const
Definition: WarpX.H:1241
void ShiftGalileanBoundary()
This function shifts the boundary of the grid by 'm_v_galilean*dt'. In doding so, only positions attr...
Definition: WarpXMovingWindow.cpp:528
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > Efield_avg_fp
Definition: WarpX.H:1330
amrex::Vector< int > injected_plasma_species
Definition: WarpX.H:1438
static bool do_device_synchronize
Definition: WarpX.H:341
void Evolve(int numsteps=-1)
Definition: WarpXEvolve.cpp:60
void CheckGuardCells(amrex::MultiFab const &mf)
Check that the number of guard cells is smaller than the number of valid cells, for a given MultiFab,...
static bool use_kspace_filter
If true, the bilinear filtering of charge and currents is done in Fourier space.
Definition: WarpX.H:298
amrex::MultiFab * get_pointer_F_fp(int lev) const
Definition: WarpX.H:475
void InitNCICorrector()
int getistep(int lev) const
Definition: WarpX.H:822
std::unique_ptr< MultiDiagnostics > multi_diags
Definition: WarpX.H:1311
std::unique_ptr< amrex::Parser > Ezfield_parser
User-defined parser to initialize z-component of the electric field on the grid.
Definition: WarpX.H:154
static int noy
Order of the particle shape factors (splines) along y.
Definition: WarpX.H:251
void EvolveEM(int numsteps)
amrex::Vector< int > nsubsteps
Definition: WarpX.H:1303
void AddCurrentFromFineLevelandSumBoundary(const amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 >> &J_fp, const amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 >> &J_cp, const int lev)
Definition: WarpXComm.cpp:1051
void ComputeMaxStep()
Compute the last time step of the simulation Calls computeMaxStepBoostAccelerator() if required.
void SyncRho()
Definition: WarpXComm.cpp:905
int noz_fft
Definition: WarpX.H:1531
void PSATDForwardTransformRho(const amrex::Vector< std::unique_ptr< amrex::MultiFab >> &charge_fp, const amrex::Vector< std::unique_ptr< amrex::MultiFab >> &charge_cp, const int icomp, const int dcomp, const bool apply_kspace_filter=true)
Forward FFT of rho on all mesh refinement levels, with k-space filtering (if needed)
Definition: WarpXPushFieldsEM.cpp:368
void ApplyFilterJ(const amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 >> &current, const int lev, const int idim)
Definition: WarpXComm.cpp:962
static int field_centering_noz
Order of finite centering of fields (from staggered grid to nodal grid), along z.
Definition: WarpX.H:260
void sett_new(int lev, amrex::Real time)
Definition: WarpX.H:828
void computePhiTriDiagonal(const amrex::Vector< std::unique_ptr< amrex::MultiFab > > &rho, amrex::Vector< std::unique_ptr< amrex::MultiFab > > &phi) const
Definition: ElectrostaticSolver.cpp:677
amrex::Real load_balance_efficiency_ratio_threshold
Definition: WarpX.H:1464
void PSATDBackwardTransformEBavg(const amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 >> &E_avg_fp, const amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 >> &B_avg_fp, const amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 >> &E_avg_cp, const amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 >> &B_avg_cp)
Backward FFT of averaged E,B on all mesh refinement levels.
Definition: WarpXPushFieldsEM.cpp:154
void DampPML()
Definition: WarpXEvolvePML.cpp:43
static std::string PicsarVersion()
Version of PICSAR dependency.
Definition: WarpXVersion.cpp:27
static amrex::Real beta_boost
Beta value corresponding to the Lorentz factor of the boosted frame of the simulation.
Definition: WarpX.H:308
void FillBoundaryAux(amrex::IntVect ng)
Definition: WarpXComm.cpp:836
void PSATDBackwardTransformJ(const amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 >> &J_fp, const amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 >> &J_cp)
Backward FFT of J on all mesh refinement levels.
Definition: WarpXPushFieldsEM.cpp:332
void FillBoundaryB_avg(amrex::IntVect ng)
Definition: WarpXComm.cpp:512
void ShrinkBorrowing()
Shrink the vectors in the FaceInfoBoxes.
Definition: WarpXFaceExtensions.cpp:720
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > Efield_fp_external
Definition: WarpX.H:1340
void ComputeDivE(amrex::MultiFab &divE, const int lev)
Definition: WarpX.cpp:2784
amrex::MultiFab * get_pointer_G_cp(int lev) const
Definition: WarpX.H:485
void InitializeEBGridData(int lev)
This function initializes and calculates grid quantities used along with EBs such as edge lengths,...
void CheckGuardCells()
Check that the number of guard cells is smaller than the number of valid cells, for all available Mul...
static bool do_divb_cleaning
Solve additional Maxwell equation for G in order to control errors in magnetic Gauss' law.
Definition: WarpX.H:246
void NodalSyncRho(const amrex::Vector< std::unique_ptr< amrex::MultiFab >> &charge_fp, const amrex::Vector< std::unique_ptr< amrex::MultiFab >> &charge_cp, const int lev, PatchType patch_type, const int icomp, const int ncomp)
Definition: WarpXComm.cpp:1290
WarpX()
Definition: WarpX.cpp:250
const amrex::IntVect get_ng_depos_J() const
Definition: WarpX.H:915
int load_balance_with_sfc
Definition: WarpX.H:1453
amrex::Real getLoadBalanceEfficiency(const int lev)
Definition: WarpX.H:535
std::unique_ptr< MultiParticleContainer > mypc
Definition: WarpX.H:1310
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > current_buf
Definition: WarpX.H:1410
static bool use_filter
If true, a bilinear filter is used to smooth charge and currents.
Definition: WarpX.H:296
amrex::MultiFab * get_pointer_rho_fp(int lev) const
Definition: WarpX.H:474
static amrex::IntVect m_fill_guards_current
Whether to fill guard cells when computing inverse FFTs of currents.
Definition: WarpX.H:240
MacroscopicProperties & GetMacroscopicProperties()
Definition: WarpX.H:100
MagnetostaticSolver::VectorPoissonBoundaryHandler m_vector_poisson_boundary_handler
Definition: WarpX.H:953
const amrex::MultiFab & getG_cp(int lev)
Definition: WarpX.H:498
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > vector_potential_fp_nodal
Definition: WarpX.H:1335
ElectrostaticSolver::PoissonBoundaryHandler m_poisson_boundary_handler
Definition: WarpX.H:928
static amrex::IntVect shared_tilesize
tileSize to use for shared current deposition operations
Definition: WarpX.H:234
static int do_similar_dm_pml
Definition: WarpX.H:1421
static std::string str_Ey_ext_grid_function
String storing parser function to initialize y-component of the electric field on the grid.
Definition: WarpX.H:139
amrex::Vector< std::unique_ptr< FiniteDifferenceSolver > > m_fdtd_solver_fp
Definition: WarpX.H:1824
void ApplyInverseVolumeScalingToCurrentDensity(amrex::MultiFab *Jx, amrex::MultiFab *Jy, amrex::MultiFab *Jz, int lev)
Definition: WarpXPushFieldsEM.cpp:1213
amrex::Vector< amrex::Real > gett_old() const
Definition: WarpX.H:824
static int current_centering_noz
Order of finite centering of currents (from nodal grid to staggered grid), along z.
Definition: WarpX.H:267
static bool safe_guard_cells
Definition: WarpX.H:342
void PSATDScaleAverageFields(const amrex::Real scale_factor)
Scale averaged E,B fields to account for time integration.
Definition: WarpXPushFieldsEM.cpp:622
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > Efield_cp
Definition: WarpX.H:1398
amrex::Vector< std::unique_ptr< amrex::MultiFab > > rho_fp
Definition: WarpX.H:1324
int slice_plot_int
Definition: WarpX.H:1518
amrex::MultiFab * get_pointer_rho_cp(int lev) const
Definition: WarpX.H:483
void InitEB()
Definition: WarpXInitEB.cpp:81
void BackwardCompatibility()
Definition: WarpX.cpp:1605
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > Bfield_fp
Definition: WarpX.H:1329
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > ECTRhofield
Definition: WarpX.H:1378
void ApplyEfieldBoundary(const int lev, PatchType patch_type)
Definition: WarpXFieldBoundaries.cpp:20
int num_injected_species
Definition: WarpX.H:1437
void AllocLevelSpectralSolverRZ(amrex::Vector< std::unique_ptr< SpectralSolverRZ >> &spectral_solver, const int lev, const amrex::BoxArray &realspace_ba, const amrex::DistributionMapping &dm, const std::array< amrex::Real, 3 > &dx)
Definition: WarpX.cpp:2542
amrex::Vector< amrex::Real > t_old
Definition: WarpX.H:1306
static amrex::IntVect sort_idx_type
Specifies the type of grid used for the above sorting, i.e. cell-centered, nodal, or mixed.
Definition: WarpX.H:335
int regrid_int
Definition: WarpX.H:1491
bool use_single_write
Definition: WarpX.H:1501
static bool refine_plasma
Definition: WarpX.H:327
void SyncCurrent(const amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 >> &J_fp, const amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 >> &J_cp)
Apply filter and sum guard cells across MR levels. If current centering is used, center the current f...
Definition: WarpXComm.cpp:857
amrex::FabFactory< amrex::FArrayBox > const & fieldFactory(int lev) const noexcept
Definition: WarpX.H:1549
static int macroscopic_solver_algo
Definition: WarpX.H:176
bool use_single_read
Definition: WarpX.H:1500
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > Bfield_aux
Definition: WarpX.H:1319
amrex::IntVect numprocs
Domain decomposition on Level 0.
Definition: WarpX.H:1534
static int ncomps
Definition: WarpX.H:275
static int moving_window_active(int const step)
Definition: WarpX.H:892
void PSATDForwardTransformG()
Forward FFT of G on all mesh refinement levels.
Definition: WarpXPushFieldsEM.cpp:226
const bool sync_nodal_points
Definition: WarpX.H:1512
void DampPML_Cartesian(const int lev, PatchType patch_type)
Definition: WarpXEvolvePML.cpp:76
const amrex::IntVect getngUpdateAux() const
Definition: WarpX.H:914
int warpx_do_continuous_injection
Definition: WarpX.H:1436
static bool galerkin_interpolation
Definition: WarpX.H:289
static std::string str_Ez_ext_grid_function
String storing parser function to initialize z-component of the electric field on the grid.
Definition: WarpX.H:141
int do_pml_in_domain
Definition: WarpX.H:1420
void PSATDForwardTransformJ(const amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 >> &J_fp, const amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 >> &J_cp, const bool apply_kspace_filter=true)
Forward FFT of J on all mesh refinement levels, with k-space filtering (if needed)
Definition: WarpXPushFieldsEM.cpp:271
amrex::Vector< std::unique_ptr< NCIGodfreyFilter > > nci_godfrey_filter_bxbyez
Definition: WarpX.H:549
virtual void ErrorEst(int lev, amrex::TagBoxArray &tags, amrex::Real time, int) final
Tagging cells for refinement.
Definition: WarpXTagging.cpp:28
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > m_area_mod
Definition: WarpX.H:1365
void AllocLevelMFs(int lev, const amrex::BoxArray &ba, const amrex::DistributionMapping &dm, const amrex::IntVect &ngEB, amrex::IntVect &ngJ, const amrex::IntVect &ngRho, const amrex::IntVect &ngF, const amrex::IntVect &ngG, const bool aux_is_nodal)
Definition: WarpX.cpp:2006
void PrintDtDxDyDz()
Definition: WarpXComputeDt.cpp:92
virtual void MakeNewLevelFromScratch(int lev, amrex::Real time, const amrex::BoxArray &ba, const amrex::DistributionMapping &dm) final
Definition: WarpX.cpp:1847
static amrex::IntVect filter_npass_each_dir
Definition: WarpX.H:546
const amrex::MultiFab & getBfield_fp(int lev, int direction)
Definition: WarpX.H:502
void ComputeDistanceToEB()
Compute the length of the mesh edges. Here the length is a value in [0, 1]. An edge of length 0 is fu...
Definition: WarpXInitEB.cpp:408
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > Venl
Definition: WarpX.H:1382
void setLoadBalanceEfficiency(const int lev, const amrex::Real efficiency)
Definition: WarpX.H:524
static short electromagnetic_solver_id
Integer that corresponds to the type of Maxwell solver (Yee, CKC, PSATD, ECT)
Definition: WarpX.H:166
void InitPML()
PML * GetPML(int lev)
Definition: WarpX.cpp:2812
amrex::Real v_particle_pml
Definition: WarpX.H:1430
void OneStep_sub1(amrex::Real t)
Definition: WarpXEvolve.cpp:754
BilinearFilter bilinear_filter
Definition: WarpX.H:547
void FillBoundaryF(amrex::IntVect ng, std::optional< bool > nodal_sync=std::nullopt)
Definition: WarpXComm.cpp:494
amrex::MultiFab * get_pointer_current_fp_nodal(int lev, int direction) const
Definition: WarpX.H:473
bool fft_periodic_single_box
Definition: WarpX.H:1528
const amrex::MultiFab & getEfield_avg_fp(int lev, int direction)
Definition: WarpX.H:508
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > Bfield_avg_fp
Definition: WarpX.H:1331
const amrex::MultiFab & getBfield_avg_fp(int lev, int direction)
Definition: WarpX.H:509
static amrex::LayoutData< amrex::Real > * getCosts(int lev)
Definition: WarpX.cpp:2841
void PushPSATD()
Definition: WarpXPushFieldsEM.cpp:649
static int field_centering_noy
Order of finite centering of fields (from staggered grid to nodal grid), along y.
Definition: WarpX.H:258
int do_pml
Definition: WarpX.H:1414
static std::string str_Bz_ext_grid_function
String storing parser function to initialize z-component of the magnetic field on the grid.
Definition: WarpX.H:135
amrex::Real getdt(int lev) const
Definition: WarpX.H:830
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > Bfield_fp_external
Definition: WarpX.H:1341
static amrex::IntVect RefRatio(int lev)
Definition: WarpX.cpp:2704
int max_step
Definition: WarpX.H:1488
void ApplyBfieldBoundary(const int lev, PatchType patch_type, DtType dt_type)
Definition: WarpXFieldBoundaries.cpp:45
void EvolveG(amrex::Real dt, DtType dt_type)
Definition: WarpXPushFieldsEM.cpp:966
const amrex::MultiFab & getEfield_avg_cp(int lev, int direction)
Definition: WarpX.H:510
amrex::Real costs_heuristic_particles_wt
Definition: WarpX.H:1478
int pml_has_particles
Definition: WarpX.H:1418
amrex::Vector< std::unique_ptr< NCIGodfreyFilter > > nci_godfrey_filter_exeybz
Definition: WarpX.H:548
static bool do_current_centering
Definition: WarpX.H:211
amrex::Vector< amrex::Real > mirror_z
Definition: WarpX.H:558
amrex::Vector< std::unique_ptr< amrex::MultiFab > > F_slice
Definition: WarpX.H:1521
int getdo_moving_window() const
Definition: WarpX.H:831
static bool do_subcycling
Definition: WarpX.H:337
int pml_ncell
Definition: WarpX.H:1416
static void ComputeDivB(amrex::MultiFab &divB, int const dcomp, const std::array< const amrex::MultiFab *const, 3 > &B, const std::array< amrex::Real, 3 > &dx)
Definition: WarpX.cpp:2710
static int n_rz_azimuthal_modes
Number of modes for the RZ multi-mode version.
Definition: WarpX.H:270
static short J_in_time
Definition: WarpX.H:205
void PSATDBackwardTransformF()
Backward FFT of F on all mesh refinement levels.
Definition: WarpXPushFieldsEM.cpp:196
~WarpX()
Definition: WarpX.cpp:474
static amrex::Real gamma_boost
Lorentz factor of the boosted frame in which a boosted-frame simulation is run.
Definition: WarpX.H:306
static short field_gathering_algo
Integer that corresponds to the field gathering algorithm (energy-conserving, momentum-conserving)
Definition: WarpX.H:162
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > Bfield_avg_cp
Definition: WarpX.H:1401
static int shared_mem_current_tpb
number of threads to use per block in shared deposition
Definition: WarpX.H:231
static short load_balance_costs_update_algo
Definition: WarpX.H:170
amrex::MultiFab * get_pointer_Bfield_fp(int lev, int direction) const
Definition: WarpX.H:471
amrex::Vector< std::unique_ptr< FiniteDifferenceSolver > > m_fdtd_solver_cp
Definition: WarpX.H:1825
void ResetCosts()
resets costs to zero
Definition: WarpXRegrid.cpp:399
void InitBorrowing()
Initialize the memory for the FaceInfoBoxes.
Definition: WarpXFaceExtensions.cpp:258
void computeMaxStepBoostAccelerator()
void OneStep_multiJ(const amrex::Real t)
Perform one PIC iteration, with the multiple J deposition per time step.
Definition: WarpXEvolve.cpp:567
amrex::Vector< amrex::Real > mirror_z_width
Definition: WarpX.H:559
const amrex::MultiFab & getcurrent_fp(int lev, int direction)
Definition: WarpX.H:500
std::unique_ptr< MultiReducedDiags > reduced_diags
object with all reduced diagnotics, similar to MultiParticleContainer for species.
Definition: WarpX.H:563
const amrex::MultiFab & getBfield(int lev, int direction)
Definition: WarpX.H:491
void PerformanceHints()
void ApplyBCKCorrection(const int idim)
Whenever an unstable cell cannot be extended we increase its area to be the minimal for stability....
Definition: WarpXFaceExtensions.cpp:687
const amrex::MultiFab & getF_cp(int lev)
Definition: WarpX.H:497
amrex::Vector< std::unique_ptr< amrex::iMultiFab > > current_buffer_masks
Definition: WarpX.H:1406
const amrex::IntVect get_numprocs() const
Definition: WarpX.H:926
void ScrapeParticles()
amrex::MultiFab * get_pointer_Bfield_cp(int lev, int direction) const
Definition: WarpX.H:481
int slice_max_grid_size
Definition: WarpX.H:1517
static std::string B_ext_grid_s
Initialization type for external magnetic field on the grid.
Definition: WarpX.H:121
void PSATDEraseAverageFields()
Set averaged E,B fields to zero before new iteration.
Definition: WarpXPushFieldsEM.cpp:596
virtual void RemakeLevel(int lev, amrex::Real time, const amrex::BoxArray &ba, const amrex::DistributionMapping &dm) final
Definition: WarpXRegrid.cpp:161
amrex::Vector< std::unique_ptr< amrex::MultiFab > > G_cp
Definition: WarpX.H:1395
void FillBoundaryG(amrex::IntVect ng, std::optional< bool > nodal_sync=std::nullopt)
Definition: WarpXComm.cpp:503
const amrex::MultiFab & getEfield(int lev, int direction)
Definition: WarpX.H:490
void ComputeEightWaysExtensions()
Do the eight-ways extension.
Definition: WarpXFaceExtensions.cpp:529
void ApplyFilterandSumBoundaryRho(int lev, int glev, amrex::MultiFab &rho, int icomp, int ncomp)
Definition: WarpXComm.cpp:1155
std::unique_ptr< amrex::Parser > Eyfield_parser
User-defined parser to initialize y-component of the electric field on the grid.
Definition: WarpX.H:152
static amrex::Real self_fields_absolute_tolerance
Definition: WarpX.H:880
amrex::Vector< std::unique_ptr< AcceleratorLattice > > m_accelerator_lattice
Definition: WarpX.H:1540
void EvolveE(amrex::Real dt)
Definition: WarpXPushFieldsEM.cpp:843
static amrex::Vector< ParticleBoundaryType > particle_boundary_hi
Definition: WarpX.H:196
std::optional< amrex::Real > m_const_dt
Definition: WarpX.H:1440
static std::array< amrex::Real, 3 > UpperCorner(const amrex::Box &bx, const int lev, const amrex::Real time_shift_delta)
Return the upper corner of the box in real units.
Definition: WarpX.cpp:2679
void ComputeOneWayExtensions()
Do the one-way extension.
Definition: WarpXFaceExtensions.cpp:405
void Hybrid_QED_Push(amrex::Vector< amrex::Real > dt)
Definition: WarpX_QED_Field_Pushers.cpp:46
amrex::RealBox slice_realbox
Definition: WarpX.H:1519
amrex::Vector< amrex::IntVect > do_pml_Lo
Definition: WarpX.H:1424
void applyMirrors(amrex::Real time)
Definition: WarpXEvolve.cpp:1022
amrex::Vector< std::unique_ptr< SpectralSolverRZ > > spectral_solver_cp
Definition: WarpX.H:1807
amrex::Real getmoving_window_x() const
Definition: WarpX.H:832
amrex::Real costs_heuristic_cells_wt
Definition: WarpX.H:1472
static amrex::Vector< amrex::Real > E_external_grid
Initial electric field on the grid.
Definition: WarpX.H:116
bool do_pml_dive_cleaning
Definition: WarpX.H:1422
static std::string authors
Author of an input file / simulation setup.
Definition: WarpX.H:113
amrex::VisMF::Header::Version plotfile_headerversion
Definition: WarpX.H:1497
void AddBoundaryField()
Definition: ElectrostaticSolver.cpp:100
const PML_RZ * getPMLRZ()
Definition: WarpX.H:516
void ApplyRhofieldBoundary(const int lev, amrex::MultiFab *Rho, PatchType patch_type)
If a PEC boundary conditions is used the charge density deposited in the guard cells have to be refle...
Definition: WarpXFieldBoundaries.cpp:80
static bool compute_max_step_from_btd
If true, the code will compute max_step from the back transformed diagnostics.
Definition: WarpX.H:324
void computeE(amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > &E, const amrex::Vector< std::unique_ptr< amrex::MultiFab > > &phi, std::array< amrex::Real, 3 > const beta={{0, 0, 0}}) const
Definition: ElectrostaticSolver.cpp:450
bool current_correction
If true, a correction is applied to the current in Fourier space,.
Definition: WarpX.H:215
static const amrex::iMultiFab * CurrentBufferMasks(int lev)
Definition: WarpX.cpp:3031
void ComputePMLFactors()
static int end_moving_window_step
Definition: WarpX.H:886
static utils::parser::IntervalsParser sort_intervals
Definition: WarpX.H:329
void computeVectorPotential(const amrex::Vector< amrex::Array< std::unique_ptr< amrex::MultiFab >, 3 > > &curr, amrex::Vector< amrex::Array< std::unique_ptr< amrex::MultiFab >, 3 > > &A, amrex::Real const required_precision=amrex::Real(1.e-11), amrex::Real absolute_tolerance=amrex::Real(0.0), const int max_iters=200, const int verbosity=2) const
Definition: MagnetostaticSolver.cpp:142
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > Efield_fp
Definition: WarpX.H:1328
void ApplyJfieldBoundary(const int lev, amrex::MultiFab *Jx, amrex::MultiFab *Jy, amrex::MultiFab *Jz, PatchType patch_type)
If a PEC boundary conditions is used the current density deposited in the guard cells have to be refl...
Definition: WarpXFieldBoundaries.cpp:86
bool update_with_rho
Definition: WarpX.H:219
void LoadBalance()
perform load balance; compute and communicate new amrex::DistributionMapping
Definition: WarpXRegrid.cpp:51
amrex::Real time_of_last_gal_shift
Definition: WarpX.H:551
Definition: WarpXParticleContainer.H:104
Vector< Geometry > geom
This class computes and stores the number of guard cells needed for the allocation of the MultiFabs a...
Definition: GuardCellManager.H:20
amrex::IntVect ng_depos_rho
Definition: GuardCellManager.H:108
amrex::IntVect ng_depos_J
Definition: GuardCellManager.H:107
amrex::IntVect ng_alloc_F
Definition: GuardCellManager.H:85
amrex::IntVect ng_alloc_EB
Definition: GuardCellManager.H:79
amrex::IntVect ng_UpdateAux
Definition: GuardCellManager.H:100
amrex::IntVect ng_FieldGather
Definition: GuardCellManager.H:98
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:103
direction
Definition: AnyFFT.H:75
const int[]
std::array< T, N > Array
ii
Definition: check_interp_points_and_weights.py:148
cell_size
Definition: compute_domain.py:37
int dx
Definition: stencil.py:436
string name
Definition: stencil.py:452
string field
Definition: video_yt.py:31
int verbosity()