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

#include <SoftQuad.H>

Inheritance diagram for impactx::SoftQuadrupole:
impactx::elements::BeamOptic< SoftQuadrupole > impactx::elements::Thick

Public Types

using PType = ImpactXParticleContainer::ParticleType
 

Public Member Functions

 SoftQuadrupole (amrex::ParticleReal ds, amrex::ParticleReal gscale, std::vector< amrex::ParticleReal > cos_coef, std::vector< amrex::ParticleReal > sin_coef, int mapsteps=1, int nslice=1)
 
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
 
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 Quad_Bfield (amrex::ParticleReal const zeval) const
 
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void map1 (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
 
void finalize ()
 
- Public Member Functions inherited from impactx::elements::BeamOptic< SoftQuadrupole >
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 const ds, int const nslice)
 
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE int nslice () const
 
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::ParticleReal ds () const
 

Static Public Attributes

static constexpr auto name = "SoftQuadrupole"
 

Private Attributes

amrex::ParticleReal m_gscale
 
int m_mapsteps
 scaling factor for quad field gradient More...
 
int m_id
 number of map integration steps per slice More...
 
int m_ncoef = 0
 unique soft quad 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...
 

Additional Inherited Members

- Protected Attributes inherited from impactx::elements::Thick
amrex::ParticleReal m_ds
 
int m_nslice
 segment length in m More...
 

Member Typedef Documentation

◆ PType

Constructor & Destructor Documentation

◆ SoftQuadrupole()

impactx::SoftQuadrupole::SoftQuadrupole ( amrex::ParticleReal  ds,
amrex::ParticleReal  gscale,
std::vector< amrex::ParticleReal >  cos_coef,
std::vector< amrex::ParticleReal >  sin_coef,
int  mapsteps = 1,
int  nslice = 1 
)
inline

A soft-edge quadrupole

Parameters
dsSegment length in m
gscaleScaling factor for on-axis field gradient Bz in 1/m^2
cos_coefcosine coefficients in Fourier expansion of on-axis magnetic field Bz
sin_coefsine coefficients in Fourier expansion of on-axis magnetic field Bz
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::SoftQuadrupole::finalize ( )
inline

Close and deallocate all data and handles.

◆ map1()

AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void impactx::SoftQuadrupole::map1 ( 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 a quadrupole through the symplectic map associated with H_1 in the Hamiltonian splitting H = H_1 + H_2.

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::SoftQuadrupole::map2 ( amrex::ParticleReal const  tau,
RefPart refpart,
amrex::ParticleReal &  zeval 
) const
inline

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

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::SoftQuadrupole::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
inline

This is a soft-edge quadrupole functor, so that a variable of this type can be used like a soft-edge quadrupole function.

Parameters
pParticle AoS data for positions and cpu/id
pxparticle momentum in x
pyparticle momentum in y
ptparticle momentum in t
refpartreference particle

◆ operator()() [2/2]

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

This pushes the reference particle.

Parameters
[in,out]refpartreference particle

◆ Quad_Bfield()

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

This evaluates the on-axis magnetic field Bz 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::SoftQuadrupole::m_cos_d_data = nullptr
private

non-owning pointer to host sine coefficients

◆ m_cos_h_data

amrex::ParticleReal* impactx::SoftQuadrupole::m_cos_h_data = nullptr
private

number of Fourier coefficients

◆ m_gscale

amrex::ParticleReal impactx::SoftQuadrupole::m_gscale
private

◆ m_id

int impactx::SoftQuadrupole::m_id
private

number of map integration steps per slice

◆ m_mapsteps

int impactx::SoftQuadrupole::m_mapsteps
private

scaling factor for quad field gradient

◆ m_ncoef

int impactx::SoftQuadrupole::m_ncoef = 0
private

unique soft quad id used for data lookup map

◆ m_sin_d_data

amrex::ParticleReal* impactx::SoftQuadrupole::m_sin_d_data = nullptr
private

non-owning pointer to device cosine coefficients

◆ m_sin_h_data

amrex::ParticleReal* impactx::SoftQuadrupole::m_sin_h_data = nullptr
private

non-owning pointer to host cosine coefficients

◆ name

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

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