|
| | NonlinearLens (amrex::ParticleReal knll, amrex::ParticleReal cnll, amrex::ParticleReal dx=0, amrex::ParticleReal dy=0, amrex::ParticleReal rotation_degree=0, std::optional< std::string > name=std::nullopt) |
| |
| void | reverse () |
| |
| 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 const &AMREX_RESTRICT x, T_Real const &AMREX_RESTRICT y, T_Real const &AMREX_RESTRICT t, T_Real &AMREX_RESTRICT px, T_Real &AMREX_RESTRICT py, T_Real const &AMREX_RESTRICT pt, T_IdCpu const &AMREX_RESTRICT idcpu, RefPart const &AMREX_RESTRICT refpart) const |
| |
| AMREX_GPU_HOST AMREX_FORCE_INLINE Map6x6 | transport_map (RefPart const &AMREX_RESTRICT refpart) const |
| |
| 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 Named & | operator= (Named const &other) |
| |
| AMREX_GPU_HOST_DEVICE | Named (Named &&other) noexcept |
| |
| AMREX_GPU_HOST_DEVICE Named & | operator= (Named &&other) noexcept |
| |
| AMREX_FORCE_INLINE std::string | name () const |
| |
| AMREX_FORCE_INLINE bool | has_name () const |
| |
| void | operator() (ImpactXParticleContainer &pc, int step, int period) |
| |
| void | operator() (ImpactXParticleContainer::iterator &pti, RefPart &AMREX_RESTRICT ref_part, bool spin) |
| |
| AMREX_GPU_HOST AMREX_FORCE_INLINE void | operator() (Map6x6 &AMREX_RESTRICT cm, RefPart const &AMREX_RESTRICT ref) const |
| |
| AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void | operator() (RefPart &AMREX_RESTRICT refpart) const |
| |
| void | reverse () |
| |
| AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE int | nslice () const |
| |
| AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::ParticleReal | ds () const |
| |
| | Alignment (amrex::ParticleReal dx, amrex::ParticleReal dy, amrex::ParticleReal rotation_degree) |
| |
| | Alignment ()=default |
| |
| | Alignment (Alignment const &)=default |
| |
| Alignment & | operator= (Alignment const &)=default |
| |
| | Alignment (Alignment &&)=default |
| |
| Alignment & | operator= (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 | rotate_in (T_Real &AMREX_RESTRICT sx, T_Real &AMREX_RESTRICT sy) 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 |
| |
| template<typename T_Real> |
| AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void | rotate_out (T_Real &AMREX_RESTRICT sx, T_Real &AMREX_RESTRICT sy) 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 |
| |
| AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE bool | misaligned () const |
| |
| AMREX_GPU_HOST AMREX_FORCE_INLINE Map6x6 | rotation_map () const |
| |
| AMREX_GPU_HOST AMREX_FORCE_INLINE Map6x6 | rotate_aligned_map (Map6x6 const &R) const |
| |
| void | finalize () |
| |
This function returns the linear transport map.
The Danilov-Nagaitsev kick implemented by
- See also
- operator() is dpx - i*dpy = -(knll / cnll) * F'(zeta), with zeta = (x + i*y) / cnll and F'(zeta) = zeta / (1 - zeta^2) + arcsin(zeta) / (1 - zeta^2)^(3/2). The Taylor series around zeta = 0 starts at F'(zeta) = 2*zeta + (8/3)*zeta^3 + O(zeta^5), so the linearized map at the reference trajectory is a thin quadrupole with equal and opposite focusing strengths in the two transverse planes: R(2,1) = -2 * knll / cnll^2, R(4,3) = +2 * knll / cnll^2.
Ideal behavior only: alignment and rotation errors, as well as feed-down from an off-axis reference orbit, are ignored; the map is evaluated at (x, y) = (0, 0).
This element appears in MAD-X as type NLLENS. The linear limit above is the MAD-X linear quadrupole equivalent of the NLLENS thin kick (cf. MAD-X Physical Methods Manual, nonlinear lens).
Reference: V. Danilov and S. Nagaitsev, Phys. Rev. ST Accel. Beams 13, 084002 (2010), Sect. V.A
- Parameters
-
| [in] | refpart | reference particle (unused) |
- Returns
- 6x6 transport matrix