OPAL (Object Oriented Parallel Accelerator Library) 2024.2
OPAL
MultipoleTCurvedConstRadius Class Reference

#include <MultipoleTCurvedConstRadius.h>

Inheritance diagram for MultipoleTCurvedConstRadius:
Collaboration diagram for MultipoleTCurvedConstRadius:

Public Member Functions

 MultipoleTCurvedConstRadius (MultipoleT *element)
void initialise () override
BGeometryBasegetGeometry () override
const BGeometryBasegetGeometry () const override
void transformCoords (Vector_t &) override
void transformBField (Vector_t &, const Vector_t &) override
double getScaleFactor (double x, double s) override
double getFn (size_t n, double x, double s) override
void setMaxOrder (size_t orderZ, size_t orderX) override
Vector_t localCartesianToOpalCartesian (const Vector_t &r) override
virtual double getBx (const Vector_t &R)
double getBz (const Vector_t &R)
virtual double getBs (const Vector_t &R)
virtual double localCartesianRotation ()

Protected Attributes

MultipoleTelement_m

Private Attributes

std::vector< polynomial::RecursionRelationrecursion_m
PlanarArcGeometry planarArcGeometry_m

Detailed Description


MultipoleT defines a curved combined function magnet with constant radius
of curvature, (up to arbitrary multipole component) with fringe fields


Class category: AbsBeamline
$Author: Titus Dascalu, Martin Duy Tat, Chris Rogers


The field is obtained from the scalar potential

\[ V = f_0(x,s) z + f_1 (x,s) \frac{z^3}{3!} + f_2 (x,s) \frac{z^5}{5!} + ... \]


(x,z,s) -> Frenet-Serret local coordinates along the magnet
z -> vertical component
assume mid-plane symmetry
set field on mid-plane -> \( B_z = f_0(x,s) = T(x) \cdot S(s) \)
T(x) -> transverse profile; this is a polynomial describing the field expansion on the mid-plane inside the magnet (not in the fringe field); 1st term is the dipole strength, 2nd term is the quadrupole gradient * x, etc.
-> when setting the magnet, one gives the multipole coefficients of this polynomial (i.e. dipole strength,
quadrupole gradient, etc.)

----------— example --------------------------------------------—
Setting a combined function magnet with dipole, quadrupole and sextupole components:
\( T(x) = B_0 + B_1 \cdot x + B_2 \cdot x^2 \)
user gives \( B_0, B_1, B_2 \)
----------— example end ----------------------------------------—

S(s) -> fringe field
recursion -> \( f_n (x,s) = (-1)^n \cdot \sum_{i=0}^{n} C_n^i \cdot T^{(2i)} \cdot S^{(2n-2i)} \)
for curved magnets the above recursion is more complicated
\( C_n^i \) -> binomial coeff; \( T^{(n)} \) -> n-th derivative


Definition at line 83 of file MultipoleTCurvedConstRadius.h.

Constructor & Destructor Documentation

◆ MultipoleTCurvedConstRadius()

MultipoleTCurvedConstRadius::MultipoleTCurvedConstRadius ( MultipoleT * element)
explicit

Constructor

Definition at line 32 of file MultipoleTCurvedConstRadius.cpp.

References MultipoleTBase::MultipoleTBase(), and planarArcGeometry_m.

Here is the call graph for this function:

Member Function Documentation

◆ getBs()

double MultipoleTBase::getBs ( const Vector_t & R)
virtualinherited

Returns the component of the field along the central axis
Returns zero far outside fringe field \( Bs = sum_n z^(2n+1) / (2n+1)! \partial_s f_n / h_s \)

Reimplemented in MultipoleTStraight.

Definition at line 60 of file MultipoleTBase.cpp.

References element_m, and getScaleFactor().

Here is the call graph for this function:

◆ getBx()

double MultipoleTBase::getBx ( const Vector_t & R)
virtualinherited

Returns the radial component of the field
Returns zero far outside fringe field \( Bx = sum_n z^(2n+1) / (2n+1)! * \partial_x f_n \)

Reimplemented in MultipoleTStraight.

Definition at line 48 of file MultipoleTBase.cpp.

References element_m.

◆ getBz()

double MultipoleTBase::getBz ( const Vector_t & R)
inherited

Returns the vertical field component
Returns zero far outside fringe field \( Bz = sum_n f_n * z^(2n) / (2n)! \)

Definition at line 37 of file MultipoleTBase.cpp.

References element_m, and getFn().

Here is the call graph for this function:

◆ getFn()

double MultipoleTCurvedConstRadius::getFn ( size_t n,
double x,
double s )
overridevirtual

Calculate fn(x, s) by expanding the differential operator (from Laplacian and scalar potential) in terms of polynomials

Parameters
n-> nth derivative
x-> Coordinate x
s-> Coordinate s

Implements MultipoleTBase.

Definition at line 91 of file MultipoleTCurvedConstRadius.cpp.

References MultipoleTBase::element_m, and recursion_m.

◆ getGeometry() [1/2]

const BGeometryBase & MultipoleTCurvedConstRadius::getGeometry ( ) const
inlineoverridevirtual

Return the cell geometry

Implements MultipoleTBase.

Definition at line 92 of file MultipoleTCurvedConstRadius.h.

References planarArcGeometry_m.

◆ getGeometry() [2/2]

BGeometryBase & MultipoleTCurvedConstRadius::getGeometry ( )
inlineoverridevirtual

Return the cell geometry

Implements MultipoleTBase.

Definition at line 90 of file MultipoleTCurvedConstRadius.h.

References planarArcGeometry_m.

◆ getScaleFactor()

double MultipoleTCurvedConstRadius::getScaleFactor ( double x,
double s )
overridevirtual

Returns the scale factor \( h_s = 1\)

Parameters
x-> Coordinate x
s-> Coordinate s

Implements MultipoleTBase.

Definition at line 87 of file MultipoleTCurvedConstRadius.cpp.

References MultipoleTBase::element_m.

◆ initialise()

void MultipoleTCurvedConstRadius::initialise ( )
overridevirtual

Initialise the element

Implements MultipoleTBase.

Definition at line 37 of file MultipoleTCurvedConstRadius.cpp.

References MultipoleTBase::element_m, planarArcGeometry_m, and setMaxOrder().

Here is the call graph for this function:

◆ localCartesianRotation()

virtual double MultipoleTBase::localCartesianRotation ( )
inlinevirtualinherited

Reimplemented in MultipoleTCurvedVarRadius.

Definition at line 136 of file MultipoleTBase.h.

◆ localCartesianToOpalCartesian()

Vector_t MultipoleTCurvedConstRadius::localCartesianToOpalCartesian ( const Vector_t & r)
overridevirtual

Implements MultipoleTBase.

Definition at line 74 of file MultipoleTCurvedConstRadius.cpp.

References MultipoleTBase::element_m.

◆ setMaxOrder()

void MultipoleTCurvedConstRadius::setMaxOrder ( size_t orderZ,
size_t orderX )
overridevirtual

Set the number of terms used in calculation of field components
Maximum power of z in Bz is 2 * maxOrder_m

Parameters
order-> Number of terms in expansion in z

Reimplemented from MultipoleTBase.

Definition at line 63 of file MultipoleTCurvedConstRadius.cpp.

References MultipoleTBase::element_m, recursion_m, polynomial::RecursionRelation::resizeX(), and polynomial::RecursionRelation::truncate().

Referenced by initialise().

Here is the call graph for this function:

◆ transformBField()

void MultipoleTCurvedConstRadius::transformBField ( Vector_t & B,
const Vector_t & R )
overridevirtual

Transform B-field from Frenet-Serret coordinates to lab coordinates

Implements MultipoleTBase.

Definition at line 55 of file MultipoleTCurvedConstRadius.cpp.

References MultipoleTBase::element_m.

◆ transformCoords()

void MultipoleTCurvedConstRadius::transformCoords ( Vector_t & R)
overridevirtual

Transform to Frenet-Serret coordinates for sector magnets

Implements MultipoleTBase.

Definition at line 43 of file MultipoleTCurvedConstRadius.cpp.

References MultipoleTBase::element_m.

Member Data Documentation

◆ element_m

◆ planarArcGeometry_m

PlanarArcGeometry MultipoleTCurvedConstRadius::planarArcGeometry_m
private

Geometry

Definition at line 120 of file MultipoleTCurvedConstRadius.h.

Referenced by getGeometry(), getGeometry(), initialise(), and MultipoleTCurvedConstRadius().

◆ recursion_m

std::vector<polynomial::RecursionRelation> MultipoleTCurvedConstRadius::recursion_m
private

Object for storing differential operator acting on Fn

Definition at line 118 of file MultipoleTCurvedConstRadius.h.

Referenced by getFn(), and setMaxOrder().


The documentation for this class was generated from the following files: