7 #ifndef WARPX_PARTICLES_PUSHER_UPDATEMOMENTUM_BORIS_WITHRR_H_
8 #define WARPX_PARTICLES_PUSHER_UPDATEMOMENTUM_BORIS_WITHRR_H_
22 amrex::ParticleReal& ux, amrex::ParticleReal& uy, amrex::ParticleReal& uz,
23 const amrex::ParticleReal Ex,
const amrex::ParticleReal Ey,
const amrex::ParticleReal Ez,
24 const amrex::ParticleReal Bx,
const amrex::ParticleReal By,
const amrex::ParticleReal Bz,
25 const amrex::ParticleReal q,
const amrex::ParticleReal m,
const amrex::Real
dt )
27 using namespace amrex::literals;
30 const amrex::ParticleReal ux_old = ux;
31 const amrex::ParticleReal uy_old = uy;
32 const amrex::ParticleReal uz_old = uz;
45 const amrex::ParticleReal ux_n = (ux+ux_old)*0.5_prt;
46 const amrex::ParticleReal uy_n = (uy+uy_old)*0.5_prt;
47 const amrex::ParticleReal uz_n = (uz+uz_old)*0.5_prt;
50 const amrex::ParticleReal gamma_n = std::sqrt( 1._prt +
51 (ux_n*ux_n + uy_n*uy_n + uz_n*uz_n)*inv_c2);
52 const amrex::ParticleReal inv_gamma_n = 1.0_prt/gamma_n;
55 const amrex::ParticleReal vx_n = ux_n*inv_gamma_n;
56 const amrex::ParticleReal vy_n = uy_n*inv_gamma_n;
57 const amrex::ParticleReal vz_n = uz_n*inv_gamma_n;
63 const amrex::ParticleReal flx_q = (Ex + vy_n*Bz - vz_n*By);
64 const amrex::ParticleReal fly_q = (Ey + vz_n*Bx - vx_n*Bz);
65 const amrex::ParticleReal flz_q = (Ez + vx_n*By - vy_n*Bx);
66 const amrex::ParticleReal fl_q2 = flx_q*flx_q + fly_q*fly_q + flz_q*flz_q;
69 const amrex::ParticleReal bdotE = (bx_n*Ex + by_n*Ey + bz_n*Ez);
70 const amrex::ParticleReal bdotE2 = bdotE*bdotE;
71 const amrex::ParticleReal coeff = gamma_n*gamma_n*(fl_q2-bdotE2);
74 const amrex::ParticleReal q_over_mc = q/(m*
PhysConst::c);
75 const amrex::ParticleReal RRcoeff = (2.0_prt/3.0_prt)*
PhysConst::r_e*q_over_mc*q_over_mc;
78 const amrex::ParticleReal frx =
79 RRcoeff*(
PhysConst::c*(fly_q*Bz - flz_q*By) + bdotE*Ex - coeff*bx_n);
80 const amrex::ParticleReal fry =
81 RRcoeff*(
PhysConst::c*(flz_q*Bx - flx_q*Bz) + bdotE*Ey - coeff*by_n);
82 const amrex::ParticleReal frz =
83 RRcoeff*(
PhysConst::c*(flx_q*By - fly_q*Bx) + bdotE*Ez - coeff*bz_n);
#define AMREX_GPU_HOST_DEVICE
AMREX_GPU_HOST_DEVICE AMREX_INLINE void UpdateMomentumBoris(amrex::ParticleReal &ux, amrex::ParticleReal &uy, amrex::ParticleReal &uz, const amrex::ParticleReal Ex, const amrex::ParticleReal Ey, const amrex::ParticleReal Ez, const amrex::ParticleReal Bx, const amrex::ParticleReal By, const amrex::ParticleReal Bz, const amrex::ParticleReal q, const amrex::ParticleReal m, const amrex::Real dt)
Push the particle's positions over one timestep, given the value of its momenta ux,...
Definition: UpdateMomentumBoris.H:16
AMREX_GPU_HOST_DEVICE AMREX_INLINE void UpdateMomentumBorisWithRadiationReaction(amrex::ParticleReal &ux, amrex::ParticleReal &uy, amrex::ParticleReal &uz, const amrex::ParticleReal Ex, const amrex::ParticleReal Ey, const amrex::ParticleReal Ez, const amrex::ParticleReal Bx, const amrex::ParticleReal By, const amrex::ParticleReal Bz, const amrex::ParticleReal q, const amrex::ParticleReal m, const amrex::Real dt)
Definition: UpdateMomentumBorisWithRadiationReaction.H:21
static constexpr auto r_e
classical electron radius = 1./(4*pi*ep0) * q_e*q_e/(m_e*c*c) [m]
Definition: constant.H:63
static constexpr auto c
vacuum speed of light [m/s]
Definition: constant.H:44
float dt
Definition: stencil.py:442