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 
26 #ifdef WARPX_USE_PSATD
27 # ifdef WARPX_DIM_RZ
30 # else
32 # endif
33 #endif
34 #include "Evolve/WarpXDtType.H"
37 #include "Filter/BilinearFilter.H"
42 
43 #include <AMReX.H>
44 #include <AMReX_AmrCore.H>
45 #include <AMReX_Array.H>
46 #include <AMReX_Config.H>
47 #ifdef AMREX_USE_EB
48 # include <AMReX_EBFabFactory.H>
49 #endif
50 #include <AMReX_GpuContainers.H>
51 #include <AMReX_IntVect.H>
52 #include <AMReX_LayoutData.H>
53 #include <AMReX_Parser.H>
54 #include <AMReX_REAL.H>
55 #include <AMReX_RealBox.H>
56 #include <AMReX_RealVect.H>
57 #include <AMReX_Vector.H>
58 #include <AMReX_VisMF.H>
59 
60 #include <AMReX_BaseFwd.H>
61 #include <AMReX_AmrCoreFwd.H>
62 
63 #include <array>
64 #include <iostream>
65 #include <limits>
66 #include <memory>
67 #include <optional>
68 #include <string>
69 #include <vector>
70 #include <map>
71 
72 enum struct PatchType : int
73 {
74  fine,
75  coarse
76 };
77 
78 class WarpX
79  : public amrex::AmrCore
80 {
81 public:
82 
83  friend class PML;
84 
85  static WarpX& GetInstance ();
86 
87  static void ResetInstance ();
88 
93  static void Finalize();
94 
96  ~WarpX ();
97 
99  WarpX ( WarpX const &) = delete;
101  WarpX& operator= ( WarpX const & ) = delete;
102 
104  WarpX ( WarpX && ) = default;
106  WarpX& operator= ( WarpX && ) = default;
107 
108  static std::string Version ();
109  static std::string PicsarVersion ();
110 
111  int Verbose () const { return verbose; }
112 
113  void InitData ();
114 
115  void Evolve (int numsteps = -1);
116 
121 
123 
124  static void shiftMF (amrex::MultiFab& mf, const amrex::Geometry& geom,
125  int num_shift, int dir, const int lev, bool update_cost_flag,
126  amrex::Real external_field=0.0, bool useparser = false,
127  amrex::ParserExecutor<3> const& field_parser={});
128 
130  static std::string authors;
131 
136 
138  static std::string B_ext_grid_s;
140  static std::string E_ext_grid_s;
141 
143  static bool add_external_E_field;
145  static bool add_external_B_field;
146 
148  static std::string str_Bx_ext_grid_function;
150  static std::string str_By_ext_grid_function;
152  static std::string str_Bz_ext_grid_function;
154  static std::string str_Ex_ext_grid_function;
156  static std::string str_Ey_ext_grid_function;
158  static std::string str_Ez_ext_grid_function;
159 
161  std::unique_ptr<amrex::Parser> Bxfield_parser;
163  std::unique_ptr<amrex::Parser> Byfield_parser;
165  std::unique_ptr<amrex::Parser> Bzfield_parser;
167  std::unique_ptr<amrex::Parser> Exfield_parser;
169  std::unique_ptr<amrex::Parser> Eyfield_parser;
171  std::unique_ptr<amrex::Parser> Ezfield_parser;
172 
173  // Algorithms
179  static short field_gathering_algo;
181  static short particle_pusher_algo;
189  static int em_solver_medium;
214 
218  static short psatd_solution_type;
219 
222  static short J_in_time;
223  static short rho_in_time;
224 
228  static bool do_current_centering;
229 
231  // to satisfy the continuity equation and charge conservation
233 
236  bool update_with_rho = false;
237 
240 
243 
246 
249 
252 
255 
258 
261  static bool do_dive_cleaning;
263  static bool do_divb_cleaning;
264 
266  static int nox;
268  static int noy;
270  static int noz;
271 
278 
285 
292  static int ncomps;
293 
296  static bool use_fdtd_nci_corr;
307 
311 
313  static bool use_filter;
315  static bool use_kspace_filter;
318 
321 
323  static amrex::Real gamma_boost;
325  static amrex::Real beta_boost;
338  static amrex::Real zmin_domain_boost_step_0;
339 
342 
344  static bool refine_plasma;
345 
348 
353 
354  static bool do_subcycling;
355  static bool do_multi_J;
357 
359  static bool safe_guard_cells;
360 
369 
372  static short grid_type;
373 
374  // Global rho nodal flag to know about rho index type when rho MultiFab is not allocated
376 
392  static void AllocInitMultiFab (
393  std::unique_ptr<amrex::MultiFab>& mf,
394  const amrex::BoxArray& ba,
395  const amrex::DistributionMapping& dm,
396  const int ncomp,
397  const amrex::IntVect& ngrow,
398  const int level,
399  const std::string& name,
400  std::optional<const amrex::Real> initial_value = {});
401 
417  static void AllocInitMultiFab (
418  std::unique_ptr<amrex::iMultiFab>& mf,
419  const amrex::BoxArray& ba,
420  const amrex::DistributionMapping& dm,
421  const int ncomp,
422  const amrex::IntVect& ngrow,
423  const int level,
424  const std::string& name,
425  std::optional<const int> initial_value = {});
426 
438  static void AliasInitMultiFab (
439  std::unique_ptr<amrex::MultiFab>& mf,
440  const amrex::MultiFab& mf_to_alias,
441  const int scomp,
442  const int ncomp,
443  const int level,
444  const std::string& name,
445  std::optional<const amrex::Real> initial_value);
446 
447  // Maps of all of the MultiFabs and iMultiFabs used (this can include MFs from other classes)
448  // This is a convenience for the Python interface, allowing all MultiFabs
449  // to be easily referenced from Python.
450  static std::map<std::string, amrex::MultiFab *> multifab_map;
451  static std::map<std::string, amrex::iMultiFab *> imultifab_map;
452 
459  static void AddToMultiFabMap(const std::string& name, const std::unique_ptr<amrex::MultiFab>& mf) {
460  multifab_map[name] = mf.get();
461  }
462 
469  static void AddToMultiFabMap(const std::string& name, const std::unique_ptr<amrex::iMultiFab>& mf) {
470  imultifab_map[name] = mf.get();
471  }
472 
473  std::array<const amrex::MultiFab* const, 3>
474  get_array_Bfield_aux (const int lev) const {
475  return {
476  Bfield_aux[lev][0].get(),
477  Bfield_aux[lev][1].get(),
478  Bfield_aux[lev][2].get()
479  };
480  }
481  std::array<const amrex::MultiFab* const, 3>
482  get_array_Efield_aux (const int lev) const {
483  return {
484  Efield_aux[lev][0].get(),
485  Efield_aux[lev][1].get(),
486  Efield_aux[lev][2].get()
487  };
488  }
489 
490  amrex::MultiFab * get_pointer_Efield_aux (int lev, int direction) const { return Efield_aux[lev][direction].get(); }
491  amrex::MultiFab * get_pointer_Bfield_aux (int lev, int direction) const { return Bfield_aux[lev][direction].get(); }
492 
493  amrex::MultiFab * get_pointer_Efield_fp (int lev, int direction) const { return Efield_fp[lev][direction].get(); }
494  amrex::MultiFab * get_pointer_Bfield_fp (int lev, int direction) const { return Bfield_fp[lev][direction].get(); }
495  amrex::MultiFab * get_pointer_current_fp (int lev, int direction) const { return current_fp[lev][direction].get(); }
496  amrex::MultiFab * get_pointer_current_fp_nodal (int lev, int direction) const { return current_fp_nodal[lev][direction].get(); }
497  amrex::MultiFab * get_pointer_rho_fp (int lev) const { return rho_fp[lev].get(); }
498  amrex::MultiFab * get_pointer_F_fp (int lev) const { return F_fp[lev].get(); }
499  amrex::MultiFab * get_pointer_G_fp (int lev) const { return G_fp[lev].get(); }
500  amrex::MultiFab * get_pointer_phi_fp (int lev) const { return phi_fp[lev].get(); }
502 
503  amrex::MultiFab * get_pointer_Efield_cp (int lev, int direction) const { return Efield_cp[lev][direction].get(); }
504  amrex::MultiFab * get_pointer_Bfield_cp (int lev, int direction) const { return Bfield_cp[lev][direction].get(); }
505  amrex::MultiFab * get_pointer_current_cp (int lev, int direction) const { return current_cp[lev][direction].get(); }
506  amrex::MultiFab * get_pointer_rho_cp (int lev) const { return rho_cp[lev].get(); }
507  amrex::MultiFab * get_pointer_F_cp (int lev) const { return F_cp[lev].get(); }
508  amrex::MultiFab * get_pointer_G_cp (int lev) const { return G_cp[lev].get(); }
509 
510  amrex::MultiFab * get_pointer_edge_lengths (int lev, int direction) const { return m_edge_lengths[lev][direction].get(); }
511  amrex::MultiFab * get_pointer_face_areas (int lev, int direction) const { return m_face_areas[lev][direction].get(); }
512 
513  const amrex::MultiFab& getEfield (int lev, int direction) {return *Efield_aux[lev][direction];}
514  const amrex::MultiFab& getBfield (int lev, int direction) {return *Bfield_aux[lev][direction];}
515 
516  const amrex::MultiFab& getcurrent_cp (int lev, int direction) {return *current_cp[lev][direction];}
517  const amrex::MultiFab& getEfield_cp (int lev, int direction) {return *Efield_cp[lev][direction];}
518  const amrex::MultiFab& getBfield_cp (int lev, int direction) {return *Bfield_cp[lev][direction];}
519  const amrex::MultiFab& getrho_cp (int lev) {return *rho_cp[lev];}
520  const amrex::MultiFab& getF_cp (int lev) {return *F_cp[lev];}
521  const amrex::MultiFab& getG_cp (int lev) {return *G_cp[lev];}
522 
523  const amrex::MultiFab& getcurrent_fp (int lev, int direction) {return *current_fp[lev][direction];}
524  const amrex::MultiFab& getEfield_fp (int lev, int direction) {return *Efield_fp[lev][direction];}
525  const amrex::MultiFab& getBfield_fp (int lev, int direction) {return *Bfield_fp[lev][direction];}
526  const amrex::MultiFab& getrho_fp (int lev) {return *rho_fp[lev];}
527  const amrex::MultiFab& getphi_fp (int lev) {return *phi_fp[lev];}
528  const amrex::MultiFab& getF_fp (int lev) {return *F_fp[lev];}
529  const amrex::MultiFab& getG_fp (int lev) {return *G_fp[lev];}
530 
531  const amrex::MultiFab& getEfield_avg_fp (int lev, int direction) {return *Efield_avg_fp[lev][direction];}
532  const amrex::MultiFab& getBfield_avg_fp (int lev, int direction) {return *Bfield_avg_fp[lev][direction];}
533  const amrex::MultiFab& getEfield_avg_cp (int lev, int direction) {return *Efield_avg_cp[lev][direction];}
534  const amrex::MultiFab& getBfield_avg_cp (int lev, int direction) {return *Bfield_avg_cp[lev][direction];}
535 
536  bool DoPML () const {return do_pml;}
537 
538 #if (defined WARPX_DIM_RZ) && (defined WARPX_USE_PSATD)
539  const PML_RZ* getPMLRZ() {return pml_rz[0].get();}
540 #endif
541 
543  std::vector<bool> getPMLdirections() const;
544 
545  static amrex::LayoutData<amrex::Real>* getCosts (int lev);
546 
547  void setLoadBalanceEfficiency (const int lev, const amrex::Real efficiency);
548 
549  amrex::Real getLoadBalanceEfficiency (const int lev);
550 
555 
556  amrex::Real time_of_last_gal_shift = 0;
559 
561 
562  static int num_mirrors;
566 
568  std::unique_ptr<MultiReducedDiags> reduced_diags;
569 
570  void applyMirrors(amrex::Real time);
571 
573  void ComputeDt ();
574 
577 
579  void WriteUsedInputsFile () const;
580 
582  void PrintDtDxDyDz ();
583 
589  void ComputeMaxStep ();
590  // Compute max_step automatically for simulations in a boosted frame.
592 
597  int MoveWindow (const int step, bool move_j);
598 
604  void ShiftGalileanBoundary ();
605  void UpdatePlasmaInjectionPosition (amrex::Real dt);
606  void ResetProbDomain (const amrex::RealBox& rb);
607  void EvolveE ( amrex::Real dt);
608  void EvolveE (int lev, amrex::Real dt);
609  void EvolveB ( amrex::Real dt, DtType dt_type);
610  void EvolveB (int lev, amrex::Real dt, DtType dt_type);
611  void EvolveF ( amrex::Real dt, DtType dt_type);
612  void EvolveF (int lev, amrex::Real dt, DtType dt_type);
613  void EvolveG ( amrex::Real dt, DtType dt_type);
614  void EvolveG (int lev, amrex::Real dt, DtType dt_type);
615  void EvolveB (int lev, PatchType patch_type, amrex::Real dt, DtType dt_type);
616  void EvolveE (int lev, PatchType patch_type, amrex::Real dt);
617  void EvolveF (int lev, PatchType patch_type, amrex::Real dt, DtType dt_type);
618  void EvolveG (int lev, PatchType patch_type, amrex::Real dt, DtType dt_type);
619 
620  void MacroscopicEvolveE ( amrex::Real dt);
621  void MacroscopicEvolveE (int lev, amrex::Real dt);
622  void MacroscopicEvolveE (int lev, PatchType patch_type, amrex::Real dt);
623 
629  void HybridPICEvolveFields ();
630 
639 
645 
651  void Hybrid_QED_Push (int lev, amrex::Real dt);
652 
659  void Hybrid_QED_Push (int lev, PatchType patch_type, amrex::Real dt);
660 
661  static amrex::Real quantum_xi_c2;
662 
665  void LoadBalance ();
668  void ResetCosts ();
669 
673  {
674  return load_balance_intervals;
675  }
676 
684  void DampFieldsInGuards (const int lev,
685  const std::array<std::unique_ptr<amrex::MultiFab>,3>& Efield,
686  const std::array<std::unique_ptr<amrex::MultiFab>,3>& Bfield);
687 
695  void DampFieldsInGuards (const int lev, std::unique_ptr<amrex::MultiFab>& mf);
696 
697 #ifdef WARPX_DIM_RZ
699  amrex::MultiFab* Jy,
700  amrex::MultiFab* Jz,
701  int lev);
702 
704  int lev);
705 #endif
706 
712  void ApplyRhofieldBoundary (const int lev, amrex::MultiFab* Rho,
713  PatchType patch_type);
714 
720  void ApplyJfieldBoundary (const int lev, amrex::MultiFab* Jx,
722  PatchType patch_type);
723 
724  void ApplyEfieldBoundary (const int lev, PatchType patch_type);
725  void ApplyBfieldBoundary (const int lev, PatchType patch_type, DtType dt_type);
726 
735  void ApplyElectronPressureBoundary (const int lev, PatchType patch_type);
736 
737  void DampPML ();
738  void DampPML (const int lev);
739  void DampPML (const int lev, PatchType patch_type);
740  void DampPML_Cartesian (const int lev, PatchType patch_type);
741 
742  void DampJPML ();
743  void DampJPML (int lev);
744  void DampJPML (int lev, PatchType patch_type);
745 
746  void CopyJPML ();
747  bool isAnyBoundaryPML();
748 
752  void NodalSyncPML ();
753 
757  void NodalSyncPML (int lev);
758 
762  void NodalSyncPML (int lev, PatchType patch_type);
763 
764  PML* GetPML (int lev);
765 #if (defined WARPX_DIM_RZ) && (defined WARPX_USE_PSATD)
766  PML_RZ* GetPML_RZ (int lev);
767 #endif
768 
770  void doFieldIonization ();
774  void doFieldIonization (int lev);
775 
776 #ifdef WARPX_QED
778  void doQEDEvents ();
782  void doQEDEvents (int lev);
783 #endif
784 
785  void PushParticlesandDepose (int lev, amrex::Real cur_time, DtType a_dt_type=DtType::Full, bool skip_current=false);
786  void PushParticlesandDepose ( amrex::Real cur_time, bool skip_current=false);
787 
788  // This function does aux(lev) = fp(lev) + I(aux(lev-1)-cp(lev)).
789  // Caller must make sure fp and cp have ghost cells filled.
790  void UpdateAuxilaryData ();
793 
803 
804  // Fill boundary cells including coarse/fine boundaries
805  void FillBoundaryB (amrex::IntVect ng, std::optional<bool> nodal_sync = std::nullopt);
806  void FillBoundaryE (amrex::IntVect ng, std::optional<bool> nodal_sync = std::nullopt);
809 
810  void FillBoundaryF (amrex::IntVect ng, std::optional<bool> nodal_sync = std::nullopt);
811  void FillBoundaryG (amrex::IntVect ng, std::optional<bool> nodal_sync = std::nullopt);
813  void FillBoundaryE (int lev, amrex::IntVect ng, std::optional<bool> nodal_sync = std::nullopt);
814  void FillBoundaryB (int lev, amrex::IntVect ng, std::optional<bool> nodal_sync = std::nullopt);
815  void FillBoundaryE_avg (int lev, amrex::IntVect ng);
816  void FillBoundaryB_avg (int lev, amrex::IntVect ng);
817 
818  void FillBoundaryF (int lev, amrex::IntVect ng, std::optional<bool> nodal_sync = std::nullopt);
819  void FillBoundaryG (int lev, amrex::IntVect ng, std::optional<bool> nodal_sync = std::nullopt);
820  void FillBoundaryAux (int lev, amrex::IntVect ng);
821 
828  void SyncCurrentAndRho ();
829 
842  void SyncCurrent (
843  const amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>,3>>& J_fp,
844  const amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>,3>>& J_cp,
845  const amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>,3>>& J_buffer);
846 
847  void SyncRho ();
848 
849  void SyncRho (
850  const amrex::Vector<std::unique_ptr<amrex::MultiFab>>& charge_fp,
851  const amrex::Vector<std::unique_ptr<amrex::MultiFab>>& charge_cp,
852  const amrex::Vector<std::unique_ptr<amrex::MultiFab>>& charge_buffer);
853 
855  int getnsubsteps (int lev) const {return nsubsteps[lev];}
856  amrex::Vector<int> getistep () const {return istep;}
857  int getistep (int lev) const {return istep[lev];}
858  void setistep (int lev, int ii) {istep[lev] = ii;}
860  amrex::Real gett_old (int lev) const {return t_old[lev];}
862  amrex::Real gett_new (int lev) const {return t_new[lev];}
863  void sett_new (int lev, amrex::Real time) {t_new[lev] = time;}
865  amrex::Real getdt (int lev) const {return dt[lev];}
866  int getdo_moving_window() const {return do_moving_window;}
867  amrex::Real getmoving_window_x() const {return moving_window_x;}
868  bool getis_synchronized() const {return is_synchronized;}
869 
870  int maxStep () const {return max_step;}
871  void updateMaxStep (const int new_max_step) {max_step = new_max_step;}
872  amrex::Real stopTime () const {return stop_time;}
873  void updateStopTime (const amrex::Real new_stop_time) {stop_time = new_stop_time;}
874 
876  amrex::Vector<amrex::MultiFab>& mf_avg, const amrex::IntVect ngrow) const;
877 
878  void prepareFields( int const step, amrex::Vector<std::string>& varnames,
881  amrex::Vector<amrex::Geometry>& output_geom ) const;
882 
883  static std::array<amrex::Real,3> CellSize (int lev);
884  static amrex::RealBox getRealBox(const amrex::Box& bx, int lev);
885 
894  static std::array<amrex::Real,3> LowerCorner (const amrex::Box& bx, const int lev, const amrex::Real time_shift_delta);
903  static std::array<amrex::Real,3> UpperCorner (const amrex::Box& bx, const int lev, const amrex::Real time_shift_delta);
904 
905  static amrex::IntVect RefRatio (int lev);
906 
907  static const amrex::iMultiFab* CurrentBufferMasks (int lev);
908  static const amrex::iMultiFab* GatherBufferMasks (int lev);
909 
911 
912  // Parameters for lab frame electrostatic
913  static amrex::Real self_fields_required_precision;
914  static amrex::Real self_fields_absolute_tolerance;
917 
918  static int do_moving_window; // boolean
919  static int start_moving_window_step; // the first step to move window
920  static int end_moving_window_step; // the last step to move window
926  static int moving_window_active (int const step) {
927  bool const step_before_end = (step < end_moving_window_step) || (end_moving_window_step < 0);
928  bool const step_after_start = (step >= start_moving_window_step);
929  return do_moving_window && step_before_end && step_after_start;
930  }
931  static int moving_window_dir;
932  static amrex::Real moving_window_v;
934 
935  // these should be private, but can't due to Cuda limitations
936  static void ComputeDivB (amrex::MultiFab& divB, int const dcomp,
937  const std::array<const amrex::MultiFab* const, 3>& B,
938  const std::array<amrex::Real,3>& dx);
939 
940  static void ComputeDivB (amrex::MultiFab& divB, int const dcomp,
941  const std::array<const amrex::MultiFab* const, 3>& B,
942  const std::array<amrex::Real,3>& dx, amrex::IntVect const ngrow);
943 
944  void ComputeDivE(amrex::MultiFab& divE, const int lev);
945 
946  const amrex::IntVect getngEB() const { return guard_cells.ng_alloc_EB; }
947  const amrex::IntVect getngF() const { return guard_cells.ng_alloc_F; }
952 
960  const amrex::IntVect get_numprocs() const {return numprocs;}
961 
963  void ComputeSpaceChargeField (bool const reset_fields);
964  void AddBoundaryField ();
967  void computePhi (const amrex::Vector<std::unique_ptr<amrex::MultiFab> >& rho,
968  amrex::Vector<std::unique_ptr<amrex::MultiFab> >& phi,
969  std::array<amrex::Real, 3> const beta = {{0,0,0}},
970  amrex::Real const required_precision=amrex::Real(1.e-11),
971  amrex::Real absolute_tolerance=amrex::Real(0.0),
972  const int max_iters=200,
973  const int verbosity=2) const;
974 
975  void setPhiBC (amrex::Vector<std::unique_ptr<amrex::MultiFab> >& phi ) const;
976 
977  void computeE (amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>, 3> >& E,
978  const amrex::Vector<std::unique_ptr<amrex::MultiFab> >& phi,
979  std::array<amrex::Real, 3> const beta = {{0,0,0}} ) const;
980  void computeB (amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>, 3> >& B,
981  const amrex::Vector<std::unique_ptr<amrex::MultiFab> >& phi,
982  std::array<amrex::Real, 3> const beta = {{0,0,0}} ) const;
983  void computePhiTriDiagonal (const amrex::Vector<std::unique_ptr<amrex::MultiFab> >& rho,
984  amrex::Vector<std::unique_ptr<amrex::MultiFab> >& phi) const;
985 
986  // Magnetostatic Solver Interface
990  void computeVectorPotential (const amrex::Vector<amrex::Array<std::unique_ptr<amrex::MultiFab>, 3> >& curr,
991  amrex::Vector<amrex::Array<std::unique_ptr<amrex::MultiFab>, 3> >& A,
992  amrex::Real const required_precision=amrex::Real(1.e-11),
993  amrex::Real absolute_tolerance=amrex::Real(0.0),
994  const int max_iters=200,
995  const int verbosity=2) const;
996 
997  void setVectorPotentialBC (amrex::Vector<amrex::Array<std::unique_ptr<amrex::MultiFab>, 3> >& A) const;
998 
1022  amrex::ParserExecutor<3> const& xfield_parser,
1023  amrex::ParserExecutor<3> const& yfield_parser,
1024  amrex::ParserExecutor<3> const& zfield_parser,
1025  std::array< std::unique_ptr<amrex::MultiFab>, 3 > const& edge_lengths,
1026  std::array< std::unique_ptr<amrex::MultiFab>, 3 > const& face_areas,
1027  const char field,
1028  const int lev, PatchType patch_type);
1029 
1031  std::string read_fields_from_path, amrex::MultiFab* mf,
1032  std::string F_name, std::string F_component);
1033 
1042  void InitializeEBGridData(int lev);
1043 
1050 
1051  void ApplyFilterandSumBoundaryRho (int lev, int glev, amrex::MultiFab& rho, int icomp, int ncomp);
1052 
1061  static amrex::Vector<amrex::Real> getFornbergStencilCoefficients(const int n_order, const short a_grid_type);
1062 
1063  // Device vectors of stencil coefficients used for finite-order centering of fields
1067 
1068  // Device vectors of stencil coefficients used for finite-order centering of currents
1072 
1073  // This needs to be public for CUDA.
1075  virtual void ErrorEst (int lev, amrex::TagBoxArray& tags, amrex::Real time, int /*ngrow*/) final;
1076 
1077  // Return the accelerator lattice instance defined at the given refinement level
1079 
1080 protected:
1081 
1107  void InitLevelData (int lev, amrex::Real time);
1108 
1111  virtual void PostProcessBaseGrids (amrex::BoxArray& ba0) const final;
1112 
1116  virtual void MakeNewLevelFromScratch (int lev, amrex::Real time, const amrex::BoxArray& ba,
1117  const amrex::DistributionMapping& dm) final;
1118 
1122  virtual void MakeNewLevelFromCoarse (int /*lev*/, amrex::Real /*time*/, const amrex::BoxArray& /*ba*/,
1123  const amrex::DistributionMapping& /*dm*/) final;
1124 
1128  virtual void RemakeLevel (int lev, amrex::Real time, const amrex::BoxArray& ba,
1129  const amrex::DistributionMapping& dm) final;
1130 
1132  virtual void ClearLevel (int lev) final;
1133 
1134 private:
1135 
1142  WarpX ();
1143 
1148  static void MakeWarpX ();
1149 
1150  // Singleton is used when the code is run from python
1152 
1154  static void CheckSignals ();
1156  void HandleSignals ();
1157 
1161  void EvolveEM(int numsteps);
1162 
1163  void FillBoundaryB (const int lev, const PatchType patch_type, const amrex::IntVect ng, std::optional<bool> nodal_sync = std::nullopt);
1164  void FillBoundaryE (const int lev, const PatchType patch_type, const amrex::IntVect ng, std::optional<bool> nodal_sync = std::nullopt);
1165  void FillBoundaryF (int lev, PatchType patch_type, amrex::IntVect ng, std::optional<bool> nodal_sync = std::nullopt);
1166  void FillBoundaryG (int lev, PatchType patch_type, amrex::IntVect ng, std::optional<bool> nodal_sync = std::nullopt);
1167 
1168  void FillBoundaryB_avg (int lev, PatchType patch_type, amrex::IntVect ng);
1169  void FillBoundaryE_avg (int lev, PatchType patch_type, amrex::IntVect ng);
1170 
1172 
1173  void OneStep_nosub (amrex::Real t);
1174  void OneStep_sub1 (amrex::Real t);
1175 
1179  void OneStep_multiJ (const amrex::Real t);
1180 
1182  const amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>,3>>& J_fp,
1183  const amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>,3>>& J_cp,
1184  const int lev);
1186  const amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>,3>>& J_fp,
1187  const amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>,3>>& J_cp,
1188  const amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>,3>>& J_buffer,
1189  const int lev);
1190  void StoreCurrent (const int lev);
1191  void RestoreCurrent (const int lev);
1192  void ApplyFilterJ (
1193  const amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>,3>>& current,
1194  const int lev,
1195  const int idim);
1196  void ApplyFilterJ (
1197  const amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>,3>>& current,
1198  const int lev);
1199  void SumBoundaryJ (
1200  const amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>,3>>& current,
1201  const int lev,
1202  const int idim,
1203  const amrex::Periodicity& period);
1204  void SumBoundaryJ (
1205  const amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>,3>>& current,
1206  const int lev,
1207  const amrex::Periodicity& period);
1208  void NodalSyncJ (
1209  const amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>,3>>& J_fp,
1210  const amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>,3>>& J_cp,
1211  const int lev,
1212  PatchType patch_type);
1213 
1215  const amrex::Vector<std::unique_ptr<amrex::MultiFab>>& charge_fp,
1216  const amrex::Vector<std::unique_ptr<amrex::MultiFab>>& charge_cp,
1217  const int lev);
1219  const amrex::Vector<std::unique_ptr<amrex::MultiFab>>& charge_fp,
1220  const amrex::Vector<std::unique_ptr<amrex::MultiFab>>& charge_cp,
1221  const int lev,
1222  PatchType patch_type,
1223  const int icomp,
1224  const int ncomp);
1226  const amrex::Vector<std::unique_ptr<amrex::MultiFab>>& charge_fp,
1227  const amrex::Vector<std::unique_ptr<amrex::MultiFab>>& charge_cp,
1228  const amrex::Vector<std::unique_ptr<amrex::MultiFab>>& charge_buffer,
1229  const int lev,
1230  const int icomp,
1231  const int ncomp);
1232  void NodalSyncRho (
1233  const amrex::Vector<std::unique_ptr<amrex::MultiFab>>& charge_fp,
1234  const amrex::Vector<std::unique_ptr<amrex::MultiFab>>& charge_cp,
1235  const int lev,
1236  PatchType patch_type,
1237  const int icomp,
1238  const int ncomp);
1239 
1240  void ReadParameters ();
1241 
1244  void BackwardCompatibility ();
1245 
1247 
1248  void AllocLevelData (int lev, const amrex::BoxArray& new_grids,
1249  const amrex::DistributionMapping& new_dmap);
1250 
1252  GetRestartDMap (const std::string& chkfile, const amrex::BoxArray& ba, int lev) const;
1253 
1254  void InitFromCheckpoint ();
1255  void PostRestart ();
1256 
1257  void InitPML ();
1259 
1260  void InitFilter ();
1261 
1263 
1265 
1271 
1276 
1279 
1280  void BuildBufferMasks ();
1281 public: // for cuda
1282  void BuildBufferMasksInBox ( const amrex::Box tbx, amrex::IArrayBox &buffer_mask,
1283  const amrex::IArrayBox &guard_mask, const int ng );
1284 private:
1285  const amrex::iMultiFab* getCurrentBufferMasks (int lev) const {
1286  return current_buffer_masks[lev].get();
1287  }
1288  const amrex::iMultiFab* getGatherBufferMasks (int lev) const {
1289  return gather_buffer_masks[lev].get();
1290  }
1291 
1302  amrex::Vector<amrex::Real>& unordered_coeffs,
1303  const int order);
1316  void AllocateCenteringCoefficients (amrex::Gpu::DeviceVector<amrex::Real>& device_centering_stencil_coeffs_x,
1317  amrex::Gpu::DeviceVector<amrex::Real>& device_centering_stencil_coeffs_y,
1318  amrex::Gpu::DeviceVector<amrex::Real>& device_centering_stencil_coeffs_z,
1319  const int centering_nox,
1320  const int centering_noy,
1321  const int centering_noz,
1322  const short a_grid_type);
1323 
1324  void AllocLevelMFs (int lev, const amrex::BoxArray& ba, const amrex::DistributionMapping& dm,
1325  const amrex::IntVect& ngEB, amrex::IntVect& ngJ,
1326  const amrex::IntVect& ngRho, const amrex::IntVect& ngF,
1327  const amrex::IntVect& ngG, const bool aux_is_nodal);
1328 
1329 #ifdef WARPX_USE_PSATD
1330 # ifdef WARPX_DIM_RZ
1331  void AllocLevelSpectralSolverRZ (amrex::Vector<std::unique_ptr<SpectralSolverRZ>>& spectral_solver,
1332  const int lev,
1333  const amrex::BoxArray& realspace_ba,
1334  const amrex::DistributionMapping& dm,
1335  const std::array<amrex::Real,3>& dx);
1336 # else
1337  void AllocLevelSpectralSolver (amrex::Vector<std::unique_ptr<SpectralSolver>>& spectral_solver,
1338  const int lev,
1339  const amrex::BoxArray& realspace_ba,
1340  const amrex::DistributionMapping& dm,
1341  const std::array<amrex::Real,3>& dx,
1342  const bool pml_flag=false);
1343 # endif
1344 #endif
1345 
1346  amrex::Vector<int> istep; // which step?
1347  amrex::Vector<int> nsubsteps; // how many substeps on each level?
1348 
1352 
1353  // Particle container
1354  std::unique_ptr<MultiParticleContainer> mypc;
1355  std::unique_ptr<MultiDiagnostics> multi_diags;
1356 
1357  //
1358  // Fields: First array for level, second for direction
1359  //
1360 
1361  // Full solution
1364 
1365  // Fine patch
1376 
1377  // Memory buffers for computing magnetostatic fields
1378  // Vector Potential A and previous step. Time buffer needed for computing dA/dt to first order
1382 
1383  // Same as Bfield_fp/Efield_fp for reading external field data
1386 
1391 
1414 
1427 
1428  //EB level set
1430 
1431  // store fine patch
1433 
1434  // Nodal MultiFab for nodal current deposition if warpx.do_current_centering = 1
1436 
1437  // Coarse patch
1446 
1447  // Copy of the coarse aux
1452 
1453  // If charge/current deposition buffers are used
1456 
1457  // PML
1458  int do_pml = 0;
1460  int pml_ncell = 10;
1461  int pml_delta = 10;
1465  static int do_similar_dm_pml;
1466  bool do_pml_dive_cleaning; // default set in WarpX.cpp
1467  bool do_pml_divb_cleaning; // default set in WarpX.cpp
1471 #if (defined WARPX_DIM_RZ) && (defined WARPX_USE_PSATD)
1473 #endif
1474  amrex::Real v_particle_pml;
1475 
1476  amrex::Real moving_window_x = std::numeric_limits<amrex::Real>::max();
1477 
1478  // Plasma injection parameters
1482 
1483  std::optional<amrex::Real> m_const_dt;
1484 
1485  // Macroscopic properties
1486  std::unique_ptr<MacroscopicProperties> m_macroscopic_properties;
1487 
1488  // Hybrid PIC algorithm parameters
1489  std::unique_ptr<HybridPICModel> m_hybrid_pic_model;
1490 
1491  // Load balancing
1504  amrex::Real load_balance_knapsack_factor = amrex::Real(1.24);
1510  amrex::Real load_balance_efficiency_ratio_threshold = amrex::Real(1.1);
1518  amrex::Real costs_heuristic_cells_wt = amrex::Real(0);
1524  amrex::Real costs_heuristic_particles_wt = amrex::Real(0);
1525 
1526  // Determines timesteps for override sync
1528 
1529  // Other runtime parameters
1530  int verbose = 1;
1531 
1532  bool use_hybrid_QED = 0;
1533 
1534  int max_step = std::numeric_limits<int>::max();
1535  amrex::Real stop_time = std::numeric_limits<amrex::Real>::max();
1536 
1537  int regrid_int = -1;
1538 
1539  amrex::Real cfl = amrex::Real(0.999);
1540 
1541  std::string restart_chkfile;
1542 
1545 
1546  bool use_single_read = true;
1547  bool use_single_write = true;
1549  int field_io_nfiles = 1024;
1551 
1554 
1555  bool is_synchronized = true;
1556 
1557  // Synchronization of nodal points
1558  static constexpr bool sync_nodal_points = true;
1559 
1561 
1562  //Slice Parameters
1564  int slice_plot_int = -1;
1573 
1575  int nox_fft = 16;
1576  int noy_fft = 16;
1577  int noz_fft = 16;
1578 
1581 
1583  std::unique_ptr<ParticleBoundaryBuffer> m_particle_boundary_buffer;
1584 
1585  // Accelerator lattice elements
1587 
1588  //
1589  // Embedded Boundary
1590  //
1591 
1592  // Factory for field data
1594 
1595  amrex::FabFactory<amrex::FArrayBox> const& fieldFactory (int lev) const noexcept {
1596  return *m_field_factory[lev];
1597  }
1598 #ifdef AMREX_USE_EB
1599 public:
1600  amrex::EBFArrayBoxFactory const& fieldEBFactory (int lev) const noexcept {
1601  return static_cast<amrex::EBFArrayBoxFactory const&>(*m_field_factory[lev]);
1602  }
1603 #endif
1604 
1605 public:
1606  void InitEB ();
1612 public:
1613 #ifdef AMREX_USE_EB
1614  static void ComputeEdgeLengths (std::array< std::unique_ptr<amrex::MultiFab>, 3 >& edge_lengths,
1615  const amrex::EBFArrayBoxFactory& eb_fact);
1620  static void ComputeFaceAreas (std::array< std::unique_ptr<amrex::MultiFab>, 3 >& face_areas,
1621  const amrex::EBFArrayBoxFactory& eb_fact);
1622 
1626  static void ScaleEdges (std::array< std::unique_ptr<amrex::MultiFab>, 3 >& edge_lengths,
1627  const std::array<amrex::Real,3>& cell_size);
1631  static void ScaleAreas (std::array< std::unique_ptr<amrex::MultiFab>, 3 >& face_areas,
1632  const std::array<amrex::Real,3>& cell_size);
1641  void MarkCells();
1645 #endif
1646  void ComputeDistanceToEB ();
1655  void ComputeFaceExtensions();
1659  void InitBorrowing();
1663  void ShrinkBorrowing();
1667  void ComputeOneWayExtensions();
1680  void ApplyBCKCorrection(const int idim);
1681 
1687 
1688 private:
1690 
1691  void PushPSATD ();
1692 
1693 #ifdef WARPX_USE_PSATD
1694 
1708  const amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>,3>>& E_fp,
1709  const amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>,3>>& B_fp,
1710  const amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>,3>>& E_cp,
1711  const amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>,3>>& B_cp);
1712 
1727  const amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>,3>>& E_fp,
1728  const amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>,3>>& B_fp,
1729  const amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>,3>>& E_cp,
1730  const amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>,3>>& B_cp);
1731 
1745  const amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>,3>>& E_avg_fp,
1746  const amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>,3>>& B_avg_fp,
1747  const amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>,3>>& E_avg_cp,
1748  const amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>,3>>& B_avg_cp);
1749 
1761  void PSATDForwardTransformJ (
1762  const amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>,3>>& J_fp,
1763  const amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>,3>>& J_cp,
1764  const bool apply_kspace_filter=true);
1765 
1775  const amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>,3>>& J_fp,
1776  const amrex::Vector<std::array<std::unique_ptr<amrex::MultiFab>,3>>& J_cp);
1777 
1790  const amrex::Vector<std::unique_ptr<amrex::MultiFab>>& charge_fp,
1791  const amrex::Vector<std::unique_ptr<amrex::MultiFab>>& charge_cp,
1792  const int icomp, const int dcomp, const bool apply_kspace_filter=true);
1793 
1797  void PSATDMoveRhoNewToRhoOld ();
1798 
1802  void PSATDMoveJNewToJOld ();
1803 
1807  void PSATDForwardTransformF ();
1808 
1812  void PSATDBackwardTransformF ();
1813 
1817  void PSATDForwardTransformG ();
1818 
1822  void PSATDBackwardTransformG ();
1823 
1827  void PSATDCurrentCorrection ();
1828 
1832  void PSATDVayDeposition ();
1833 
1837  void PSATDPushSpectralFields ();
1838 
1844  void PSATDScaleAverageFields (const amrex::Real scale_factor);
1845 
1849  void PSATDEraseAverageFields ();
1850 
1851 # ifdef WARPX_DIM_RZ
1854 # else
1857 # endif
1858 
1859 public:
1860 
1861 # ifdef WARPX_DIM_RZ
1863 # else
1865 # endif
1866  get_spectral_solver_fp (int lev) {return *spectral_solver_fp[lev];}
1867 #endif
1868 
1869 public:
1871 
1872 private:
1875 };
1876 
1877 #endif
PatchType
Definition: WarpX.H:73
DtType
Definition: WarpXDtType.H:11
Definition: AcceleratorLattice.H:21
Definition: BilinearFilter.H:17
Definition: ElectrostaticSolver.H:38
Top-level class for the electromagnetic finite-difference solver.
Definition: FiniteDifferenceSolver.H:34
This class contains the parameters needed to evaluate hybrid field solutions (kinetic ions with fluid...
Definition: HybridPICModel.H:30
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:80
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:1066
std::unique_ptr< ParticleBoundaryBuffer > m_particle_boundary_buffer
particle buffer for scraped particles on the boundaries
Definition: WarpX.H:1583
static int self_fields_max_iters
Definition: WarpX.H:915
void PSATDMoveRhoNewToRhoOld()
Copy rho_new to rho_old in spectral space (when rho is linear in time)
Definition: WarpXPushFieldsEM.cpp:561
const amrex::MultiFab & getrho_fp(int lev)
Definition: WarpX.H:526
static int field_centering_nox
Order of finite centering of fields (from staggered grid to nodal grid), along x.
Definition: WarpX.H:273
amrex::Vector< std::unique_ptr< amrex::LayoutData< amrex::Real > > > costs
Definition: WarpX.H:1497
static short current_deposition_algo
Integer that corresponds to the current deposition algorithm (Esirkepov, direct, Vay)
Definition: WarpX.H:175
amrex::Vector< std::unique_ptr< amrex::MultiFab > > G_fp
Definition: WarpX.H:1367
amrex::Gpu::DeviceVector< amrex::Real > device_field_centering_stencil_coeffs_y
Definition: WarpX.H:1065
static int moving_window_dir
Definition: WarpX.H:931
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, const amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 >> &J_buffer)
Apply filter and sum guard cells across MR levels. If current centering is used, center the current f...
Definition: WarpXComm.cpp:857
amrex::Gpu::DeviceVector< amrex::Real > device_current_centering_stencil_coeffs_x
Definition: WarpX.H:1069
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:278
void InitFilter()
void ComputeSpaceChargeField(bool const reset_fields)
Definition: ElectrostaticSolver.cpp:58
void BuildBufferMasks()
Definition: WarpX.cpp:2924
bool use_hybrid_QED
Definition: WarpX.H:1532
static bool do_dive_cleaning
Definition: WarpX.H:261
static amrex::Real zmax_plasma_to_compute_max_step
Definition: WarpX.H:331
void doFieldIonization()
Definition: WarpXEvolve.cpp:933
amrex::MultiFab * get_pointer_edge_lengths(int lev, int direction) const
Definition: WarpX.H:510
const amrex::IntVect get_ng_fieldgather() const
Definition: WarpX.H:951
amrex::MultiFab * get_pointer_Efield_fp(int lev, int direction) const
Definition: WarpX.H:493
const amrex::MultiFab & getEfield_fp(int lev, int direction)
Definition: WarpX.H:524
const amrex::IntVect getngEB() const
Definition: WarpX.H:946
static std::string Version()
Version of WarpX executable.
Definition: WarpXVersion.cpp:14
amrex::Vector< int > getnsubsteps() const
Definition: WarpX.H:854
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:355
std::unique_ptr< MacroscopicProperties > m_macroscopic_properties
Definition: WarpX.H:1486
MultiDiagnostics & GetMultiDiags()
Definition: WarpX.H:120
bool DoPML() const
Definition: WarpX.H:536
const amrex::MultiFab & getcurrent_cp(int lev, int direction)
Definition: WarpX.H:516
static short rho_in_time
Definition: WarpX.H:223
void UpdateAuxilaryDataSameType()
Definition: WarpXComm.cpp:274
static constexpr bool sync_nodal_points
Definition: WarpX.H:1558
virtual void PostProcessBaseGrids(amrex::BoxArray &ba0) const final
Definition: WarpXInitData.cpp:110
int pml_delta
Definition: WarpX.H:1461
amrex::Vector< std::unique_ptr< amrex::FabFactory< amrex::FArrayBox > > > m_field_factory
Definition: WarpX.H:1593
bool getis_synchronized() const
Definition: WarpX.H:868
int do_pml_j_damping
Definition: WarpX.H:1463
int noy_fft
Definition: WarpX.H:1576
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > current_cp
Definition: WarpX.H:1441
amrex::Vector< std::unique_ptr< amrex::MultiFab > > m_distance_to_eb
Definition: WarpX.H:1429
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > Efield_slice
Definition: WarpX.H:1571
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:1477
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:154
void ComputeFaceExtensions()
Main function computing the cell extension. Where possible it computes one-way extensions and,...
Definition: WarpXFaceExtensions.cpp:202
static void CheckSignals()
Check and clear signal flags and asynchronously broadcast them from process 0.
Definition: WarpXEvolve.cpp:1112
amrex::Vector< amrex::Real > m_v_galilean
Definition: WarpX.H:557
void DampJPML()
Definition: WarpXEvolvePML.cpp:220
static short psatd_solution_type
Definition: WarpX.H:218
void ResetProbDomain(const amrex::RealBox &rb)
Definition: WarpXMovingWindow.cpp:636
amrex::Vector< std::unique_ptr< amrex::iMultiFab > > gather_buffer_masks
Definition: WarpX.H:1451
void updateStopTime(const amrex::Real new_stop_time)
Definition: WarpX.H:873
std::array< const amrex::MultiFab *const, 3 > get_array_Efield_aux(const int lev) const
Definition: WarpX.H:482
amrex::Vector< int > mirror_z_npoints
Definition: WarpX.H:565
static amrex::Real zmin_domain_boost_step_0
Definition: WarpX.H:338
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > current_slice
Definition: WarpX.H:1570
static const amrex::iMultiFab * GatherBufferMasks(int lev)
Definition: WarpX.cpp:3108
static bool do_compute_max_step_from_zmax
Definition: WarpX.H:335
static amrex::Vector< int > field_boundary_lo
Definition: WarpX.H:198
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:350
SpectralSolverRZ & get_spectral_solver_fp(int lev)
Definition: WarpX.H:1866
static int n_field_gather_buffer
Definition: WarpX.H:364
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:414
static int do_multi_J_n_depositions
Definition: WarpX.H:356
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > current_fp_nodal
Definition: WarpX.H:1435
void MacroscopicEvolveE(amrex::Real dt)
Definition: WarpXPushFieldsEM.cpp:1011
amrex::Vector< amrex::Real > t_new
Definition: WarpX.H:1349
static bool do_single_precision_comms
perform field communications in single precision
Definition: WarpX.H:239
amrex::IntVect slice_cr_ratio
Definition: WarpX.H:1566
void SyncCurrentAndRho()
Synchronize J and rho: filter (if used), exchange guard cells, interpolate across MR levels and apply...
Definition: WarpXEvolve.cpp:518
int field_io_nfiles
Definition: WarpX.H:1549
static amrex::Vector< ParticleBoundaryType > particle_boundary_lo
Definition: WarpX.H:208
void AddSpaceChargeFieldLabFrame()
Definition: ElectrostaticSolver.cpp:196
static amrex::Vector< amrex::Real > B_external_grid
Initial magnetic field on the grid.
Definition: WarpX.H:135
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > current_store
Definition: WarpX.H:1432
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:1560
static bool do_shared_mem_charge_deposition
used shared memory algorithm for charge deposition
Definition: WarpX.H:242
amrex::VisMF::Header::Version slice_plotfile_headerversion
Definition: WarpX.H:1544
static int em_solver_medium
Integer that corresponds to electromagnetic Maxwell solver (vacuum - 0, macroscopic - 1)
Definition: WarpX.H:189
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:574
amrex::Real stop_time
Definition: WarpX.H:1535
MultiParticleContainer & GetPartContainer()
Definition: WarpX.H:117
static amrex::Vector< int > boost_direction
Direction of the Lorentz transform that defines the boosted frame of the simulation.
Definition: WarpX.H:327
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:296
static bool verboncoeur_axis_correction
Definition: WarpX.H:310
static amrex::Real moving_window_v
Definition: WarpX.H:932
static bool do_shared_mem_current_deposition
use shared memory algorithm for current deposition
Definition: WarpX.H:245
amrex::Vector< amrex::IntVect > do_pml_Hi
Definition: WarpX.H:1469
void setistep(int lev, int ii)
Definition: WarpX.H:858
amrex::MultiFab * get_pointer_vector_potential_fp(int lev, int direction) const
Definition: WarpX.H:501
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:2965
static bool fft_do_time_averaging
Definition: WarpX.H:933
void EvolveF(amrex::Real dt, DtType dt_type)
Definition: WarpXPushFieldsEM.cpp:917
static short particle_pusher_algo
Integer that corresponds to the particle push algorithm (Boris, Vay, Higuera-Cary)
Definition: WarpX.H:181
virtual void ClearLevel(int lev) final
Delete level data. Called by AmrCore::regrid.
Definition: WarpX.cpp:1896
amrex::Vector< std::unique_ptr< PML > > pml
Definition: WarpX.H:1470
void FillBoundaryE_avg(amrex::IntVect ng)
Definition: WarpXComm.cpp:521
amrex::RealVect fine_tag_lo
Definition: WarpX.H:1552
std::string restart_chkfile
Definition: WarpX.H:1541
static WarpX * m_instance
Definition: WarpX.H:1151
const amrex::MultiFab & getG_fp(int lev)
Definition: WarpX.H:529
amrex::Vector< std::unique_ptr< amrex::MultiFab > > rho_cp
Definition: WarpX.H:1440
amrex::MultiFab * get_pointer_G_fp(int lev) const
Definition: WarpX.H:499
static amrex::RealBox getRealBox(const amrex::Box &bx, int lev)
Definition: WarpX.cpp:2693
static bool do_dynamic_scheduling
Definition: WarpX.H:343
void PostRestart()
const amrex::MultiFab & getBfield_cp(int lev, int direction)
Definition: WarpX.H:518
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:3030
void InitFromCheckpoint()
Definition: WarpXIO.cpp:88
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:1150
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:1101
static std::array< amrex::Real, 3 > CellSize(int lev)
Definition: WarpX.cpp:2679
static std::string E_ext_grid_s
Initialization type for external electric field on the grid.
Definition: WarpX.H:140
amrex::Gpu::DeviceVector< amrex::Real > device_field_centering_stencil_coeffs_z
Definition: WarpX.H:1066
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:3043
amrex::MultiFab * get_pointer_phi_fp(int lev) const
Definition: WarpX.H:500
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:916
amrex::Real stopTime() const
Definition: WarpX.H:872
std::unique_ptr< amrex::Parser > Byfield_parser
User-defined parser to initialize y-component of the magnetic field on the grid.
Definition: WarpX.H:163
amrex::Vector< std::unique_ptr< PML_RZ > > pml_rz
Definition: WarpX.H:1472
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:166
const amrex::MultiFab & getphi_fp(int lev)
Definition: WarpX.H:527
amrex::Vector< amrex::Real > m_v_comoving
Definition: WarpX.H:560
void InitData()
static std::map< std::string, amrex::MultiFab * > multifab_map
Definition: WarpX.H:450
void RestoreCurrent(const int lev)
Definition: WarpX.cpp:3125
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:558
amrex::Gpu::DeviceVector< amrex::Real > device_field_centering_stencil_coeffs_x
Definition: WarpX.H:1064
amrex::MultiFab * get_pointer_current_fp(int lev, int direction) const
Definition: WarpX.H:495
std::unique_ptr< HybridPICModel > m_hybrid_pic_model
Definition: WarpX.H:1489
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:950
amrex::MultiFab * get_pointer_current_cp(int lev, int direction) const
Definition: WarpX.H:505
amrex::Vector< amrex::Real > getdt() const
Definition: WarpX.H:864
static int noz
Order of the particle shape factors (splines) along z.
Definition: WarpX.H:270
amrex::Gpu::DeviceVector< amrex::Real > device_current_centering_stencil_coeffs_z
Definition: WarpX.H:1071
amrex::Vector< amrex::Real > gett_new() const
Definition: WarpX.H:861
const amrex::MultiFab & getBfield_avg_cp(int lev, int direction)
Definition: WarpX.H:534
int mffile_nstreams
Definition: WarpX.H:1548
static int num_mirrors
Definition: WarpX.H:562
std::vector< bool > getPMLdirections() const
Definition: WarpX.cpp:2870
void ApplyElectronPressureBoundary(const int lev, PatchType patch_type)
When the Ohm's law solver is used, the electron pressure values on PEC boundaries are set to enforce ...
Definition: WarpXFieldBoundaries.cpp:94
amrex::MultiFab * get_pointer_face_areas(int lev, int direction) const
Definition: WarpX.H:511
amrex::Vector< std::unique_ptr< amrex::MultiFab > > phi_fp
Definition: WarpX.H:1369
void AddMagnetostaticFieldLabFrame()
Definition: MagnetostaticSolver.cpp:71
ParticleBoundaryBuffer & GetParticleBoundaryBuffer()
Definition: WarpX.H:122
void WriteUsedInputsFile() const
void AddSpaceChargeField(WarpXParticleContainer &pc)
Definition: ElectrostaticSolver.cpp:141
void OneStep_nosub(amrex::Real t)
Definition: WarpXEvolve.cpp:413
bool do_pml_divb_cleaning
Definition: WarpX.H:1467
amrex::Vector< int > getistep() const
Definition: WarpX.H:856
static int current_centering_noy
Order of finite centering of currents (from nodal grid to staggered grid), along y.
Definition: WarpX.H:282
void ReadParameters()
Definition: WarpX.cpp:513
static void ResetInstance()
Definition: WarpX.cpp:259
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:459
int verbose
Definition: WarpX.H:1530
amrex::Gpu::DeviceVector< amrex::Real > device_current_centering_stencil_coeffs_y
Definition: WarpX.H:1070
static bool add_external_E_field
Whether to apply the effect of an externally-defined electric field.
Definition: WarpX.H:143
amrex::MultiFab * get_pointer_Efield_aux(int lev, int direction) const
Definition: WarpX.H:490
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 amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 >> &J_buffer, const int lev)
Definition: WarpXComm.cpp:1212
void InitDiagnostics()
int MoveWindow(const int step, bool move_j)
Move the moving window.
Definition: WarpXMovingWindow.cpp:128
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > Efield_avg_cp
Definition: WarpX.H:1444
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:519
amrex::Real load_balance_knapsack_factor
Definition: WarpX.H:1504
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:1512
static amrex::Real self_fields_required_precision
Definition: WarpX.H:913
static amrex::IntVect sort_bin_size
Definition: WarpX.H:347
WarpX(WarpX &&)=default
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:148
amrex::IntVect m_rho_nodal_flag
Definition: WarpX.H:375
static std::map< std::string, amrex::iMultiFab * > imultifab_map
Definition: WarpX.H:451
utils::parser::IntervalsParser load_balance_intervals
Definition: WarpX.H:1494
amrex::Vector< std::array< std::unique_ptr< amrex::iMultiFab >, 3 > > m_flag_ext_face
Definition: WarpX.H:1405
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > current_fp
Definition: WarpX.H:1370
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:2701
utils::parser::IntervalsParser override_sync_intervals
Definition: WarpX.H:1527
void EvolveB(amrex::Real dt, DtType dt_type)
Definition: WarpXPushFieldsEM.cpp:795
std::unique_ptr< amrex::Parser > Bxfield_parser
User-defined parser to initialize x-component of the magnetic field on the grid.
Definition: WarpX.H:161
bool isAnyBoundaryPML()
Definition: WarpX.cpp:3135
utils::parser::IntervalsParser get_load_balance_intervals() const
returns the load balance interval
Definition: WarpX.H:672
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:370
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > m_face_areas
EB: Areas of the mesh faces.
Definition: WarpX.H:1390
amrex::Real gett_old(int lev) const
Definition: WarpX.H:860
std::unique_ptr< amrex::Parser > Exfield_parser
User-defined parser to initialize x-component of the electric field on the grid.
Definition: WarpX.H:167
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > Bfield_cax
Definition: WarpX.H:1449
amrex::MultiFab * get_pointer_F_cp(int lev) const
Definition: WarpX.H:507
const amrex::MultiFab & getF_fp(int lev)
Definition: WarpX.H:528
void StoreCurrent(const int lev)
Definition: WarpX.cpp:3114
static int do_moving_window
Definition: WarpX.H:918
virtual void MakeNewLevelFromCoarse(int, amrex::Real, const amrex::BoxArray &, const amrex::DistributionMapping &) final
Definition: WarpX.cpp:1889
amrex::Real moving_window_x
Definition: WarpX.H:1476
amrex::MultiFab * get_pointer_Efield_cp(int lev, int direction) const
Definition: WarpX.H:503
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:150
int maxStep() const
Definition: WarpX.H:870
static int nox
Order of the particle shape factors (splines) along x.
Definition: WarpX.H:266
int getnsubsteps(int lev) const
Definition: WarpX.H:855
WarpX(WarpX const &)=delete
static amrex::Real quantum_xi_c2
Definition: WarpX.H:661
const amrex::IntVect getngF() const
Definition: WarpX.H:947
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:2987
void AllocLevelData(int lev, const amrex::BoxArray &new_grids, const amrex::DistributionMapping &new_dmap)
Definition: WarpX.cpp:1964
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > Bfield_slice
Definition: WarpX.H:1572
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:1398
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > current_fp_vay
Definition: WarpX.H:1371
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:469
void updateMaxStep(const int new_max_step)
Definition: WarpX.H:871
HybridPICModel & GetHybridPICModel()
Definition: WarpX.H:119
void PSATDMoveJNewToJOld()
Copy J_new to J_old in spectral space (when J is linear in time)
Definition: WarpXPushFieldsEM.cpp:577
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > Bfield_cp
Definition: WarpX.H:1443
static bool serialize_initial_conditions
If true, the initial conditions from random number generators are serialized (useful for reproducible...
Definition: WarpX.H:320
const amrex::iMultiFab * getGatherBufferMasks(int lev) const
Definition: WarpX.H:1288
std::unique_ptr< amrex::Parser > Bzfield_parser
User-defined parser to initialize z-component of the magnetic field on the grid.
Definition: WarpX.H:165
void doQEDEvents()
Definition: WarpXEvolve.cpp:950
amrex::Vector< std::unique_ptr< SpectralSolverRZ > > spectral_solver_fp
Definition: WarpX.H:1852
void ApplyInverseVolumeScalingToChargeDensity(amrex::MultiFab *Rho, int lev)
Definition: WarpXPushFieldsEM.cpp:1387
static amrex::IntVect m_fill_guards_fields
Whether to fill guard cells when computing inverse FFTs of fields.
Definition: WarpX.H:254
void CopyJPML()
Copy the current J from the regular grid to the PML.
Definition: WarpXEvolvePML.cpp:340
static short grid_type
Definition: WarpX.H:372
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > vector_potential_grad_buf_b_stag
Definition: WarpX.H:1381
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:1429
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > Efield_aux
Definition: WarpX.H:1362
const amrex::MultiFab & getEfield_cp(int lev, int direction)
Definition: WarpX.H:517
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:280
amrex::MultiFab * get_pointer_Bfield_aux(int lev, int direction) const
Definition: WarpX.H:491
static bool use_filter_compensation
If true, a compensation step is added to the bilinear filtering of charge and currents.
Definition: WarpX.H:317
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > vector_potential_grad_buf_e_stag
Definition: WarpX.H:1380
amrex::Vector< std::array< std::unique_ptr< amrex::LayoutData< FaceInfoBox > >, 3 > > m_borrowing
Definition: WarpX.H:1413
void PSATDPushSpectralFields()
Update all necessary fields in spectral space.
Definition: WarpXPushFieldsEM.cpp:547
static bool add_external_B_field
Whether to apply the effect of an externally-defined magnetic field.
Definition: WarpX.H:145
static short charge_deposition_algo
Integer that corresponds to the charge deposition algorithm (only standard deposition)
Definition: WarpX.H:177
void PushParticlesandDepose(int lev, amrex::Real cur_time, DtType a_dt_type=DtType::Full, bool skip_current=false)
Definition: WarpXEvolve.cpp:977
amrex::Real cfl
Definition: WarpX.H:1539
amrex::Real gett_new(int lev) const
Definition: WarpX.H:862
amrex::Vector< amrex::Real > dt
Definition: WarpX.H:1351
amrex::Vector< std::unique_ptr< amrex::MultiFab > > rho_slice
Definition: WarpX.H:1569
amrex::Vector< std::unique_ptr< amrex::MultiFab > > F_cp
Definition: WarpX.H:1438
void HybridPICEvolveFields()
Hybrid-PIC field evolve function. This function contains the logic involved in evolving the electric ...
Definition: WarpXPushFieldsHybridPIC.cpp:18
int nox_fft
Definition: WarpX.H:1575
void UpdateAuxilaryData()
Definition: WarpXComm.cpp:53
int particle_io_nfiles
Definition: WarpX.H:1550
bool is_synchronized
Definition: WarpX.H:1555
static void Finalize()
This method has to be called at the end of the simulation. It deletes the WarpX instance.
Definition: WarpX.cpp:268
static WarpX & GetInstance()
Definition: WarpX.cpp:250
amrex::RealVect fine_tag_hi
Definition: WarpX.H:1553
static int start_moving_window_step
Definition: WarpX.H:919
PML_RZ * GetPML_RZ(int lev)
Definition: WarpX.cpp:2847
void PSATDForwardTransformF()
Forward FFT of F on all mesh refinement levels.
Definition: WarpXPushFieldsEM.cpp:180
int do_silver_mueller
Definition: WarpX.H:1459
void setPhiBC(amrex::Vector< std::unique_ptr< amrex::MultiFab > > &phi) const
Definition: ElectrostaticSolver.cpp:375
amrex::Vector< int > istep
Definition: WarpX.H:1346
static int electrostatic_solver_id
Definition: WarpX.H:910
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:1290
const AcceleratorLattice & get_accelerator_lattice(int lev)
Definition: WarpX.H:1078
void HandleSignals()
Complete the asynchronous broadcast of signal flags, and initiate a checkpoint if requested.
Definition: WarpXEvolve.cpp:1118
amrex::Vector< std::unique_ptr< amrex::MultiFab > > G_slice
Definition: WarpX.H:1568
static int n_current_deposition_buffer
Definition: WarpX.H:368
amrex::Vector< std::unique_ptr< amrex::MultiFab > > F_fp
Definition: WarpX.H:1366
static amrex::Vector< int > field_boundary_hi
Definition: WarpX.H:203
void UpdateAuxilaryDataStagToNodal()
Definition: WarpXComm.cpp:65
int Verbose() const
Definition: WarpX.H:111
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > Efield_cax
Definition: WarpX.H:1448
amrex::Vector< std::unique_ptr< amrex::MultiFab > > charge_buf
Definition: WarpX.H:1455
amrex::DistributionMapping GetRestartDMap(const std::string &chkfile, const amrex::BoxArray &ba, int lev) const
Definition: WarpXIO.cpp:55
std::array< const amrex::MultiFab *const, 3 > get_array_Bfield_aux(const int lev) const
Definition: WarpX.H:474
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > m_edge_lengths
EB: Lengths of the mesh edges.
Definition: WarpX.H:1388
const amrex::iMultiFab * getCurrentBufferMasks(int lev) const
Definition: WarpX.H:1285
void ShiftGalileanBoundary()
This function shifts the boundary of the grid by 'm_v_galilean*dt'. In doding so, only positions attr...
Definition: WarpXMovingWindow.cpp:585
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > Efield_avg_fp
Definition: WarpX.H:1374
amrex::Vector< int > injected_plasma_species
Definition: WarpX.H:1481
static bool do_device_synchronize
Definition: WarpX.H:358
void Evolve(int numsteps=-1)
Definition: WarpXEvolve.cpp:61
static bool use_kspace_filter
If true, the bilinear filtering of charge and currents is done in Fourier space.
Definition: WarpX.H:315
amrex::MultiFab * get_pointer_F_fp(int lev) const
Definition: WarpX.H:498
void InitNCICorrector()
int getistep(int lev) const
Definition: WarpX.H:857
std::unique_ptr< MultiDiagnostics > multi_diags
Definition: WarpX.H:1355
std::unique_ptr< amrex::Parser > Ezfield_parser
User-defined parser to initialize z-component of the electric field on the grid.
Definition: WarpX.H:171
static int noy
Order of the particle shape factors (splines) along y.
Definition: WarpX.H:268
void EvolveEM(int numsteps)
amrex::Vector< int > nsubsteps
Definition: WarpX.H:1347
void ComputeMaxStep()
Compute the last time step of the simulation Calls computeMaxStepBoostAccelerator() if required.
void SyncRho()
Definition: WarpXComm.cpp:1019
int noz_fft
Definition: WarpX.H:1577
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:1123
static int field_centering_noz
Order of finite centering of fields (from staggered grid to nodal grid), along z.
Definition: WarpX.H:277
void sett_new(int lev, amrex::Real time)
Definition: WarpX.H:863
void computePhiTriDiagonal(const amrex::Vector< std::unique_ptr< amrex::MultiFab > > &rho, amrex::Vector< std::unique_ptr< amrex::MultiFab > > &phi) const
Definition: ElectrostaticSolver.cpp:683
amrex::Real load_balance_efficiency_ratio_threshold
Definition: WarpX.H:1510
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:325
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:739
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > Efield_fp_external
Definition: WarpX.H:1384
void ComputeDivE(amrex::MultiFab &divE, const int lev)
Definition: WarpX.cpp:2831
amrex::MultiFab * get_pointer_G_cp(int lev) const
Definition: WarpX.H:508
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:263
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:1453
WarpX()
WarpX constructor. This method should not be called directly, but rather through the static member fu...
Definition: WarpX.cpp:273
const amrex::IntVect get_ng_depos_J() const
Definition: WarpX.H:949
int load_balance_with_sfc
Definition: WarpX.H:1499
amrex::Real getLoadBalanceEfficiency(const int lev)
Definition: WarpX.cpp:2912
std::unique_ptr< MultiParticleContainer > mypc
Definition: WarpX.H:1354
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > current_buf
Definition: WarpX.H:1454
static bool use_filter
If true, a bilinear filter is used to smooth charge and currents.
Definition: WarpX.H:313
amrex::MultiFab * get_pointer_rho_fp(int lev) const
Definition: WarpX.H:497
static amrex::IntVect m_fill_guards_current
Whether to fill guard cells when computing inverse FFTs of currents.
Definition: WarpX.H:257
MacroscopicProperties & GetMacroscopicProperties()
Definition: WarpX.H:118
MagnetostaticSolver::VectorPoissonBoundaryHandler m_vector_poisson_boundary_handler
Definition: WarpX.H:987
const amrex::MultiFab & getG_cp(int lev)
Definition: WarpX.H:521
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > vector_potential_fp_nodal
Definition: WarpX.H:1379
ElectrostaticSolver::PoissonBoundaryHandler m_poisson_boundary_handler
Definition: WarpX.H:962
static amrex::IntVect shared_tilesize
tileSize to use for shared current deposition operations
Definition: WarpX.H:251
static int do_similar_dm_pml
Definition: WarpX.H:1465
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:156
amrex::Vector< std::unique_ptr< FiniteDifferenceSolver > > m_fdtd_solver_fp
Definition: WarpX.H:1873
void ApplyInverseVolumeScalingToCurrentDensity(amrex::MultiFab *Jx, amrex::MultiFab *Jy, amrex::MultiFab *Jz, int lev)
Definition: WarpXPushFieldsEM.cpp:1214
amrex::Vector< amrex::Real > gett_old() const
Definition: WarpX.H:859
static int current_centering_noz
Order of finite centering of currents (from nodal grid to staggered grid), along z.
Definition: WarpX.H:284
static bool safe_guard_cells
Definition: WarpX.H:359
static void MakeWarpX()
This method creates a new instance of the WarpX class.
Definition: WarpX.cpp:235
void PSATDScaleAverageFields(const amrex::Real scale_factor)
Scale averaged E,B fields to account for time integration.
Definition: WarpXPushFieldsEM.cpp:623
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > Efield_cp
Definition: WarpX.H:1442
amrex::Vector< std::unique_ptr< amrex::MultiFab > > rho_fp
Definition: WarpX.H:1368
int slice_plot_int
Definition: WarpX.H:1564
amrex::MultiFab * get_pointer_rho_cp(int lev) const
Definition: WarpX.H:506
void InitEB()
Definition: WarpXInitEB.cpp:81
void BackwardCompatibility()
Definition: WarpX.cpp:1638
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > Bfield_fp
Definition: WarpX.H:1373
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > ECTRhofield
Definition: WarpX.H:1422
void ApplyEfieldBoundary(const int lev, PatchType patch_type)
Definition: WarpXFieldBoundaries.cpp:21
int num_injected_species
Definition: WarpX.H:1480
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:2589
amrex::Vector< amrex::Real > t_old
Definition: WarpX.H:1350
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:352
int regrid_int
Definition: WarpX.H:1537
bool use_single_write
Definition: WarpX.H:1547
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 int level, 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:3153
static bool refine_plasma
Definition: WarpX.H:344
amrex::FabFactory< amrex::FArrayBox > const & fieldFactory(int lev) const noexcept
Definition: WarpX.H:1595
static int macroscopic_solver_algo
Definition: WarpX.H:193
bool use_single_read
Definition: WarpX.H:1546
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > Bfield_aux
Definition: WarpX.H:1363
amrex::IntVect numprocs
Domain decomposition on Level 0.
Definition: WarpX.H:1580
static int ncomps
Definition: WarpX.H:292
static int moving_window_active(int const step)
Definition: WarpX.H:926
void PSATDForwardTransformG()
Forward FFT of G on all mesh refinement levels.
Definition: WarpXPushFieldsEM.cpp:226
void DampPML_Cartesian(const int lev, PatchType patch_type)
Definition: WarpXEvolvePML.cpp:76
WarpX & operator=(WarpX const &)=delete
const amrex::IntVect getngUpdateAux() const
Definition: WarpX.H:948
int warpx_do_continuous_injection
Definition: WarpX.H:1479
static bool galerkin_interpolation
Definition: WarpX.H:306
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:158
int do_pml_in_domain
Definition: WarpX.H:1464
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:554
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:1409
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:2044
void PrintDtDxDyDz()
Definition: WarpXComputeDt.cpp:102
virtual void MakeNewLevelFromScratch(int lev, amrex::Real time, const amrex::BoxArray &ba, const amrex::DistributionMapping &dm) final
Definition: WarpX.cpp:1880
static amrex::IntVect filter_npass_each_dir
Definition: WarpX.H:551
const amrex::MultiFab & getBfield_fp(int lev, int direction)
Definition: WarpX.H:525
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:1426
void setLoadBalanceEfficiency(const int lev, const amrex::Real efficiency)
Definition: WarpX.cpp:2900
static short electromagnetic_solver_id
Integer that corresponds to the type of Maxwell solver (Yee, CKC, PSATD, ECT)
Definition: WarpX.H:183
void InitPML()
PML * GetPML(int lev)
Definition: WarpX.cpp:2859
amrex::Real v_particle_pml
Definition: WarpX.H:1474
void OneStep_sub1(amrex::Real t)
Definition: WarpXEvolve.cpp:774
BilinearFilter bilinear_filter
Definition: WarpX.H:552
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:496
bool fft_periodic_single_box
Definition: WarpX.H:1574
const amrex::MultiFab & getEfield_avg_fp(int lev, int direction)
Definition: WarpX.H:531
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > Bfield_avg_fp
Definition: WarpX.H:1375
const amrex::MultiFab & getBfield_avg_fp(int lev, int direction)
Definition: WarpX.H:532
static amrex::LayoutData< amrex::Real > * getCosts(int lev)
Definition: WarpX.cpp:2888
void AddRhoFromFineLevelandSumBoundary(const amrex::Vector< std::unique_ptr< amrex::MultiFab >> &charge_fp, const amrex::Vector< std::unique_ptr< amrex::MultiFab >> &charge_cp, const amrex::Vector< std::unique_ptr< amrex::MultiFab >> &charge_buffer, const int lev, const int icomp, const int ncomp)
Definition: WarpXComm.cpp:1348
void PushPSATD()
Definition: WarpXPushFieldsEM.cpp:650
static int field_centering_noy
Order of finite centering of fields (from staggered grid to nodal grid), along y.
Definition: WarpX.H:275
int do_pml
Definition: WarpX.H:1458
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:152
amrex::Real getdt(int lev) const
Definition: WarpX.H:865
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > Bfield_fp_external
Definition: WarpX.H:1385
static amrex::IntVect RefRatio(int lev)
Definition: WarpX.cpp:2751
int max_step
Definition: WarpX.H:1534
void ApplyBfieldBoundary(const int lev, PatchType patch_type, DtType dt_type)
Definition: WarpXFieldBoundaries.cpp:46
void EvolveG(amrex::Real dt, DtType dt_type)
Definition: WarpXPushFieldsEM.cpp:967
const amrex::MultiFab & getEfield_avg_cp(int lev, int direction)
Definition: WarpX.H:533
amrex::Real costs_heuristic_particles_wt
Definition: WarpX.H:1524
int pml_has_particles
Definition: WarpX.H:1462
amrex::Vector< std::unique_ptr< NCIGodfreyFilter > > nci_godfrey_filter_exeybz
Definition: WarpX.H:553
static bool do_current_centering
Definition: WarpX.H:228
amrex::Vector< amrex::Real > mirror_z
Definition: WarpX.H:563
amrex::Vector< std::unique_ptr< amrex::MultiFab > > F_slice
Definition: WarpX.H:1567
int getdo_moving_window() const
Definition: WarpX.H:866
static bool do_subcycling
Definition: WarpX.H:354
int pml_ncell
Definition: WarpX.H:1460
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:2757
static void AliasInitMultiFab(std::unique_ptr< amrex::MultiFab > &mf, const amrex::MultiFab &mf_to_alias, const int scomp, const int ncomp, const int level, 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:3193
static int n_rz_azimuthal_modes
Number of modes for the RZ multi-mode version.
Definition: WarpX.H:287
static short J_in_time
Definition: WarpX.H:222
void PSATDBackwardTransformF()
Backward FFT of F on all mesh refinement levels.
Definition: WarpXPushFieldsEM.cpp:196
~WarpX()
Definition: WarpX.cpp:504
static amrex::Real gamma_boost
Lorentz factor of the boosted frame in which a boosted-frame simulation is run.
Definition: WarpX.H:323
static short field_gathering_algo
Integer that corresponds to the field gathering algorithm (energy-conserving, momentum-conserving)
Definition: WarpX.H:179
amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > Bfield_avg_cp
Definition: WarpX.H:1445
static int shared_mem_current_tpb
number of threads to use per block in shared deposition
Definition: WarpX.H:248
static short load_balance_costs_update_algo
Definition: WarpX.H:187
amrex::MultiFab * get_pointer_Bfield_fp(int lev, int direction) const
Definition: WarpX.H:494
amrex::Vector< std::unique_ptr< FiniteDifferenceSolver > > m_fdtd_solver_cp
Definition: WarpX.H:1874
void ResetCosts()
resets costs to zero
Definition: WarpXRegrid.cpp:400
void InitBorrowing()
Initialize the memory for the FaceInfoBoxes.
Definition: WarpXFaceExtensions.cpp:277
void computeMaxStepBoostAccelerator()
void OneStep_multiJ(const amrex::Real t)
Perform one PIC iteration, with the multiple J deposition per time step.
Definition: WarpXEvolve.cpp:587
amrex::Vector< amrex::Real > mirror_z_width
Definition: WarpX.H:564
const amrex::MultiFab & getcurrent_fp(int lev, int direction)
Definition: WarpX.H:523
std::unique_ptr< MultiReducedDiags > reduced_diags
object with all reduced diagnotics, similar to MultiParticleContainer for species.
Definition: WarpX.H:568
const amrex::MultiFab & getBfield(int lev, int direction)
Definition: WarpX.H:514
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:706
const amrex::MultiFab & getF_cp(int lev)
Definition: WarpX.H:520
amrex::Vector< std::unique_ptr< amrex::iMultiFab > > current_buffer_masks
Definition: WarpX.H:1450
const amrex::IntVect get_numprocs() const
Definition: WarpX.H:960
void ScrapeParticles()
amrex::MultiFab * get_pointer_Bfield_cp(int lev, int direction) const
Definition: WarpX.H:504
int slice_max_grid_size
Definition: WarpX.H:1563
static std::string B_ext_grid_s
Initialization type for external magnetic field on the grid.
Definition: WarpX.H:138
void PSATDEraseAverageFields()
Set averaged E,B fields to zero before new iteration.
Definition: WarpXPushFieldsEM.cpp:597
virtual void RemakeLevel(int lev, amrex::Real time, const amrex::BoxArray &ba, const amrex::DistributionMapping &dm) final
Definition: WarpXRegrid.cpp:162
amrex::Vector< std::unique_ptr< amrex::MultiFab > > G_cp
Definition: WarpX.H:1439
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:513
void ComputeEightWaysExtensions()
Do the eight-ways extension.
Definition: WarpXFaceExtensions.cpp:548
void ApplyFilterandSumBoundaryRho(int lev, int glev, amrex::MultiFab &rho, int icomp, int ncomp)
Definition: WarpXComm.cpp:1317
std::unique_ptr< amrex::Parser > Eyfield_parser
User-defined parser to initialize y-component of the electric field on the grid.
Definition: WarpX.H:169
static amrex::Real self_fields_absolute_tolerance
Definition: WarpX.H:914
amrex::Vector< std::unique_ptr< AcceleratorLattice > > m_accelerator_lattice
Definition: WarpX.H:1586
void EvolveE(amrex::Real dt)
Definition: WarpXPushFieldsEM.cpp:844
static amrex::Vector< ParticleBoundaryType > particle_boundary_hi
Definition: WarpX.H:213
std::optional< amrex::Real > m_const_dt
Definition: WarpX.H:1483
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:2726
void ComputeOneWayExtensions()
Do the one-way extension.
Definition: WarpXFaceExtensions.cpp:424
void Hybrid_QED_Push(amrex::Vector< amrex::Real > dt)
Definition: WarpX_QED_Field_Pushers.cpp:46
FiniteDifferenceSolver * get_pointer_fdtd_solver_fp(int lev)
Definition: WarpX.H:1870
amrex::RealBox slice_realbox
Definition: WarpX.H:1565
amrex::Vector< amrex::IntVect > do_pml_Lo
Definition: WarpX.H:1468
void applyMirrors(amrex::Real time)
Definition: WarpXEvolve.cpp:1042
amrex::Vector< std::unique_ptr< SpectralSolverRZ > > spectral_solver_cp
Definition: WarpX.H:1853
amrex::Real getmoving_window_x() const
Definition: WarpX.H:867
amrex::Real costs_heuristic_cells_wt
Definition: WarpX.H:1518
static amrex::Vector< amrex::Real > E_external_grid
Initial electric field on the grid.
Definition: WarpX.H:133
bool do_pml_dive_cleaning
Definition: WarpX.H:1466
static std::string authors
Author of an input file / simulation setup.
Definition: WarpX.H:130
amrex::VisMF::Header::Version plotfile_headerversion
Definition: WarpX.H:1543
void AddBoundaryField()
Definition: ElectrostaticSolver.cpp:100
const PML_RZ * getPMLRZ()
Definition: WarpX.H:539
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:81
static bool compute_max_step_from_btd
If true, the code will compute max_step from the back transformed diagnostics.
Definition: WarpX.H:341
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:456
bool current_correction
If true, a correction is applied to the current in Fourier space,.
Definition: WarpX.H:232
static const amrex::iMultiFab * CurrentBufferMasks(int lev)
Definition: WarpX.cpp:3102
void ComputePMLFactors()
static int end_moving_window_step
Definition: WarpX.H:920
static utils::parser::IntervalsParser sort_intervals
Definition: WarpX.H:346
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:1372
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:87
bool update_with_rho
Definition: WarpX.H:236
void HybridPICDepositInitialRhoAndJ()
Hybrid-PIC initial deposition function. The hybrid-PIC algorithm uses the charge and current density ...
Definition: WarpXPushFieldsHybridPIC.cpp:171
void LoadBalance()
perform load balance; compute and communicate new amrex::DistributionMapping
Definition: WarpXRegrid.cpp:52
amrex::Real time_of_last_gal_shift
Definition: WarpX.H:556
Definition: WarpXParticleContainer.H:105
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
name
Definition: run_automated.py:229
tuple dx
lab frame
Definition: stencil.py:427
beta
Definition: stencil.py:432
string field
Definition: video_yt.py:31
int verbosity()