ImpactX
Loading...
Searching...
No Matches
impactx::elements::DipEdge Struct Reference

#include <DipEdge.H>

Inheritance diagram for impactx::elements::DipEdge:
impactx::elements::mixin::Named impactx::elements::mixin::BeamOptic< DipEdge > impactx::elements::mixin::LinearTransport< DipEdge > impactx::elements::mixin::Thin impactx::elements::mixin::Alignment impactx::elements::mixin::NoFinalize

Public Types

using PType = ImpactXParticleContainer::ParticleType
 

Public Member Functions

 DipEdge (amrex::ParticleReal psi, amrex::ParticleReal rc, amrex::ParticleReal g, amrex::ParticleReal R, amrex::ParticleReal K0, amrex::ParticleReal K1, amrex::ParticleReal K2, amrex::ParticleReal K3, amrex::ParticleReal K4, amrex::ParticleReal K5, amrex::ParticleReal K6, dipedge::Model model, dipedge::Location location, amrex::ParticleReal dx=0, amrex::ParticleReal dy=0, amrex::ParticleReal rotation_degree=0, std::optional< std::string > name=std::nullopt)
 
void compute_constants (RefPart const &refpart)
 
template<typename T_Real = amrex::ParticleReal, typename T_IdCpu = uint64_t>
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void operator() (T_Real &AMREX_RESTRICT x, T_Real &AMREX_RESTRICT y, T_Real &AMREX_RESTRICT t, T_Real &AMREX_RESTRICT px, T_Real &AMREX_RESTRICT py, T_Real &AMREX_RESTRICT pt, T_IdCpu &AMREX_RESTRICT idcpu, RefPart const &AMREX_RESTRICT refpart) const
 
AMREX_GPU_HOST AMREX_FORCE_INLINE Map6x6 transport_map (RefPart const &AMREX_RESTRICT refpart) const
 
- Public Member Functions inherited from impactx::elements::mixin::Named
AMREX_GPU_HOST void set_name (std::string const &new_name)
 
AMREX_GPU_HOST Named (std::optional< std::string > name)
 
AMREX_GPU_HOST_DEVICE ~Named ()
 
AMREX_GPU_HOST Named (Named const &other)
 
AMREX_GPU_HOST Namedoperator= (Named const &other)
 
AMREX_GPU_HOST_DEVICE Named (Named &&other) noexcept
 
AMREX_GPU_HOST_DEVICE Namedoperator= (Named &&other) noexcept
 
AMREX_FORCE_INLINE std::string name () const
 
AMREX_FORCE_INLINE bool has_name () const
 
- Public Member Functions inherited from impactx::elements::mixin::BeamOptic< DipEdge >
void operator() (ImpactXParticleContainer &pc, int step, int period)
 
void operator() (ImpactXParticleContainer::iterator &pti, RefPart &AMREX_RESTRICT ref_part)
 
- Public Member Functions inherited from impactx::elements::mixin::LinearTransport< DipEdge >
 LinearTransport ()=default
 
 LinearTransport (LinearTransport const &)=default
 
 LinearTransport (LinearTransport &&)=default
 
LinearTransportoperator= (LinearTransport const &)=default
 
LinearTransportoperator= (LinearTransport &&rhs)=default
 
 ~LinearTransport ()=default
 
AMREX_GPU_HOST AMREX_FORCE_INLINE void operator() (Map6x6 &AMREX_RESTRICT cm, RefPart const &AMREX_RESTRICT ref) const
 
- Public Member Functions inherited from impactx::elements::mixin::Thin
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void operator() (RefPart &AMREX_RESTRICT refpart) const
 
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::mixin::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
 
void compute_constants (RefPart const &refpart)
 
template<typename T_Real>
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void shift_in (T_Real &AMREX_RESTRICT x, T_Real &AMREX_RESTRICT y, T_Real &AMREX_RESTRICT px, T_Real &AMREX_RESTRICT py) const
 
template<typename T_Real>
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void shift_out (T_Real &AMREX_RESTRICT x, T_Real &AMREX_RESTRICT y, T_Real &AMREX_RESTRICT px, T_Real &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 Member Functions inherited from impactx::elements::mixin::NoFinalize
void finalize ()
 

Public Attributes

amrex::ParticleReal m_psi
 
amrex::ParticleReal m_rc
 pole face angle in rad
 
amrex::ParticleReal m_g
 bend radius in m
 
amrex::ParticleReal m_R
 gap parameter in m
 
amrex::ParticleReal m_K0
 scale length in m
 
amrex::ParticleReal m_K1
 fringe field integral
 
amrex::ParticleReal m_K2
 fringe field integral
 
amrex::ParticleReal m_K3
 fringe field integral
 
amrex::ParticleReal m_K4
 fringe field integral
 
amrex::ParticleReal m_K5
 fringe field integral
 
amrex::ParticleReal m_K6
 fringe field integral
 
dipedge::Model m_model
 fringe field integral
 
dipedge::Location m_location
 fringe field model: linear or nonlinear
 
- Public Attributes inherited from impactx::elements::mixin::Alignment
amrex::ParticleReal m_dx = 0
 
amrex::ParticleReal m_dy = 0
 horizontal translation error [m]
 
amrex::ParticleReal m_rotation = 0
 vertical translation error [m]
 

Static Public Attributes

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

Private Attributes

amrex::ParticleReal m_R21
 fringe field location: entry, or exit
 
amrex::ParticleReal m_R43
 
amrex::ParticleReal m_beta
 
amrex::ParticleReal m_c1
 
amrex::ParticleReal m_c5
 
amrex::ParticleReal m_c13
 
amrex::ParticleReal m_c14
 
amrex::ParticleReal m_c15
 
amrex::ParticleReal m_c2_times_1plusdelta
 
amrex::ParticleReal m_c3_times_1plusdelta
 
amrex::ParticleReal m_c4_times_1plusdelta
 
amrex::ParticleReal m_c6_times_1plusdelta
 
amrex::ParticleReal m_c7_times_1plusdelta
 
amrex::ParticleReal m_c8_times_1plusdelta
 
amrex::ParticleReal m_c9_times_1plusdelta
 
amrex::ParticleReal m_c10_times_1plusdelta
 
amrex::ParticleReal m_c11_times_1plusdelta
 
amrex::ParticleReal m_c12_times_1plusdelta
 

Member Typedef Documentation

◆ PType

Constructor & Destructor Documentation

◆ DipEdge()

impactx::elements::DipEdge::DipEdge ( amrex::ParticleReal psi,
amrex::ParticleReal rc,
amrex::ParticleReal g,
amrex::ParticleReal R,
amrex::ParticleReal K0,
amrex::ParticleReal K1,
amrex::ParticleReal K2,
amrex::ParticleReal K3,
amrex::ParticleReal K4,
amrex::ParticleReal K5,
amrex::ParticleReal K6,
dipedge::Model model,
dipedge::Location location,
amrex::ParticleReal dx = 0,
amrex::ParticleReal dy = 0,
amrex::ParticleReal rotation_degree = 0,
std::optional< std::string > name = std::nullopt )
inline

Edge focusing associated with bend entry or exit

This model assumes a first-order effect of nonzero gap. Here we use the linear fringe field map, given to first order in g/rc (gap / radius of curvature).

References: K. L. Brown, SLAC Report No. 75 (1982). K. Hwang and S. Y. Lee, PRAB 18, 122401 (2015).

Parameters
psiPole face entry/exit angle in rad.
rcRadius of curvature in m.
gGap parameter in m.
RLength scale parameter in m.
K0Fringe field integeral (unitless).
K1Fringe field integeral (unitless).
K2Fringe field integral (unitless).
K3Fringe field integral (unitless).
K4Fringe field integral (unitless).
K5Fringe field integral (unitless).
K6Fringe field integral (unitless).
modelFringe field model (linear or nonlinear).
locationFringe field location (entry or exit)
dxhorizontal translation error in m
dyvertical translation error in m
rotation_degreerotation error in the transverse plane [degrees]
namea user defined and not necessarily unique name of the element

Member Function Documentation

◆ compute_constants()

void impactx::elements::DipEdge::compute_constants ( RefPart const & refpart)
inline

Compute and cache the constants for the push.

In particular, used to pre-compute and cache variables that are independent of the individually tracked particle.

Parameters
refpartreference particle (unused)

◆ operator()()

template<typename T_Real = amrex::ParticleReal, typename T_IdCpu = uint64_t>
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void impactx::elements::DipEdge::operator() ( T_Real &AMREX_RESTRICT x,
T_Real &AMREX_RESTRICT y,
T_Real &AMREX_RESTRICT t,
T_Real &AMREX_RESTRICT px,
T_Real &AMREX_RESTRICT py,
T_Real &AMREX_RESTRICT pt,
T_IdCpu &AMREX_RESTRICT idcpu,
RefPart const &AMREX_RESTRICT refpart ) const
inline

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

The

See also
compute_constants method must be called before pushing particles through this operator.
Parameters
xparticle position in x
yparticle position in y
tparticle position in t (unchanged)
pxparticle momentum in x
pyparticle momentum in y
ptparticle momentum in t (unchanged)
idcpuparticle global index (unused)
refpartreference particle (unused)

◆ transport_map()

AMREX_GPU_HOST AMREX_FORCE_INLINE Map6x6 impactx::elements::DipEdge::transport_map ( RefPart const &AMREX_RESTRICT refpart) const
inline

This function returns the linear transport map.

Parameters
[in]refpartreference particle
Returns
6x6 transport matrix

Member Data Documentation

◆ m_beta

amrex::ParticleReal impactx::elements::DipEdge::m_beta
private

◆ m_c1

amrex::ParticleReal impactx::elements::DipEdge::m_c1
private

◆ m_c10_times_1plusdelta

amrex::ParticleReal impactx::elements::DipEdge::m_c10_times_1plusdelta
private

◆ m_c11_times_1plusdelta

amrex::ParticleReal impactx::elements::DipEdge::m_c11_times_1plusdelta
private

◆ m_c12_times_1plusdelta

amrex::ParticleReal impactx::elements::DipEdge::m_c12_times_1plusdelta
private

◆ m_c13

amrex::ParticleReal impactx::elements::DipEdge::m_c13
private

◆ m_c14

amrex::ParticleReal impactx::elements::DipEdge::m_c14
private

◆ m_c15

amrex::ParticleReal impactx::elements::DipEdge::m_c15
private

◆ m_c2_times_1plusdelta

amrex::ParticleReal impactx::elements::DipEdge::m_c2_times_1plusdelta
private

◆ m_c3_times_1plusdelta

amrex::ParticleReal impactx::elements::DipEdge::m_c3_times_1plusdelta
private

◆ m_c4_times_1plusdelta

amrex::ParticleReal impactx::elements::DipEdge::m_c4_times_1plusdelta
private

◆ m_c5

amrex::ParticleReal impactx::elements::DipEdge::m_c5
private

◆ m_c6_times_1plusdelta

amrex::ParticleReal impactx::elements::DipEdge::m_c6_times_1plusdelta
private

◆ m_c7_times_1plusdelta

amrex::ParticleReal impactx::elements::DipEdge::m_c7_times_1plusdelta
private

◆ m_c8_times_1plusdelta

amrex::ParticleReal impactx::elements::DipEdge::m_c8_times_1plusdelta
private

◆ m_c9_times_1plusdelta

amrex::ParticleReal impactx::elements::DipEdge::m_c9_times_1plusdelta
private

◆ m_g

amrex::ParticleReal impactx::elements::DipEdge::m_g

bend radius in m

◆ m_K0

amrex::ParticleReal impactx::elements::DipEdge::m_K0

scale length in m

◆ m_K1

amrex::ParticleReal impactx::elements::DipEdge::m_K1

fringe field integral

◆ m_K2

amrex::ParticleReal impactx::elements::DipEdge::m_K2

fringe field integral

◆ m_K3

amrex::ParticleReal impactx::elements::DipEdge::m_K3

fringe field integral

◆ m_K4

amrex::ParticleReal impactx::elements::DipEdge::m_K4

fringe field integral

◆ m_K5

amrex::ParticleReal impactx::elements::DipEdge::m_K5

fringe field integral

◆ m_K6

amrex::ParticleReal impactx::elements::DipEdge::m_K6

fringe field integral

◆ m_location

dipedge::Location impactx::elements::DipEdge::m_location

fringe field model: linear or nonlinear

◆ m_model

dipedge::Model impactx::elements::DipEdge::m_model

fringe field integral

◆ m_psi

amrex::ParticleReal impactx::elements::DipEdge::m_psi

◆ m_R

amrex::ParticleReal impactx::elements::DipEdge::m_R

gap parameter in m

◆ m_R21

amrex::ParticleReal impactx::elements::DipEdge::m_R21
private

fringe field location: entry, or exit

◆ m_R43

amrex::ParticleReal impactx::elements::DipEdge::m_R43
private

◆ m_rc

amrex::ParticleReal impactx::elements::DipEdge::m_rc

pole face angle in rad

◆ type

auto impactx::elements::DipEdge::type = "DipEdge"
staticconstexpr

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