7 #ifndef WARPX_PARTICLES_PUSHER_PUSHSELECTOR_H_
8 #define WARPX_PARTICLES_PUSHER_PUSHSELECTOR_H_
44 template <
int do_sync>
50 amrex::ParticleReal& ux,
51 amrex::ParticleReal& uy,
52 amrex::ParticleReal& uz,
53 const amrex::ParticleReal Ex,
54 const amrex::ParticleReal Ey,
55 const amrex::ParticleReal Ez,
56 const amrex::ParticleReal Bx,
57 const amrex::ParticleReal By,
58 const amrex::ParticleReal Bz,
60 const amrex::ParticleReal m,
61 const amrex::ParticleReal a_q,
62 const int pusher_algo,
66 const amrex::Real t_chi_max,
70 amrex::ParticleReal qp = a_q;
71 if (ion_lev) { qp *= ion_lev; }
73 if (do_copy) copyAttribs(
i);
77 if constexpr (do_sync) {
81 if (chi < t_chi_max) {
91 amrex::ParticleReal
x,
y,
z;
92 GetPosition(
i,
x,
y,
z);
94 SetPosition(
i,
x,
y,
z);
102 amrex::ParticleReal
x,
y,
z;
103 GetPosition(
i,
x,
y,
z);
105 SetPosition(
i,
x,
y,
z);
111 amrex::ParticleReal
x,
y,
z;
112 GetPosition(
i,
x,
y,
z);
114 SetPosition(
i,
x,
y,
z);
119 amrex::ParticleReal
x,
y,
z;
120 GetPosition(
i,
x,
y,
z);
122 SetPosition(
i,
x,
y,
z);
127 amrex::ParticleReal
x,
y,
z;
128 GetPosition(
i,
x,
y,
z);
130 SetPosition(
i,
x,
y,
z);
#define AMREX_FORCE_INLINE
AMREX_GPU_DEVICE AMREX_FORCE_INLINE void doParticlePush(const GetParticlePosition &GetPosition, const SetParticlePosition &SetPosition, const CopyParticleAttribs ©Attribs, const long i, 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 int ion_lev, const amrex::ParticleReal m, const amrex::ParticleReal a_q, const int pusher_algo, const int do_crr, const int do_copy, const amrex::Real t_chi_max, const amrex::Real dt)
Push position and momentum for a single particle.
Definition: PushSelector.H:46
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
AMREX_GPU_HOST_DEVICE AMREX_INLINE void UpdateMomentumHigueraCary(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: UpdateMomentumHigueraCary.H:22
AMREX_GPU_HOST_DEVICE AMREX_INLINE void UpdateMomentumVay(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: UpdateMomentumVay.H:20
AMREX_GPU_HOST_DEVICE AMREX_INLINE void UpdatePosition(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)
Push the particle's positions over one timestep, given the value of its momenta ux,...
Definition: UpdatePosition.H:21
def y
Definition: Excitation_Flag_Generator.py:76
def x
Formats datastring to remove "+" at the end of the string #####.
Definition: Excitation_Flag_Generator.py:75
def z
Definition: Excitation_Flag_Generator.py:77
AMREX_GPU_DEVICE AMREX_FORCE_INLINE amrex::Real chi_ele_pos(const amrex::ParticleReal px, const amrex::ParticleReal py, const amrex::ParticleReal pz, const amrex::ParticleReal ex, const amrex::ParticleReal ey, const amrex::ParticleReal ez, const amrex::ParticleReal bx, const amrex::ParticleReal by, const amrex::ParticleReal bz)
Definition: QedChiFunctions.H:53
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void ignore_unused(const Ts &...)
i
Definition: check_interp_points_and_weights.py:174
int dt
Definition: stencil.py:440
Functor that creates copies of the current particle positions and momenta for later use....
Definition: CopyParticleAttribs.H:22
Functor that can be used to extract the positions of the macroparticles inside a ParallelFor kernel.
Definition: GetAndSetPosition.H:53
@ HigueraCary
Definition: WarpXAlgorithmSelection.H:84
@ Boris
Definition: WarpXAlgorithmSelection.H:82
@ Vay
Definition: WarpXAlgorithmSelection.H:83
Functor that can be used to modify the positions of the macroparticles, inside a ParallelFor kernel.
Definition: GetAndSetPosition.H:150