OPAL (Object Oriented Parallel Accelerator Library) 2022.1
OPAL
RBend3D.h
Go to the documentation of this file.
1#ifndef CLASSIC_RBend3D_HH
2#define CLASSIC_RBend3D_HH
3
4// ------------------------------------------------------------------------
5// $RCSfile: RBend3D.h,v $
6// ------------------------------------------------------------------------
7// $Revision: 1.1.1.1 $
8// ------------------------------------------------------------------------
9// Copyright: see Copyright.readme
10// ------------------------------------------------------------------------
11//
12// Class: RBend3D
13// Defines the abstract interface for a solenoid magnet.
14//
15// ------------------------------------------------------------------------
16// Class category: AbsBeamline
17// ------------------------------------------------------------------------
18//
19// $Date: 2000/03/27 09:32:32 $
20// $Author: fci $
21//
22// ------------------------------------------------------------------------
23
27
28template <class T, unsigned Dim>
29class PartBunchBase;
30class Fieldmap;
31class MeshData;
32
33// Class RBend3D
34// ------------------------------------------------------------------------
36// Class RBend3D defines the abstract interface for solenoid magnets.
37
38
39class RBend3D: public BendBase {
40
41public:
42
44 explicit RBend3D(const std::string &name);
45
46 RBend3D();
47 RBend3D(const RBend3D &);
48 virtual ~RBend3D();
49
51 ElementBase* clone() const override;
52
54 BGeometryBase& getGeometry() override;
55
57 const BGeometryBase& getGeometry() const override;
58
60 EMField &getField() override;
61
63 const EMField &getField() const override;
64
66 virtual void accept(BeamlineVisitor &) const override;
67
68 virtual bool apply(const size_t &i, const double &t, Vector_t &E, Vector_t &B) override;
69
70 virtual bool apply(const Vector_t &R, const Vector_t &P, const double &t, Vector_t &E, Vector_t &B) override;
71
72 virtual bool applyToReferenceParticle(const Vector_t &R, const Vector_t &P, const double &t, Vector_t &E, Vector_t &B) override;
73
74 virtual void initialise(PartBunchBase<double, 3> *bunch, double &startField, double &endField) override;
75
76 virtual void finalise() override;
77
78 virtual void goOnline(const double &kineticEnergy) override;
79
80 virtual void goOffline() override;
81
82 virtual ElementType getType() const override;
83
84 virtual void getDimensions(double &zBegin, double &zEnd) const override;
85
86 virtual bool isInside(const Vector_t &r) const override;
87
89
90 virtual double getExitAngle() const override;
91private:
92 double trackRefParticleThrough(double dt, bool print = false);
93
96 double startField_m;
98
100
102
103 // Not implemented.
104 void operator=(const RBend3D &);
105};
106
107inline
108double RBend3D::getExitAngle() const {
109 return getBendAngle() - getEntranceAngle();
110}
111
112#endif // CLASSIC_RBend3D_HH
ElementType
Definition: ElementBase.h:88
const std::string name
double getBendAngle() const
Definition: BendBase.h:92
double getEntranceAngle() const
Definition: BendBase.h:103
Interface for solenoids.
Definition: RBend3D.h:39
ElementBase * clone() const override
Definition: RBend3D.cpp:216
virtual bool applyToReferenceParticle(const Vector_t &R, const Vector_t &P, const double &t, Vector_t &E, Vector_t &B) override
Definition: RBend3D.cpp:83
virtual void goOnline(const double &kineticEnergy) override
Definition: RBend3D.cpp:191
virtual void goOffline() override
Definition: RBend3D.cpp:196
BGeometryBase & getGeometry() override
Definition: RBend3D.cpp:220
virtual bool isInside(const Vector_t &r) const override
Definition: RBend3D.cpp:211
void operator=(const RBend3D &)
StraightGeometry geometry_m
Definition: RBend3D.h:99
virtual double getExitAngle() const override
Definition: RBend3D.h:108
virtual bool apply(const size_t &i, const double &t, Vector_t &E, Vector_t &B) override
Definition: RBend3D.cpp:68
double fieldAmplitudeError_m
Definition: RBend3D.h:94
virtual void finalise() override
Definition: RBend3D.cpp:188
BMultipoleField dummyField_m
Definition: RBend3D.h:101
virtual void getDimensions(double &zBegin, double &zEnd) const override
Definition: RBend3D.cpp:201
RBend3D()
Definition: RBend3D.cpp:36
virtual ~RBend3D()
Definition: RBend3D.cpp:61
double lengthField_m
Definition: RBend3D.h:97
double startField_m
Definition: RBend3D.h:96
virtual void initialise(PartBunchBase< double, 3 > *bunch, double &startField, double &endField) override
Definition: RBend3D.cpp:93
virtual ElementType getType() const override
Get element type std::string.
Definition: RBend3D.cpp:207
double trackRefParticleThrough(double dt, bool print=false)
Definition: RBend3D.cpp:268
MeshData getSurfaceMesh() const
Definition: RBend3D.cpp:236
EMField & getField() override
Definition: RBend3D.cpp:228
virtual void accept(BeamlineVisitor &) const override
Apply visitor to RBend3D.
Definition: RBend3D.cpp:64
Abstract base class for accelerator geometry classes.
Definition: Geometry.h:43
A geometry representing a straight line.
The magnetic field of a multipole.
Abstract base class for electromagnetic fields.
Definition: EMField.h:188