diff options
Diffstat (limited to 'Source')
-rw-r--r-- | Source/Particles/PhysicalParticleContainer.cpp | 5 | ||||
-rw-r--r-- | Source/Particles/Pusher/UpdateMomentumBoris.H | 3 | ||||
-rw-r--r-- | Source/Particles/Pusher/UpdateMomentumVay.H | 3 |
3 files changed, 7 insertions, 4 deletions
diff --git a/Source/Particles/PhysicalParticleContainer.cpp b/Source/Particles/PhysicalParticleContainer.cpp index a1d9a9afb..9441a4d91 100644 --- a/Source/Particles/PhysicalParticleContainer.cpp +++ b/Source/Particles/PhysicalParticleContainer.cpp @@ -1754,6 +1754,7 @@ PhysicalParticleContainer::PushPX(WarpXParIter& pti, Real* AMREX_RESTRICT x = xp.dataPtr(); Real* AMREX_RESTRICT y = yp.dataPtr(); Real* AMREX_RESTRICT z = zp.dataPtr(); + Real* AMREX_RESTRICT gi = giv.dataPtr(); Real* AMREX_RESTRICT ux = attribs[PIdx::ux].dataPtr(); Real* AMREX_RESTRICT uy = attribs[PIdx::uy].dataPtr(); Real* AMREX_RESTRICT uz = attribs[PIdx::uz].dataPtr(); @@ -1775,7 +1776,7 @@ PhysicalParticleContainer::PushPX(WarpXParIter& pti, if (WarpX::particle_pusher_algo == ParticlePusherAlgo::Boris){ amrex::ParallelFor( pti.numParticles(), [=] AMREX_GPU_DEVICE (long i) { - UpdateMomentumBoris( ux[i], uy[i], uz[i], + UpdateMomentumBoris( ux[i], uy[i], uz[i], gi[i], Ex[i], Ey[i], Ez[i], Bx[i], By[i], Bz[i], q, m, dt); UpdatePosition( x[i], y[i], z[i], ux[i], uy[i], uz[i], dt ); @@ -1784,7 +1785,7 @@ PhysicalParticleContainer::PushPX(WarpXParIter& pti, } else if (WarpX::particle_pusher_algo == ParticlePusherAlgo::Vay) { amrex::ParallelFor( pti.numParticles(), [=] AMREX_GPU_DEVICE (long i) { - UpdateMomentumVay( ux[i], uy[i], uz[i], + UpdateMomentumVay( ux[i], uy[i], uz[i], gi[i], Ex[i], Ey[i], Ez[i], Bx[i], By[i], Bz[i], q, m, dt); UpdatePosition( x[i], y[i], z[i], ux[i], uy[i], uz[i], dt ); diff --git a/Source/Particles/Pusher/UpdateMomentumBoris.H b/Source/Particles/Pusher/UpdateMomentumBoris.H index a33058347..71e9a8ed1 100644 --- a/Source/Particles/Pusher/UpdateMomentumBoris.H +++ b/Source/Particles/Pusher/UpdateMomentumBoris.H @@ -7,7 +7,7 @@ * given the value of its momenta `ux`, `uy`, `uz` */ AMREX_GPU_HOST_DEVICE AMREX_INLINE void UpdateMomentumBoris( - amrex::Real& ux, amrex::Real& uy, amrex::Real& uz, + amrex::Real& ux, amrex::Real& uy, amrex::Real& uz, amrex::Real& gaminv, const amrex::Real Ex, const amrex::Real Ey, const amrex::Real Ez, const amrex::Real Bx, const amrex::Real By, const amrex::Real Bz, const amrex::Real q, const amrex::Real m, const amrex::Real dt ) @@ -41,6 +41,7 @@ void UpdateMomentumBoris( ux += econst*Ex; uy += econst*Ey; uz += econst*Ez; + gaminv = 1./std::sqrt(1. + (ux*ux + uy*uy + uz*uz)*inv_c2); } #endif // WARPX_PARTICLES_PUSHER_UPDATEMOMENTUM_BORIS_H_ diff --git a/Source/Particles/Pusher/UpdateMomentumVay.H b/Source/Particles/Pusher/UpdateMomentumVay.H index 1f0f19e63..044297e22 100644 --- a/Source/Particles/Pusher/UpdateMomentumVay.H +++ b/Source/Particles/Pusher/UpdateMomentumVay.H @@ -9,7 +9,7 @@ * given the value of its momenta `ux`, `uy`, `uz` */ AMREX_GPU_HOST_DEVICE AMREX_INLINE void UpdateMomentumVay( - amrex::Real& ux, amrex::Real& uy, amrex::Real& uz, + amrex::Real& ux, amrex::Real& uy, amrex::Real& uz, amrex::Real& gaminv, const amrex::Real Ex, const amrex::Real Ey, const amrex::Real Ez, const amrex::Real Bx, const amrex::Real By, const amrex::Real Bz, const amrex::Real q, const amrex::Real m, const amrex::Real dt ) @@ -48,6 +48,7 @@ void UpdateMomentumVay( ux = s*(uxpr+tx*tu+uypr*tz-uzpr*ty); uy = s*(uypr+ty*tu+uzpr*tx-uxpr*tz); uz = s*(uzpr+tz*tu+uxpr*ty-uypr*tx); + gaminv = 1./std::sqrt(1. + (ux*ux + uy*uy + uz*uz)*invclightsq); } #endif // WARPX_PARTICLES_PUSHER_UPDATEMOMENTUM_VAY_H_ |