OPAL (Object Oriented Parallel Accelerator Library) 2024.2
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
25#include "Fields/Definitions.h"
26#include "Fields/EMField.h"
27
40
41public:
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
209protected:
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;
219 double length_m;
220
223
224private:
225};
226
227double VariableRFCavity::getAmplitude(double time) const {
228 return amplitudeTD_m->getValue(time);
229}
230
231double VariableRFCavity::getPhase(double time) const {
232 return phaseTD_m->getValue(time);
233}
234
235double 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
251void VariableRFCavity::setHeight(double fullHeight) {
252 halfHeight_m = fullHeight / 2;
253}
254
255void VariableRFCavity::setWidth(double fullWidth) {
256 halfWidth_m = fullWidth / 2;
257}
258
259#endif // CLASSIC_VirtualRFCavity_HH
const std::string name
Component(const std::string &name)
Constructor with given name.
Definition Component.cpp:53
ElementBase(const std::string &name)
Constructor with given name.
std::shared_ptr< AbstractTimeDependence > frequencyTD_m
StraightGeometry geometry
The cavity's geometry.
virtual void setHeight(double fullHeight)
virtual double getAmplitude(double time) const
virtual void finalise() override
std::string amplitudeName_m
virtual void getDimensions(double &, double &) const override
virtual void setPhaseName(const std::string &phase)
virtual double getFrequency(double time) const
std::string phaseName_m
std::string frequencyName_m
virtual bool bends() const override
virtual double getWidth() const
virtual std::shared_ptr< AbstractTimeDependence > getFrequencyModel() const
virtual double getLength() const
virtual void setAmplitudeName(const std::string &amplitude)
virtual bool apply(const size_t &i, const double &t, Vector_t &E, Vector_t &B) override
virtual void setPhaseModel(std::shared_ptr< AbstractTimeDependence > time_dep)
virtual std::shared_ptr< AbstractTimeDependence > getAmplitudeModel() const
virtual double getHeight() const
virtual void setFrequencyModel(std::shared_ptr< AbstractTimeDependence > time_dep)
virtual void setLength(double length)
virtual bool applyToReferenceParticle(const Vector_t &R, const Vector_t &P, const double &t, Vector_t &E, Vector_t &B) override
std::shared_ptr< AbstractTimeDependence > amplitudeTD_m
virtual double getPhase(double time) const
virtual void accept(BeamlineVisitor &) const override
virtual void setFrequencyName(const std::string &frequency)
virtual void setWidth(double fullWidth)
virtual std::shared_ptr< AbstractTimeDependence > getPhaseModel() const
virtual ElementBase * clone() const override
virtual EMField & getField() override
Not implemented.
std::shared_ptr< AbstractTimeDependence > phaseTD_m
virtual StraightGeometry & getGeometry() override
VariableRFCavity(const std::string &name)
Constructor with given name.
VariableRFCavity & operator=(const VariableRFCavity &)
virtual void setAmplitudeModel(std::shared_ptr< AbstractTimeDependence > time_dep)
A geometry representing a straight line.
Abstract base class for electromagnetic fields.
Definition EMField.h:188
Vektor< double, 3 > Vector_t