WarpX
WarpXParticleContainer.H
Go to the documentation of this file.
1 /* Copyright 2019-2020 Andrew Myers, Axel Huebl, David Grote
2  * Jean-Luc Vay, Junmin Gu, Luca Fedeli
3  * Maxence Thevenet, Remi Lehe, Revathi Jambunathan
4  * Weiqun Zhang, Yinjian Zhao
5  *
6  * This file is part of WarpX.
7  *
8  * License: BSD-3-Clause-LBNL
9  */
10 #ifndef WARPX_WarpXParticleContainer_H_
11 #define WARPX_WarpXParticleContainer_H_
12 
14 
15 #include "Evolve/WarpXDtType.H"
16 #include "Evolve/WarpXPushType.H"
20 
21 #ifdef WARPX_QED
24 #endif
27 
28 #include <AMReX_Array.H>
29 #include <AMReX_FArrayBox.H>
30 #include <AMReX_GpuAllocators.H>
31 #include <AMReX_GpuContainers.H>
32 #include <AMReX_INT.H>
33 #include <AMReX_ParIter.H>
34 #include <AMReX_Particles.H>
35 #include <AMReX_Random.H>
36 #include <AMReX_REAL.H>
37 #include <AMReX_StructOfArrays.H>
38 #include <AMReX_Vector.H>
39 
40 #include <AMReX_BaseFwd.H>
41 #include <AMReX_AmrCoreFwd.H>
42 
43 #include <array>
44 #include <iosfwd>
45 #include <map>
46 #include <memory>
47 #include <string>
48 #include <utility>
49 
50 
52  : public amrex::ParIterSoA<PIdx::nattribs, 0>
53 {
54 public:
56 
57  WarpXParIter (ContainerType& pc, int level);
58 
59  WarpXParIter (ContainerType& pc, int level, amrex::MFItInfo& info);
60 
61  [[nodiscard]] const std::array<RealVector, PIdx::nattribs>& GetAttribs () const
62  {
63  return GetStructOfArrays().GetRealData();
64  }
65 
66  [[nodiscard]] std::array<RealVector, PIdx::nattribs>& GetAttribs ()
67  {
68  return GetStructOfArrays().GetRealData();
69  }
70 
71  [[nodiscard]] const RealVector& GetAttribs (int comp) const
72  {
73  return GetStructOfArrays().GetRealData(comp);
74  }
75 
76  [[nodiscard]] RealVector& GetAttribs (int comp)
77  {
78  return GetStructOfArrays().GetRealData(comp);
79  }
80 
81  [[nodiscard]] IntVector& GetiAttribs (int comp)
82  {
83  return GetStructOfArrays().GetIntData(comp);
84  }
85 };
86 
110  : public NamedComponentParticleContainer<amrex::DefaultAllocator>
111 {
112 public:
114 
115  // amrex::StructOfArrays with DiagIdx::nattribs amrex::ParticleReal components
116  // and 0 int components for the particle data.
118  // DiagnosticParticles is a vector, with one element per MR level.
119  // DiagnosticParticles[lev] is typically a key-value pair where the key is
120  // a pair [grid_index, tile_index], and the value is the corresponding
121  // DiagnosticParticleData (see above) on this tile.
123 
124  WarpXParticleContainer (amrex::AmrCore* amr_core, int ispecies);
125  ~WarpXParticleContainer() override = default;
126 
127  // Move and copy operations
132 
133  virtual void InitData () = 0;
134 
135  virtual void InitIonizationModule () {}
136 
137  /*
138  * \brief Virtual function that returns a pointer to the plasma injector,
139  * for derived classes that define one (PhysicalParticleContainer).
140  */
141  virtual PlasmaInjector* GetPlasmaInjector (const int /*i*/) { return nullptr; }
142 
148  virtual void Evolve (int lev,
149  const amrex::MultiFab& Ex, const amrex::MultiFab& Ey, const amrex::MultiFab& Ez,
150  const amrex::MultiFab& Bx, const amrex::MultiFab& By, const amrex::MultiFab& Bz,
153  amrex::MultiFab* rho, amrex::MultiFab* crho,
154  const amrex::MultiFab* cEx, const amrex::MultiFab* cEy, const amrex::MultiFab* cEz,
155  const amrex::MultiFab* cBx, const amrex::MultiFab* cBy, const amrex::MultiFab* cBz,
156  amrex::Real t, amrex::Real dt, DtType a_dt_type=DtType::Full, bool skip_deposition=false,
157  PushType push_type=PushType::Explicit) = 0;
158 
159  virtual void PostRestart () = 0;
160 
161  void AllocData ();
162 
169  int n_external_attr_real,
170  int n_external_attr_int) = 0;
171 
177  void PushX ( amrex::Real dt);
178  void PushX (int lev, amrex::Real dt);
179 
183  virtual void PushP (int lev, amrex::Real dt,
184  const amrex::MultiFab& Ex,
185  const amrex::MultiFab& Ey,
186  const amrex::MultiFab& Ez,
187  const amrex::MultiFab& Bx,
188  const amrex::MultiFab& By,
189  const amrex::MultiFab& Bz) = 0;
190 
202  void DepositCurrent (amrex::Vector<std::array< std::unique_ptr<amrex::MultiFab>, 3 > >& J,
203  amrex::Real dt, amrex::Real relative_time);
204 
215  void DepositCharge (amrex::Vector<std::unique_ptr<amrex::MultiFab> >& rho,
216  bool local = false, bool reset = false,
217  bool apply_boundary_and_scale_volume = false,
218  bool interpolate_across_levels = true,
219  int icomp = 0);
220  void DepositCharge (std::unique_ptr<amrex::MultiFab>& rho, int lev,
221  bool local = false, bool reset = false,
222  bool apply_boundary_and_scale_volume = false,
223  int icomp = 0);
224 
225  std::unique_ptr<amrex::MultiFab> GetChargeDensity(int lev, bool local = false);
226 
227  virtual void DepositCharge (WarpXParIter& pti,
228  RealVector const & wp,
229  const int* ion_lev,
230  amrex::MultiFab* rho,
231  int icomp,
232  long offset,
233  long np_to_deposit,
234  int thread_num,
235  int lev,
236  int depos_lev);
237 
238  virtual void DepositCurrent (WarpXParIter& pti,
239  RealVector const & wp,
240  RealVector const & uxp,
241  RealVector const & uyp,
242  RealVector const & uzp,
243  int const* ion_lev,
244  amrex::MultiFab* jx,
245  amrex::MultiFab* jy,
246  amrex::MultiFab* jz,
247  long offset,
248  long np_to_deposit,
249  int thread_num,
250  int lev,
251  int depos_lev,
252  amrex::Real dt,
253  amrex::Real relative_time,
254  PushType push_type);
255 
256  // If particles start outside of the domain, ContinuousInjection
257  // makes sure that they are initialized when they enter the domain, and
258  // NOT before. Virtual function, overriden by derived classes.
259  // Current status:
260  // PhysicalParticleContainer: implemented.
261  // LaserParticleContainer: implemented.
262  // RigidInjectedParticleContainer: not implemented.
263  virtual void ContinuousInjection(const amrex::RealBox& /*injection_box*/) {}
264 
269  virtual void UpdateAntennaPosition(const amrex::Real /*dt*/) {}
270 
272 
273  // Inject a continuous flux of particles from a defined plane
274  virtual void ContinuousFluxInjection(amrex::Real /*t*/, amrex::Real /*dt*/) {}
275 
276  int getSpeciesId() const {return species_id;}
277 
282  amrex::ParticleReal sumParticleCharge(bool local = false);
283  amrex::ParticleReal sumParticleWeight(bool local = false);
284 
285  std::array<amrex::ParticleReal, 3> meanParticleVelocity(bool local = false);
286 
287  amrex::ParticleReal maxParticleVelocity(bool local = false);
288 
313  void AddNParticles (int lev, long n,
320  int nattr_real,
322  int nattr_int, amrex::Vector<amrex::Vector<int>> const & attr_int,
323  int uniqueparticles, amrex::Long id=-1);
324 
330  void deleteInvalidParticles ();
331 
332  virtual void ReadHeader (std::istream& is) = 0;
333 
334  virtual void WriteHeader (std::ostream& os) const = 0;
335 
336  static void ReadParameters ();
337 
338  static void BackwardCompatibility ();
339 
342  void ApplyBoundaryConditions ();
343 
344  bool do_splitting = false;
345  int do_not_deposit = 0;
347  amrex::Real self_fields_required_precision = amrex::Real(1.e-11);
348  amrex::Real self_fields_absolute_tolerance = amrex::Real(0.0);
351 
352  // External fields added to particle fields.
355 
358 
359  // split along diagonals (0) or axes (1)
360  int split_type = 0;
361 
366  void SetDoBackTransformedParticles(const bool do_back_transformed_particles) {
367  m_do_back_transformed_particles = do_back_transformed_particles;
368  }
369 
370  //amrex::Real getCharge () {return charge;}
371  amrex::ParticleReal getCharge () const {return charge;}
372  //amrex::Real getMass () {return mass;}
373  amrex::ParticleReal getMass () const {return mass;}
374 
375  int DoFieldIonization() const { return do_field_ionization; }
376 
377 #ifdef WARPX_QED
378  //Species for which QED effects are relevant should override these methods
379  virtual bool has_quantum_sync() const {return false;}
380  virtual bool has_breit_wheeler() const {return false;}
381 
382  int DoQED() const { return has_quantum_sync() || has_breit_wheeler(); }
383 #else
384  int DoQED() const { return false; }
385 #endif
386 
387  /* \brief This function tests if the current species
388  * is of a given PhysicalSpecies (specified as a template parameter).
389  * @tparam PhysSpec the PhysicalSpecies to test against
390  * @return the result of the test
391  */
392  template<PhysicalSpecies PhysSpec>
393  bool AmIA () const noexcept {return (physical_species == PhysSpec);}
394 
398  std::string getSpeciesTypeName () const {return species::get_name(physical_species);}
399 
406  virtual void resample (const int /*timestep*/, bool /*verbose*/) {}
407 
414  void defineAllParticleTiles () noexcept;
415 
416  virtual std::vector<std::string> getUserIntAttribs () const { return std::vector<std::string>{}; }
417 
418  virtual std::vector<std::string> getUserRealAttribs () const { return std::vector<std::string>{}; }
419 
421 
423 
424 #ifdef WARPX_QED
425  virtual BreitWheelerEngine* get_breit_wheeler_engine_ptr () const {return nullptr;}
426  virtual QuantumSynchrotronEngine* get_quantum_sync_engine_ptr () const {return nullptr;}
427 #endif
428 
429  void setDoNotPush (bool flag) { do_not_push = flag; }
430 
431 protected:
433 
434  amrex::ParticleReal charge;
435  amrex::ParticleReal mass;
437 
438  // Controls boundaries for particles exiting the domain
440 
443 
446 
447  bool do_not_push = false;
448  int do_not_gather = 0;
449 
450  // Whether to allow particles outside of the simulation domain to be
451  // initialized when they enter the domain.
452  // This is currently required because continuous injection does not
453  // support all features allowed by direct injection.
455 
468  std::string physical_element;
469 
470  int do_resampling = 0;
471 
474 
475 #ifdef WARPX_QED
476  //Species can receive a shared pointer to a QED engine (species for
477  //which this is relevant should override these functions)
478  virtual void
479  set_breit_wheeler_engine_ptr(const std::shared_ptr<BreitWheelerEngine>&){}
480  virtual void
481  set_quantum_sync_engine_ptr(const std::shared_ptr<QuantumSynchrotronEngine>&){}
482 
489 
490 #endif
495 
496 public:
497  using PairIndex = std::pair<int, int>;
498  using TmpParticleTile = std::array<amrex::Gpu::DeviceVector<amrex::ParticleReal>,
501 
503 
504  int getIonizationInitialLevel () const noexcept {return ionization_initial_level;}
505 
506 protected:
508 
509 private:
510  void particlePostLocate(ParticleType& p, const amrex::ParticleLocData& pld, int lev) override;
511 
512 };
513 
514 #endif
PhysicalSpecies
Definition: SpeciesPhysicalProperties.H:16
DtType
Definition: WarpXDtType.H:11
PushType
Definition: WarpXPushType.H:12
Definition: BreitWheelerEngineWrapper.H:294
Definition: NamedComponentParticleContainer.H:64
Definition: PlasmaInjector.H:42
Definition: QuantumSyncEngineWrapper.H:273
Definition: WarpXParticleContainer.H:53
WarpXParIter(ContainerType &pc, int level)
Definition: WarpXParticleContainer.cpp:77
std::array< RealVector, PIdx::nattribs > & GetAttribs()
Definition: WarpXParticleContainer.H:66
const RealVector & GetAttribs(int comp) const
Definition: WarpXParticleContainer.H:71
IntVector & GetiAttribs(int comp)
Definition: WarpXParticleContainer.H:81
RealVector & GetAttribs(int comp)
Definition: WarpXParticleContainer.H:76
const std::array< RealVector, PIdx::nattribs > & GetAttribs() const
Definition: WarpXParticleContainer.H:61
Definition: WarpXParticleContainer.H:111
amrex::Real self_fields_required_precision
Definition: WarpXParticleContainer.H:347
int do_continuous_injection
Definition: WarpXParticleContainer.H:454
virtual std::vector< std::string > getUserIntAttribs() const
Definition: WarpXParticleContainer.H:416
~WarpXParticleContainer() override=default
bool AmIA() const noexcept
Definition: WarpXParticleContainer.H:393
virtual void DefaultInitializeRuntimeAttributes(typename ContainerLike< amrex::PinnedArenaAllocator >::ParticleTileType &pinned_tile, int n_external_attr_real, int n_external_attr_int)=0
Virtual method to initialize runtime attributes. Must be overriden by each derived class.
amrex::Vector< amrex::ParticleReal > m_B_external_particle
Definition: WarpXParticleContainer.H:353
bool m_gather_from_main_grid
instead of gathering fields from the finest patch level, gather from the coarsest
Definition: WarpXParticleContainer.H:445
void AllocData()
Definition: WarpXParticleContainer.cpp:152
virtual PlasmaInjector * GetPlasmaInjector(const int)
Definition: WarpXParticleContainer.H:141
void defineAllParticleTiles() noexcept
Definition: WarpXParticleContainer.cpp:1518
virtual void PostRestart()=0
void particlePostLocate(ParticleType &p, const amrex::ParticleLocData &pld, int lev) override
Definition: WarpXParticleContainer.cpp:1538
virtual void ReadHeader(std::istream &is)=0
int self_fields_max_iters
Definition: WarpXParticleContainer.H:349
amrex::Real m_current_injection_position
Current injection position.
Definition: WarpXParticleContainer.H:357
int species_id
Definition: WarpXParticleContainer.H:432
std::string m_qed_breit_wheeler_ele_product_name
Definition: WarpXParticleContainer.H:484
virtual void WriteHeader(std::ostream &os) const =0
amrex::Gpu::DeviceVector< amrex::Real > adk_exp_prefactor
Definition: WarpXParticleContainer.H:465
int do_adk_correction
Definition: WarpXParticleContainer.H:457
amrex::Gpu::DeviceVector< amrex::Real > adk_power
Definition: WarpXParticleContainer.H:463
PhysicalSpecies physical_species
Definition: WarpXParticleContainer.H:436
bool do_not_push
Definition: WarpXParticleContainer.H:447
virtual void ContinuousFluxInjection(amrex::Real, amrex::Real)
Definition: WarpXParticleContainer.H:274
std::string getSpeciesTypeName() const
This function returns a string containing the name of the species type.
Definition: WarpXParticleContainer.H:398
int m_qed_quantum_sync_phot_product
Definition: WarpXParticleContainer.H:487
amrex::ParticleReal maxParticleVelocity(bool local=false)
Definition: WarpXParticleContainer.cpp:1424
virtual void InitIonizationModule()
Definition: WarpXParticleContainer.H:135
virtual void InitData()=0
amrex::Gpu::DeviceVector< amrex::Real > adk_prefactor
Definition: WarpXParticleContainer.H:464
void SetDoBackTransformedParticles(const bool do_back_transformed_particles)
Definition: WarpXParticleContainer.H:366
virtual 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, PushType push_type=PushType::Explicit)=0
amrex::ParticleReal sumParticleCharge(bool local=false)
Definition: WarpXParticleContainer.cpp:1333
int ionization_initial_level
Definition: WarpXParticleContainer.H:461
amrex::Real self_fields_absolute_tolerance
Definition: WarpXParticleContainer.H:348
amrex::Vector< amrex::FArrayBox > local_jx
Definition: WarpXParticleContainer.H:492
virtual void set_breit_wheeler_engine_ptr(const std::shared_ptr< BreitWheelerEngine > &)
Definition: WarpXParticleContainer.H:479
amrex::ParticleReal sumParticleWeight(bool local=false)
Definition: WarpXParticleContainer.cpp:1305
virtual void UpdateAntennaPosition(const amrex::Real)
Update antenna position for continuous injection of lasers in a boosted frame. Empty function for con...
Definition: WarpXParticleContainer.H:269
amrex::ParticleReal mass
Definition: WarpXParticleContainer.H:435
bool doContinuousInjection() const
Definition: WarpXParticleContainer.H:271
amrex::Vector< amrex::FArrayBox > local_jy
Definition: WarpXParticleContainer.H:493
std::unique_ptr< amrex::MultiFab > GetChargeDensity(int lev, bool local=false)
Definition: WarpXParticleContainer.cpp:1280
static void ReadParameters()
Definition: WarpXParticleContainer.cpp:140
int getIonizationInitialLevel() const noexcept
Definition: WarpXParticleContainer.H:504
std::array< amrex::Gpu::DeviceVector< amrex::ParticleReal >, TmpIdx::nattribs > TmpParticleTile
Definition: WarpXParticleContainer.H:499
amrex::Gpu::DeviceVector< amrex::Real > adk_correction_factors
Definition: WarpXParticleContainer.H:467
int ion_atomic_number
Definition: WarpXParticleContainer.H:460
bool m_do_back_transformed_particles
Definition: WarpXParticleContainer.H:473
amrex::Vector< amrex::FArrayBox > local_jz
Definition: WarpXParticleContainer.H:494
amrex::Gpu::DeviceVector< amrex::Real > ionization_energies
Definition: WarpXParticleContainer.H:462
amrex::ParticleReal getCharge() const
Definition: WarpXParticleContainer.H:371
TmpParticles tmp_particle_data
Definition: WarpXParticleContainer.H:507
virtual amrex::Vector< amrex::Parser * > getUserRealAttribParser() const
Definition: WarpXParticleContainer.H:422
void ApplyBoundaryConditions()
Apply particle BC.
Definition: WarpXParticleContainer.cpp:1560
virtual bool has_breit_wheeler() const
Definition: WarpXParticleContainer.H:380
virtual amrex::Vector< amrex::Parser * > getUserIntAttribParser() const
Definition: WarpXParticleContainer.H:420
virtual 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)=0
std::string m_qed_breit_wheeler_pos_product_name
Definition: WarpXParticleContainer.H:486
std::string m_qed_quantum_sync_phot_product_name
Definition: WarpXParticleContainer.H:488
virtual void ContinuousInjection(const amrex::RealBox &)
Definition: WarpXParticleContainer.H:263
WarpXParticleContainer & operator=(const WarpXParticleContainer &)=delete
ParticleBoundaries m_boundary_conditions
Definition: WarpXParticleContainer.H:439
int m_qed_breit_wheeler_pos_product
Definition: WarpXParticleContainer.H:485
int ionization_product
Definition: WarpXParticleContainer.H:458
virtual BreitWheelerEngine * get_breit_wheeler_engine_ptr() const
Definition: WarpXParticleContainer.H:425
int m_qed_breit_wheeler_ele_product
Definition: WarpXParticleContainer.H:483
bool do_splitting
Definition: WarpXParticleContainer.H:344
virtual void set_quantum_sync_engine_ptr(const std::shared_ptr< QuantumSynchrotronEngine > &)
Definition: WarpXParticleContainer.H:481
std::array< amrex::ParticleReal, 3 > meanParticleVelocity(bool local=false)
Definition: WarpXParticleContainer.cpp:1338
WarpXParticleContainer & operator=(WarpXParticleContainer &&)=default
void DepositCurrent(amrex::Vector< std::array< std::unique_ptr< amrex::MultiFab >, 3 > > &J, amrex::Real dt, amrex::Real relative_time)
Deposit current density.
Definition: WarpXParticleContainer.cpp:821
bool initialize_self_fields
Definition: WarpXParticleContainer.H:346
int self_fields_verbosity
Definition: WarpXParticleContainer.H:350
virtual std::vector< std::string > getUserRealAttribs() const
Definition: WarpXParticleContainer.H:418
void DepositCharge(amrex::Vector< std::unique_ptr< amrex::MultiFab > > &rho, bool local=false, bool reset=false, bool apply_boundary_and_scale_volume=false, bool interpolate_across_levels=true, int icomp=0)
Deposit charge density.
Definition: WarpXParticleContainer.cpp:1171
virtual bool has_quantum_sync() const
Definition: WarpXParticleContainer.H:379
WarpXParticleContainer(amrex::AmrCore *amr_core, int ispecies)
Definition: WarpXParticleContainer.cpp:89
std::string physical_element
Definition: WarpXParticleContainer.H:468
virtual QuantumSynchrotronEngine * get_quantum_sync_engine_ptr() const
Definition: WarpXParticleContainer.H:426
void deleteInvalidParticles()
Definition: WarpXParticleContainer.cpp:310
int split_type
Definition: WarpXParticleContainer.H:360
void PushX(amrex::Real dt)
Definition: WarpXParticleContainer.cpp:1451
WarpXParticleContainer(WarpXParticleContainer &&)=default
void AddNParticles(int lev, long n, amrex::Vector< amrex::ParticleReal > const &x, amrex::Vector< amrex::ParticleReal > const &y, amrex::Vector< amrex::ParticleReal > const &z, amrex::Vector< amrex::ParticleReal > const &ux, amrex::Vector< amrex::ParticleReal > const &uy, amrex::Vector< amrex::ParticleReal > const &uz, int nattr_real, amrex::Vector< amrex::Vector< amrex::ParticleReal >> const &attr_real, int nattr_int, amrex::Vector< amrex::Vector< int >> const &attr_int, int uniqueparticles, amrex::Long id=-1)
Adds n particles to the simulation.
Definition: WarpXParticleContainer.cpp:161
TmpParticles getTmpParticleData() const noexcept
Definition: WarpXParticleContainer.H:502
friend MultiParticleContainer
Definition: WarpXParticleContainer.H:113
amrex::Vector< amrex::ParticleReal > m_E_external_particle
Definition: WarpXParticleContainer.H:354
std::string ionization_product_name
Definition: WarpXParticleContainer.H:459
int getSpeciesId() const
Definition: WarpXParticleContainer.H:276
virtual void resample(const int, bool)
Virtual method to resample the species. Overriden by PhysicalParticleContainer only....
Definition: WarpXParticleContainer.H:406
int DoFieldIonization() const
Definition: WarpXParticleContainer.H:375
int do_not_deposit
Definition: WarpXParticleContainer.H:345
void setDoNotPush(bool flag)
Definition: WarpXParticleContainer.H:429
WarpXParticleContainer(const WarpXParticleContainer &)=delete
amrex::ParticleReal getMass() const
Definition: WarpXParticleContainer.H:373
int DoQED() const
Definition: WarpXParticleContainer.H:382
int do_resampling
Definition: WarpXParticleContainer.H:470
int do_not_gather
Definition: WarpXParticleContainer.H:448
static void BackwardCompatibility()
bool m_deposit_on_main_grid
instead of depositing (current, charge) on the finest patch level, deposit to the coarsest grid
Definition: WarpXParticleContainer.H:442
amrex::Vector< amrex::FArrayBox > local_rho
Definition: WarpXParticleContainer.H:491
std::pair< int, int > PairIndex
Definition: WarpXParticleContainer.H:497
int do_field_ionization
Definition: WarpXParticleContainer.H:456
amrex::ParticleReal charge
Definition: WarpXParticleContainer.H:434
typename SoA::RealVector RealVector
typename SoA::IntVector IntVector
typename SoA::RealVector RealVector
std::string get_name(const PhysicalSpecies &ps)
Returns the name associated to a PhysicalSpecies.
Definition: SpeciesPhysicalProperties.cpp:295
float dt
Definition: stencil.py:442
Definition: ParticleBoundaries.H:19
@ nattribs
Definition: WarpXParticleContainer_fwd.H:39