OPAL (Object Oriented Parallel Accelerator Library)  2021.1.99
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 
24 #include "AbsBeamline/BendBase.h"
26 #include "Fields/BMultipoleField.h"
27 
28 template <class T, unsigned Dim>
29 class PartBunchBase;
30 class Fieldmap;
31 class MeshData;
32 
33 // Class RBend3D
34 // ------------------------------------------------------------------------
36 // Class RBend3D defines the abstract interface for solenoid magnets.
37 
38 
39 class RBend3D: public BendBase {
40 
41 public:
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 ElementBase::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 
88  MeshData getSurfaceMesh() const;
89 
90  virtual double getExitAngle() const override;
91 private:
92  double trackRefParticleThrough(double dt, bool print = false);
93 
96  double startField_m;
97  double lengthField_m;
98 
100 
102 
103  // Not implemented.
104  void operator=(const RBend3D &);
105 };
106 
107 inline
108 double RBend3D::getExitAngle() const {
109  return getBendAngle() - getEntranceAngle();
110 }
111 
112 #endif // CLASSIC_RBend3D_HH
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
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
virtual ElementBase::ElementType getType() const override
Get element type std::string.
Definition: RBend3D.cpp:207
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