OPAL (Object Oriented Parallel Accelerator Library)
2021.1.99
OPAL
|
#include <Tanh.h>
Public Member Functions | |
Tanh (double x0, double lambda, int max_index) | |
Tanh () | |
Tanh (const Tanh &rhs) | |
~Tanh () | |
EndFieldModel * | clone () const |
double | function (double x, int n) 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) |
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) |
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(), getTanh(), and Hypervolume::n.
|
inline |
Return lambda (end length)
Definition at line 92 of file Tanh.h.
References _lambda.
Referenced by MultipoleT::apply(), MultipoleT::getFringeLength(), MultipoleTBase::getFringeLength(), MultipoleT::transformCoords(), and OpalScalingFFAMagnet::update().
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 102 of file Tanh.cpp.
References _tdi, Hypervolume::n, and setTanhDiffIndices().
|
inline |
Return x0 (flat top length)
Definition at line 95 of file Tanh.h.
References _x0.
Referenced by MultipoleT::apply(), MultipoleT::transformCoords(), and OpalScalingFFAMagnet::update().
|
virtual |
Bug - does nothing
Implements endfieldmodel::EndFieldModel.
|
inline |
Set lambda (end length)
Definition at line 98 of file Tanh.h.
References _lambda.
Referenced by OpalScalingFFAMagnet::update(), and OpalVerticalFFAMagnet::update().
|
static |
Set the value of tanh differential indices to nth order differentials.
Definition at line 76 of file Tanh.cpp.
References _tdi, endfieldmodel::CompactVector(), and Hypervolume::n.
Referenced by getTanhDiffIndices(), Tanh(), OpalScalingFFAMagnet::update(), and OpalVerticalFFAMagnet::update().
|
inline |
Set x0 (flat top length)
Definition at line 101 of file Tanh.h.
References _x0.
Referenced by OpalScalingFFAMagnet::update(), and OpalVerticalFFAMagnet::update().
|
private |
Definition at line 106 of file Tanh.h.
Referenced by getLambda(), getNegTanh(), getTanh(), print(), 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 112 of file Tanh.h.
Referenced by getNegTanh(), getTanh(), getTanhDiffIndices(), and setTanhDiffIndices().
|
private |