7 #ifndef WARPX_PARTICLE_UTILS_H_
8 #define WARPX_PARTICLE_UTILS_H_
45 void getEnergy ( amrex::ParticleReal
const u2,
double const mass,
49 using namespace amrex::literals;
68 double const M,
double&
gamma,
double& energy )
71 using namespace amrex::literals;
77 2.0_rt * m * M * u2 / (
gamma + 1.0_rt)
78 / (M + m +
sqrt(m*m + M*M + 2.0_rt * m * M *
gamma))
93 amrex::ParticleReal& uz,
94 amrex::ParticleReal
const Vx, amrex::ParticleReal
const Vy,
95 amrex::ParticleReal
const Vz )
99 const auto V2 = (Vx*Vx + Vy*Vy + Vz*Vz);
100 const auto gamma_V = 1.0_prt /
sqrt(1.0_prt - V2 / c2);
101 const auto gamma_u =
sqrt(1.0_prt + (ux*ux + uy*uy + uz*uz) / c2);
108 ux = vx * (1.0_prt + (gamma_V - 1.0_prt) * Vx*Vx/V2)
109 + vy * (gamma_V - 1.0_prt) * Vx*Vy/V2
110 + vz * (gamma_V - 1.0_prt) * Vx*Vz/V2
111 - gamma_V * Vx * gamma_u;
113 uy = vy * (1.0_prt + (gamma_V - 1.0_prt) * Vy*Vy/V2)
114 + vx * (gamma_V - 1.0_prt) * Vx*Vy/V2
115 + vz * (gamma_V - 1.0_prt) * Vy*Vz/V2
116 - gamma_V * Vy * gamma_u;
118 uz = vz * (1.0_prt + (gamma_V - 1.0_prt) * Vz*Vz/V2)
119 + vx * (gamma_V - 1.0_prt) * Vx*Vz/V2
120 + vy * (gamma_V - 1.0_prt) * Vy*Vz/V2
121 - gamma_V * Vz * gamma_u;
140 using namespace amrex::literals;
144 auto const xy =
sqrt(1_prt -
z*
z);
160 amrex::ParticleReal& uz,
161 const amrex::ParticleReal vp,
164 amrex::ParticleReal x,
y,
z;
182 const auto xlo = tilebox.
lo();
183 const auto xhi = tilebox.
hi();
185 && (xlo[1] <= point.
y) && (point.
y <= xhi[1]),
186 && (xlo[2] <= point.
z) && (point.
z <= xhi[2]));
#define AMREX_GPU_HOST_DEVICE
#define AMREX_D_TERM(a, b, c)
AMREX_GPU_HOST_DEVICE const Real * lo() const &noexcept
AMREX_GPU_HOST_DEVICE const Real * hi() const &noexcept
def y
Definition: Excitation_Flag_Generator.py:76
def z
Definition: Excitation_Flag_Generator.py:77
Definition: ParticleUtils.cpp:25
AMREX_GPU_HOST_DEVICE AMREX_INLINE void getCollisionEnergy(amrex::ParticleReal const u2, double const m, double const M, double &gamma, double &energy)
Return (relativistic) collision energy assuming the target (with mass M) is stationary and the projec...
Definition: ParticleUtils.H:67
AMREX_GPU_HOST_DEVICE AMREX_INLINE void doLorentzTransform(amrex::ParticleReal &ux, amrex::ParticleReal &uy, amrex::ParticleReal &uz, amrex::ParticleReal const Vx, amrex::ParticleReal const Vy, amrex::ParticleReal const Vz)
Perform a Lorentz transformation of the given velocity to a frame moving with velocity (Vx,...
Definition: ParticleUtils.H:92
AMREX_GPU_HOST_DEVICE AMREX_INLINE void getEnergy(amrex::ParticleReal const u2, double const mass, double &energy)
Return (relativistic) particle energy given velocity and mass. Note the use of double since this calc...
Definition: ParticleUtils.H:45
AMREX_GPU_HOST_DEVICE AMREX_INLINE void RandomizeVelocity(amrex::ParticleReal &ux, amrex::ParticleReal &uy, amrex::ParticleReal &uz, const amrex::ParticleReal vp, amrex::RandomEngine const &engine)
Function to perform scattering of a particle that results in a random velocity vector with given magn...
Definition: ParticleUtils.H:159
AMREX_GPU_HOST_DEVICE AMREX_INLINE void getRandomVector(amrex::ParticleReal &x, amrex::ParticleReal &y, amrex::ParticleReal &z, amrex::RandomEngine const &engine)
Generate random unit vector in 3 dimensions https://mathworld.wolfram.com/SpherePointPicking....
Definition: ParticleUtils.H:134
AMREX_GPU_HOST_DEVICE AMREX_INLINE bool containsInclusive(amrex::RealBox const &tilebox, amrex::XDim3 const point)
Definition: ParticleUtils.H:181
ParticleBins findParticlesInEachCell(int const lev, MFIter const &mfi, ParticleTileType const &ptile)
Find the particles and count the particles that are in each cell. More specifically this function ret...
Definition: ParticleUtils.cpp:37
static constexpr auto c
vacuum speed of light [m/s]
Definition: constant.H:44
static constexpr auto q_e
elementary charge [C]
Definition: constant.H:50
static constexpr amrex::Real pi
ratio of a circle's circumference to its diameter
Definition: constant.H:23
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE GpuComplex< T > sqrt(const GpuComplex< T > &a_z) noexcept
int gamma
Definition: stencil.py:446