OPAL (Object Oriented Parallel Accelerator Library) 2024.2
OPAL
AsymmetricEnge.cpp
Go to the documentation of this file.
2
3namespace endfieldmodel {
4
5AsymmetricEnge::AsymmetricEnge() : engeStart_m(new Enge()),
6 engeEnd_m(new Enge()) {
7}
8
10 : engeStart_m(rhs.engeStart_m->clone()), engeEnd_m(rhs.engeEnd_m->clone()) {
11}
12
13AsymmetricEnge::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
29void AsymmetricEnge::rescale(double scaleFactor) {
30 engeStart_m->rescale(scaleFactor);
31 engeEnd_m->rescale(scaleFactor);
32}
33
34std::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
43double 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}
std::ostream & print(std::ostream &out) const
double function(double x, int n) const
void rescale(double scaleFactor)
std::shared_ptr< Enge > engeEnd_m
std::shared_ptr< Enge > engeStart_m