18#ifndef CLASSIC_TravelingWave_HH
19#define CLASSIC_TravelingWave_HH
49 virtual void setPhasem(
double phase)
override;
56 const double& E0,
const double& t0,
const double& q,
const double& m)
override;
72 std::shared_ptr<AbstractTimeDependence> ampl_atd,
73 std::shared_ptr<AbstractTimeDependence> phase_atd)
override;
77 virtual bool bends()
const override;
79 virtual void goOnline(
const double& kineticEnergy)
override;
85 virtual void getDimensions(
double& zBegin,
double& zEnd)
const override;
112 const int& i,
const int& I,
const std::vector<double>& t,
const double& phi,
113 const std::vector<std::pair<double, double> >& F)
const;
116 const int& i,
const int& I,
const std::vector<double>& E,
117 const std::vector<std::pair<double, double> >& F,
const double mass)
const;
120 const int& i,
const int& I,
const std::vector<double>& t,
const double& phi,
121 const std::vector<std::pair<double, double> >& F)
const;
124 const int& i,
const int& I,
const std::vector<double>& t,
const double& phi,
125 const std::vector<std::pair<double, double> >& F)
const;
131 const int& i,
const int& I,
const std::vector<double>& t,
const double& phi,
132 const std::vector<std::pair<double, double> >& F)
const {
133 return (F[I].first - F[I - 1].first)
136 * (F[I].second * std::sin(
frequency_m * t[i] + phi)
137 - F[I - 1].second * std::sin(
frequency_m * t[i - 1] + phi))
138 + (F[I].second - F[I - 1].second)
144 const int& i,
const int& I,
const std::vector<double>& E,
145 const std::vector<std::pair<double, double> >& F,
const double mass)
const {
146 double gamma1 = 1. + (19. * E[i - 1] + 1. * E[i]) / (20. * mass);
147 double gamma2 = 1. + (17. * E[i - 1] + 3. * E[i]) / (20. * mass);
148 double gamma3 = 1. + (15. * E[i - 1] + 5. * E[i]) / (20. * mass);
149 double gamma4 = 1. + (13. * E[i - 1] + 7. * E[i]) / (20. * mass);
150 double gamma5 = 1. + (11. * E[i - 1] + 9. * E[i]) / (20. * mass);
151 double gamma6 = 1. + (9. * E[i - 1] + 11. * E[i]) / (20. * mass);
152 double gamma7 = 1. + (7. * E[i - 1] + 13. * E[i]) / (20. * mass);
153 double gamma8 = 1. + (5. * E[i - 1] + 15. * E[i]) / (20. * mass);
154 double gamma9 = 1. + (3. * E[i - 1] + 17. * E[i]) / (20. * mass);
155 double gamma10 = 1. + (1. * E[i - 1] + 19. * E[i]) / (20. * mass);
156 return (F[I].first - F[I - 1].first)
157 * (1. / std::sqrt(1. - 1. / (gamma1 * gamma1))
158 + 1. / std::sqrt(1. - 1. / (gamma2 * gamma2))
159 + 1. / std::sqrt(1. - 1. / (gamma3 * gamma3))
160 + 1. / std::sqrt(1. - 1. / (gamma4 * gamma4))
161 + 1. / std::sqrt(1. - 1. / (gamma5 * gamma5))
162 + 1. / std::sqrt(1. - 1. / (gamma6 * gamma6))
163 + 1. / std::sqrt(1. - 1. / (gamma7 * gamma7))
164 + 1. / std::sqrt(1. - 1. / (gamma8 * gamma8))
165 + 1. / std::sqrt(1. - 1. / (gamma9 * gamma9))
166 + 1. / std::sqrt(1. - 1. / (gamma10 * gamma10)))
171 const int& i,
const int& I,
const std::vector<double>& t,
const double& phi,
172 const std::vector<std::pair<double, double> >& F)
const {
173 double dt = t[i] - t[i - 1];
176 * (F[I].second * std::cos(
frequency_m * t[i] + phi)
177 - F[I - 1].second * std::cos(
frequency_m * t[i - 1] + phi))
178 - (F[I].second - F[I - 1].second)
184 const int& i,
const int& I,
const std::vector<double>& t,
const double& phi,
185 const std::vector<std::pair<double, double> >& F)
const {
186 double dt = t[i] - t[i - 1];
189 * (F[I].second * std::sin(
frequency_m * t[i] + phi)
190 - F[I - 1].second * std::sin(
frequency_m * t[i - 1] + phi))
191 + (F[I].second - F[I - 1].second)
PartBunch< PLayout_t< double, 3 >, double, 3 > PartBunch_t
ippl::Vector< T, Dim > Vector_t
PartBunch< T, Dim >::ConstIterator end(PartBunch< T, Dim > const &bunch)
PartBunch< T, Dim >::ConstIterator begin(PartBunch< T, Dim > const &bunch)
constexpr double two_pi
The value of.
constexpr double c
The velocity of light in m/s.
constexpr double pi
The value of.
RFCavity(const std::string &name)
Constructor with given name.
virtual double getElementLength() const override
Get design length.
double mappedStartExitField_m
double getdA(const int &i, const int &I, const std::vector< double > &t, const double &phi, const std::vector< std::pair< double, double > > &F) const
virtual double getAmplitude() const override=0
Get RF amplitude.
virtual ElementType getType() const override
Get element type std::string.
virtual double getPhase() const override=0
Get RF phase.
virtual bool bends() const override
virtual void accept(BeamlineVisitor &) const override
Apply visitor to TravelingWave.
virtual void getDimensions(double &zBegin, double &zEnd) const override
virtual double getFrequency() const override=0
Get RF frequency.
void setNumCells(int NumCells)
void setMode(double mode)
void operator=(const TravelingWave &)
double getdB(const int &i, const int &I, const std::vector< double > &t, const double &phi, const std::vector< std::pair< double, double > > &F) const
virtual void setPhasem(double phase) override
virtual double getAutoPhaseEstimate(const double &E0, const double &t0, const double &q, const double &m) override
virtual void goOffline() override
double getdE(const int &i, const int &I, const std::vector< double > &t, const double &phi, const std::vector< std::pair< double, double > > &F) const
virtual void initialise(PartBunch_t *bunch, double &startField, double &endField) override
virtual CoordinateSystemTrafo getEdgeToEnd() const override
virtual bool applyToReferenceParticle(const Vector_t< double, 3 > &R, const Vector_t< double, 3 > &P, const double &t, Vector_t< double, 3 > &E, Vector_t< double, 3 > &B) override
virtual bool apply(const size_t &i, const double &t, Vector_t< double, 3 > &E, Vector_t< double, 3 > &B) override
virtual void finalise() override
virtual bool isInside(const Vector_t< double, 3 > &r) const override
virtual CoordinateSystemTrafo getEdgeToBegin() const override
virtual void getElementDimensions(double &begin, double &end) const override
TravelingWave(const std::string &name)
Constructor with given name.
double getdT(const int &i, const int &I, const std::vector< double > &E, const std::vector< std::pair< double, double > > &F, const double mass) const
virtual void goOnline(const double &kineticEnergy) override