OPAL (Object Oriented Parallel Accelerator Library) 2022.1
OPAL
|
#include <AsymmetricEnge.h>
Public Member Functions | |
AsymmetricEnge () | |
AsymmetricEnge (const std::vector< double > aStart, double x0Start, double lambdaStart, const std::vector< double > aEnd, double x0End, double lambdaEnd) | |
AsymmetricEnge * | clone () const |
std::ostream & | print (std::ostream &out) const |
double | function (double x, int n) const |
double | getCentreLength () const |
double | getEndLength () const |
std::shared_ptr< Enge > | getEngeStart () const |
void | setEngeStart (std::shared_ptr< Enge > eStart) |
std::shared_ptr< Enge > | getEngeEnd () 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) |
![]() | |
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 EndFieldModel * | clone () 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< Enge > | engeStart_m |
std::shared_ptr< Enge > | engeEnd_m |
Additional Inherited Members | |
![]() | |
static std::shared_ptr< EndFieldModel > | getEndFieldModel (std::string name) |
static void | setEndFieldModel (std::string name, std::shared_ptr< EndFieldModel > efm) |
static std::string | getName (std::shared_ptr< EndFieldModel > efm) |
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.
endfieldmodel::AsymmetricEnge::AsymmetricEnge | ( | ) |
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.
|
private |
Definition at line 9 of file AsymmetricEnge.cpp.
|
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().
|
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.
|
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.
|
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.
|
inline |
Get the enge function for the magnet exit
Definition at line 118 of file AsymmetricEnge.h.
References engeEnd_m.
|
inline |
Get the enge function for the magnet entrance
Definition at line 115 of file AsymmetricEnge.h.
References engeStart_m.
|
inline |
Return x0End, offset of the end Enge
Definition at line 132 of file AsymmetricEnge.h.
References engeEnd_m.
|
inline |
Return x0Start, offset of the start Enge
Definition at line 128 of file AsymmetricEnge.h.
References engeStart_m.
|
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.
|
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.
|
inline |
Set the enge function for the magnet exit
Definition at line 124 of file AsymmetricEnge.h.
References engeEnd_m.
|
inline |
Set the enge function for the magnet entrance
Definition at line 121 of file AsymmetricEnge.h.
References engeStart_m.
|
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().
|
inline |
Set x0End, offset of the end Enge
Definition at line 140 of file AsymmetricEnge.h.
References engeEnd_m.
|
inline |
Set x0Start, offset of the start Enge
Definition at line 136 of file AsymmetricEnge.h.
References engeStart_m.
|
private |
Definition at line 112 of file AsymmetricEnge.h.
Referenced by AsymmetricEnge(), function(), getCentreLength(), getEndLength(), getEngeEnd(), getX0End(), rescale(), setEngeEnd(), and setX0End().
|
private |
Definition at line 111 of file AsymmetricEnge.h.
Referenced by AsymmetricEnge(), function(), getCentreLength(), getEndLength(), getEngeStart(), getX0Start(), print(), rescale(), setEngeStart(), and setX0Start().