|
OPAL (Object Oriented Parallel Accelerator Library)
2024.1
OPAL
|
#include <Tanh.h>


Public Member Functions | |
| Tanh (double x0, double lambda, int max_index) | |
| Tanh () | |
| Tanh (const Tanh &rhs) | |
| ~Tanh () | |
| Tanh * | clone () const |
| void | rescale (double scaleFactor) |
| double | function (double x, int n) const |
| double | getCentreLength () const |
| double | getEndLength () const |
| double | getTanh (double x, int n) const |
| double | getNegTanh (double x, int n) const |
| double | getLambda () const |
| double | getX0 () const |
| void | setLambda (double lambda) |
| void | setX0 (double x0) |
| virtual void | setMaximumDerivative (size_t n) |
| std::ostream & | print (std::ostream &out) const |
Public Member Functions inherited from endfieldmodel::EndFieldModel | |
| virtual | ~EndFieldModel () |
Static Public Member Functions | |
| static std::vector < std::vector< int > > | getTanhDiffIndices (size_t n) |
| static void | setTanhDiffIndices (size_t n) |
Static Public Member Functions inherited from endfieldmodel::EndFieldModel | |
| 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) |
Private Attributes | |
| double | _x0 |
| double | _lambda |
Static Private Attributes | |
| static std::vector < std::vector< std::vector < int > > > | _tdi |
Calculate the Tanh function (e.g. for multipole end fields).
DoubleTanh 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.
| endfieldmodel::Tanh::Tanh | ( | double | x0, |
| double | lambda, | ||
| int | max_index | ||
| ) |
Create a double tanh function
Here x0 is the centre length and lambda is the end length. max_index is used to set up for differentiation - don't try to calculate higher differentials than exist in max_index.
Definition at line 39 of file Tanh.cpp.
References setTanhDiffIndices().

|
inline |
Default constructor (initialises x0 and lambda to 0)
Definition at line 59 of file Tanh.h.
References setTanhDiffIndices().
Referenced by clone().

|
inline |
| endfieldmodel::Tanh::~Tanh | ( | ) |
|
virtual |
Inherited copy constructor.
Implements endfieldmodel::EndFieldModel.
Definition at line 45 of file Tanh.cpp.
References Tanh().

|
virtual |
Double Tanh is given by
\(d(x) = \)
Implements endfieldmodel::EndFieldModel.
Definition at line 72 of file Tanh.cpp.
References getNegTanh(), and getTanh().

|
inlinevirtual |
Nominal flat top length is twice x0 (one x0 in each direction)
Implements endfieldmodel::EndFieldModel.
Definition at line 79 of file Tanh.h.
References getX0().

|
inlinevirtual |
Return nominal fringe field length
Implements endfieldmodel::EndFieldModel.
Definition at line 82 of file Tanh.h.
References getLambda().

|
inline |
Return lambda (end length)
Definition at line 101 of file Tanh.h.
References _lambda.
Referenced by MultipoleT::apply(), getEndLength(), MultipoleTBase::getFringeLength(), MultipoleT::getFringeLength(), and MultipoleT::transformCoords().
| double endfieldmodel::Tanh::getNegTanh | ( | double | x, |
| int | n | ||
| ) | const |
Returns the value of tanh((x-x0)/lambda) or its \(n^{th}\) derivative.
Definition at line 61 of file Tanh.cpp.
References _lambda, _tdi, _x0, Hypervolume::n, and tanh().
Referenced by function(), MultipoleTBase::getFringeDeriv(), and MultipoleT::getFringeDeriv().

| double endfieldmodel::Tanh::getTanh | ( | double | x, |
| int | n | ||
| ) | const |
Returns the value of tanh((x+x0)/lambda) or its \(n^{th}\) derivative.
Definition at line 50 of file Tanh.cpp.
References _lambda, _tdi, _x0, Hypervolume::n, and tanh().
Referenced by function(), MultipoleTBase::getFringeDeriv(), and MultipoleT::getFringeDeriv().

|
static |
Get all the tanh differential indices \(I_{pq}\).
Returns vector of vector of ints where p indexes the differential and q indexes the tanh power - so
Definition at line 107 of file Tanh.cpp.
References _tdi, Hypervolume::n, and setTanhDiffIndices().

|
inline |
Return x0 (flat top length)
Definition at line 104 of file Tanh.h.
References _x0.
Referenced by MultipoleT::apply(), getCentreLength(), and MultipoleT::transformCoords().
|
virtual |
Prints a human readable string to out
Implements endfieldmodel::EndFieldModel.
|
virtual |
Rescale the end field by a factor x0
Implements endfieldmodel::EndFieldModel.
|
inline |
Set lambda (end length)
Definition at line 107 of file Tanh.h.
References _lambda.
Referenced by OpalScalingFFAMagnet::setupDefaultEndField(), and OpalVerticalFFAMagnet::update().
|
virtual |
Set the maximum derivative prior to tracking
Implements endfieldmodel::EndFieldModel.
Definition at line 76 of file Tanh.cpp.
References setTanhDiffIndices().

|
static |
Set the value of tanh differential indices to nth order differentials.
Definition at line 81 of file Tanh.cpp.
References _tdi, and endfieldmodel::CompactVector().
Referenced by getTanhDiffIndices(), setMaximumDerivative(), Tanh(), and OpalVerticalFFAMagnet::update().

|
inline |
Set x0 (flat top length)
Definition at line 110 of file Tanh.h.
References _x0.
Referenced by OpalScalingFFAMagnet::setupDefaultEndField(), and OpalVerticalFFAMagnet::update().
|
private |
Definition at line 118 of file Tanh.h.
Referenced by getLambda(), getNegTanh(), getTanh(), print(), rescale(), and setLambda().
|
staticprivate |
_tdi indexes powers of tanh in d^n tanh/dx^n as sum of powers of tanh
For some reason we index as n, +a, -a, but the third index is redundant
Definition at line 124 of file Tanh.h.
Referenced by getNegTanh(), getTanh(), getTanhDiffIndices(), and setTanhDiffIndices().
|
private |
1.8.5