ImpactX
ImpactXParticleContainer.H
Go to the documentation of this file.
1 /* Copyright 2022-2023 The Regents of the University of California, through Lawrence
2  * Berkeley National Laboratory (subject to receipt of any required
3  * approvals from the U.S. Dept. of Energy). All rights reserved.
4  *
5  * This file is part of ImpactX.
6  *
7  * Authors: Axel Huebl
8  * License: BSD-3-Clause-LBNL
9  */
10 #ifndef IMPACTX_PARTICLE_CONTAINER_H
11 #define IMPACTX_PARTICLE_CONTAINER_H
12 
13 #include "ReferenceParticle.H"
14 
15 #include <AMReX_AmrCoreFwd.H>
16 #include <AMReX_BaseFwd.H>
17 #include <AMReX_MultiFab.H>
18 #include <AMReX_ParIter.H>
19 #include <AMReX_Particles.H>
20 
21 #include <AMReX_IntVect.H>
22 #include <AMReX_Vector.H>
23 
24 #include <optional>
25 #include <tuple>
26 #include <unordered_map>
27 
28 
29 namespace impactx
30 {
38  struct RealAoS
39  {
40  enum
41  {
42  x,
43  y,
44  z,
45  };
46  };
47 
51  struct RealSoA
52  {
53  enum
54  {
55  ux,
56  uy,
57  pt,
58  m_qm,
59  w,
60  nattribs
61  };
62  };
63 
67  struct IntSoA
68  {
69  enum
70  {
71  nattribs
72  };
73  };
74 
80  class ParIter
81  : public amrex::ParIter<0, 0, RealSoA::nattribs, IntSoA::nattribs>
82  {
83  public:
85 
86  ParIter (ContainerType& pc, int level);
87 
88  ParIter (ContainerType& pc, int level, amrex::MFItInfo& info);
89  };
90 
97  : public amrex::ParConstIter<0, 0, RealSoA::nattribs, IntSoA::nattribs>
98  {
99  public:
101 
102  ParConstIter (ContainerType& pc, int level);
103 
104  ParConstIter (ContainerType& pc, int level, amrex::MFItInfo& info);
105  };
106 
112  : public amrex::ParticleContainer<0, 0, RealSoA::nattribs, IntSoA::nattribs>
113  {
114  public:
117 
120 
123 
125  virtual ~ImpactXParticleContainer() = default;
126 
144  void
145  AddNParticles (int lev,
152  amrex::ParticleReal const & qm,
153  amrex::ParticleReal const & bchchg);
154 
159  void
160  SetRefParticle (RefPart const refpart);
161 
166  RefPart &
167  GetRefParticle ();
168 
173  RefPart const
174  GetRefParticle () const;
175 
179  void SetRefParticleEdge ();
180 
183  int
184  GetParticleShape () const { return m_particle_shape.value(); }
185 
192  void SetParticleShape ();
193 
202  void SetParticleShape (int const order);
203 
208  std::tuple<
209  amrex::ParticleReal, amrex::ParticleReal,
210  amrex::ParticleReal, amrex::ParticleReal,
211  amrex::ParticleReal, amrex::ParticleReal>
212  MinAndMaxPositions ();
213 
218  std::tuple<
219  amrex::ParticleReal, amrex::ParticleReal,
220  amrex::ParticleReal, amrex::ParticleReal,
221  amrex::ParticleReal, amrex::ParticleReal>
222  MeanAndStdPositions ();
223 
233  void
234  DepositCharge (std::unordered_map<int, amrex::MultiFab> & rho,
235  amrex::Vector<amrex::IntVect> const & ref_ratio);
236 
237  private:
238 
241 
243  std::optional<int> m_particle_shape;
244 
245  }; // ImpactXParticleContainer
246 
247 } // namespace impactx
248 
249 #endif // IMPACTX_PARTICLE_CONTAINER_H
charge to mass ratio, in q_e/m_e (q_e/eV)
Definition: ImpactXParticleContainer.H:58
momentum in z, scaled by the magnitude of the reference momentum [unitless] (at fixed t) OR energy de...
Definition: ImpactXParticleContainer.H:57
Definition: ImpactXParticleContainer.H:80
particle weight, unitless
Definition: ImpactXParticleContainer.H:59
momentum in y, scaled by the magnitude of the reference momentum [unitless] (at fixed t or s) ...
Definition: ImpactXParticleContainer.H:56
Definition: ImpactX.cpp:31
momentum in x, scaled by the magnitude of the reference momentum [unitless] (at fixed t or s) ...
Definition: ImpactXParticleContainer.H:55
Definition: ImpactXParticleContainer.H:38
position in y [m] (at fixed t OR fixed s)
Definition: ImpactXParticleContainer.H:43
int GetParticleShape() const
Definition: ImpactXParticleContainer.H:184
Definition: ImpactXParticleContainer.H:96
std::optional< int > m_particle_shape
the particle shape
Definition: ImpactXParticleContainer.H:243
Definition: ReferenceParticle.H:29
position in x [m] (at fixed t OR fixed s)
Definition: ImpactXParticleContainer.H:42
Definition: ImpactXParticleContainer.H:111
RefPart m_refpart
the reference particle for the beam in the particle container
Definition: ImpactXParticleContainer.H:240
Definition: ImpactXParticleContainer.H:67
position in z [m] (at fixed t) OR time-of-flight ct [m] (at fixed s)
Definition: ImpactXParticleContainer.H:44
Definition: ImpactXParticleContainer.H:51