OPAL (Object Oriented Parallel Accelerator Library) 2022.1
OPAL
RingSection.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2012-2014, Chris Rogers
3 * All rights reserved.
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are met:
6 * 1. Redistributions of source code must retain the above copyright notice,
7 * this list of conditions and the following disclaimer.
8 * 2. Redistributions in binary form must reproduce the above copyright notice,
9 * this list of conditions and the following disclaimer in the documentation
10 * and/or other materials provided with the distribution.
11 * 3. Neither the name of STFC nor the names of its contributors may be used to
12 * endorse or promote products derived from this software without specific
13 * prior written permission.
14 *
15 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
16 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
19 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
20 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
21 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
22 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
23 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
24 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
25 * POSSIBILITY OF SUCH DAMAGE.
26 */
27
28#ifndef RING_SECTION_H
29#define RING_SECTION_H
30
31#include <vector>
32
34
68 public:
72
75
77
80
87 bool isOnOrPastStartPlane(const Vector_t& pos) const;
88
94 bool isPastEndPlane(const Vector_t& pos) const;
95
110 bool getFieldValue(const Vector_t& pos, const Vector_t& centroid,
111 const double& t, Vector_t& E, Vector_t& B) const;
112
124 std::vector<Vector_t> getVirtualBoundingBox() const;
125
127 bool doesOverlap(double phiStart, double phiEnd) const;
128
133 inline void setComponent(Component* component) {component_m = component;}
134
139 inline Component* getComponent() const {return component_m;}
140
142 inline void setStartPosition(Vector_t pos) {startPosition_m = pos;}
143
146
148 inline void setStartNormal(Vector_t orientation);
149
152
154 inline void setEndPosition(Vector_t pos) {endPosition_m = pos;}
155
157 inline Vector_t getEndPosition() const {return endPosition_m;}
158
160 inline void setEndNormal(Vector_t orientation);
161
163 inline Vector_t getEndNormal() const {return endOrientation_m;}
164
166 inline void setComponentPosition(Vector_t position) {componentPosition_m = position;}
167
170
172 inline void setComponentOrientation(Vector_t orientation);
173
176 private:
177 void rotate(Vector_t& vector) const;
178 void rotate_back(Vector_t& vector) const;
179 inline Vector_t& normalise(Vector_t& vector) const;
180 inline void rotateToTCoordinates(Vector_t& vec) const;
181 inline void rotateToCyclCoordinates(Vector_t& vec) const;
182
184
187
190
193
195 double sin2_m;
196 double cos2_m;
197};
198
199typedef std::vector<RingSection*> RingSectionList;
200
202 componentOrientation_m = orientation;
204}
205
206inline void RingSection::setStartNormal(Vector_t orientation) {
207 startOrientation_m = normalise(orientation);
208}
209
210inline void RingSection::setEndNormal(Vector_t orientation) {
211 endOrientation_m = normalise(orientation);
212}
213
214inline Vector_t& RingSection::normalise(Vector_t& orientation) const {
215 double magnitude = sqrt(orientation(0)*orientation(0)+
216 orientation(1)*orientation(1)+
217 orientation(2)*orientation(2));
218 if (magnitude > 0.)
219 orientation /= magnitude;
220 return orientation;
221}
222
223
225 vec = Vector_t(vec(1), vec(2), vec(0));
226}
227
229 vec = Vector_t(vec(2), vec(0), vec(1));
230}
231
232#endif //RING_SECTION_H
std::vector< RingSection * > RingSectionList
Definition: RingSection.h:199
Tps< T > sec(const Tps< T > &x)
Secant.
Definition: TpsMath.h:153
Tps< T > sqrt(const Tps< T > &x)
Square root.
Definition: TpsMath.h:91
Interface for a single beam element.
Definition: Component.h:50
Component placement handler in ring geometry.
Definition: RingSection.h:67
Vector_t componentOrientation_m
Definition: RingSection.h:186
void setStartNormal(Vector_t orientation)
Definition: RingSection.h:206
RingSection & operator=(const RingSection &sec)
Definition: RingSection.cpp:54
void rotate(Vector_t &vector) const
void setComponentPosition(Vector_t position)
Definition: RingSection.h:166
void setComponent(Component *component)
Definition: RingSection.h:133
void setStartPosition(Vector_t pos)
Definition: RingSection.h:142
Vector_t getStartNormal() const
Definition: RingSection.h:151
Vector_t startPosition_m
Definition: RingSection.h:188
void setComponentOrientation(Vector_t orientation)
Definition: RingSection.h:201
bool getFieldValue(const Vector_t &pos, const Vector_t &centroid, const double &t, Vector_t &E, Vector_t &B) const
Definition: RingSection.cpp:95
void rotateToCyclCoordinates(Vector_t &vec) const
Definition: RingSection.h:228
Vector_t endOrientation_m
Definition: RingSection.h:192
void rotate_back(Vector_t &vector) const
Vector_t startOrientation_m
Definition: RingSection.h:189
bool isOnOrPastStartPlane(const Vector_t &pos) const
Definition: RingSection.cpp:70
Vector_t componentPosition_m
Definition: RingSection.h:185
Component * getComponent() const
Definition: RingSection.h:139
double sin2_m
Definition: RingSection.h:195
Vector_t getComponentPosition() const
Definition: RingSection.h:169
Component * component_m
Definition: RingSection.h:183
bool doesOverlap(double phiStart, double phiEnd) const
Vector_t getEndPosition() const
Definition: RingSection.h:157
double cos2_m
Definition: RingSection.h:196
void updateComponentOrientation()
Vector_t getStartPosition() const
Definition: RingSection.h:145
void setEndPosition(Vector_t pos)
Definition: RingSection.h:154
Vector_t getEndNormal() const
Definition: RingSection.h:163
void setEndNormal(Vector_t orientation)
Definition: RingSection.h:210
Vector_t endPosition_m
Definition: RingSection.h:191
Vector_t getComponentOrientation() const
Definition: RingSection.h:175
Vector_t & normalise(Vector_t &vector) const
Definition: RingSection.h:214
std::vector< Vector_t > getVirtualBoundingBox() const
void rotateToTCoordinates(Vector_t &vec) const
Definition: RingSection.h:224
bool isPastEndPlane(const Vector_t &pos) const
Definition: RingSection.cpp:83
Definition: Vec.h:22
Vektor< double, 3 > Vector_t
Definition: Vektor.h:6