12 startField_m(right.startField_m) {}
15 :
Component(name), Ex_m(0.0), Ey_m(0.0), Ez_m(0.0), startField_m(0.0) {}
53 auto Rview = pc->R.getView();
54 auto Eview = pc->E.getView();
55 const size_t nLocal = pc->getLocalNum();
58 const double Ex =
Ex_m;
59 const double Ey =
Ey_m;
60 const double Ez =
Ez_m;
63 "ConstantEFieldCavity::apply()", nLocal, KOKKOS_LAMBDA(
const size_t i) {
64 if (Rview(i)[2] > 0.0 && Rview(i)[2] <= elemLength) {
75 std::shared_ptr<ParticleContainer_t> pc =
RefPartBunch_m->getParticleContainer();
76 auto Rview = pc->
R.getView();
ippl::Vector< T, Dim > Vector_t
Template PIC bunch: IPPL PicManager, shared field mesh/solver, and multiple particle containers.
virtual void visitConstantEFieldCavity(const ConstantEFieldCavity &)=0
Apply the algorithm to a constant E-field cavity element.
PartBunch_t * RefPartBunch_m
Component applying a constant accelerating electric field (Ex,Ey,Ez).
virtual void setEx(double ex)
virtual bool bends() const override
virtual bool apply(const std::shared_ptr< ParticleContainer_t > &pc) override
Apply to all particles. Kernel launch moved inside the function.
virtual void accept(BeamlineVisitor &visitor) const override
Apply visitor.
virtual ~ConstantEFieldCavity()
virtual void finalise() override
virtual void setEy(double ey)
virtual void setEz(double ez)
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
Apply to reference particle with position R and momemtum P.
virtual void getFieldExtend(double &zBegin, double &zEnd) const override
Return the field-support extent of the component.
virtual ElementType getType() const override
Get element type std::string.
virtual void initialise(PartBunch_t *bunch, double &startField, double &endField) override
bool getFlagDeleteOnTransverseExit() const
virtual double getElementLength() const
Get design length.
bool isInsideTransverse(const Vector_t< double, 3 > &r) const
Vector_t< double, Dim > R(size_t)
Do not use; throws (access positions via ParticleContainer::R).