OPAL (Object Oriented Parallel Accelerator Library)  2024.1
OPAL
FM1DDynamic.h
Go to the documentation of this file.
1 #ifndef CLASSIC_FIELDMAP1DDYNAMIC_HH
2 #define CLASSIC_FIELDMAP1DDYNAMIC_HH
3 
4 #include "Fields/Fieldmap.h"
5 
6 class _FM1DDynamic: public _Fieldmap {
7 
8 public:
9  virtual ~_FM1DDynamic();
10 
11  virtual bool getFieldstrength(const Vector_t &R, Vector_t &E, Vector_t &B) const;
12  virtual bool getFieldDerivative(const Vector_t &R, Vector_t &E,
13  Vector_t &B, const DiffDirection &dir) const;
14  virtual void getFieldDimensions(double &zBegin, double &zEnd) const;
15  virtual void getFieldDimensions(double &xIni, double &xFinal,
16  double &yIni, double &yFinal,
17  double &zIni, double &zFinal) const;
18  virtual void swap();
19  virtual void getInfo(Inform *);
20  virtual double getFrequency() const;
21  virtual void setFrequency(double freq);
22  virtual void getOnaxisEz(std::vector<std::pair<double, double>> &eZ);
23 
24  virtual bool isInside(const Vector_t &r) const;
25 private:
26  _FM1DDynamic(const std::string& filename);
27 
28  static FM1DDynamic create(const std::string& filename);
29  virtual void readMap();
30  virtual void freeMap();
31 
32  bool checkFileData(std::ifstream &fieldFile, bool parsingPassed);
33  void computeFieldOffAxis(const Vector_t &R, Vector_t &E, Vector_t &B,
34  std::vector<double> fieldComponents) const;
35  void computeFieldOnAxis(double z,
36  std::vector<double> &fieldComponents) const;
37  void computeFourierCoefficients(double maxEz, double fieldData[]);
38  void convertHeaderData();
39  double readFileData(std::ifstream &fieldFile, double fieldData[]);
40  double readFileData(std::ifstream &fieldFile,
41  std::vector<std::pair<double, double>> &eZ);
42  bool readFileHeader(std::ifstream &fieldFile);
43  void scaleField(double maxEz, std::vector<std::pair<double, double>> &eZ);
44  void stripFileHeader(std::ifstream &fieldFile);
45 
46  double frequency_m;
48 
49  double rBegin_m;
50  double rEnd_m;
51  double zBegin_m;
52  double zEnd_m;
53  double length_m;
55 
56  int accuracy_m;
57  std::vector<double> fourierCoefs_m;
58 
59  friend class _Fieldmap;
60 };
61 
62 inline bool _FM1DDynamic::isInside(const Vector_t &r) const
63 {
64  return r(2) >= zBegin_m && r(2) < zEnd_m;
65 }
66 
67 using FM1DDynamic = std::shared_ptr<_FM1DDynamic>;
68 
69 #endif
virtual void setFrequency(double freq)
virtual bool getFieldDerivative(const Vector_t &R, Vector_t &E, Vector_t &B, const DiffDirection &dir) const
Definition: FM1DDynamic.cpp:83
bool checkFileData(std::ifstream &fieldFile, bool parsingPassed)
DiffDirection
Definition: Fieldmap.h:55
void computeFieldOnAxis(double z, std::vector< double > &fieldComponents) const
virtual double getFrequency() const
double frequency_m
Definition: FM1DDynamic.h:46
virtual void swap()
static FM1DDynamic create(const std::string &filename)
Definition: FM1DDynamic.cpp:45
virtual void getOnaxisEz(std::vector< std::pair< double, double >> &eZ)
virtual bool isInside(const Vector_t &r) const
Definition: FM1DDynamic.h:62
bool readFileHeader(std::ifstream &fieldFile)
int numberOfGridPoints_m
Field length.
Definition: FM1DDynamic.h:54
double zEnd_m
Longitudinal start of field.
Definition: FM1DDynamic.h:52
double zBegin_m
Maximum radius of field.
Definition: FM1DDynamic.h:51
void convertHeaderData()
void stripFileHeader(std::ifstream &fieldFile)
virtual void getInfo(Inform *)
void computeFieldOffAxis(const Vector_t &R, Vector_t &E, Vector_t &B, std::vector< double > fieldComponents) const
Definition: Inform.h:42
double length_m
Longitudinal end of field.
Definition: FM1DDynamic.h:53
double twoPiOverLambdaSq_m
Field angular frequency (Hz).
Definition: FM1DDynamic.h:47
_FM1DDynamic(const std::string &filename)
Definition: FM1DDynamic.cpp:13
virtual ~_FM1DDynamic()
Definition: FM1DDynamic.cpp:41
double rEnd_m
Minimum radius of field.
Definition: FM1DDynamic.h:50
std::shared_ptr< _FM1DDynamic > FM1DDynamic
Definition: Definitions.h:27
void scaleField(double maxEz, std::vector< std::pair< double, double >> &eZ)
virtual void getFieldDimensions(double &zBegin, double &zEnd) const
virtual bool getFieldstrength(const Vector_t &R, Vector_t &E, Vector_t &B) const
Definition: FM1DDynamic.cpp:73
void computeFourierCoefficients(double maxEz, double fieldData[])
double rBegin_m
2 Pi divided by the field RF wavelength squared.
Definition: FM1DDynamic.h:49
int accuracy_m
Number of grid points in field input file.
Definition: FM1DDynamic.h:56
virtual void readMap()
Definition: FM1DDynamic.cpp:49
double readFileData(std::ifstream &fieldFile, double fieldData[])
virtual void freeMap()
Definition: FM1DDynamic.cpp:66
std::vector< double > fourierCoefs_m
Number of Fourier coefficients to use reconstructing field.
Definition: FM1DDynamic.h:57