OPAL (Object Oriented Parallel Accelerator Library)  2024.1
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 
15 enum MapType {
16  UNKNOWN = 0,
37 };
38 
39 enum SwapType {
40 
41  XZ = 0,
42  ZX,
43  XYZ = 10,
53 };
54 
56  DX = 0,
57  DY,
59 };
60 
61 class _Fieldmap {
62 
63 public:
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 
107 protected:
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() { ;};
116  MapType Type;
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);
145  void missingValuesWarning();
146  void exceedingValuesWarning();
147 
148  void disableFieldmapWarning();
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 
176 private:
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
static void clearDictionary()
Definition: Fieldmap.cpp:274
Definition: Fieldmap.h:58
MapType getType()
Definition: Fieldmap.h:98
MapType Type
Definition: Fieldmap.h:115
Definition: Fieldmap.h:47
Definition: Fieldmap.h:56
virtual void setFieldLength(const double &)
Definition: Fieldmap.cpp:530
DiffDirection
Definition: Fieldmap.h:55
virtual void freeMap()=0
void noFieldmapWarning()
Definition: Fieldmap.cpp:618
static void deleteFieldmap(std::string Filename)
Definition: Fieldmap.cpp:270
virtual void setEdgeConstants(const double &bendAngle, const double &entranceAngle, const double &exitAngle)
Definition: Fieldmap.cpp:527
Definition: Fieldmap.h:43
virtual void get1DProfile1ExitParam(double &exitParameter1, double &exitParameter2, double &exitParameter3)
Definition: Fieldmap.cpp:720
virtual void get1DProfile1EntranceParam(double &entranceParameter1, double &entranceParameter2, double &entranceParameter3)
Definition: Fieldmap.cpp:714
int lines_read_m
Definition: Fieldmap.h:119
SwapType
Definition: Fieldmap.h:39
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 typeset_msg(const std::string &msg, const std::string &title)
Definition: Fieldmap.cpp:649
virtual double getFieldGap()
Definition: Fieldmap.cpp:726
virtual void setFrequency(double freq)=0
_Fieldmap()=delete
static std::map< std::string, FieldmapDescription > FieldmapDictionary
Definition: Fieldmap.h:198
static MapType readHeader(std::string Filename)
Definition: Fieldmap.cpp:282
bool interpreteEOF(std::ifstream &in)
Definition: Fieldmap.cpp:555
virtual bool getFieldstrength(const Vector_t &R, Vector_t &E, Vector_t &B) const =0
static char buffer_m[256]
Definition: Fieldmap.h:182
#define READ_BUFFER_LENGTH
Definition: Fieldmap.h:4
std::shared_ptr< _Fieldmap > Fieldmap
Definition: Definitions.h:24
_Fieldmap(const std::string &filename)
Definition: Fieldmap.h:110
virtual void readMap()=0
virtual void get1DProfile1EngeCoeffs(std::vector< double > &engeCoeffsEntry, std::vector< double > &engeCoeffsExit)
Definition: Fieldmap.cpp:709
virtual void setFieldGap(double gap)
Definition: Fieldmap.cpp:730
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
Definition: Fieldmap.h:45
Definition: Fieldmap.h:41
bool normalize_m
Definition: Fieldmap.h:121
Definition: Fieldmap.h:46
Definition: Inform.h:42
void exceedingValuesWarning()
Definition: Fieldmap.cpp:600
Definition: Fieldmap.h:48
static std::string alpha_numeric
Definition: Fieldmap.h:183
Definition: Fieldmap.h:49
virtual ~_Fieldmap()
Definition: Fieldmap.h:115
void disableFieldmapWarning()
Definition: Fieldmap.cpp:610
virtual bool getFieldDerivative(const Vector_t &R, Vector_t &E, Vector_t &B, const DiffDirection &dir) const =0
Definition: Fieldmap.h:50
Definition: Fieldmap.h:44
Definition: Fieldmap.h:52
void getLine(std::ifstream &in, std::string &buffer)
Definition: Fieldmap.h:122
Definition: Fieldmap.h:42
virtual bool isInside(const Vector_t &) const
Definition: Fieldmap.h:102
MapType
Definition: Fieldmap.h:15
virtual void getInfo(Inform *msg)=0
virtual double getFrequency() const =0
virtual void getFieldDimensions(double &zBegin, double &zEnd) const =0
static const char * name
Definition: Fieldmap.h:179
std::string Filename_m
Definition: Fieldmap.h:118
FieldmapDescription(MapType aType, Fieldmap aMap)
Definition: Fieldmap.h:190
Definition: Fieldmap.h:51
virtual void getOnaxisEz(std::vector< std::pair< double, double > > &onaxis)
Definition: Fieldmap.cpp:706
static std::vector< std::string > getListFieldmapNames()
Definition: Fieldmap.cpp:262
virtual void swap()=0
Definition: Fieldmap.h:57
void missingValuesWarning()
Definition: Fieldmap.cpp:590
void lowResolutionWarning(double squareError, double maxError)
Definition: Fieldmap.cpp:626
bool interpretLine(std::ifstream &in, S &value, const bool &file_length_known=true)
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
static Fieldmap getFieldmap(std::string Filename, bool fast=false)
Definition: Fieldmap.cpp:48