7 #ifndef WARPX_BACKTRANSFORMPARTICLEFUNCTOR_H_
8 #define WARPX_BACKTRANSFORMPARTICLEFUNCTOR_H_
36 amrex::Real current_z_boost, amrex::Real old_z_boost,
49 template <
typename SrcData>
54 amrex::ParticleReal xp, yp, zp;
93 amrex::Real t_boost, amrex::Real
dt,
94 amrex::Real t_lab,
int a_offset = 0);
105 template <
typename DstData,
typename SrcData>
107 void operator () (
const DstData& dst,
const SrcData& src,
int i_src,
int i_dst)
const noexcept
110 using namespace amrex::literals;
112 amrex::ParticleReal xpnew, ypnew, zpnew;
114 const amrex::Real gamma_new_p = std::sqrt(1.0_rt +
m_inv_c2*
118 const amrex::Real gamma_old_p = std::sqrt(1.0_rt +
m_inv_c2*
131 const amrex::Real weight_old = (t_new_p -
m_t_lab)
132 / (t_new_p - t_old_p);
133 const amrex::Real weight_new = (
m_t_lab - t_old_p)
134 / (t_new_p - t_old_p);
136 const amrex::ParticleReal xp =
m_xpold[i_src] * weight_old + xpnew * weight_new;
137 const amrex::ParticleReal yp =
m_ypold[i_src] * weight_old + ypnew * weight_new;
138 const amrex::ParticleReal zp = z_old_p * weight_old + z_new_p * weight_new;
139 const amrex::ParticleReal uxp =
m_uxpold[i_src] * weight_old
141 const amrex::ParticleReal uyp =
m_uypold[i_src] * weight_old
143 const amrex::ParticleReal uzp = uz_old_p * weight_old
144 + uz_new_p * weight_new;
145 #if defined (WARPX_DIM_3D)
146 dst.m_rdata[
PIdx::x][i_dst] = xp;
147 dst.m_rdata[PIdx::y][i_dst] = yp;
148 dst.m_rdata[
PIdx::z][i_dst] = zp;
149 #elif defined (WARPX_DIM_RZ)
150 dst.m_rdata[
PIdx::x][i_dst] = std::sqrt(xp*xp + yp*yp);
151 dst.m_rdata[
PIdx::z][i_dst] = zp;
152 dst.m_rdata[
PIdx::theta][i_dst] = std::atan2(yp, xp);
153 #elif defined (WARPX_DIM_XZ)
154 dst.m_rdata[
PIdx::x][i_dst] = xp;
155 dst.m_rdata[
PIdx::z][i_dst] = zp;
157 #elif defined (WARPX_DIM_1D_Z)
158 dst.m_rdata[
PIdx::z][i_dst] = zp;
204 void InitData()
override;
218 void PrepareFunctorData (
int i_buffer,
bool z_slice_in_domain, amrex::Real old_z_boost,
219 amrex::Real current_z_boost, amrex::Real t_lab,
220 int snapshot_full)
override;
#define AMREX_GPU_HOST_DEVICE
BackTransform functor to select particles and Lorentz Transform them and store in particle buffers.
Definition: BackTransformParticleFunctor.H:199
std::string m_species_name
Definition: BackTransformParticleFunctor.H:225
amrex::Vector< amrex::Real > m_t_lab
Definition: BackTransformParticleFunctor.H:233
amrex::Vector< int > m_perform_backtransform
Definition: BackTransformParticleFunctor.H:238
int m_num_buffers
Definition: BackTransformParticleFunctor.H:227
amrex::Vector< amrex::Real > m_current_z_boost
Definition: BackTransformParticleFunctor.H:229
amrex::Vector< amrex::Real > m_old_z_boost
Definition: BackTransformParticleFunctor.H:231
Functor to compute a diagnostic and store the result in existing ParticleContainer.
Definition: ComputeParticleDiagFunctor.H:19
Definition: NamedComponentParticleContainer.H:64
Definition: WarpXParticleContainer.H:53
Definition: WarpXParticleContainer.H:111
amrex::Vector< std::map< PairIndex, TmpParticleTile > > TmpParticles
Definition: WarpXParticleContainer.H:500
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void ignore_unused(const Ts &...)
i
Definition: check_interp_points_and_weights.py:174
float dt
Definition: stencil.py:442
Transform functor to Lorentz-transform particles and obtain lab-frame data.
Definition: BackTransformParticleFunctor.H:78
amrex::Real m_betaboost
Definition: BackTransformParticleFunctor.H:185
amrex::Real m_dt
Definition: BackTransformParticleFunctor.H:190
amrex::Real m_t_boost
Definition: BackTransformParticleFunctor.H:189
amrex::Real m_inv_c2
Definition: BackTransformParticleFunctor.H:188
const amrex::ParticleReal *AMREX_RESTRICT m_wpnew
Definition: BackTransformParticleFunctor.H:182
amrex::Real m_gammaboost
Definition: BackTransformParticleFunctor.H:184
amrex::ParticleReal *AMREX_RESTRICT m_uzpold
Definition: BackTransformParticleFunctor.H:177
AMREX_GPU_HOST_DEVICE void operator()(const DstData &dst, const SrcData &src, int i_src, int i_dst) const noexcept
Functor call. This method computes the Lorentz-transform for particle attributes to obtain the lab-fr...
Definition: BackTransformParticleFunctor.H:107
amrex::ParticleReal *AMREX_RESTRICT m_zpold
Definition: BackTransformParticleFunctor.H:173
amrex::ParticleReal *AMREX_RESTRICT m_uypold
Definition: BackTransformParticleFunctor.H:176
amrex::ParticleReal *AMREX_RESTRICT m_uxpold
Definition: BackTransformParticleFunctor.H:175
amrex::Real m_uzfrm
Definition: BackTransformParticleFunctor.H:187
LorentzTransformParticles(const WarpXParIter &a_pti, TmpParticles &tmp_particle_data, amrex::Real t_boost, amrex::Real dt, amrex::Real t_lab, int a_offset=0)
Constructor of the LorentzTransformParticles functor.
Definition: BackTransformParticleFunctor.cpp:32
amrex::Real m_t_lab
Definition: BackTransformParticleFunctor.H:191
amrex::ParticleReal *AMREX_RESTRICT m_ypold
Definition: BackTransformParticleFunctor.H:172
const amrex::ParticleReal *AMREX_RESTRICT m_uxpnew
Definition: BackTransformParticleFunctor.H:179
amrex::Real m_Phys_c
Definition: BackTransformParticleFunctor.H:186
amrex::ParticleReal *AMREX_RESTRICT m_xpold
Definition: BackTransformParticleFunctor.H:171
const amrex::ParticleReal *AMREX_RESTRICT m_uzpnew
Definition: BackTransformParticleFunctor.H:181
const amrex::ParticleReal *AMREX_RESTRICT m_uypnew
Definition: BackTransformParticleFunctor.H:180
GetParticlePosition< PIdx > m_get_position
Definition: BackTransformParticleFunctor.H:169
@ theta
RZ needs all three position components.
Definition: NamedComponentParticleContainer.H:36
@ x
Definition: NamedComponentParticleContainer.H:27
@ uz
Definition: NamedComponentParticleContainer.H:34
@ w
weight
Definition: NamedComponentParticleContainer.H:33
@ uy
Definition: NamedComponentParticleContainer.H:34
@ z
Definition: NamedComponentParticleContainer.H:32
@ ux
Definition: NamedComponentParticleContainer.H:34
Filter to select particles that correspond to a z-slice of the corresponding lab-frame.
Definition: BackTransformParticleFunctor.H:23
amrex::Real m_current_z_boost
Definition: BackTransformParticleFunctor.H:67
amrex::ParticleReal *AMREX_RESTRICT zpold
Definition: BackTransformParticleFunctor.H:71
AMREX_GPU_HOST_DEVICE int operator()(const SrcData &src, int i) const noexcept
Functor call. This method determines if a given particle should be selected for Lorentz transformatio...
Definition: BackTransformParticleFunctor.H:51
SelectParticles(const WarpXParIter &a_pti, TmpParticles &tmp_particle_data, amrex::Real current_z_boost, amrex::Real old_z_boost, int a_offset=0)
Constructor of SelectParticles functor.
Definition: BackTransformParticleFunctor.cpp:18
amrex::Real m_old_z_boost
Definition: BackTransformParticleFunctor.H:69
GetParticlePosition< PIdx > m_get_position
Definition: BackTransformParticleFunctor.H:65