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/TextMsg.H"
24 #include "Utils/WarpXConst.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 
70 
72 
74  GetParticleContainer (int ispecies) const {return *allcontainers[ispecies];}
75 
77  GetParticleContainerPtr (int ispecies) const {return allcontainers[ispecies].get();}
78 
80  GetParticleContainerFromName (const std::string& name) const;
81 
82 #ifdef WARPX_USE_OPENPMD
83  std::unique_ptr<WarpXParticleContainer>& GetUniqueContainer(int ispecies) {
84  return allcontainers[ispecies];
85  }
86 #endif
87  std::array<amrex::ParticleReal, 3> meanParticleVelocity(int ispecies) {
88  return allcontainers[ispecies]->meanParticleVelocity();
89  }
90 
91  void AllocData ();
92 
93  void InitData ();
94 
96 
102  void Evolve (int lev,
103  const amrex::MultiFab& Ex, const amrex::MultiFab& Ey, const amrex::MultiFab& Ez,
104  const amrex::MultiFab& Bx, const amrex::MultiFab& By, const amrex::MultiFab& Bz,
107  amrex::MultiFab* rho, amrex::MultiFab* crho,
108  const amrex::MultiFab* cEx, const amrex::MultiFab* cEy, const amrex::MultiFab* cEz,
109  const amrex::MultiFab* cBx, const amrex::MultiFab* cBy, const amrex::MultiFab* cBz,
110  amrex::Real t, amrex::Real dt, DtType a_dt_type=DtType::Full, bool skip_deposition=false);
111 
117  void PushX (amrex::Real dt);
118 
125  void PushP (int lev, amrex::Real dt,
126  const amrex::MultiFab& Ex, const amrex::MultiFab& Ey, const amrex::MultiFab& Ez,
127  const amrex::MultiFab& Bx, const amrex::MultiFab& By, const amrex::MultiFab& Bz);
128 
135  std::unique_ptr<amrex::MultiFab> GetZeroChargeDensity(const int lev);
136 
146  void
147  DepositCharge (amrex::Vector<std::unique_ptr<amrex::MultiFab> >& rho,
148  const amrex::Real relative_time);
149 
161  void
162  DepositCurrent (amrex::Vector<std::array< std::unique_ptr<amrex::MultiFab>, 3 > >& J,
163  const amrex::Real dt, const amrex::Real relative_time);
164 
168 
169  std::unique_ptr<amrex::MultiFab> GetChargeDensity(int lev, bool local = false);
170 
171  void doFieldIonization (int lev,
172  const amrex::MultiFab& Ex, const amrex::MultiFab& Ey, const amrex::MultiFab& Ez,
173  const amrex::MultiFab& Bx, const amrex::MultiFab& By, const amrex::MultiFab& Bz);
174 
175  void doCollisions (amrex::Real cur_time, amrex::Real dt);
176 
182  void doResampling (const int timestep);
183 
184 #ifdef WARPX_QED
185 
192  void doQEDSchwinger ();
193 
199 #endif
200 
201  void Restart (const std::string& dir);
202 
203  void PostRestart ();
204 
205  void ReadHeader (std::istream& is);
206 
207  void WriteHeader (std::ostream& os) const;
208 
209  void SortParticlesByBin (amrex::IntVect bin_size);
210 
211  void Redistribute ();
212 
213  void defineAllParticleTiles ();
214 
215  void RedistributeLocal (const int num_ghost);
216 
219  void ApplyBoundaryConditions ();
220 
229 
231 
232  void Increment (amrex::MultiFab& mf, int lev);
233 
234  void SetParticleBoxArray (int lev, amrex::BoxArray& new_ba);
236 
237  int nSpecies() const {return species_names.size();}
238 
246  void SetDoBackTransformedParticles (const bool do_back_transformed_particles);
252  void SetDoBackTransformedParticles (std::string species_name, const bool do_back_transformed_particles);
253 
255  bool const onMainGrid = true;
256  auto const & v = m_deposit_on_main_grid;
257  return std::count( v.begin(), v.end(), onMainGrid );
258  }
259 
261  bool const fromMainGrid = true;
262  auto const & v = m_gather_from_main_grid;
263  return std::count( v.begin(), v.end(), fromMainGrid );
264  }
265 
266  void GetLabFrameData(const std::string& snapshot_name,
267  const int i_lab, const int direction,
268  const amrex::Real z_old, const amrex::Real z_new,
269  const amrex::Real t_boost, const amrex::Real t_lab, const amrex::Real dt,
271 
272  // Inject particles during the simulation (for particles entering the
273  // simulation domain after some iterations, due to flowing plasma and/or
274  // moving window).
275  void ContinuousInjection(const amrex::RealBox& injection_box) const;
276  // Update injection position for continuously-injected species.
277  void UpdateContinuousInjectionPosition(amrex::Real dt) const;
278  int doContinuousInjection() const;
279 
280  // Inject particles from a surface during the simulation
281  void ContinuousFluxInjection(amrex::Real t, amrex::Real dt) const;
282 
283  std::vector<std::string> GetSpeciesNames() const { return species_names; }
284 
285  std::vector<std::string> GetLasersNames() const { return lasers_names; }
286 
287  std::vector<std::string> GetSpeciesAndLasersNames() const {
288  std::vector<std::string> tmp = species_names;
289  tmp.insert(tmp.end(), lasers_names.begin(), lasers_names.end());
290  return tmp;
291  }
292 
294 
295  void ScrapeParticles (const amrex::Vector<const amrex::MultiFab*>& distance_to_eb);
296 
297  std::string m_B_ext_particle_s = "none";
298  std::string m_E_ext_particle_s = "none";
299  // External fields added to particle fields.
302  // Parser for B_external on the particle
303  std::unique_ptr<amrex::Parser> m_Bx_particle_parser;
304  std::unique_ptr<amrex::Parser> m_By_particle_parser;
305  std::unique_ptr<amrex::Parser> m_Bz_particle_parser;
306  // Parser for E_external on the particle
307  std::unique_ptr<amrex::Parser> m_Ex_particle_parser;
308  std::unique_ptr<amrex::Parser> m_Ey_particle_parser;
309  std::unique_ptr<amrex::Parser> m_Ez_particle_parser;
310 
311  amrex::ParticleReal m_repeated_plasma_lens_period;
320 
321 #ifdef WARPX_QED
322 
325  void doQedEvents (int lev,
326  const amrex::MultiFab& Ex,
327  const amrex::MultiFab& Ey,
328  const amrex::MultiFab& Ez,
329  const amrex::MultiFab& Bx,
330  const amrex::MultiFab& By,
331  const amrex::MultiFab& Bz);
332 #endif
333 
334  int getSpeciesID (std::string product_str) const;
335 
336 protected:
337 
338 #ifdef WARPX_QED
339 
342  void doQedBreitWheeler (int lev,
343  const amrex::MultiFab& Ex,
344  const amrex::MultiFab& Ey,
345  const amrex::MultiFab& Ez,
346  const amrex::MultiFab& Bx,
347  const amrex::MultiFab& By,
348  const amrex::MultiFab& Bz);
349 
353  void doQedQuantumSync (int lev,
354  const amrex::MultiFab& Ex,
355  const amrex::MultiFab& Ey,
356  const amrex::MultiFab& Ez,
357  const amrex::MultiFab& Bx,
358  const amrex::MultiFab& By,
359  const amrex::MultiFab& Bz);
360 #endif
361 
362  // Particle container types
364 
365  std::vector<std::string> species_names;
366 
367  std::vector<std::string> lasers_names;
368 
369  std::unique_ptr<CollisionHandler> collisionhandler;
370 
372  std::vector<bool> m_deposit_on_main_grid;
373  std::vector<bool> m_laser_deposit_on_main_grid;
374 
376  std::vector<bool> m_gather_from_main_grid;
377 
378  std::vector<PCTypes> species_types;
379 
380  template<typename ...Args>
382  Args const&... pc_dsts) const noexcept
383  {
384  amrex::MFItInfo info;
385 
386  MFItInfoCheckTiling(pc_src, pc_dsts...);
387 
388  if (pc_src.do_tiling && amrex::Gpu::notInLaunchRegion()) {
389  info.EnableTiling(pc_src.tile_size);
390  }
391 
392 #ifdef AMREX_USE_OMP
393  info.SetDynamic(true);
394 #endif
395 
396  return info;
397  }
398 
399 
400 #ifdef WARPX_QED
401  // The QED engines
402  std::shared_ptr<BreitWheelerEngine> m_shr_p_bw_engine;
403  std::shared_ptr<QuantumSynchrotronEngine> m_shr_p_qs_engine;
404  //_______________________________
405 
410  void InitQED ();
411 
412  //Variables to store how many species need a QED process
415  //________
416 
418  static_cast<amrex::ParticleReal>(
429 
434 
438  void InitQuantumSync ();
439 
443  void InitBreitWheeler ();
444 
450 
456 
477  amrex::Real m_qed_schwinger_xmin = std::numeric_limits<amrex::Real>::lowest();
478  amrex::Real m_qed_schwinger_xmax = std::numeric_limits<amrex::Real>::max();
479  amrex::Real m_qed_schwinger_ymin = std::numeric_limits<amrex::Real>::lowest();
480  amrex::Real m_qed_schwinger_ymax = std::numeric_limits<amrex::Real>::max();
481  amrex::Real m_qed_schwinger_zmin = std::numeric_limits<amrex::Real>::lowest();
482  amrex::Real m_qed_schwinger_zmax = std::numeric_limits<amrex::Real>::max();
483 
484 #endif
485 
486 private:
487 
488  // physical particles (+ laser)
490  // Temporary particle container, used e.g. for particle splitting.
491  std::unique_ptr<PhysicalParticleContainer> pc_tmp;
492 
493  void ReadParameters ();
494 
495  void mapSpeciesProduct ();
496 
497  // Number of species dumped in BackTransformedDiagnostics
499  // map_species_back_transformed_diagnostics[i] is the species ID in
500  // MultiParticleContainer for 0<i<nspecies_back_transformed_diagnostics
504 
505  void MFItInfoCheckTiling(const WarpXParticleContainer& /*pc_src*/) const noexcept
506  {
507  return;
508  }
509 
510  template<typename First, typename ...Args>
512  First const& pc_dst, Args const&... others) const noexcept
513  {
514  if (pc_src.do_tiling && amrex::Gpu::notInLaunchRegion()) {
515  WARPX_ALWAYS_ASSERT_WITH_MESSAGE(pc_dst.do_tiling,
516  "For particle creation processes, either all or none of the "
517  "particle species must use tiling.");
518  }
519 
520  MFItInfoCheckTiling(pc_src, others...);
521  }
522 
529 
530 #ifdef WARPX_QED
531 
536  void CheckQEDProductSpecies();
537 #endif
538 
539 
540 };
541 #endif /*WARPX_ParticleContainer_H_*/
amrex::Vector< amrex::ParticleReal > m_B_external_particle
Definition: MultiParticleContainer.H:300
int getSpeciesID(std::string product_str) const
Definition: MultiParticleContainer.cpp:895
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:1644
DtType
Definition: WarpXDtType.H:10
amrex::ParticleReal m_repeated_plasma_lens_period
Definition: MultiParticleContainer.H:311
std::unique_ptr< amrex::MultiFab > GetChargeDensity(int lev, bool local=false)
Definition: MultiParticleContainer.cpp:616
void defineAllParticleTiles()
Definition: MultiParticleContainer.cpp:650
void Increment(amrex::MultiFab &mf, int lev)
Definition: MultiParticleContainer.cpp:706
std::vector< std::string > GetLasersNames() const
Definition: MultiParticleContainer.H:285
std::vector< int > map_species_back_transformed_diagnostics
Definition: MultiParticleContainer.H:501
void InitQED()
Definition: MultiParticleContainer.cpp:1049
void doQEDSchwinger()
Definition: MultiParticleContainer.cpp:1382
amrex::Real m_qed_schwinger_zmin
Definition: MultiParticleContainer.H:481
WarpXParticleContainer & GetParticleContainerFromName(const std::string &name) const
Definition: MultiParticleContainer.cpp:423
amrex::Vector< amrex::ParticleReal > h_repeated_plasma_lens_strengths_B
Definition: MultiParticleContainer.H:315
amrex::Real m_qed_schwinger_zmax
Definition: MultiParticleContainer.H:482
std::string m_B_ext_particle_s
Definition: MultiParticleContainer.H:297
void ApplyBoundaryConditions()
Definition: MultiParticleContainer.cpp:666
int NSpeciesQuantumSync() const
Definition: MultiParticleContainer.H:428
std::unique_ptr< amrex::Parser > m_Ez_particle_parser
Definition: MultiParticleContainer.H:309
std::vector< std::string > lasers_names
Definition: MultiParticleContainer.H:367
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:372
std::vector< std::string > species_names
Definition: MultiParticleContainer.H:365
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:1549
static constexpr auto c
vacuum speed of light [m/s]
Definition: constant.H:44
void InitMultiPhysicsModules()
Definition: MultiParticleContainer.cpp:466
Definition: PhysicalParticleContainer.H:44
Definition: MultiParticleContainer.H:64
int nSpecies() const
Definition: MultiParticleContainer.H:237
int m_qed_schwinger_pos_product
Definition: MultiParticleContainer.H:466
PCTypes
Definition: MultiParticleContainer.H:363
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:731
std::shared_ptr< QuantumSynchrotronEngine > m_shr_p_qs_engine
Definition: MultiParticleContainer.H:403
std::unique_ptr< WarpXParticleContainer > & GetUniqueContainer(int ispecies)
Definition: MultiParticleContainer.H:83
int dt
Definition: Stencil.py:468
void ContinuousFluxInjection(amrex::Real t, amrex::Real dt) const
Definition: MultiParticleContainer.cpp:838
amrex::Gpu::DeviceVector< amrex::ParticleReal > d_repeated_plasma_lens_lengths
Definition: MultiParticleContainer.H:317
void QuantumSyncGenerateTable()
Definition: MultiParticleContainer.cpp:1209
amrex::Vector< amrex::ParticleReal > h_repeated_plasma_lens_starts
Definition: MultiParticleContainer.H:312
amrex::Vector< amrex::Long > NumberOfParticlesInGrid(int lev) const
Definition: MultiParticleContainer.cpp:683
void mapSpeciesProduct()
Definition: MultiParticleContainer.cpp:850
int count
Definition: run_alltests.py:322
void doResampling(const int timestep)
This function loops over all species and performs resampling if appropriate.
Definition: MultiParticleContainer.cpp:1015
void ContinuousInjection(const amrex::RealBox &injection_box) const
Definition: MultiParticleContainer.cpp:797
bool m_do_qed_schwinger
Definition: MultiParticleContainer.H:458
void DepositCurrent(amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > &J, const amrex::Real dt, const amrex::Real relative_time)
Deposit current density.
Definition: MultiParticleContainer.cpp:551
void DepositCharge(amrex::Vector< std::unique_ptr< amrex::MultiFab > > &rho, const amrex::Real relative_time)
Deposit charge density.
Definition: MultiParticleContainer.cpp:578
~MultiParticleContainer()
Definition: MultiParticleContainer.H:71
void SetParticleBoxArray(int lev, amrex::BoxArray &new_ba)
Definition: MultiParticleContainer.cpp:714
void ReadParameters()
Definition: MultiParticleContainer.cpp:142
bool m_do_back_transformed_particles
Definition: MultiParticleContainer.H:503
std::unique_ptr< amrex::Parser > m_Bx_particle_parser
Definition: MultiParticleContainer.H:303
direction
Definition: AnyFFT.H:74
void InitData()
Definition: MultiParticleContainer.cpp:443
amrex::Vector< amrex::ParticleReal > h_repeated_plasma_lens_lengths
Definition: MultiParticleContainer.H:313
int m_nspecies_quantum_sync
Definition: MultiParticleContainer.H:413
int mapSpeciesBackTransformedDiagnostics(int i) const
Definition: MultiParticleContainer.H:240
amrex::Box ComputeSchwingerGlobalBox() const
Definition: MultiParticleContainer.cpp:1487
std::vector< bool > m_laser_deposit_on_main_grid
Definition: MultiParticleContainer.H:373
std::vector< PCTypes > species_types
Definition: MultiParticleContainer.H:378
std::string m_qed_schwinger_ele_product_name
Definition: MultiParticleContainer.H:460
void SetDoBackTransformedParticles(const bool do_back_transformed_particles)
Definition: MultiParticleContainer.cpp:919
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:484
int doContinuousInjection() const
Definition: MultiParticleContainer.cpp:822
int m_qed_schwinger_ele_product
Definition: MultiParticleContainer.H:464
std::string m_qed_schwinger_pos_product_name
Definition: MultiParticleContainer.H:462
MFItInfo & EnableTiling(const IntVect &ts=FabArrayBase::mfiter_tile_size) noexcept
amrex::Real m_qed_schwinger_ymax
Definition: MultiParticleContainer.H:480
void Restart(const std::string &dir)
Definition: ParticleIO.cpp:121
PhysicalParticleContainer & GetPCtmp()
Definition: MultiParticleContainer.H:293
void CheckQEDProductSpecies()
Definition: MultiParticleContainer.cpp:1723
std::unique_ptr< CollisionHandler > collisionhandler
Definition: MultiParticleContainer.H:369
void MFItInfoCheckTiling(const WarpXParticleContainer &pc_src, First const &pc_dst, Args const &... others) const noexcept
Definition: MultiParticleContainer.H:511
std::string m_E_ext_particle_s
Definition: MultiParticleContainer.H:298
WarpXParticleContainer * GetParticleContainerPtr(int ispecies) const
Definition: MultiParticleContainer.H:77
bool notInLaunchRegion() noexcept
std::vector< std::string > GetSpeciesAndLasersNames() const
Definition: MultiParticleContainer.H:287
i
Definition: check_interp_points_and_weights.py:173
void PushX(amrex::Real dt)
Definition: MultiParticleContainer.cpp:511
void AllocData()
Definition: MultiParticleContainer.cpp:434
amrex::Gpu::DeviceVector< amrex::ParticleReal > d_repeated_plasma_lens_strengths_E
Definition: MultiParticleContainer.H:318
int nSpeciesGatherFromMainGrid() const
Definition: MultiParticleContainer.H:260
void InitBreitWheeler()
Definition: MultiParticleContainer.cpp:1150
void BreitWheelerGenerateTable()
Definition: MultiParticleContainer.cpp:1298
std::vector< std::string > GetSpeciesNames() const
Definition: MultiParticleContainer.H:283
amrex::Real m_qed_schwinger_xmin
Definition: MultiParticleContainer.H:477
MultiParticleContainer(amrex::AmrCore *amr_core)
Definition: MultiParticleContainer.cpp:92
int m_qed_schwinger_threshold_poisson_gaussian
Definition: MultiParticleContainer.H:473
WarpXParticleContainer & GetParticleContainer(int ispecies) const
Definition: MultiParticleContainer.H:74
int nSpeciesDepositOnMainGrid() const
Definition: MultiParticleContainer.H:254
std::unique_ptr< PhysicalParticleContainer > pc_tmp
Definition: MultiParticleContainer.H:491
void CheckIonizationProductSpecies()
Definition: MultiParticleContainer.cpp:1026
int doBackTransformedDiagnostics() const
Definition: MultiParticleContainer.H:241
std::vector< bool > m_gather_from_main_grid
instead of gathering fields from the finest patch level, gather from the coarsest ...
Definition: MultiParticleContainer.H:376
#define WARPX_ALWAYS_ASSERT_WITH_MESSAGE(EX, MSG)
Definition: TextMsg.H:13
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:529
void UpdateContinuousInjectionPosition(amrex::Real dt) const
Definition: MultiParticleContainer.cpp:812
amrex::Vector< amrex::ParticleReal > h_repeated_plasma_lens_strengths_E
Definition: MultiParticleContainer.H:314
void MFItInfoCheckTiling(const WarpXParticleContainer &) const noexcept
Definition: MultiParticleContainer.H:505
amrex::Real m_qed_schwinger_y_size
Definition: MultiParticleContainer.H:468
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:519
string name
Definition: Stencil.py:485
int nspecies_back_transformed_diagnostics
Definition: MultiParticleContainer.H:498
std::unique_ptr< amrex::Parser > m_Bz_particle_parser
Definition: MultiParticleContainer.H:305
int m_nspecies_breit_wheeler
Definition: MultiParticleContainer.H:414
std::unique_ptr< amrex::Parser > m_Ex_particle_parser
Definition: MultiParticleContainer.H:307
amrex::Real m_qed_schwinger_xmax
Definition: MultiParticleContainer.H:478
int dir
amrex::MFItInfo getMFItInfo(const WarpXParticleContainer &pc_src, Args const &... pc_dsts) const noexcept
Definition: MultiParticleContainer.H:381
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:674
int nSpeciesBackTransformedDiagnostics() const
Definition: MultiParticleContainer.H:239
static constexpr auto m_default_quantum_sync_photon_creation_energy_threshold
Definition: MultiParticleContainer.H:417
void ReadHeader(std::istream &is)
Definition: ParticleIO.cpp:217
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:1563
void InitQuantumSync()
Definition: MultiParticleContainer.cpp:1078
void doCollisions(amrex::Real cur_time, amrex::Real dt)
Definition: MultiParticleContainer.cpp:1009
void SortParticlesByBin(amrex::IntVect bin_size)
Definition: MultiParticleContainer.cpp:634
std::unique_ptr< amrex::Parser > m_By_particle_parser
Definition: MultiParticleContainer.H:304
int NSpeciesBreitWheeler() const
Definition: MultiParticleContainer.H:433
MFItInfo & SetDynamic(bool f) noexcept
void ScrapeParticles(const amrex::Vector< const amrex::MultiFab *> &distance_to_eb)
Definition: MultiParticleContainer.cpp:1037
void WriteHeader(std::ostream &os) const
Definition: ParticleIO.cpp:228
std::array< amrex::ParticleReal, 3 > meanParticleVelocity(int ispecies)
Definition: MultiParticleContainer.H:87
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:943
static constexpr auto m_e
electron mass [kg]
Definition: constant.H:52
void RedistributeLocal(const int num_ghost)
Definition: MultiParticleContainer.cpp:658
std::shared_ptr< BreitWheelerEngine > m_shr_p_bw_engine
Definition: MultiParticleContainer.H:402
void Redistribute()
Definition: MultiParticleContainer.cpp:642
amrex::Gpu::DeviceVector< amrex::ParticleReal > d_repeated_plasma_lens_starts
Definition: MultiParticleContainer.H:316
amrex::Gpu::DeviceVector< amrex::ParticleReal > d_repeated_plasma_lens_strengths_B
Definition: MultiParticleContainer.H:319
void SetParticleDistributionMap(int lev, amrex::DistributionMapping &new_dm)
Definition: MultiParticleContainer.cpp:722
int do_back_transformed_diagnostics
Definition: MultiParticleContainer.H:502
amrex::ParticleReal m_quantum_sync_photon_creation_energy_threshold
Definition: MultiParticleContainer.H:422
Definition: WarpXParticleContainer.H:101
amrex::Vector< std::unique_ptr< WarpXParticleContainer > > allcontainers
Definition: MultiParticleContainer.H:489
std::unique_ptr< amrex::Parser > m_Ey_particle_parser
Definition: MultiParticleContainer.H:308
void PostRestart()
Definition: MultiParticleContainer.cpp:455
amrex::Real m_qed_schwinger_ymin
Definition: MultiParticleContainer.H:479
amrex::Vector< amrex::ParticleReal > m_E_external_particle
Definition: MultiParticleContainer.H:301