OPAL (Object Oriented Parallel Accelerator Library) 2022.1
OPAL
Public Member Functions | Private Member Functions | Private Attributes | List of all members
endfieldmodel::AsymmetricEnge Class Reference

#include <AsymmetricEnge.h>

Inheritance diagram for endfieldmodel::AsymmetricEnge:
Inheritance graph
[legend]
Collaboration diagram for endfieldmodel::AsymmetricEnge:
Collaboration graph
[legend]

Public Member Functions

 AsymmetricEnge ()
 
 AsymmetricEnge (const std::vector< double > aStart, double x0Start, double lambdaStart, const std::vector< double > aEnd, double x0End, double lambdaEnd)
 
AsymmetricEngeclone () const
 
std::ostream & print (std::ostream &out) const
 
double function (double x, int n) const
 
double getCentreLength () const
 
double getEndLength () const
 
std::shared_ptr< EngegetEngeStart () const
 
void setEngeStart (std::shared_ptr< Enge > eStart)
 
std::shared_ptr< EngegetEngeEnd () const
 
void setEngeEnd (std::shared_ptr< Enge > eEnd)
 
double getX0Start () const
 
void setX0Start (double x0)
 
double getX0End () const
 
void setX0End (double x0)
 
void setMaximumDerivative (size_t n)
 
void rescale (double scaleFactor)
 
- Public Member Functions inherited from endfieldmodel::EndFieldModel
virtual ~EndFieldModel ()
 
virtual std::ostream & print (std::ostream &out) const =0
 
virtual double function (double x, int n) const =0
 
virtual double getCentreLength () const =0
 
virtual double getEndLength () const =0
 
virtual EndFieldModelclone () const =0
 
virtual void setMaximumDerivative (size_t n)=0
 
virtual void rescale (double scaleFactor)=0
 

Private Member Functions

 AsymmetricEnge (const AsymmetricEnge &rhs)
 

Private Attributes

std::shared_ptr< EngeengeStart_m
 
std::shared_ptr< EngeengeEnd_m
 

Additional Inherited Members

- Static Public Member Functions inherited from endfieldmodel::EndFieldModel
static std::shared_ptr< EndFieldModelgetEndFieldModel (std::string name)
 
static void setEndFieldModel (std::string name, std::shared_ptr< EndFieldModel > efm)
 
static std::string getName (std::shared_ptr< EndFieldModel > efm)
 

Detailed Description

Calculate the AsymmetricEnge function (e.g. for multipole end fields).

AsymmetricEnge function is given by
\(T(x) = (tanh( (x+x0)/\lambda )-tanh( (x-x0)/\lambda ))/2\)
The derivatives of tanh(x) are given by
\(d^p tanh(x)/dx^p = \sum_q I_{pq} tanh^{q}(x)\)
where \(I_{pq}\) are calculated using some recursion relation. Using these expressions, one can calculate a recursion relation for higher order derivatives and hence calculate analytical derivatives at arbitrary order.

Definition at line 50 of file AsymmetricEnge.h.

Constructor & Destructor Documentation

◆ AsymmetricEnge() [1/3]

endfieldmodel::AsymmetricEnge::AsymmetricEnge ( )

Default constructor

Definition at line 5 of file AsymmetricEnge.cpp.

Referenced by clone().

◆ AsymmetricEnge() [2/3]

endfieldmodel::AsymmetricEnge::AsymmetricEnge ( const std::vector< double >  aStart,
double  x0Start,
double  lambdaStart,
const std::vector< double >  aEnd,
double  x0End,
double  lambdaEnd 
)

Constructor taking enge parameters

Definition at line 13 of file AsymmetricEnge.cpp.

References engeEnd_m, and engeStart_m.

◆ AsymmetricEnge() [3/3]

endfieldmodel::AsymmetricEnge::AsymmetricEnge ( const AsymmetricEnge rhs)
private

Definition at line 9 of file AsymmetricEnge.cpp.

Member Function Documentation

◆ clone()

AsymmetricEnge * endfieldmodel::AsymmetricEnge::clone ( ) const
inlinevirtual

Inheritable copy constructor. We take a deep copy of the engeStart and engeEnd

Implements endfieldmodel::EndFieldModel.

Definition at line 160 of file AsymmetricEnge.h.

References AsymmetricEnge().

Here is the call graph for this function:

◆ function()

double endfieldmodel::AsymmetricEnge::function ( double  x,
int  n 
) const
inlinevirtual

Return the value of enge at some point x

Implements endfieldmodel::EndFieldModel.

Definition at line 144 of file AsymmetricEnge.h.

References engeEnd_m, engeStart_m, and Hypervolume::n.

◆ getCentreLength()

double endfieldmodel::AsymmetricEnge::getCentreLength ( ) const
inlinevirtual

Centre length is the average of x0End and x0Start

Implements endfieldmodel::EndFieldModel.

Definition at line 168 of file AsymmetricEnge.h.

References engeEnd_m, and engeStart_m.

◆ getEndLength()

double endfieldmodel::AsymmetricEnge::getEndLength ( ) const
inlinevirtual

End length is the average of lambdaEnd and lambdaStart

Implements endfieldmodel::EndFieldModel.

Definition at line 172 of file AsymmetricEnge.h.

References engeEnd_m, and engeStart_m.

◆ getEngeEnd()

std::shared_ptr< Enge > endfieldmodel::AsymmetricEnge::getEngeEnd ( ) const
inline

Get the enge function for the magnet exit

Definition at line 118 of file AsymmetricEnge.h.

References engeEnd_m.

◆ getEngeStart()

std::shared_ptr< Enge > endfieldmodel::AsymmetricEnge::getEngeStart ( ) const
inline

Get the enge function for the magnet entrance

Definition at line 115 of file AsymmetricEnge.h.

References engeStart_m.

◆ getX0End()

double endfieldmodel::AsymmetricEnge::getX0End ( ) const
inline

Return x0End, offset of the end Enge

Definition at line 132 of file AsymmetricEnge.h.

References engeEnd_m.

◆ getX0Start()

double endfieldmodel::AsymmetricEnge::getX0Start ( ) const
inline

Return x0Start, offset of the start Enge

Definition at line 128 of file AsymmetricEnge.h.

References engeStart_m.

◆ print()

std::ostream & endfieldmodel::AsymmetricEnge::print ( std::ostream &  out) const
virtual

Print a human-readable description of the end field model

Implements endfieldmodel::EndFieldModel.

Definition at line 34 of file AsymmetricEnge.cpp.

References engeStart_m.

◆ rescale()

void endfieldmodel::AsymmetricEnge::rescale ( double  scaleFactor)
virtual

Rescale the Enge to a new length scale

Implements endfieldmodel::EndFieldModel.

Definition at line 29 of file AsymmetricEnge.cpp.

References engeEnd_m, and engeStart_m.

◆ setEngeEnd()

void endfieldmodel::AsymmetricEnge::setEngeEnd ( std::shared_ptr< Enge eEnd)
inline

Set the enge function for the magnet exit

Definition at line 124 of file AsymmetricEnge.h.

References engeEnd_m.

◆ setEngeStart()

void endfieldmodel::AsymmetricEnge::setEngeStart ( std::shared_ptr< Enge eStart)
inline

Set the enge function for the magnet entrance

Definition at line 121 of file AsymmetricEnge.h.

References engeStart_m.

◆ setMaximumDerivative()

void endfieldmodel::AsymmetricEnge::setMaximumDerivative ( size_t  n)
inlinevirtual

Setup the Enge recursion for derivatives

Implements endfieldmodel::EndFieldModel.

Definition at line 164 of file AsymmetricEnge.h.

References Hypervolume::n, and endfieldmodel::Enge::setEngeDiffIndices().

Here is the call graph for this function:

◆ setX0End()

void endfieldmodel::AsymmetricEnge::setX0End ( double  x0)
inline

Set x0End, offset of the end Enge

Definition at line 140 of file AsymmetricEnge.h.

References engeEnd_m.

◆ setX0Start()

void endfieldmodel::AsymmetricEnge::setX0Start ( double  x0)
inline

Set x0Start, offset of the start Enge

Definition at line 136 of file AsymmetricEnge.h.

References engeStart_m.

Member Data Documentation

◆ engeEnd_m

std::shared_ptr<Enge> endfieldmodel::AsymmetricEnge::engeEnd_m
private

◆ engeStart_m

std::shared_ptr<Enge> endfieldmodel::AsymmetricEnge::engeStart_m
private

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