87 const std::shared_ptr<AbstractTimeDependence> amplitude_td) {
96 const std::shared_ptr<AbstractTimeDependence> frequency_td) {
110 "VariableRFCavity::getField",
"No field defined for VariableRFCavity");
119 Kokkos::subview(pc->R.getView(), i));
123 const double phi =
phaseTD_m->getValue(t);
132 const double phi =
phaseTD_m->getValue(t);
137 const auto R = pc->R.getView();
138 const auto E = pc->E.getView();
142 const double phi =
phaseTD_m->getValue(t);
143 const auto count = pc->getLocalNum();
148 Kokkos::parallel_for(
149 "VariableRFCavity::computeField()", count, KOKKOS_LAMBDA(
const size_t i) {
150 computeField(R(i), E(i), E0, integralF, phi, halfWidth, halfHeight, length);
159 return apply(R, P, t, E, B);
177 const std::shared_ptr<AbstractTimeDependence> phaseTD =
179 phaseTD_m = std::shared_ptr<AbstractTimeDependence>(phaseTD->clone());
180 const std::shared_ptr<AbstractTimeDependence> frequencyTD =
182 frequencyTD_m = std::shared_ptr<AbstractTimeDependence>(frequencyTD->clone());
183 const std::shared_ptr<AbstractTimeDependence> amplitudeTD =
185 amplitudeTD_m = std::shared_ptr<AbstractTimeDependence>(amplitudeTD->clone());
189 "VariableRFCavity::initialise",
"Height or width was not set on VariableRFCavity");
ippl::Vector< T, Dim > Vector_t
Template PIC bunch: IPPL PicManager, shared field mesh/solver, and multiple particle containers.
static std::shared_ptr< AbstractTimeDependence > getTimeDependence(const std::string &name)
virtual void visitVariableRFCavity(const VariableRFCavity &)=0
Apply the algorithm to a variable RF cavity.
PartBunch_t * RefPartBunch_m
Abstract base class for electromagnetic fields.
virtual void setName(const std::string &name)
Set element name.
virtual const std::string & getName() const
Get element name.
virtual double getElementLength() const
Get design length.
double getT() const
Get the current simulation time.
A geometry representing a straight line.
virtual void setElementLength(double length)
Set design length.
virtual void setFrequencyModel(std::shared_ptr< AbstractTimeDependence > frequency_td)
bool apply(const std::shared_ptr< ParticleContainer_t > &pc) override
std::shared_ptr< AbstractTimeDependence > frequencyTD_m
StraightGeometry geometry
The cavity's geometry.
void initialiseTimeDependencies() const
std::string amplitudeName_m
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
std::string frequencyName_m
virtual std::shared_ptr< AbstractTimeDependence > getFrequencyModel() const
static KOKKOS_INLINE_FUNCTION bool computeField(const Vector_t< double, 3 > &R, Vector_t< double, 3 > &E, double E0, double integralF, double phi, double halfWidth, double halfHeight, double length)
virtual std::shared_ptr< AbstractTimeDependence > getAmplitudeModel() const
virtual void setLength(double length)
std::shared_ptr< AbstractTimeDependence > amplitudeTD_m
void accept(BeamlineVisitor &) const override
virtual std::shared_ptr< AbstractTimeDependence > getPhaseModel() const
void initialise(PartBunch_t *bunch, double &startField, double &endField) override
ElementBase * clone() const override
EMField & getField() override
Not implemented.
std::shared_ptr< AbstractTimeDependence > phaseTD_m
virtual void setAmplitudeModel(std::shared_ptr< AbstractTimeDependence > amplitude_td)
StraightGeometry & getGeometry() override
virtual void setPhaseModel(std::shared_ptr< AbstractTimeDependence > phase_td)
VariableRFCavity & operator=(const VariableRFCavity &)
constexpr double MVpm2Vpm