OPALX (Object Oriented Parallel Accelerator Library for Exascal) MINIorX
OPALX
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 <map>
7#include <string>
8#include <vector>
9
10#include "OPALTypes.h"
11
12#include "gsl/gsl_interp.h"
13#include "gsl/gsl_spline.h"
14
38
54
55enum DiffDirection { DX = 0, DY, DZ };
56
57class Fieldmap {
58public:
59 static Fieldmap* getFieldmap(std::string Filename, bool fast = false);
60 static std::vector<std::string> getListFieldmapNames();
61 static void deleteFieldmap(std::string Filename);
62 static void clearDictionary();
63 static MapType readHeader(std::string Filename);
64 static void readMap(std::string Filename);
65 static void freeMap(std::string Filename);
66
67 static std::string typeset_msg(const std::string& msg, const std::string& title);
68
69 // Note: getFieldstrength() returns true if R is outside of the field!
70 virtual bool getFieldstrength(
72 virtual bool getFieldDerivative(
74 const DiffDirection& dir) const = 0;
75 virtual void getFieldDimensions(double& zBegin, double& zEnd) const = 0;
76 virtual void getFieldDimensions(
77 double& xIni, double& xFinal, double& yIni, double& yFinal, double& zIni,
78 double& zFinal) const = 0;
79 virtual void swap() = 0;
80 virtual void getInfo(Inform* msg) = 0;
81 virtual double getFrequency() const = 0;
82 virtual void setFrequency(double freq) = 0;
83 virtual void setEdgeConstants(
84 const double& bendAngle, const double& entranceAngle, const double& exitAngle);
85 virtual void setFieldLength(const double&);
86
87 virtual void get1DProfile1EngeCoeffs(
88 std::vector<double>& engeCoeffsEntry, std::vector<double>& engeCoeffsExit);
89 virtual void get1DProfile1EntranceParam(
90 double& entranceParameter1, double& entranceParameter2, double& entranceParameter3);
91 virtual void get1DProfile1ExitParam(
92 double& exitParameter1, double& exitParameter2, double& exitParameter3);
93 virtual double getFieldGap();
94 virtual void setFieldGap(double gap);
95
97 return Type;
98 }
99
100 virtual void getOnaxisEz(std::vector<std::pair<double, double>>& onaxis);
101
102 virtual bool isInside(const Vector_t<double, 3>& /*r*/) const {
103 return true;
104 }
105
106 virtual void readMap() = 0;
107 virtual void freeMap() = 0;
108
109protected:
110 Fieldmap() = delete;
111
112 Fieldmap(const std::string& aFilename)
113 : Filename_m(aFilename), lines_read_m(0), normalize_m(true){};
114
115 virtual ~Fieldmap() {
116 ;
117 };
119
120 std::string Filename_m;
122
124 void getLine(std::ifstream& in, std::string& buffer) {
125 getLine(in, lines_read_m, buffer);
126 }
127
128 static void getLine(std::ifstream& in, int& lines_read, std::string& buffer);
129
130 template <class S>
131 bool interpretLine(std::ifstream& in, S& value, const bool& file_length_known = true);
132 template <class S, class T>
133 bool interpretLine(
134 std::ifstream& in, S& value1, T& value2, const bool& file_length_known = true);
135 template <class S, class T, class U>
136 bool interpretLine(
137 std::ifstream& in, S& value1, T& value2, U& value3, const bool& file_length_known = true);
138 template <class S, class T, class U, class V>
139 bool interpretLine(
140 std::ifstream& in, S& value1, T& value2, U& value3, V& value4,
141 const bool& file_length_known = true);
142 template <class S>
143 bool interpretLine(
144 std::ifstream& in, S& value1, S& value2, S& value3, S& value4, S& value5, S& value6,
145 const bool& file_length_known = true);
146
147 bool interpreteEOF(std::ifstream& in);
148
149 void interpretWarning(
150 const std::ios_base::iostate& state, const bool& read_all, const std::string& error_msg,
151 const std::string& found);
154
156 void noFieldmapWarning();
157
158 void lowResolutionWarning(double squareError, double maxError);
159
160 void checkMap(
161 unsigned int accuracy, std::pair<double, double> fieldDimensions, double deltaZ,
162 const std::vector<double>& fourierCoefficients, gsl_spline* splineCoefficients,
163 gsl_interp_accel* splineAccelerator);
164
165 void checkMap(
166 unsigned int accuracy, double length, const std::vector<double>& zSampling,
167 const std::vector<double>& fourierCoefficients, gsl_spline* splineCoefficients,
168 gsl_interp_accel* splineAccelerator);
169
170 void write3DField(
171 unsigned int nx, unsigned int ny, unsigned int nz, const std::pair<double, double>& xrange,
172 const std::pair<double, double>& yrange, const std::pair<double, double>& zrange,
173 const std::vector<Vector_t<double, 3>>& ef, const std::vector<Vector_t<double, 3>>& bf);
174
175private:
176 template <typename T>
178 static const char* name;
179 };
180
182 static std::string alpha_numeric;
183
187 unsigned int RefCounter;
188 bool read;
190 : Type(aType), Map(aMap), RefCounter(1), read(false) {
191 }
192 };
193
194 static std::map<std::string, FieldmapDescription> FieldmapDictionary;
195};
196
197#endif
ippl::Vector< T, Dim > Vector_t
#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:55
@ DY
Definition Fieldmap.h:55
@ DZ
Definition Fieldmap.h:55
double T
Definition datatypes.h:7
MapType Type
Definition Fieldmap.h:118
virtual bool getFieldstrength(const Vector_t< double, 3 > &R, Vector_t< double, 3 > &E, Vector_t< double, 3 > &B) const =0
virtual void getInfo(Inform *msg)=0
virtual void getFieldDimensions(double &zBegin, double &zEnd) const =0
static Fieldmap * getFieldmap(std::string Filename, bool fast=false)
Definition Fieldmap.cpp:54
virtual bool getFieldDerivative(const Vector_t< double, 3 > &R, Vector_t< double, 3 > &E, Vector_t< double, 3 > &B, const DiffDirection &dir) const =0
MapType getType()
Definition Fieldmap.h:96
static void deleteFieldmap(std::string Filename)
Definition Fieldmap.cpp:233
static std::string alpha_numeric
Definition Fieldmap.h:182
static std::map< std::string, FieldmapDescription > FieldmapDictionary
Definition Fieldmap.h:194
static MapType readHeader(std::string Filename)
Definition Fieldmap.cpp:246
virtual void setFrequency(double freq)=0
bool interpreteEOF(std::ifstream &in)
Definition Fieldmap.cpp:516
virtual void setFieldLength(const double &)
Definition Fieldmap.cpp:492
virtual void freeMap()=0
void missingValuesWarning()
Definition Fieldmap.cpp:550
Fieldmap()=delete
virtual void getOnaxisEz(std::vector< std::pair< double, double > > &onaxis)
Definition Fieldmap.cpp:668
virtual void swap()=0
virtual void get1DProfile1EntranceParam(double &entranceParameter1, double &entranceParameter2, double &entranceParameter3)
Definition Fieldmap.cpp:675
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:413
void lowResolutionWarning(double squareError, double maxError)
Definition Fieldmap.cpp:583
void interpretWarning(const std::ios_base::iostate &state, const bool &read_all, const std::string &error_msg, const std::string &found)
Definition Fieldmap.cpp:532
virtual void getFieldDimensions(double &xIni, double &xFinal, double &yIni, double &yFinal, double &zIni, double &zFinal) const =0
Fieldmap(const std::string &aFilename)
Definition Fieldmap.h:112
void disableFieldmapWarning()
Definition Fieldmap.cpp:569
virtual double getFrequency() const =0
bool normalize_m
Definition Fieldmap.h:123
static char buffer_m[256]
Definition Fieldmap.h:181
int lines_read_m
Definition Fieldmap.h:121
static std::vector< std::string > getListFieldmapNames()
Definition Fieldmap.cpp:224
static std::string typeset_msg(const std::string &msg, const std::string &title)
Definition Fieldmap.cpp:607
static void clearDictionary()
Definition Fieldmap.cpp:237
virtual ~Fieldmap()
Definition Fieldmap.h:115
virtual double getFieldGap()
Definition Fieldmap.cpp:684
virtual void setEdgeConstants(const double &bendAngle, const double &entranceAngle, const double &exitAngle)
Definition Fieldmap.cpp:489
std::string Filename_m
Definition Fieldmap.h:120
virtual void setFieldGap(double gap)
Definition Fieldmap.cpp:688
bool interpretLine(std::ifstream &in, S &value, const bool &file_length_known=true)
void exceedingValuesWarning()
Definition Fieldmap.cpp:559
virtual void get1DProfile1EngeCoeffs(std::vector< double > &engeCoeffsEntry, std::vector< double > &engeCoeffsExit)
Definition Fieldmap.cpp:671
virtual bool isInside(const Vector_t< double, 3 > &) const
Definition Fieldmap.h:102
void getLine(std::ifstream &in, std::string &buffer)
Definition Fieldmap.h:124
void noFieldmapWarning()
Definition Fieldmap.cpp:576
virtual void get1DProfile1ExitParam(double &exitParameter1, double &exitParameter2, double &exitParameter3)
Definition Fieldmap.cpp:680
virtual void readMap()=0
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< double, 3 > > &ef, const std::vector< Vector_t< double, 3 > > &bf)
Definition Fieldmap.cpp:691
static const char * name
Definition Fieldmap.h:178
FieldmapDescription(MapType aType, Fieldmap *aMap)
Definition Fieldmap.h:189