7#ifndef WARPX_ACCELERATORLATTICE_LATTICEELEMENTS_LATTICEELEMENTFINDER_H_
8#define WARPX_ACCELERATORLATTICE_LATTICEELEMENTS_LATTICEELEMENTFINDER_H_
175 const int iz =
static_cast<int>((z -
m_zmin)/
m_dz);
179 if (iz < 0 || iz >=
m_nz) {
return; }
200 if (
d_quad.nelements > 0) {
204 d_quad.get_field(ielement, x, y, z, zpvdt, Ex, Ey, Bx, By);
216 d_plasmalens.get_field(ielement, x, y, z, zpvdt, Ex, Ey, Bx, By);
#define AMREX_FORCE_INLINE
#define AMREX_GPU_HOST_DEVICE
Definition AcceleratorLattice.H:21
Definition WarpXParticleContainer.H:112
amrex_particle_real ParticleReal
PODVector< T, ArenaAllocator< T > > DeviceVector
constexpr auto inv_c2_v
inverse of the square of the vacuum speed of light [s^2/m^2] (variable template)
Definition constant.H:146
Functor that can be used to extract the positions of the macroparticles inside a ParallelFor kernel.
Definition GetAndSetPosition.H:75
Definition HardEdgedPlasmaLens.H:64
Definition HardEdgedQuadrupole.H:64
The lattice element finder class that can be trivially copied to the device. This only has simple dat...
Definition LatticeElementFinder.H:108
const amrex::ParticleReal *AMREX_RESTRICT m_ux
Definition LatticeElementFinder.H:140
const amrex::ParticleReal *AMREX_RESTRICT m_uy
Definition LatticeElementFinder.H:141
int const * d_plasmalens_indices_arr
Definition LatticeElementFinder.H:150
int m_nz
Definition LatticeElementFinder.H:129
amrex::Real m_time
Definition LatticeElementFinder.H:137
HardEdgedPlasmaLensDevice d_plasmalens
Definition LatticeElementFinder.H:146
amrex::Real m_dt
Definition LatticeElementFinder.H:132
bool m_initialized
Definition LatticeElementFinder.H:126
void InitLatticeElementFinderDevice(WarpXParIter const &a_pti, int a_offset, AcceleratorLattice const &accelerator_lattice, LatticeElementFinder const &h_finder, const amrex::Vector< amrex::Real > &dts)
Initialize the data needed to do the lookups.
Definition LatticeElementFinder.cpp:96
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:159
amrex::Real m_dz
Definition LatticeElementFinder.H:131
int const * d_quad_indices_arr
Definition LatticeElementFinder.H:149
amrex::ParticleReal m_uz_boost
Definition LatticeElementFinder.H:136
const amrex::ParticleReal *AMREX_RESTRICT m_uz
Definition LatticeElementFinder.H:142
amrex::Real m_zmin
Definition LatticeElementFinder.H:130
HardEdgedQuadrupoleDevice d_quad
Definition LatticeElementFinder.H:145
GetParticlePosition< PIdx > m_get_position
Definition LatticeElementFinder.H:139
amrex::ParticleReal m_gamma_boost
Definition LatticeElementFinder.H:135
Definition LatticeElementFinder.H:27
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:134
amrex::Gpu::DeviceVector< int > d_quad_indices
Definition LatticeElementFinder.H:87
int m_nz
Definition LatticeElementFinder.H:64
amrex::Real m_zmin
Definition LatticeElementFinder.H:65
LatticeElementFinderDevice GetFinderDeviceInstance(WarpXParIter const &a_pti, int a_offset, AcceleratorLattice const &accelerator_lattice, const amrex::Vector< amrex::Real > &dts) const
Get the device level instance associated with this instance.
Definition LatticeElementFinder.cpp:86
amrex::Gpu::DeviceVector< int > d_plasmalens_indices
Definition LatticeElementFinder.H:88
amrex::ParticleReal m_gamma_boost
Definition LatticeElementFinder.H:70
amrex::Real m_time
Definition LatticeElementFinder.H:72
void UpdateIndices(int lev, amrex::MFIter const &a_mfi, AcceleratorLattice const &accelerator_lattice, const amrex::Vector< amrex::Real > &time)
Update the index lookup tables for each element type, filling in the values.
Definition LatticeElementFinder.cpp:61
amrex::Real m_dz
Definition LatticeElementFinder.H:66
amrex::ParticleReal m_uz_boost
Definition LatticeElementFinder.H:71
void InitElementFinder(int lev, amrex::Real gamma_boost, const amrex::Vector< amrex::Real > &time, 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:46