WarpX
MultiParticleContainer.H
Go to the documentation of this file.
1 /* Copyright 2019-2020 Andrew Myers, Ann Almgren, Axel Huebl
2  * David Grote, Jean-Luc Vay, Junmin Gu
3  * Luca Fedeli, Mathieu Lobet, Maxence Thevenet
4  * Remi Lehe, Revathi Jambunathan, Weiqun Zhang
5  * Yinjian Zhao
6  *
7  * This file is part of WarpX.
8  *
9  * License: BSD-3-Clause-LBNL
10  */
11 #ifndef WARPX_ParticleContainer_H_
12 #define WARPX_ParticleContainer_H_
13 
15 
16 #include "Evolve/WarpXDtType.H"
18 #ifdef WARPX_QED
21 #endif
23 #include "Utils/WarpXConst.H"
24 #include "Utils/WarpXUtil.H"
25 #include "WarpXParticleContainer.H"
26 #include "ParticleBoundaries.H"
27 
28 #include <AMReX_BLassert.H>
29 #include <AMReX_Box.H>
30 #include <AMReX_Config.H>
31 #include <AMReX_GpuControl.H>
32 #include <AMReX_INT.H>
33 #include <AMReX_MFIter.H>
34 #include <AMReX_REAL.H>
35 #include <AMReX_RealBox.H>
36 #include <AMReX_Vector.H>
37 
38 #include <AMReX_BaseFwd.H>
39 #include <AMReX_AmrCoreFwd.H>
40 
41 #include <algorithm>
42 #include <array>
43 #include <iosfwd>
44 #include <iterator>
45 #include <limits>
46 #include <memory>
47 #include <string>
48 #include <vector>
49 
65 {
66 
67 public:
68 
69  MultiParticleContainer (amrex::AmrCore* amr_core);
70 
72 
74  GetParticleContainer (int ispecies) const {return *allcontainers[ispecies];}
75 
77  GetParticleContainerPtr (int ispecies) const {return allcontainers[ispecies].get();}
78 
80  GetParticleContainerFromName (std::string name) const {
81  auto it = std::find(species_names.begin(), species_names.end(), name);
82  WarpXUtilMsg::AlwaysAssert(it != species_names.end(), "ERROR: Unknown species name");
83  int i = std::distance(species_names.begin(), it);
84  return *allcontainers[i];
85  }
86 
87 #ifdef WARPX_USE_OPENPMD
88  std::unique_ptr<WarpXParticleContainer>& GetUniqueContainer(int ispecies) {
89  return allcontainers[ispecies];
90  }
91 #endif
92  std::array<amrex::Real, 3> meanParticleVelocity(int ispecies) {
93  return allcontainers[ispecies]->meanParticleVelocity();
94  }
95 
96  void AllocData ();
97 
98  void InitData ();
99 
105  void Evolve (int lev,
106  const amrex::MultiFab& Ex, const amrex::MultiFab& Ey, const amrex::MultiFab& Ez,
107  const amrex::MultiFab& Bx, const amrex::MultiFab& By, const amrex::MultiFab& Bz,
108  amrex::MultiFab& jx, amrex::MultiFab& jy, amrex::MultiFab& jz,
109  amrex::MultiFab* cjx, amrex::MultiFab* cjy, amrex::MultiFab* cjz,
110  amrex::MultiFab* rho, amrex::MultiFab* crho,
111  const amrex::MultiFab* cEx, const amrex::MultiFab* cEy, const amrex::MultiFab* cEz,
112  const amrex::MultiFab* cBx, const amrex::MultiFab* cBy, const amrex::MultiFab* cBz,
113  amrex::Real t, amrex::Real dt, DtType a_dt_type=DtType::Full, bool skip_deposition=false);
114 
120  void PushX (amrex::Real dt);
121 
128  void PushP (int lev, amrex::Real dt,
129  const amrex::MultiFab& Ex, const amrex::MultiFab& Ey, const amrex::MultiFab& Ez,
130  const amrex::MultiFab& Bx, const amrex::MultiFab& By, const amrex::MultiFab& Bz);
131 
138  std::unique_ptr<amrex::MultiFab> GetZeroChargeDensity(const int lev);
139 
150  void
151  DepositCharge (amrex::Vector<std::unique_ptr<amrex::MultiFab> >& rho,
152  const amrex::Real relative_t);
153 
168  void
169  DepositCurrent (amrex::Vector<std::array< std::unique_ptr<amrex::MultiFab>, 3 > >& J,
170  const amrex::Real dt, const amrex::Real relative_t);
171 
176  std::unique_ptr<amrex::MultiFab> GetChargeDensity(int lev, bool local = false);
177 
178  void doFieldIonization (int lev,
179  const amrex::MultiFab& Ex, const amrex::MultiFab& Ey, const amrex::MultiFab& Ez,
180  const amrex::MultiFab& Bx, const amrex::MultiFab& By, const amrex::MultiFab& Bz);
181 
182  void doCollisions (amrex::Real cur_time);
183 
189  void doResampling (const int timestep);
190 
191 #ifdef WARPX_QED
192 
199  void doQEDSchwinger ();
200 
205  amrex::Box ComputeSchwingerGlobalBox () const;
206 #endif
207 
208  void Restart (const std::string& dir);
209 
210  void PostRestart ();
211 
212  void ReadHeader (std::istream& is);
213 
214  void WriteHeader (std::ostream& os) const;
215 
216  void SortParticlesByBin (amrex::IntVect bin_size);
217 
218  void Redistribute ();
219 
220  void defineAllParticleTiles ();
221 
222  void RedistributeLocal (const int num_ghost);
223 
226  void ApplyBoundaryConditions ();
227 
235  amrex::Vector<amrex::Long> GetZeroParticlesInGrid(const int lev) const;
236 
237  amrex::Vector<amrex::Long> NumberOfParticlesInGrid(int lev) const;
238 
239  void Increment (amrex::MultiFab& mf, int lev);
240 
241  void SetParticleBoxArray (int lev, amrex::BoxArray& new_ba);
242  void SetParticleDistributionMap (int lev, amrex::DistributionMapping& new_dm);
243 
244  int nSpecies() const {return species_names.size();}
245 
249 
251  bool const onMainGrid = true;
252  auto const & v = m_deposit_on_main_grid;
253  return std::count( v.begin(), v.end(), onMainGrid );
254  }
255 
257  bool const fromMainGrid = true;
258  auto const & v = m_gather_from_main_grid;
259  return std::count( v.begin(), v.end(), fromMainGrid );
260  }
261 
262  void GetLabFrameData(const std::string& snapshot_name,
263  const int i_lab, const int direction,
264  const amrex::Real z_old, const amrex::Real z_new,
265  const amrex::Real t_boost, const amrex::Real t_lab, const amrex::Real dt,
266  amrex::Vector<WarpXParticleContainer::DiagnosticParticleData>& parts) const;
267 
268  // Inject particles during the simulation (for particles entering the
269  // simulation domain after some iterations, due to flowing plasma and/or
270  // moving window).
271  void ContinuousInjection(const amrex::RealBox& injection_box) const;
272  // Update injection position for continuously-injected species.
273  void UpdateContinuousInjectionPosition(amrex::Real dt) const;
274  int doContinuousInjection() const;
275 
276  // Inject particles from a surface during the simulation
277  void ContinuousFluxInjection(amrex::Real dt) const;
278 
279  std::vector<std::string> GetSpeciesNames() const { return species_names; }
280 
281  std::vector<std::string> GetLasersNames() const { return lasers_names; }
282 
283  std::vector<std::string> GetSpeciesAndLasersNames() const {
284  std::vector<std::string> tmp = species_names;
285  tmp.insert(tmp.end(), lasers_names.begin(), lasers_names.end());
286  return tmp;
287  }
288 
290 
291  void ScrapeParticles (const amrex::Vector<const amrex::MultiFab*>& distance_to_eb);
292 
293  std::string m_B_ext_particle_s = "default";
294  std::string m_E_ext_particle_s = "default";
295  // External fields added to particle fields.
296  amrex::Vector<amrex::Real> m_B_external_particle;
297  amrex::Vector<amrex::Real> m_E_external_particle;
298  // Parser for B_external on the particle
299  std::unique_ptr<amrex::Parser> m_Bx_particle_parser;
300  std::unique_ptr<amrex::Parser> m_By_particle_parser;
301  std::unique_ptr<amrex::Parser> m_Bz_particle_parser;
302  // Parser for E_external on the particle
303  std::unique_ptr<amrex::Parser> m_Ex_particle_parser;
304  std::unique_ptr<amrex::Parser> m_Ey_particle_parser;
305  std::unique_ptr<amrex::Parser> m_Ez_particle_parser;
306 
308  amrex::Vector<amrex::Real> h_repeated_plasma_lens_starts;
309  amrex::Vector<amrex::Real> h_repeated_plasma_lens_lengths;
310  amrex::Vector<amrex::Real> h_repeated_plasma_lens_strengths_E;
311  amrex::Vector<amrex::Real> h_repeated_plasma_lens_strengths_B;
312  amrex::Gpu::DeviceVector<amrex::Real> d_repeated_plasma_lens_starts;
313  amrex::Gpu::DeviceVector<amrex::Real> d_repeated_plasma_lens_lengths;
314  amrex::Gpu::DeviceVector<amrex::Real> d_repeated_plasma_lens_strengths_E;
315  amrex::Gpu::DeviceVector<amrex::Real> d_repeated_plasma_lens_strengths_B;
316 
317 #ifdef WARPX_QED
318 
321  void doQedEvents (int lev,
322  const amrex::MultiFab& Ex,
323  const amrex::MultiFab& Ey,
324  const amrex::MultiFab& Ez,
325  const amrex::MultiFab& Bx,
326  const amrex::MultiFab& By,
327  const amrex::MultiFab& Bz);
328 #endif
329 
330  int getSpeciesID (std::string product_str) const;
331 
332 protected:
333 
334 #ifdef WARPX_QED
335 
338  void doQedBreitWheeler (int lev,
339  const amrex::MultiFab& Ex,
340  const amrex::MultiFab& Ey,
341  const amrex::MultiFab& Ez,
342  const amrex::MultiFab& Bx,
343  const amrex::MultiFab& By,
344  const amrex::MultiFab& Bz);
345 
349  void doQedQuantumSync (int lev,
350  const amrex::MultiFab& Ex,
351  const amrex::MultiFab& Ey,
352  const amrex::MultiFab& Ez,
353  const amrex::MultiFab& Bx,
354  const amrex::MultiFab& By,
355  const amrex::MultiFab& Bz);
356 #endif
357 
358  // Particle container types
360 
361  std::vector<std::string> species_names;
362 
363  std::vector<std::string> lasers_names;
364 
365  std::unique_ptr<CollisionHandler> collisionhandler;
366 
368  std::vector<bool> m_deposit_on_main_grid;
369 
371  std::vector<bool> m_gather_from_main_grid;
372 
373  std::vector<PCTypes> species_types;
374 
375  template<typename ...Args>
376  amrex::MFItInfo getMFItInfo (const WarpXParticleContainer& pc_src,
377  Args const&... pc_dsts) const noexcept
378  {
379  amrex::MFItInfo info;
380 
381  MFItInfoCheckTiling(pc_src, pc_dsts...);
382 
383  if (pc_src.do_tiling && amrex::Gpu::notInLaunchRegion()) {
384  info.EnableTiling(pc_src.tile_size);
385  }
386 
387 #ifdef AMREX_USE_OMP
388  info.SetDynamic(true);
389 #endif
390 
391  return info;
392  }
393 
394 
395 #ifdef WARPX_QED
396  // The QED engines
397  std::shared_ptr<BreitWheelerEngine> m_shr_p_bw_engine;
398  std::shared_ptr<QuantumSynchrotronEngine> m_shr_p_qs_engine;
399  //_______________________________
400 
405  void InitQED ();
406 
407  //Variables to store how many species need a QED process
410  //________
411 
413  static_cast<amrex::ParticleReal>(
414  2.0 * PhysConst::m_e * PhysConst::c * PhysConst::c );
424 
429 
433  void InitQuantumSync ();
434 
438  void InitBreitWheeler ();
439 
445 
451 
472  amrex::Real m_qed_schwinger_xmin = std::numeric_limits<amrex::Real>::lowest();
473  amrex::Real m_qed_schwinger_xmax = std::numeric_limits<amrex::Real>::max();
474  amrex::Real m_qed_schwinger_ymin = std::numeric_limits<amrex::Real>::lowest();
475  amrex::Real m_qed_schwinger_ymax = std::numeric_limits<amrex::Real>::max();
476  amrex::Real m_qed_schwinger_zmin = std::numeric_limits<amrex::Real>::lowest();
477  amrex::Real m_qed_schwinger_zmax = std::numeric_limits<amrex::Real>::max();
478 
479 #endif
480 
481 private:
482 
483  // physical particles (+ laser)
484  amrex::Vector<std::unique_ptr<WarpXParticleContainer>> allcontainers;
485  // Temporary particle container, used e.g. for particle splitting.
486  std::unique_ptr<PhysicalParticleContainer> pc_tmp;
487 
488  void ReadParameters ();
489 
490  void mapSpeciesProduct ();
491 
492  // Number of species dumped in BackTransformedDiagnostics
494  // map_species_back_transformed_diagnostics[i] is the species ID in
495  // MultiParticleContainer for 0<i<nspecies_back_transformed_diagnostics
498 
499  void MFItInfoCheckTiling(const WarpXParticleContainer& /*pc_src*/) const noexcept
500  {
501  return;
502  }
503 
504  template<typename First, typename ...Args>
506  First const& pc_dst, Args const&... others) const noexcept
507  {
508  if (pc_src.do_tiling && amrex::Gpu::notInLaunchRegion()) {
509  AMREX_ALWAYS_ASSERT_WITH_MESSAGE(pc_dst.do_tiling,
510  "For particle creation processes, either all or none of the "
511  "particle species must use tiling.");
512  }
513 
514  MFItInfoCheckTiling(pc_src, others...);
515  }
516 
523 
524 #ifdef WARPX_QED
525 
530  void CheckQEDProductSpecies();
531 #endif
532 
533 
534 };
535 #endif /*WARPX_ParticleContainer_H_*/
int getSpeciesID(std::string product_str) const
Definition: MultiParticleContainer.cpp:835
void doQedQuantumSync(int lev, const amrex::MultiFab &Ex, const amrex::MultiFab &Ey, const amrex::MultiFab &Ez, const amrex::MultiFab &Bx, const amrex::MultiFab &By, const amrex::MultiFab &Bz)
Performs QED photon emission for the species for which it is enabled.
Definition: MultiParticleContainer.cpp:1527
DtType
Definition: WarpXDtType.H:10
std::unique_ptr< amrex::MultiFab > GetChargeDensity(int lev, bool local=false)
Definition: MultiParticleContainer.cpp:542
void defineAllParticleTiles()
Definition: MultiParticleContainer.cpp:581
void Increment(amrex::MultiFab &mf, int lev)
Definition: MultiParticleContainer.cpp:637
void DepositCurrent(amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > &J, const amrex::Real dt, const amrex::Real relative_t)
Deposit current density.
Definition: MultiParticleContainer.cpp:479
std::vector< std::string > GetLasersNames() const
Definition: MultiParticleContainer.H:281
amrex::Vector< amrex::Real > h_repeated_plasma_lens_starts
Definition: MultiParticleContainer.H:308
std::vector< int > map_species_back_transformed_diagnostics
Definition: MultiParticleContainer.H:496
void InitQED()
Definition: MultiParticleContainer.cpp:966
void doQEDSchwinger()
Definition: MultiParticleContainer.cpp:1268
amrex::Real m_qed_schwinger_zmin
Definition: MultiParticleContainer.H:476
amrex::Vector< amrex::Real > h_repeated_plasma_lens_lengths
Definition: MultiParticleContainer.H:309
amrex::Real m_qed_schwinger_zmax
Definition: MultiParticleContainer.H:477
std::string m_B_ext_particle_s
Definition: MultiParticleContainer.H:293
void ApplyBoundaryConditions()
Definition: MultiParticleContainer.cpp:597
int NSpeciesQuantumSync() const
Definition: MultiParticleContainer.H:423
void DepositCharge(amrex::Vector< std::unique_ptr< amrex::MultiFab > > &rho, const amrex::Real relative_t)
Deposit charge density.
Definition: MultiParticleContainer.cpp:506
std::unique_ptr< amrex::Parser > m_Ez_particle_parser
Definition: MultiParticleContainer.H:305
std::vector< std::string > lasers_names
Definition: MultiParticleContainer.H:363
WarpXParticleContainer & GetParticleContainerFromName(std::string name) const
Definition: MultiParticleContainer.H:80
std::vector< bool > m_deposit_on_main_grid
instead of depositing (current, charge) on the finest patch level, deposit to the coarsest grid ...
Definition: MultiParticleContainer.H:368
std::vector< std::string > species_names
Definition: MultiParticleContainer.H:361
void doQedEvents(int lev, const amrex::MultiFab &Ex, const amrex::MultiFab &Ey, const amrex::MultiFab &Ez, const amrex::MultiFab &Bx, const amrex::MultiFab &By, const amrex::MultiFab &Bz)
Performs QED events (Breit-Wheeler process and photon emission)
Definition: MultiParticleContainer.cpp:1431
void ContinuousFluxInjection(amrex::Real dt) const
Definition: MultiParticleContainer.cpp:778
Definition: PhysicalParticleContainer.H:44
Definition: MultiParticleContainer.H:64
amrex::Real m_repeated_plasma_lens_period
Definition: MultiParticleContainer.H:307
int nSpecies() const
Definition: MultiParticleContainer.H:244
int m_qed_schwinger_pos_product
Definition: MultiParticleContainer.H:461
PCTypes
Definition: MultiParticleContainer.H:359
void GetLabFrameData(const std::string &snapshot_name, const int i_lab, const int direction, const amrex::Real z_old, const amrex::Real z_new, const amrex::Real t_boost, const amrex::Real t_lab, const amrex::Real dt, amrex::Vector< WarpXParticleContainer::DiagnosticParticleData > &parts) const
Definition: MultiParticleContainer.cpp:671
std::shared_ptr< QuantumSynchrotronEngine > m_shr_p_qs_engine
Definition: MultiParticleContainer.H:398
std::unique_ptr< WarpXParticleContainer > & GetUniqueContainer(int ispecies)
Definition: MultiParticleContainer.H:88
void QuantumSyncGenerateTable()
Definition: MultiParticleContainer.cpp:1110
amrex::Vector< amrex::Long > NumberOfParticlesInGrid(int lev) const
Definition: MultiParticleContainer.cpp:614
void mapSpeciesProduct()
Definition: MultiParticleContainer.cpp:790
int count
Definition: run_alltests.py:318
void doResampling(const int timestep)
This function loops over all species and performs resampling if appropriate.
Definition: MultiParticleContainer.cpp:932
amrex::Vector< amrex::Real > h_repeated_plasma_lens_strengths_E
Definition: MultiParticleContainer.H:310
void ContinuousInjection(const amrex::RealBox &injection_box) const
Definition: MultiParticleContainer.cpp:737
bool m_do_qed_schwinger
Definition: MultiParticleContainer.H:453
~MultiParticleContainer()
Definition: MultiParticleContainer.H:71
void SetParticleBoxArray(int lev, amrex::BoxArray &new_ba)
Definition: MultiParticleContainer.cpp:645
void ReadParameters()
Definition: MultiParticleContainer.cpp:135
std::unique_ptr< amrex::Parser > m_Bx_particle_parser
Definition: MultiParticleContainer.H:299
direction
Definition: AnyFFT.H:74
void InitData()
Definition: MultiParticleContainer.cpp:399
int m_nspecies_quantum_sync
Definition: MultiParticleContainer.H:408
int mapSpeciesBackTransformedDiagnostics(int i) const
Definition: MultiParticleContainer.H:247
amrex::Box ComputeSchwingerGlobalBox() const
Definition: MultiParticleContainer.cpp:1369
std::vector< PCTypes > species_types
Definition: MultiParticleContainer.H:373
std::string m_qed_schwinger_ele_product_name
Definition: MultiParticleContainer.H:455
void Evolve(int lev, const amrex::MultiFab &Ex, const amrex::MultiFab &Ey, const amrex::MultiFab &Ez, const amrex::MultiFab &Bx, const amrex::MultiFab &By, const amrex::MultiFab &Bz, amrex::MultiFab &jx, amrex::MultiFab &jy, amrex::MultiFab &jz, amrex::MultiFab *cjx, amrex::MultiFab *cjy, amrex::MultiFab *cjz, amrex::MultiFab *rho, amrex::MultiFab *crho, const amrex::MultiFab *cEx, const amrex::MultiFab *cEy, const amrex::MultiFab *cEz, const amrex::MultiFab *cBx, const amrex::MultiFab *cBy, const amrex::MultiFab *cBz, amrex::Real t, amrex::Real dt, DtType a_dt_type=DtType::Full, bool skip_deposition=false)
Definition: MultiParticleContainer.cpp:419
void doCollisions(amrex::Real cur_time)
Definition: MultiParticleContainer.cpp:926
int doContinuousInjection() const
Definition: MultiParticleContainer.cpp:762
int m_qed_schwinger_ele_product
Definition: MultiParticleContainer.H:459
std::string m_qed_schwinger_pos_product_name
Definition: MultiParticleContainer.H:457
amrex::Real m_qed_schwinger_ymax
Definition: MultiParticleContainer.H:475
void Restart(const std::string &dir)
Definition: ParticleIO.cpp:119
PhysicalParticleContainer & GetPCtmp()
Definition: MultiParticleContainer.H:289
void CheckQEDProductSpecies()
Definition: MultiParticleContainer.cpp:1607
std::unique_ptr< CollisionHandler > collisionhandler
Definition: MultiParticleContainer.H:365
void MFItInfoCheckTiling(const WarpXParticleContainer &pc_src, First const &pc_dst, Args const &... others) const noexcept
Definition: MultiParticleContainer.H:505
std::string m_E_ext_particle_s
Definition: MultiParticleContainer.H:294
WarpXParticleContainer * GetParticleContainerPtr(int ispecies) const
Definition: MultiParticleContainer.H:77
std::vector< std::string > GetSpeciesAndLasersNames() const
Definition: MultiParticleContainer.H:283
i
Definition: check_interp_points_and_weights.py:171
void PushX(amrex::Real dt)
Definition: MultiParticleContainer.cpp:446
amrex::Gpu::DeviceVector< amrex::Real > d_repeated_plasma_lens_lengths
Definition: MultiParticleContainer.H:313
void AllocData()
Definition: MultiParticleContainer.cpp:390
amrex::Gpu::DeviceVector< amrex::Real > d_repeated_plasma_lens_starts
Definition: MultiParticleContainer.H:312
int nSpeciesGatherFromMainGrid() const
Definition: MultiParticleContainer.H:256
void InitBreitWheeler()
Definition: MultiParticleContainer.cpp:1058
void BreitWheelerGenerateTable()
Definition: MultiParticleContainer.cpp:1191
std::vector< std::string > GetSpeciesNames() const
Definition: MultiParticleContainer.H:279
amrex::Real m_qed_schwinger_xmin
Definition: MultiParticleContainer.H:472
MultiParticleContainer(amrex::AmrCore *amr_core)
Definition: MultiParticleContainer.cpp:86
int m_qed_schwinger_threshold_poisson_gaussian
Definition: MultiParticleContainer.H:468
WarpXParticleContainer & GetParticleContainer(int ispecies) const
Definition: MultiParticleContainer.H:74
name
Definition: run_automated.py:204
int nSpeciesDepositOnMainGrid() const
Definition: MultiParticleContainer.H:250
std::array< amrex::Real, 3 > meanParticleVelocity(int ispecies)
Definition: MultiParticleContainer.H:92
std::unique_ptr< PhysicalParticleContainer > pc_tmp
Definition: MultiParticleContainer.H:486
void CheckIonizationProductSpecies()
Definition: MultiParticleContainer.cpp:943
int doBackTransformedDiagnostics() const
Definition: MultiParticleContainer.H:248
int it
Definition: read_lab_particles.py:11
std::vector< bool > m_gather_from_main_grid
instead of gathering fields from the finest patch level, gather from the coarsest ...
Definition: MultiParticleContainer.H:371
std::unique_ptr< amrex::MultiFab > GetZeroChargeDensity(const int lev)
This returns a MultiFAB filled with zeros. It is used to return the charge density when there is no p...
Definition: MultiParticleContainer.cpp:464
void UpdateContinuousInjectionPosition(amrex::Real dt) const
Definition: MultiParticleContainer.cpp:752
amrex::Vector< amrex::Real > m_B_external_particle
Definition: MultiParticleContainer.H:296
void MFItInfoCheckTiling(const WarpXParticleContainer &) const noexcept
Definition: MultiParticleContainer.H:499
amrex::Real m_qed_schwinger_y_size
Definition: MultiParticleContainer.H:463
void PushP(int lev, amrex::Real dt, const amrex::MultiFab &Ex, const amrex::MultiFab &Ey, const amrex::MultiFab &Ez, const amrex::MultiFab &Bx, const amrex::MultiFab &By, const amrex::MultiFab &Bz)
Definition: MultiParticleContainer.cpp:454
int nspecies_back_transformed_diagnostics
Definition: MultiParticleContainer.H:493
std::unique_ptr< amrex::Parser > m_Bz_particle_parser
Definition: MultiParticleContainer.H:301
int m_nspecies_breit_wheeler
Definition: MultiParticleContainer.H:409
std::unique_ptr< amrex::Parser > m_Ex_particle_parser
Definition: MultiParticleContainer.H:303
amrex::Real m_qed_schwinger_xmax
Definition: MultiParticleContainer.H:473
amrex::MFItInfo getMFItInfo(const WarpXParticleContainer &pc_src, Args const &... pc_dsts) const noexcept
Definition: MultiParticleContainer.H:376
amrex::Vector< amrex::Long > GetZeroParticlesInGrid(const int lev) const
This returns a vector filled with zeros whose size is the number of boxes in the simulation boxarray...
Definition: MultiParticleContainer.cpp:605
int nSpeciesBackTransformedDiagnostics() const
Definition: MultiParticleContainer.H:246
static constexpr auto m_default_quantum_sync_photon_creation_energy_threshold
Definition: MultiParticleContainer.H:412
void ReadHeader(std::istream &is)
Definition: ParticleIO.cpp:134
void doQedBreitWheeler(int lev, const amrex::MultiFab &Ex, const amrex::MultiFab &Ey, const amrex::MultiFab &Ez, const amrex::MultiFab &Bx, const amrex::MultiFab &By, const amrex::MultiFab &Bz)
Performs Breit-Wheeler process for the species for which it is enabled.
Definition: MultiParticleContainer.cpp:1445
amrex::Gpu::DeviceVector< amrex::Real > d_repeated_plasma_lens_strengths_E
Definition: MultiParticleContainer.H:314
void InitQuantumSync()
Definition: MultiParticleContainer.cpp:995
void SortParticlesByBin(amrex::IntVect bin_size)
Definition: MultiParticleContainer.cpp:565
std::unique_ptr< amrex::Parser > m_By_particle_parser
Definition: MultiParticleContainer.H:300
int NSpeciesBreitWheeler() const
Definition: MultiParticleContainer.H:428
amrex::Vector< amrex::Real > h_repeated_plasma_lens_strengths_B
Definition: MultiParticleContainer.H:311
void ScrapeParticles(const amrex::Vector< const amrex::MultiFab *> &distance_to_eb)
Definition: MultiParticleContainer.cpp:954
void WriteHeader(std::ostream &os) const
Definition: ParticleIO.cpp:145
void doFieldIonization(int lev, const amrex::MultiFab &Ex, const amrex::MultiFab &Ey, const amrex::MultiFab &Ez, const amrex::MultiFab &Bx, const amrex::MultiFab &By, const amrex::MultiFab &Bz)
Definition: MultiParticleContainer.cpp:860
void RedistributeLocal(const int num_ghost)
Definition: MultiParticleContainer.cpp:589
std::shared_ptr< BreitWheelerEngine > m_shr_p_bw_engine
Definition: MultiParticleContainer.H:397
void Redistribute()
Definition: MultiParticleContainer.cpp:573
amrex::Vector< amrex::Real > m_E_external_particle
Definition: MultiParticleContainer.H:297
void SetParticleDistributionMap(int lev, amrex::DistributionMapping &new_dm)
Definition: MultiParticleContainer.cpp:653
int do_back_transformed_diagnostics
Definition: MultiParticleContainer.H:497
amrex::ParticleReal m_quantum_sync_photon_creation_energy_threshold
Definition: MultiParticleContainer.H:417
Definition: WarpXParticleContainer.H:110
amrex::Vector< std::unique_ptr< WarpXParticleContainer > > allcontainers
Definition: MultiParticleContainer.H:484
std::unique_ptr< amrex::Parser > m_Ey_particle_parser
Definition: MultiParticleContainer.H:304
void PostRestart()
Definition: MultiParticleContainer.cpp:661
amrex::Real m_qed_schwinger_ymin
Definition: MultiParticleContainer.H:474
void AlwaysAssert(bool is_expression_true, const std::string &msg="ERROR!")
If is_expression_true is false, this function prints msg and calls amrex::abort() ...
Definition: WarpXUtil.cpp:677
amrex::Gpu::DeviceVector< amrex::Real > d_repeated_plasma_lens_strengths_B
Definition: MultiParticleContainer.H:315