OPAL (Object Oriented Parallel Accelerator Library)
2024.2
OPAL
src
Classic
AbsBeamline
EndFieldModel
AsymmetricEnge.cpp
Go to the documentation of this file.
1
#include "
AbsBeamline/EndFieldModel/AsymmetricEnge.h
"
2
3
namespace
endfieldmodel
{
4
5
AsymmetricEnge::AsymmetricEnge
() : engeStart_m(new
Enge
()),
6
engeEnd_m(new
Enge
()) {
7
}
8
9
AsymmetricEnge::AsymmetricEnge
(
const
AsymmetricEnge
& rhs)
10
: engeStart_m(rhs.engeStart_m->clone()), engeEnd_m(rhs.engeEnd_m->clone()) {
11
}
12
13
AsymmetricEnge::AsymmetricEnge
(
const
std::vector<double> aStart,
14
double
x0Start,
15
double
lambdaStart,
16
const
std::vector<double> aEnd,
17
double
x0End,
18
double
lambdaEnd) : engeStart_m(new
Enge
()),
19
engeEnd_m(new
Enge
()) {
20
engeStart_m
->setCoefficients(aStart);
21
engeStart_m
->setX0(x0Start);
22
engeStart_m
->setLambda(lambdaStart);
23
// x0 is held in this
24
engeEnd_m
->setCoefficients(aEnd);
25
engeEnd_m
->setX0(x0End);
26
engeEnd_m
->setLambda(lambdaEnd);
27
}
28
29
void
AsymmetricEnge::rescale
(
double
scaleFactor) {
30
engeStart_m
->rescale(scaleFactor);
31
engeEnd_m
->rescale(scaleFactor);
32
}
33
34
std::ostream&
AsymmetricEnge::print
(std::ostream& out)
const
{
35
out <<
"AsymmetricEnge start "
;
36
engeStart_m
->print(out);
37
out <<
" end "
;
38
engeStart_m
->print(out);
39
return
out;
40
}
41
42
43
double
AsymmetricEnge::function
(
double
x,
int
n)
const
{
44
// f(x) = E(x-x0) + E(-x-x0) - 1
45
// f^{(2n)} = E^{(2n)}(x-x0) + E^{(2n)}(-x-x0)
46
// f^{(2n+1)} = E^{(2n)}(x-x0) - E^{(2n)}(-x-x0)
47
double
sup = -x-
engeStart_m
->getX0();
48
double
sdn = +x-
engeEnd_m
->getX0();
49
if
(n == 0) {
50
return
engeStart_m
->getEnge(sup, n)+
51
engeEnd_m
->getEnge(sdn, n)-1;
52
}
else
if
(n%2) {
53
return
-
engeStart_m
->getEnge(sup, n)+
54
engeEnd_m
->getEnge(sdn, n);
55
}
else
{
56
return
engeStart_m
->getEnge(sup, n)+
57
engeEnd_m
->getEnge(sdn, n);
58
}
59
}
60
61
}
AsymmetricEnge.h
endfieldmodel
Definition
AsymmetricEnge.cpp:3
endfieldmodel::AsymmetricEnge
Definition
AsymmetricEnge.h:57
endfieldmodel::AsymmetricEnge::print
std::ostream & print(std::ostream &out) const
Definition
AsymmetricEnge.cpp:34
endfieldmodel::AsymmetricEnge::AsymmetricEnge
AsymmetricEnge()
Definition
AsymmetricEnge.cpp:5
endfieldmodel::AsymmetricEnge::function
double function(double x, int n) const
Definition
AsymmetricEnge.cpp:43
endfieldmodel::AsymmetricEnge::rescale
void rescale(double scaleFactor)
Definition
AsymmetricEnge.cpp:29
endfieldmodel::AsymmetricEnge::engeEnd_m
std::shared_ptr< Enge > engeEnd_m
Definition
AsymmetricEnge.h:122
endfieldmodel::AsymmetricEnge::engeStart_m
std::shared_ptr< Enge > engeStart_m
Definition
AsymmetricEnge.h:121
endfieldmodel::Enge
Definition
Enge.h:47
Generated on Tue Apr 14 2026 07:18:44 for OPAL (Object Oriented Parallel Accelerator Library) by
1.9.8