7 #ifndef WARPX_ACCELERATORLATTICE_LATTICEELEMENTS_LATTICEELEMENTFINDER_H_
8 #define WARPX_ACCELERATORLATTICE_LATTICEELEMENTS_LATTICEELEMENTFINDER_H_
146 amrex::ParticleReal& field_Ex,
147 amrex::ParticleReal& field_Ey,
148 amrex::ParticleReal& field_Ez,
149 amrex::ParticleReal& field_Bx,
150 amrex::ParticleReal& field_By,
151 amrex::ParticleReal& field_Bz)
const noexcept
154 using namespace amrex::literals;
156 amrex::ParticleReal
x, y, z;
165 amrex::ParticleReal
const vzp =
m_uz[
i]/
gamma;
167 amrex::ParticleReal zpvdt = z + vzp*
m_dt;
175 amrex::ParticleReal Ex_sum = 0._prt;
176 amrex::ParticleReal Ey_sum = 0._prt;
177 const amrex::ParticleReal Ez_sum = 0._prt;
178 amrex::ParticleReal Bx_sum = 0._prt;
179 amrex::ParticleReal By_sum = 0._prt;
180 const amrex::ParticleReal Bz_sum = 0._prt;
185 amrex::ParticleReal Ex, Ey, Bx, By;
197 amrex::ParticleReal Ex, Ey, Bx, By;
#define AMREX_FORCE_INLINE
#define AMREX_GPU_HOST_DEVICE
Definition: AcceleratorLattice.H:21
Definition: WarpXParticleContainer.H:53
static constexpr auto c
vacuum speed of light [m/s]
Definition: constant.H:44
i
Definition: check_interp_points_and_weights.py:174
int gamma
boosted frame
Definition: stencil.py:431
Definition: HardEdgedPlasmaLens.H:64
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void get_field(const int ielement, const amrex::ParticleReal x, const amrex::ParticleReal y, const amrex::ParticleReal z, const amrex::ParticleReal zpvdt, amrex::ParticleReal &Ex, amrex::ParticleReal &Ey, amrex::ParticleReal &Bx, amrex::ParticleReal &By) const
Fetch the field of the specified element at the given location.
Definition: HardEdgedPlasmaLens.H:90
int nelements
Definition: HardEdgedPlasmaLens.H:73
Definition: HardEdgedQuadrupole.H:64
int nelements
Definition: HardEdgedQuadrupole.H:73
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void get_field(const int ielement, const amrex::ParticleReal x, const amrex::ParticleReal y, const amrex::ParticleReal z, const amrex::ParticleReal zpvdt, amrex::ParticleReal &Ex, amrex::ParticleReal &Ey, amrex::ParticleReal &Bx, amrex::ParticleReal &By) const
Fetch the field of the specified element at the given location.
Definition: HardEdgedQuadrupole.H:90
The lattice element finder class that can be trivially copied to the device. This only has simple dat...
Definition: LatticeElementFinder.H:100
const amrex::ParticleReal *AMREX_RESTRICT m_ux
Definition: LatticeElementFinder.H:126
const amrex::ParticleReal *AMREX_RESTRICT m_uy
Definition: LatticeElementFinder.H:127
int const * d_plasmalens_indices_arr
Definition: LatticeElementFinder.H:136
amrex::Real m_time
Definition: LatticeElementFinder.H:123
HardEdgedPlasmaLensDevice d_plasmalens
Definition: LatticeElementFinder.H:132
amrex::Real m_dt
Definition: LatticeElementFinder.H:118
void InitLatticeElementFinderDevice(WarpXParIter const &a_pti, int a_offset, AcceleratorLattice const &accelerator_lattice, LatticeElementFinder const &h_finder)
Initialize the data needed to do the lookups.
Definition: LatticeElementFinder.cpp:89
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void operator()(const long i, amrex::ParticleReal &field_Ex, amrex::ParticleReal &field_Ey, amrex::ParticleReal &field_Ez, amrex::ParticleReal &field_Bx, amrex::ParticleReal &field_By, amrex::ParticleReal &field_Bz) const noexcept
Gather the field for the particle from the lattice elements.
Definition: LatticeElementFinder.H:145
amrex::Real m_dz
Definition: LatticeElementFinder.H:117
int const * d_quad_indices_arr
Definition: LatticeElementFinder.H:135
amrex::ParticleReal m_uz_boost
Definition: LatticeElementFinder.H:122
const amrex::ParticleReal *AMREX_RESTRICT m_uz
Definition: LatticeElementFinder.H:128
amrex::Real m_zmin
Definition: LatticeElementFinder.H:116
HardEdgedQuadrupoleDevice d_quad
Definition: LatticeElementFinder.H:131
GetParticlePosition< PIdx > m_get_position
Definition: LatticeElementFinder.H:125
amrex::ParticleReal m_gamma_boost
Definition: LatticeElementFinder.H:121
Definition: LatticeElementFinder.H:27
LatticeElementFinderDevice GetFinderDeviceInstance(WarpXParIter const &a_pti, int a_offset, AcceleratorLattice const &accelerator_lattice) const
Get the device level instance associated with this instance.
Definition: LatticeElementFinder.cpp:80
void setup_lattice_indices(amrex::Gpu::DeviceVector< amrex::ParticleReal > const &zs, amrex::Gpu::DeviceVector< amrex::ParticleReal > const &ze, amrex::Gpu::DeviceVector< int > &indices) const
Fill in the index lookup tables This loops over the grid (in z) and finds the lattice element closest...
Definition: LatticeElementFinder.cpp:125
amrex::Gpu::DeviceVector< int > d_quad_indices
Definition: LatticeElementFinder.H:79
int m_nz
Definition: LatticeElementFinder.H:58
amrex::Real m_zmin
Definition: LatticeElementFinder.H:59
amrex::Gpu::DeviceVector< int > d_plasmalens_indices
Definition: LatticeElementFinder.H:80
amrex::ParticleReal m_gamma_boost
Definition: LatticeElementFinder.H:64
amrex::Real m_time
Definition: LatticeElementFinder.H:66
void UpdateIndices(int lev, amrex::MFIter const &a_mfi, AcceleratorLattice const &accelerator_lattice)
Update the index lookup tables for each element type, filling in the values.
Definition: LatticeElementFinder.cpp:54
amrex::Real m_dz
Definition: LatticeElementFinder.H:60
amrex::ParticleReal m_uz_boost
Definition: LatticeElementFinder.H:65
void InitElementFinder(int lev, amrex::MFIter const &a_mfi, AcceleratorLattice const &accelerator_lattice)
Initialize the element finder at the level and grid.
Definition: LatticeElementFinder.cpp:18
void AllocateIndices(AcceleratorLattice const &accelerator_lattice)
Allocate the index lookup tables for each element type.
Definition: LatticeElementFinder.cpp:39