10 #ifndef IMPACTX_MULTIPOLE_H 11 #define IMPACTX_MULTIPOLE_H 29 static constexpr
auto name =
"Multipole";
39 amrex::ParticleReal
const K_normal,
40 amrex::ParticleReal
const K_skew )
46 for(
int n = 1;
n < m + 1;
n =
n + 1 ) {
52 using BeamOptic::operator();
65 PType& AMREX_RESTRICT p,
66 amrex::ParticleReal & AMREX_RESTRICT px,
67 amrex::ParticleReal & AMREX_RESTRICT py,
68 amrex::ParticleReal & AMREX_RESTRICT pt,
69 [[maybe_unused]]
RefPart const & refpart)
const {
71 using namespace amrex::literals;
77 amrex::ParticleReal
const x = p.pos(0);
78 amrex::ParticleReal
const y = p.pos(1);
79 amrex::ParticleReal
const t = p.pos(2);
86 amrex::ParticleReal pxout = px;
87 amrex::ParticleReal pyout = py;
88 amrex::ParticleReal ptout = pt;
98 amrex::ParticleReal
const dpx = -1.0_prt*kick.m_real/
m_mfactorial;
99 amrex::ParticleReal
const dpy = kick.m_imag/
m_mfactorial;
119 using Thin::operator();
131 #endif // IMPACTX_MULTIPOLE_H
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void operator()(PType &AMREX_RESTRICT p, amrex::ParticleReal &AMREX_RESTRICT px, amrex::ParticleReal &AMREX_RESTRICT py, amrex::ParticleReal &AMREX_RESTRICT pt, [[maybe_unused]] RefPart const &refpart) const
Definition: Multipole.H:64
int m_multipole
Definition: Multipole.H:122
Definition: ImpactX.cpp:31
int m_mfactorial
multipole index
Definition: Multipole.H:123
Definition: beamoptic.H:134
Multipole(int const multipole, amrex::ParticleReal const K_normal, amrex::ParticleReal const K_skew)
Definition: Multipole.H:38
Definition: Multipole.H:25
#define AMREX_FORCE_INLINE
#define AMREX_GPU_HOST_DEVICE
amrex::ParticleReal m_Ks
integrated normal multipole coefficient
Definition: Multipole.H:125
Particle< NStructReal, NStructInt > ParticleType
Definition: ReferenceParticle.H:29
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE GpuComplex< T > pow(const GpuComplex< T > &a_z, const T &a_y) noexcept
amrex::ParticleReal m_Kn
factorial of multipole index
Definition: Multipole.H:124
static constexpr auto name
Definition: Multipole.H:29