OPAL (Object Oriented Parallel Accelerator Library) 2024.2
OPAL
Fieldmap.h
Go to the documentation of this file.
1#ifndef CLASSIC_FIELDMAP_HH
2#define CLASSIC_FIELDMAP_HH
3
4#define READ_BUFFER_LENGTH 256
5
6#include <string>
7#include <map>
8#include <vector>
9#include "Algorithms/Vektor.h"
10#include "Fields/Definitions.h"
11
12#include "gsl/gsl_interp.h"
13#include "gsl/gsl_spline.h"
14
38
54
56 DX = 0,
59};
60
61class _Fieldmap {
62
63public:
64
65 static Fieldmap getFieldmap(std::string Filename, bool fast = false);
66 static std::vector<std::string> getListFieldmapNames();
67 static void deleteFieldmap(std::string Filename);
68 static void clearDictionary();
69 static MapType readHeader(std::string Filename);
70 static void readMap(std::string Filename);
71 static void freeMap(std::string Filename);
72
73 static std::string typeset_msg(const std::string &msg, const std::string &title);
74
75 // Note: getFieldstrength() returns true if R is outside of the field!
76 virtual bool getFieldstrength(const Vector_t &R, Vector_t &E, Vector_t &B) const = 0;
77 virtual bool getFieldDerivative(const Vector_t &R, Vector_t &E, Vector_t &B, const DiffDirection &dir) const = 0;
78 virtual void getFieldDimensions(double &zBegin, double &zEnd) const = 0;
79 virtual void getFieldDimensions(double &xIni, double &xFinal, double &yIni, double &yFinal, double &zIni, double &zFinal) const = 0;
80 virtual void swap() = 0;
81 virtual void getInfo(Inform *msg) = 0;
82 virtual double getFrequency() const = 0;
83 virtual void setFrequency(double freq) = 0;
84 virtual void setEdgeConstants(const double &bendAngle, const double &entranceAngle, const double &exitAngle);
85 virtual void setFieldLength(const double &);
86
87 virtual void get1DProfile1EngeCoeffs(std::vector<double> &engeCoeffsEntry,
88 std::vector<double> &engeCoeffsExit);
89 virtual void get1DProfile1EntranceParam(double &entranceParameter1,
90 double &entranceParameter2,
91 double &entranceParameter3);
92 virtual void get1DProfile1ExitParam(double &exitParameter1,
93 double &exitParameter2,
94 double &exitParameter3);
95 virtual double getFieldGap();
96 virtual void setFieldGap(double gap);
97
98 MapType getType() { return Type;}
99
100 virtual void getOnaxisEz(std::vector<std::pair<double, double> > & onaxis);
101
102 virtual bool isInside(const Vector_t &/*r*/) const { return true; }
103
104 virtual void readMap() = 0;
105 virtual void freeMap() = 0;
106
107protected:
108 _Fieldmap () = delete;
109
110 _Fieldmap(const std::string& filename)
111 : Filename_m(filename),
112 lines_read_m(0),
113 normalize_m(true) { };
114
115 virtual ~_Fieldmap() { ;};
117
118 std::string Filename_m;
120
122 void getLine(std::ifstream & in, std::string & buffer) {
123 getLine(in, lines_read_m, buffer);
124 }
125
126 static void getLine(std::ifstream &in, int &lines_read, std::string &buffer);
127
128 template<class S>
129 bool interpretLine(std::ifstream &in, S &value, const bool &file_length_known = true);
130 template<class S, class T>
131 bool interpretLine(std::ifstream &in, S &value1, T &value2, const bool &file_length_known = true);
132 template<class S, class T, class U>
133 bool interpretLine(std::ifstream &in, S &value1, T &value2, U &value3, const bool &file_length_known = true);
134 template<class S, class T, class U, class V>
135 bool interpretLine(std::ifstream &in, S &value1, T &value2, U &value3, V &value4, const bool &file_length_known = true);
136 template<class S>
137 bool interpretLine(std::ifstream &in, S &value1, S &value2, S &value3, S &value4, S &value5, S &value6, const bool &file_length_known = true);
138
139 bool interpreteEOF(std::ifstream &in);
140
141 void interpretWarning(const std::ios_base::iostate &state,
142 const bool &read_all,
143 const std::string &error_msg,
144 const std::string &found);
147
149 void noFieldmapWarning();
150
151 void lowResolutionWarning(double squareError, double maxError);
152
153 void checkMap(unsigned int accuracy,
154 std::pair<double, double> fieldDimensions,
155 double deltaZ,
156 const std::vector<double> &fourierCoefficients,
157 gsl_spline *splineCoefficients,
158 gsl_interp_accel *splineAccelerator);
159
160 void checkMap(unsigned int accuracy,
161 double length,
162 const std::vector<double> &zSampling,
163 const std::vector<double> &fourierCoefficients,
164 gsl_spline *splineCoefficients,
165 gsl_interp_accel *splineAccelerator);
166
167 void write3DField(unsigned int nx,
168 unsigned int ny,
169 unsigned int nz,
170 const std::pair<double, double> &xrange,
171 const std::pair<double, double> &yrange,
172 const std::pair<double, double> &zrange,
173 const std::vector<Vector_t> &ef,
174 const std::vector<Vector_t> &bf);
175
176private:
177 template<typename T>
179 static const char *name;
180 };
181
183 static std::string alpha_numeric;
184
188 unsigned int RefCounter;
189 bool read;
191 Type(aType),
192 Map(aMap),
193 RefCounter(1),
194 read(false)
195 { }
196 };
197
198 static std::map<std::string, FieldmapDescription> FieldmapDictionary;
199
200};
201
202#endif
std::shared_ptr< _Fieldmap > Fieldmap
Definition Definitions.h:24
#define READ_BUFFER_LENGTH
Definition Fieldmap.h:4
SwapType
Definition Fieldmap.h:39
@ XZ
Definition Fieldmap.h:41
@ YMXZ
Definition Fieldmap.h:47
@ MYXZ
Definition Fieldmap.h:49
@ MZYX
Definition Fieldmap.h:52
@ MXYMZ
Definition Fieldmap.h:51
@ XMYMZ
Definition Fieldmap.h:45
@ XMZY
Definition Fieldmap.h:46
@ XZMY
Definition Fieldmap.h:44
@ XYZ
Definition Fieldmap.h:43
@ ZX
Definition Fieldmap.h:42
@ MXMYZ
Definition Fieldmap.h:48
@ ZYMX
Definition Fieldmap.h:50
MapType
Definition Fieldmap.h:15
@ T1DProfile2
Definition Fieldmap.h:24
@ TAstraElectroStatic
Definition Fieldmap.h:20
@ T3DElectroStatic
Definition Fieldmap.h:32
@ T3DDynamic
Definition Fieldmap.h:31
@ T2DDynamic
Definition Fieldmap.h:25
@ T2DElectroStatic_cspline
Definition Fieldmap.h:28
@ T2DMagnetoStatic
Definition Fieldmap.h:29
@ T3DMagnetoStatic
Definition Fieldmap.h:33
@ T1DDynamic
Definition Fieldmap.h:17
@ UNKNOWN
Definition Fieldmap.h:16
@ T2DMagnetoStatic_cspline
Definition Fieldmap.h:30
@ TAstraMagnetoStatic
Definition Fieldmap.h:22
@ T3DMagnetoStatic_Extended
Definition Fieldmap.h:34
@ T2DDynamic_cspline
Definition Fieldmap.h:26
@ T1DProfile1
Definition Fieldmap.h:23
@ T3DMagnetoStaticH5Block
Definition Fieldmap.h:35
@ T3DDynamicH5Block
Definition Fieldmap.h:36
@ T1DElectroStatic
Definition Fieldmap.h:19
@ T1DMagnetoStatic
Definition Fieldmap.h:21
@ T2DElectroStatic
Definition Fieldmap.h:27
@ TAstraDynamic
Definition Fieldmap.h:18
DiffDirection
Definition Fieldmap.h:55
@ DX
Definition Fieldmap.h:56
@ DY
Definition Fieldmap.h:57
@ DZ
Definition Fieldmap.h:58
virtual ~_Fieldmap()
Definition Fieldmap.h:115
virtual double getFieldGap()
Definition Fieldmap.cpp:726
bool interpreteEOF(std::ifstream &in)
Definition Fieldmap.cpp:555
virtual void freeMap()=0
bool normalize_m
Definition Fieldmap.h:121
static std::string typeset_msg(const std::string &msg, const std::string &title)
Definition Fieldmap.cpp:649
virtual bool getFieldstrength(const Vector_t &R, Vector_t &E, Vector_t &B) const =0
virtual void getFieldDimensions(double &zBegin, double &zEnd) const =0
void disableFieldmapWarning()
Definition Fieldmap.cpp:610
virtual void get1DProfile1EngeCoeffs(std::vector< double > &engeCoeffsEntry, std::vector< double > &engeCoeffsExit)
Definition Fieldmap.cpp:709
void missingValuesWarning()
Definition Fieldmap.cpp:590
virtual void getOnaxisEz(std::vector< std::pair< double, double > > &onaxis)
Definition Fieldmap.cpp:706
virtual void get1DProfile1EntranceParam(double &entranceParameter1, double &entranceParameter2, double &entranceParameter3)
Definition Fieldmap.cpp:714
static void clearDictionary()
Definition Fieldmap.cpp:274
void getLine(std::ifstream &in, std::string &buffer)
Definition Fieldmap.h:122
void exceedingValuesWarning()
Definition Fieldmap.cpp:600
_Fieldmap()=delete
static void deleteFieldmap(std::string Filename)
Definition Fieldmap.cpp:270
virtual bool isInside(const Vector_t &) const
Definition Fieldmap.h:102
virtual void setFieldGap(double gap)
Definition Fieldmap.cpp:730
virtual double getFrequency() const =0
virtual void setFieldLength(const double &)
Definition Fieldmap.cpp:530
void write3DField(unsigned int nx, unsigned int ny, unsigned int nz, const std::pair< double, double > &xrange, const std::pair< double, double > &yrange, const std::pair< double, double > &zrange, const std::vector< Vector_t > &ef, const std::vector< Vector_t > &bf)
Definition Fieldmap.cpp:734
void noFieldmapWarning()
Definition Fieldmap.cpp:618
virtual void readMap()=0
virtual void swap()=0
bool interpretLine(std::ifstream &in, S &value, const bool &file_length_known=true)
_Fieldmap(const std::string &filename)
Definition Fieldmap.h:110
static std::vector< std::string > getListFieldmapNames()
Definition Fieldmap.cpp:262
virtual void setFrequency(double freq)=0
MapType getType()
Definition Fieldmap.h:98
static std::map< std::string, FieldmapDescription > FieldmapDictionary
Definition Fieldmap.h:198
virtual void get1DProfile1ExitParam(double &exitParameter1, double &exitParameter2, double &exitParameter3)
Definition Fieldmap.cpp:720
int lines_read_m
Definition Fieldmap.h:119
static Fieldmap getFieldmap(std::string Filename, bool fast=false)
Definition Fieldmap.cpp:48
void interpretWarning(const std::ios_base::iostate &state, const bool &read_all, const std::string &error_msg, const std::string &found)
Definition Fieldmap.cpp:571
static std::string alpha_numeric
Definition Fieldmap.h:183
virtual void getFieldDimensions(double &xIni, double &xFinal, double &yIni, double &yFinal, double &zIni, double &zFinal) const =0
virtual bool getFieldDerivative(const Vector_t &R, Vector_t &E, Vector_t &B, const DiffDirection &dir) const =0
std::string Filename_m
Definition Fieldmap.h:118
static MapType readHeader(std::string Filename)
Definition Fieldmap.cpp:282
void checkMap(unsigned int accuracy, std::pair< double, double > fieldDimensions, double deltaZ, const std::vector< double > &fourierCoefficients, gsl_spline *splineCoefficients, gsl_interp_accel *splineAccelerator)
Definition Fieldmap.cpp:448
void lowResolutionWarning(double squareError, double maxError)
Definition Fieldmap.cpp:626
MapType Type
Definition Fieldmap.h:116
static char buffer_m[256]
Definition Fieldmap.h:182
virtual void setEdgeConstants(const double &bendAngle, const double &entranceAngle, const double &exitAngle)
Definition Fieldmap.cpp:527
virtual void getInfo(Inform *msg)=0
static const char * name
Definition Fieldmap.h:179
FieldmapDescription(MapType aType, Fieldmap aMap)
Definition Fieldmap.h:190
Vektor< double, 3 > Vector_t