ImpactX
Public Types | Public Member Functions | Public Attributes | Static Public Attributes | List of all members
impactx::RFCavity Struct Reference

#include <RFCavity.H>

Inheritance diagram for impactx::RFCavity:
impactx::elements::BeamOptic< RFCavity > impactx::elements::Thick impactx::elements::Alignment

Public Types

using PType = ImpactXParticleContainer::ParticleType
 

Public Member Functions

 RFCavity (amrex::ParticleReal ds, amrex::ParticleReal escale, amrex::ParticleReal freq, amrex::ParticleReal phase, std::vector< amrex::ParticleReal > cos_coef, std::vector< amrex::ParticleReal > sin_coef, amrex::ParticleReal dx=0, amrex::ParticleReal dy=0, amrex::ParticleReal rotation_degree=0, int mapsteps=1, int nslice=1)
 
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void operator() (amrex::ParticleReal &AMREX_RESTRICT x, amrex::ParticleReal &AMREX_RESTRICT y, amrex::ParticleReal &AMREX_RESTRICT t, amrex::ParticleReal &AMREX_RESTRICT px, amrex::ParticleReal &AMREX_RESTRICT py, amrex::ParticleReal &AMREX_RESTRICT pt, [[maybe_unused]] uint64_t &AMREX_RESTRICT idcpu, [[maybe_unused]] RefPart const &refpart) const
 
AMREX_GPU_HOST AMREX_FORCE_INLINE void operator() (RefPart &AMREX_RESTRICT refpart) const
 
std::tuple< amrex::ParticleReal, amrex::ParticleReal, amrex::ParticleReal > AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE RF_Efield (amrex::ParticleReal const zeval) const
 
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void map3 (amrex::ParticleReal const tau, RefPart &refpart, [[maybe_unused]] amrex::ParticleReal &zeval) const
 
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void map2 (amrex::ParticleReal const tau, RefPart &refpart, amrex::ParticleReal &zeval) const
 
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void map1 (amrex::ParticleReal const tau, RefPart &refpart, amrex::ParticleReal &zeval) const
 
void finalize ()
 
- Public Member Functions inherited from impactx::elements::BeamOptic< RFCavity >
void operator() (ImpactXParticleContainer &pc, int step)
 
void operator() (ImpactXParticleContainer::iterator &pti, RefPart &AMREX_RESTRICT ref_part)
 
- Public Member Functions inherited from impactx::elements::Thick
 Thick (amrex::ParticleReal ds, int nslice)
 
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE int nslice () const
 
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::ParticleReal ds () const
 
- Public Member Functions inherited from impactx::elements::Alignment
 Alignment (amrex::ParticleReal dx, amrex::ParticleReal dy, amrex::ParticleReal rotation_degree)
 
 Alignment ()=default
 
 Alignment (Alignment const &)=default
 
Alignmentoperator= (Alignment const &)=default
 
 Alignment (Alignment &&)=default
 
Alignmentoperator= (Alignment &&rhs)=default
 
 ~Alignment ()=default
 
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void shift_in (amrex::ParticleReal &AMREX_RESTRICT x, amrex::ParticleReal &AMREX_RESTRICT y, amrex::ParticleReal &AMREX_RESTRICT px, amrex::ParticleReal &AMREX_RESTRICT py) const
 
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void shift_out (amrex::ParticleReal &AMREX_RESTRICT x, amrex::ParticleReal &AMREX_RESTRICT y, amrex::ParticleReal &AMREX_RESTRICT px, amrex::ParticleReal &AMREX_RESTRICT py) const
 
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::ParticleReal dx () const
 
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::ParticleReal dy () const
 
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::ParticleReal rotation () const
 

Public Attributes

amrex::ParticleReal m_escale
 
amrex::ParticleReal m_freq
 scaling factor for RF electric field More...
 
amrex::ParticleReal m_phase
 RF frequency in Hz. More...
 
int m_mapsteps
 RF driven phase in deg. More...
 
int m_id
 number of map integration steps per slice More...
 
int m_ncoef = 0
 unique RF cavity id used for data lookup map More...
 
amrex::ParticleReal * m_cos_h_data = nullptr
 number of Fourier coefficients More...
 
amrex::ParticleReal * m_sin_h_data = nullptr
 non-owning pointer to host cosine coefficients More...
 
amrex::ParticleReal * m_cos_d_data = nullptr
 non-owning pointer to host sine coefficients More...
 
amrex::ParticleReal * m_sin_d_data = nullptr
 non-owning pointer to device cosine coefficients More...
 
- Public Attributes inherited from impactx::elements::Thick
amrex::ParticleReal m_ds
 
int m_nslice
 segment length in m More...
 
- Public Attributes inherited from impactx::elements::Alignment
amrex::ParticleReal m_dx = 0
 
amrex::ParticleReal m_dy = 0
 horizontal translation error [m] More...
 
amrex::ParticleReal m_rotation = 0
 vertical translation error [m] More...
 

Static Public Attributes

static constexpr auto name = "RFCavity"
 
- Static Public Attributes inherited from impactx::elements::Alignment
static constexpr amrex::ParticleReal degree2rad = ablastr::constant::math::pi / 180.0
 

Member Typedef Documentation

◆ PType

Constructor & Destructor Documentation

◆ RFCavity()

impactx::RFCavity::RFCavity ( amrex::ParticleReal  ds,
amrex::ParticleReal  escale,
amrex::ParticleReal  freq,
amrex::ParticleReal  phase,
std::vector< amrex::ParticleReal >  cos_coef,
std::vector< amrex::ParticleReal >  sin_coef,
amrex::ParticleReal  dx = 0,
amrex::ParticleReal  dy = 0,
amrex::ParticleReal  rotation_degree = 0,
int  mapsteps = 1,
int  nslice = 1 
)
inline

An RF cavity

Parameters
dsSegment length in m
escaleScaling factor for on-axis RF electric field in 1/m
freqRF frequency in Hz
phaseRF driven phase in deg
cos_coefTODO
sin_coefTODO
dxhorizontal translation error in m
dyvertical translation error in m
rotation_degreerotation error in the transverse plane [degrees]
mapstepsnumber of integration steps per slice used for map and reference particle push in applied fields
nslicenumber of slices used for the application of space charge

Member Function Documentation

◆ finalize()

void impactx::RFCavity::finalize ( )
inline

Close and deallocate all data and handles.

◆ map1()

AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void impactx::RFCavity::map1 ( amrex::ParticleReal const  tau,
RefPart refpart,
amrex::ParticleReal &  zeval 
) const
inline

This pushes the reference particle and the linear map matrix elements for an RF cavity through the symplectic map associated with H_1 in the Hamiltonian splitting H = H_1 + H_2 + H_3.

Parameters
tauMap step size in m
[in,out]refpartreference particle
[in,out]zevalLongitudinal on-axis location in m

◆ map2()

AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void impactx::RFCavity::map2 ( amrex::ParticleReal const  tau,
RefPart refpart,
amrex::ParticleReal &  zeval 
) const
inline

This pushes the reference particle and the linear map matrix elements for an RF cavity through the symplectic map associated with H_2 in the Hamiltonian splitting H = H_1 + H_2 + H_3.

Parameters
tauMap step size in m
[in,out]refpartreference particle
[in,out]zevalLongitudinal on-axis location in m

◆ map3()

AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void impactx::RFCavity::map3 ( amrex::ParticleReal const  tau,
RefPart refpart,
[[maybe_unused] ] amrex::ParticleReal &  zeval 
) const
inline

This pushes the reference particle and the linear map matrix elements for an RF cavity through the symplectic map associated with H_3 in the Hamiltonian splitting H = H_1 + H_2 + H_3.

Parameters
tauMap step size in m
[in,out]refpartreference particle
[in,out]zevalLongitudinal on-axis location in m

◆ operator()() [1/2]

AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void impactx::RFCavity::operator() ( amrex::ParticleReal &AMREX_RESTRICT  x,
amrex::ParticleReal &AMREX_RESTRICT  y,
amrex::ParticleReal &AMREX_RESTRICT  t,
amrex::ParticleReal &AMREX_RESTRICT  px,
amrex::ParticleReal &AMREX_RESTRICT  py,
amrex::ParticleReal &AMREX_RESTRICT  pt,
[[maybe_unused] ] uint64_t &AMREX_RESTRICT  idcpu,
[[maybe_unused] ] RefPart const &  refpart 
) const
inline

This is an RF cavity functor, so that a variable of this type can be used like an RF cavity function.

Parameters
xparticle position in x
yparticle position in y
tparticle position in t
pxparticle momentum in x
pyparticle momentum in y
ptparticle momentum in t
idcpuparticle global index (unused)
refpartreference particle

◆ operator()() [2/2]

AMREX_GPU_HOST AMREX_FORCE_INLINE void impactx::RFCavity::operator() ( RefPart &AMREX_RESTRICT  refpart) const
inline

This pushes the reference particle.

Parameters
[in,out]refpartreference particle

◆ RF_Efield()

std::tuple<amrex::ParticleReal, amrex::ParticleReal, amrex::ParticleReal> AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE impactx::RFCavity::RF_Efield ( amrex::ParticleReal const  zeval) const
inline

This evaluates the on-axis RF electric field at a fixed location z, together with certain required integrals and derivatives. The field returned is normalized to a peak value of 1.

Parameters
zevalLongitudinal on-axis location in m

Member Data Documentation

◆ m_cos_d_data

amrex::ParticleReal* impactx::RFCavity::m_cos_d_data = nullptr

non-owning pointer to host sine coefficients

◆ m_cos_h_data

amrex::ParticleReal* impactx::RFCavity::m_cos_h_data = nullptr

number of Fourier coefficients

◆ m_escale

amrex::ParticleReal impactx::RFCavity::m_escale

◆ m_freq

amrex::ParticleReal impactx::RFCavity::m_freq

scaling factor for RF electric field

◆ m_id

int impactx::RFCavity::m_id

number of map integration steps per slice

◆ m_mapsteps

int impactx::RFCavity::m_mapsteps

RF driven phase in deg.

◆ m_ncoef

int impactx::RFCavity::m_ncoef = 0

unique RF cavity id used for data lookup map

◆ m_phase

amrex::ParticleReal impactx::RFCavity::m_phase

RF frequency in Hz.

◆ m_sin_d_data

amrex::ParticleReal* impactx::RFCavity::m_sin_d_data = nullptr

non-owning pointer to device cosine coefficients

◆ m_sin_h_data

amrex::ParticleReal* impactx::RFCavity::m_sin_h_data = nullptr

non-owning pointer to host cosine coefficients

◆ name

constexpr auto impactx::RFCavity::name = "RFCavity"
staticconstexpr

The documentation for this struct was generated from the following file: