OPAL (Object Oriented Parallel Accelerator Library)  2024.1
OPAL
VariableRFCavity.h
Go to the documentation of this file.
1 //
2 // Class VariableRFCavity
3 // Defines the abstract interface for a RF Cavity
4 // with Time Dependent Parameters.
5 //
6 // Copyright (c) 2014 - 2023, Chris Rogers, STFC Rutherford Appleton Laboratory, Didcot, UK
7 // All rights reserved
8 //
9 // This file is part of OPAL.
10 //
11 // OPAL is free software: you can redistribute it and/or modify
12 // it under the terms of the GNU General Public License as published by
13 // the Free Software Foundation, either version 3 of the License, or
14 // (at your option) any later version.
15 //
16 // You should have received a copy of the GNU General Public License
17 // along with OPAL. If not, see <https://www.gnu.org/licenses/>.
18 //
19 #ifndef CLASSIC_ABSBEAMLINE_VariableRFCavity_HH
20 #define CLASSIC_ABSBEAMLINE_VariableRFCavity_HH
21 
22 #include "AbsBeamline/Component.h"
25 #include "Fields/Definitions.h"
26 #include "Fields/EMField.h"
27 
39 class VariableRFCavity: public Component {
40 
41 public:
43  explicit VariableRFCavity(const std::string& name);
54  virtual ~VariableRFCavity();
55 
61  virtual void accept(BeamlineVisitor&) const override;
62 
64  virtual ElementBase* clone() const override;
65 
75  virtual bool apply(const size_t& i, const double& t,
76  Vector_t& E, Vector_t& B) override;
77 
88  virtual bool apply(const Vector_t& R, const Vector_t& P,
89  const double& t, Vector_t& E, Vector_t& B) override;
90 
91 
102  virtual bool applyToReferenceParticle(const Vector_t& R, const Vector_t& P,
103  const double& t, Vector_t& E, Vector_t& B) override;
104 
109  virtual void initialise(PartBunchBase<double, 3>* bunch, double& startField, double& endField) override;
110 
115  virtual void finalise() override;
116 
118  virtual bool bends() const override {return false;}
119 
121  virtual void getDimensions(double& /*zBegin*/, double& /*zEnd*/) const override {}
122 
129  virtual inline double getAmplitude(double time) const;
130 
137  virtual inline double getFrequency(double time) const;
138 
145  virtual inline double getPhase(double time) const;
146 
148  virtual inline double getHeight() const;
150  virtual inline double getWidth() const;
152  virtual inline double getLength() const;
154  virtual inline void setHeight(double fullHeight);
156  virtual inline void setWidth(double fullWidth);
158  virtual void setLength(double length);
159 
161  virtual std::shared_ptr<AbstractTimeDependence> getAmplitudeModel() const;
163  virtual std::shared_ptr<AbstractTimeDependence> getPhaseModel() const;
165  virtual std::shared_ptr<AbstractTimeDependence> getFrequencyModel() const;
166 
168  virtual void setAmplitudeModel(std::shared_ptr<AbstractTimeDependence> time_dep);
170  virtual void setPhaseModel(std::shared_ptr<AbstractTimeDependence> time_dep);
172  virtual void setFrequencyModel(std::shared_ptr<AbstractTimeDependence> time_dep);
173 
178  virtual void setAmplitudeName(const std::string& amplitude) { amplitudeName_m = amplitude; }
179 
184  virtual void setPhaseName(const std::string& phase) { phaseName_m = phase; }
185 
190  virtual void setFrequencyName(const std::string& frequency) { frequencyName_m = frequency; }
191 
193  virtual StraightGeometry& getGeometry() override;
195  virtual const StraightGeometry& getGeometry() const override;
196 
202  void initialise() const;
203 
205  virtual EMField& getField() override;
207  virtual const EMField& getField() const override;
208 
209 protected:
210  void initNull();
211  std::shared_ptr<AbstractTimeDependence> phaseTD_m;
212  std::shared_ptr<AbstractTimeDependence> amplitudeTD_m;
213  std::shared_ptr<AbstractTimeDependence> frequencyTD_m;
214  std::string phaseName_m;
215  std::string amplitudeName_m;
216  std::string frequencyName_m;
217  double halfWidth_m;
218  double halfHeight_m;
219  double length_m;
220 
223 
224 private:
225 };
226 
227 double VariableRFCavity::getAmplitude(double time) const {
228  return amplitudeTD_m->getValue(time);
229 }
230 
231 double VariableRFCavity::getPhase(double time) const {
232  return phaseTD_m->getValue(time);
233 }
234 
235 double VariableRFCavity::getFrequency(double time) const {
236  return frequencyTD_m->getValue(time);
237 }
238 
240  return halfHeight_m * 2;
241 }
242 
244  return halfWidth_m * 2;
245 }
246 
248  return length_m;
249 }
250 
251 void VariableRFCavity::setHeight(double fullHeight) {
252  halfHeight_m = fullHeight / 2;
253 }
254 
255 void VariableRFCavity::setWidth(double fullWidth) {
256  halfWidth_m = fullWidth / 2;
257 }
258 
259 #endif // CLASSIC_VirtualRFCavity_HH
virtual void setPhaseModel(std::shared_ptr< AbstractTimeDependence > time_dep)
A geometry representing a straight line.
virtual void accept(BeamlineVisitor &) const override
virtual std::shared_ptr< AbstractTimeDependence > getPhaseModel() const
VariableRFCavity & operator=(const VariableRFCavity &)
Abstract base class for electromagnetic fields.
Definition: EMField.h:188
virtual void setFrequencyName(const std::string &frequency)
virtual ElementBase * clone() const override
std::string frequencyName_m
virtual double getAmplitude(double time) const
virtual double getHeight() const
virtual void setWidth(double fullWidth)
virtual bool apply(const size_t &i, const double &t, Vector_t &E, Vector_t &B) override
std::shared_ptr< AbstractTimeDependence > phaseTD_m
virtual bool bends() const override
virtual double getFrequency(double time) const
virtual void finalise() override
virtual void setLength(double length)
virtual void setAmplitudeName(const std::string &amplitude)
virtual void getDimensions(double &, double &) const override
virtual StraightGeometry & getGeometry() override
virtual double getPhase(double time) const
virtual void setFrequencyModel(std::shared_ptr< AbstractTimeDependence > time_dep)
void initialise() const
virtual ~VariableRFCavity()
std::shared_ptr< AbstractTimeDependence > amplitudeTD_m
const std::string name
virtual double getLength() const
virtual void setAmplitudeModel(std::shared_ptr< AbstractTimeDependence > time_dep)
virtual EMField & getField() override
Not implemented.
virtual void setHeight(double fullHeight)
virtual std::shared_ptr< AbstractTimeDependence > getAmplitudeModel() const
std::string amplitudeName_m
virtual bool applyToReferenceParticle(const Vector_t &R, const Vector_t &P, const double &t, Vector_t &E, Vector_t &B) override
Interface for a single beam element.
Definition: Component.h:50
std::shared_ptr< AbstractTimeDependence > frequencyTD_m
virtual std::shared_ptr< AbstractTimeDependence > getFrequencyModel() const
virtual double getWidth() const
virtual void setPhaseName(const std::string &phase)
StraightGeometry geometry
The cavity&#39;s geometry.
std::string phaseName_m