OPAL (Object Oriented Parallel Accelerator Library) 2024.2
OPAL
MultipoleTBase.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2017, Titus Dascalu
3 * Copyright (c) 2018, Martin Duy Tat
4 * All rights reserved.
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * 1. Redistributions of source code must retain the above copyright notice,
8 * this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright notice,
10 * this list of conditions and the following disclaimer in the documentation
11 * and/or other materials provided with the distribution.
12 * 3. Neither the name of STFC nor the names of its contributors may be used to
13 * endorse or promote products derived from this software without specific
14 * prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
20 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26 * POSSIBILITY OF SUCH DAMAGE.
27 */
28
29
30#ifndef CLASSIC_MULTIPOLETBASE_H
31#define CLASSIC_MULTIPOLETBASE_H
32
77
78#include "Algorithms/Vektor.h"
79class MultipoleT;
80class BeamlineVisitor;
81class BGeometryBase;
82
83// Base class for the implementation part of the MultipoleT magnet element
85public:
87 explicit MultipoleTBase(MultipoleT* element);
89 virtual ~MultipoleTBase() = default;
90protected:
92public:
94 virtual void initialise() = 0;
96 virtual BGeometryBase& getGeometry() = 0;
98 virtual const BGeometryBase& getGeometry() const = 0;
100 virtual void transformCoords(Vector_t &R) = 0;
102 virtual void transformBField(Vector_t &B, const Vector_t &R) = 0;
107 virtual double getScaleFactor(double x, double s) = 0;
112 virtual double getBx (const Vector_t &R);
117 double getBz (const Vector_t &R);
122 virtual double getBs (const Vector_t &R);
129 virtual double getFn(size_t n, double x, double s) = 0;
134 virtual void setMaxOrder(size_t /*orderZ*/, size_t /*orderX*/) {}
136 virtual double localCartesianRotation() { return 0.0; }
137};
138
139#endif
virtual ~MultipoleTBase()=default
MultipoleT * element_m
virtual void setMaxOrder(size_t, size_t)
virtual Vector_t localCartesianToOpalCartesian(const Vector_t &r)=0
virtual void transformCoords(Vector_t &R)=0
virtual const BGeometryBase & getGeometry() const =0
virtual double localCartesianRotation()
double getBz(const Vector_t &R)
virtual void initialise()=0
virtual void transformBField(Vector_t &B, const Vector_t &R)=0
virtual double getScaleFactor(double x, double s)=0
virtual BGeometryBase & getGeometry()=0
virtual double getBx(const Vector_t &R)
MultipoleTBase(MultipoleT *element)
virtual double getBs(const Vector_t &R)
virtual double getFn(size_t n, double x, double s)=0
Abstract base class for accelerator geometry classes.
Definition Geometry.h:43
Vektor< double, 3 > Vector_t