OPAL (Object Oriented Parallel Accelerator Library)  2.2.0
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 void addKR(int i, double t, Vector_t &K) override;
69 
70  virtual void addKT(int i, double t, Vector_t &K) override;
71 
72  virtual bool apply(const size_t &i, const double &t, Vector_t &E, Vector_t &B) override;
73 
74  virtual bool apply(const Vector_t &R, const Vector_t &P, const double &t, Vector_t &E, Vector_t &B) override;
75 
76  virtual bool applyToReferenceParticle(const Vector_t &R, const Vector_t &P, const double &t, Vector_t &E, Vector_t &B) override;
77 
78  virtual void initialise(PartBunchBase<double, 3> *bunch, double &startField, double &endField) override;
79 
80  virtual void finalise() override;
81 
82  virtual bool bends() const override;
83 
84  virtual void goOnline(const double &kineticEnergy) override;
85 
86  virtual void goOffline() override;
87 
88  // Assign the field filename.
89  void setFieldMapFN(std::string fn);
90 
91  void setFast(bool fast);
92 
93  bool getFast() const;
94 
95  virtual ElementBase::ElementType getType() const override;
96 
97  virtual void getDimensions(double &zBegin, double &zEnd) const override;
98 
99  virtual bool isInside(const Vector_t &r) const override;
100 
101  MeshData getSurfaceMesh() const;
102 
103  virtual double getExitAngle() const override;
104 private:
105  double trackRefParticleThrough(double dt, bool print = false);
106 
107  // std::string name; /**< The name of the object*/
111  double startField_m;
113 
114  bool fast_m;
115 
117 
119 
120  // Not implemented.
121  void operator=(const RBend3D &);
122 };
123 
124 inline
125 double RBend3D::getExitAngle() const {
126  return getBendAngle() - getEntranceAngle();
127 }
128 
129 #endif // CLASSIC_RBend3D_HH
Interface for solenoids.
Definition: RBend3D.h:39
double lengthField_m
Definition: RBend3D.h:112
Interface for basic beam line object.
Definition: ElementBase.h:128
bool getFast() const
Definition: RBend3D.cpp:82
RBend3D()
Definition: RBend3D.cpp:34
virtual double getExitAngle() const override
Definition: RBend3D.h:125
virtual ElementBase::ElementType getType() const override
Get element type std::string.
Definition: RBend3D.cpp:240
StraightGeometry geometry_m
Definition: RBend3D.h:116
double startField_m
Definition: RBend3D.h:111
virtual bool isInside(const Vector_t &r) const override
Definition: RBend3D.cpp:244
BMultipoleField dummyField_m
Definition: RBend3D.h:118
Fieldmap * myFieldmap_m
Definition: RBend3D.h:108
MeshData getSurfaceMesh() const
Definition: RBend3D.cpp:269
void operator=(const RBend3D &)
double getBendAngle() const
Definition: BendBase.h:86
double fieldAmplitudeError_m
Definition: RBend3D.h:109
Abstract base class for accelerator geometry classes.
Definition: Geometry.h:43
Class: DataSink.
Definition: OpalData.h:29
virtual void initialise(PartBunchBase< double, 3 > *bunch, double &startField, double &endField) override
Definition: RBend3D.cpp:117
virtual void addKT(int i, double t, Vector_t &K) override
Definition: RBend3D.cpp:89
ElementBase * clone() const override
Definition: RBend3D.cpp:249
virtual void addKR(int i, double t, Vector_t &K) override
Definition: RBend3D.cpp:86
Abstract base class for electromagnetic fields.
Definition: EMField.h:188
BGeometryBase & getGeometry() override
Definition: RBend3D.cpp:253
EMField & getField() override
Definition: RBend3D.cpp:261
A geometry representing a straight line.
virtual void goOnline(const double &kineticEnergy) override
Definition: RBend3D.cpp:224
The magnetic field of a multipole.
virtual bool applyToReferenceParticle(const Vector_t &R, const Vector_t &P, const double &t, Vector_t &E, Vector_t &B) override
Definition: RBend3D.cpp:107
virtual void getDimensions(double &zBegin, double &zEnd) const override
Definition: RBend3D.cpp:234
const std::string name
void setFast(bool fast)
Definition: RBend3D.cpp:77
virtual void accept(BeamlineVisitor &) const override
Apply visitor to RBend3D.
Definition: RBend3D.cpp:69
void setFieldMapFN(std::string fn)
Definition: RBend3D.cpp:73
virtual void finalise() override
Definition: RBend3D.cpp:217
virtual bool bends() const override
Indicates that element bends the beam.
Definition: RBend3D.cpp:220
virtual ~RBend3D()
Definition: RBend3D.cpp:65
virtual void goOffline() override
Definition: RBend3D.cpp:229
double getEntranceAngle() const
Definition: BendBase.h:97
bool fast_m
Definition: RBend3D.h:114
#define K
Definition: integrate.cpp:118
Abstract algorithm.
virtual bool apply(const size_t &i, const double &t, Vector_t &E, Vector_t &B) override
Definition: RBend3D.cpp:92
double trackRefParticleThrough(double dt, bool print=false)
Definition: RBend3D.cpp:301