OPAL (Object Oriented Parallel Accelerator Library)  2024.1
OPAL
FM1DElectroStatic_fast.h
Go to the documentation of this file.
1 #ifndef CLASSIC_FIELDMAP1DELECTROSTATICFAST_HH
2 #define CLASSIC_FIELDMAP1DELECTROSTATICFAST_HH
3 
4 #include "Fields/Fieldmap.h"
5 
7 
8 public:
9  virtual ~_FM1DElectroStatic_fast();
10 
11  virtual bool getFieldstrength(const Vector_t &R, Vector_t &E, Vector_t &B) const;
12  virtual void getFieldDimensions(double &zBegin, double &zEnd) const;
13  virtual void getFieldDimensions(double &xIni, double &xFinal,
14  double &yIni, double &yFinal,
15  double &zIni, double &zFinal) const;
16  virtual bool getFieldDerivative(const Vector_t &R, Vector_t &E,
17  Vector_t &B, const DiffDirection &dir) const;
18  virtual void swap();
19  virtual void getInfo(Inform *);
20  virtual double getFrequency() const;
21  virtual void setFrequency(double freq);
22 
23  virtual bool isInside(const Vector_t &r) const;
24 private:
25  _FM1DElectroStatic_fast(const std::string& filename);
26 
27  static FM1DElectroStatic_fast create(const std::string& filename);
28 
29  virtual void readMap();
30  virtual void freeMap();
31 
32  bool checkFileData(std::ifstream &fieldFile, bool parsingPassed);
33  void computeFieldDerivatives(std::vector<double> fourierCoefs,
34  double onAxisFieldP[], double onAxisFieldPP[],
35  double onAxisFieldPPP[]);
36  void computeFieldOffAxis(const Vector_t &R, Vector_t &E, Vector_t &B,
37  std::vector<double> fieldComponents) const;
38  void computeFieldOnAxis(double z, std::vector<double> &fieldComponents) const;
39  std::vector<double> computeFourierCoefficients(double fieldData[]);
40  void computeInterpolationVectors(double onAxisFieldP[],
41  double onAxisFieldPP[],
42  double onAxisFieldPPP[]);
43  void convertHeaderData();
44  void normalizeField(double maxEz, std::vector<double> &fourierCoefs);
45  double readFileData(std::ifstream &fieldFile, double fieldData[]);
46  bool readFileHeader(std::ifstream &fieldFile);
47  void stripFileHeader(std::ifstream &fieldFile);
48 
49  void prepareForMapCheck(std::vector<double> &fourierCoefs);
50 
51  double rBegin_m;
52  double rEnd_m;
53  double zBegin_m;
54  double zEnd_m;
55  double length_m;
56  unsigned int numberOfGridPoints_m;
57  double deltaZ_m;
58 
59  unsigned int accuracy_m;
60 
61  double* onAxisField_m;
66 
68  gsl_interp_accel *onAxisFieldAccel_m;
69  gsl_interp_accel *onAxisFieldPAccel_m;
70  gsl_interp_accel *onAxisFieldPPAccel_m;
71  gsl_interp_accel *onAxisFieldPPPAccel_m;
72 
73  friend class _Fieldmap;
74 };
75 
76 inline bool _FM1DElectroStatic_fast::isInside(const Vector_t &r) const
77 {
78  return r(2) >= zBegin_m && r(2) < zEnd_m;
79 }
80 
81 using FM1DElectroStatic_fast = std::shared_ptr<_FM1DElectroStatic_fast>;
82 
83 #endif
virtual bool getFieldDerivative(const Vector_t &R, Vector_t &E, Vector_t &B, const DiffDirection &dir) const
void computeInterpolationVectors(double onAxisFieldP[], double onAxisFieldPP[], double onAxisFieldPPP[])
void computeFieldDerivatives(std::vector< double > fourierCoefs, double onAxisFieldP[], double onAxisFieldPP[], double onAxisFieldPPP[])
bool readFileHeader(std::ifstream &fieldFile)
gsl_spline * onAxisFieldPPInterpolants_m
On axis field first derivative interpolation structure.
DiffDirection
Definition: Fieldmap.h:55
double zBegin_m
Maximum radius of field.
virtual bool getFieldstrength(const Vector_t &R, Vector_t &E, Vector_t &B) const
_FM1DElectroStatic_fast(const std::string &filename)
gsl_spline * onAxisFieldInterpolants_m
On axis field data.
void computeFieldOffAxis(const Vector_t &R, Vector_t &E, Vector_t &B, std::vector< double > fieldComponents) const
bool checkFileData(std::ifstream &fieldFile, bool parsingPassed)
gsl_interp_accel * onAxisFieldPPAccel_m
double length_m
Longitudinal end of field.
virtual void getInfo(Inform *)
virtual double getFrequency() const
virtual void setFrequency(double freq)
double rEnd_m
Minimum radius of field.
static FM1DElectroStatic_fast create(const std::string &filename)
Definition: Inform.h:42
unsigned int accuracy_m
Field grid point spacing.
std::vector< double > computeFourierCoefficients(double fieldData[])
void prepareForMapCheck(std::vector< double > &fourierCoefs)
double deltaZ_m
Number of grid points in field input file.
virtual bool isInside(const Vector_t &r) const
double readFileData(std::ifstream &fieldFile, double fieldData[])
unsigned int numberOfGridPoints_m
Field length.
void stripFileHeader(std::ifstream &fieldFile)
gsl_interp_accel * onAxisFieldPPPAccel_m
virtual void getFieldDimensions(double &zBegin, double &zEnd) const
gsl_spline * onAxisFieldPPPInterpolants_m
On axis field second derivative interpolation structure.
gsl_spline * onAxisFieldPInterpolants_m
On axis field interpolation structure.
std::shared_ptr< _FM1DElectroStatic_fast > FM1DElectroStatic_fast
Definition: Definitions.h:36
double zEnd_m
Longitudinal start of field.
void computeFieldOnAxis(double z, std::vector< double > &fieldComponents) const
gsl_interp_accel * onAxisFieldPAccel_m
void normalizeField(double maxEz, std::vector< double > &fourierCoefs)
gsl_interp_accel * onAxisFieldAccel_m
On axis field third derivative interpolation structure.