aboutsummaryrefslogtreecommitdiff
path: root/Source/Particles/Pusher/UpdatePositionPhoton.H
blob: f95c2b09de68b4163f7a4e5537f0d821d9803d66 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#ifndef WARPX_PARTICLES_PUSHER_UPDATEPOSITIONPHOTON_H_
#define WARPX_PARTICLES_PUSHER_UPDATEPOSITIONPHOTON_H_

#include <WarpXConst.H>

#include <AMReX_FArrayBox.H>
#include <AMReX_REAL.H>

/* \brief Push the position of a photon particle over one timestep,
 *    given the value of its momenta `ux`, `uy`, `uz` */
AMREX_GPU_HOST_DEVICE AMREX_INLINE
void UpdatePositionPhoton(
    amrex::ParticleReal& x, amrex::ParticleReal& y, amrex::ParticleReal& z,
    const amrex::ParticleReal ux, const amrex::ParticleReal uy, const amrex::ParticleReal uz,
    const amrex::Real dt )
{
    // Compute speed of light over inverse of momentum modulus
    const amrex::Real c_over_umod = PhysConst::c/std::sqrt(ux*ux + uy*uy + uz*uz);

    // Update positions over one time step
    x += ux * c_over_umod * dt;
#if (defined WARPX_DIM_3D) || (defined WARPX_DIM_RZ) // RZ pushes particles in 3D
    y += uy * c_over_umod * dt;
#endif
    z += uz * c_over_umod * dt;

}

#endif // WARPX_PARTICLES_PUSHER_UPDATEPOSITION_H_