27 config_m(right.config_m),
28 scalingName_m(right.scalingName_m),
29 scalingTD_m(right.scalingTD_m) {
68 throw OpalException(
"MultipoleT::apply",
"Element is not initialised with a bunch");
73 "apply(i, t, E, B) is ambiguous for multi-container bunches; "
74 "use apply(pc) from the container loop instead");
77 if (i >= pc->getLocalNum()) {
78 throw OpalException(
"MultipoleT::apply",
"Particle index is out of local bounds");
83 Kokkos::subview(pc->R.getView(), i));
89 const double& s0,
const double& lambda_left,
const double& lambda_right) {
141 if (i < profile.size() && profile[i] != 0.0) {
176 return static_cast<char>(std::toupper(c));
194 "MultipoleT::validateConfiguration",
195 "Max F order too large for this implementation");
ippl::Vector< T, Dim > Vector_t
static std::shared_ptr< AbstractTimeDependence > getTimeDependence(const std::string &name)
Abstract base class for accelerator geometry classes.
virtual void visitMultipoleT(const MultipoleT &)=0
Apply the algorithm to an arbitrary multipole.
PartBunch_t * RefPartBunch_m
virtual void setElementLength(double length)
Set design length.
static constexpr unsigned int MaxDerivatives
void setRotation(double rot)
void setScalingName(const std::string &name)
void setBendAngle(double angle, bool variableRadius)
void setElementLength(double length) override
void initialise(PartBunch_t *bunch, double &startField, double &endField) override
void setEntranceAngle(double entranceAngle)
ElementBase * clone() const override
std::string scalingName_m
void accept(BeamlineVisitor &visitor) const override
MultipoleTConfig config_m
void setAperture(const double &vertAp, const double &horizAp)
void setMaxOrder(size_t orderZ, size_t orderX)
void initialiseTimeDependencies() const
double getScaling(double t) const
BGeometryBase & getGeometry() override
bool bends() const override
std::shared_ptr< AbstractTimeDependence > scalingTD_m
void chooseImplementation()
MultipoleT(const std::string &name)
void setFringeField(const double &s0, const double &lambda_left, const double &lambda_right)
bool apply(const std::shared_ptr< ParticleContainer_t > &pc) override
std::tuple< double, double, double > getFringeField() const
void setEntryOffset(double offset)
void validateConfiguration() const
void setBoundingBoxLength(double boundingBoxLength)
void setTransProfile(const std::vector< double > &profile)
std::unique_ptr< MultipoleTBase > implementation_
double getT() const
Get the current simulation time.
double horizontalAperture_m
static constexpr unsigned int NumPoles
double fringeLambdaRight_m
unsigned int transverseProfileMaxOrder_m
double verticalAperture_m
Kokkos::Array< double, NumPoles > transverseProfile_m
double fringeLambdaLeft_m
double boundingBoxLength_m