OPAL (Object Oriented Parallel Accelerator Library)  2024.1
OPAL
Vacuum.h
Go to the documentation of this file.
1 //
2 // Class Vacuum
3 // Defines the abstract interface for vacuum.
4 //
5 // Copyright (c) 2018 - 2021, Pedro Calvo, CIEMAT, Spain
6 // All rights reserved.
7 //
8 // Implemented as part of the PhD thesis
9 // "Optimizing the radioisotope production of the novel AMIT
10 // superconducting weak focusing cyclotron"
11 //
12 // This file is part of OPAL.
13 //
14 // OPAL is free software: you can redistribute it and/or modify
15 // it under the terms of the GNU General Public License as published by
16 // the Free Software Foundation, either version 3 of the License, or
17 // (at your option) any later version.
18 //
19 // You should have received a copy of the GNU General Public License
20 // along with OPAL. If not, see <https://www.gnu.org/licenses/>.
21 //
22 #ifndef CLASSIC_Vacuum_HH
23 #define CLASSIC_Vacuum_HH
24 
25 #include "AbsBeamline/Component.h"
26 #include "AbsBeamline/Cyclotron.h"
27 
28 #include <boost/bimap.hpp>
29 
30 #include <memory>
31 #include <string>
32 #include <vector>
33 
34 class BeamlineVisitor;
35 class Cyclotron;
36 
37 struct PFieldData {
38  std::vector<double> pfld_m; // Pressure field from file
39  int nrad_m, ntet_m; // Grid-Size, from inputfile.
40  int ntetS_m; // extra grid line is stored in azimuthal direction
41  int ntot_m; // total grid points number
42 };
43 
44 struct PPositions {
45  // these 4 parameters are need to be read from field file.
46  double rmin_m, delr_m;
47  double tetmin_m, dtet_m;
48 
49  // Radii and step width of initial Grid
50  std::vector<double> rarr_m;
51 
52  double Pfact_m;
53 };
54 
55 enum class ResidualGas: short {
56  NOGAS = -1,
57  AIR = 0,
58  H2 = 1
59 };
60 
61 class Vacuum: public Component {
62 
63 public:
65  explicit Vacuum(const std::string& name);
66 
67  Vacuum();
68  Vacuum(const Vacuum& rhs);
69  virtual ~Vacuum();
70 
72  virtual void accept(BeamlineVisitor&) const override;
73 
74  virtual bool apply(const size_t& i, const double& t, Vector_t& E, Vector_t& B) override;
75 
76  virtual bool applyToReferenceParticle(const Vector_t& R, const Vector_t& P,
77  const double& t, Vector_t& E, Vector_t& B) override;
78 
79  virtual bool checkVacuum(PartBunchBase<double, 3>* bunch, Cyclotron* cycl);
80 
81  virtual void initialise(PartBunchBase<double, 3>* bunch,
82  double& startField, double& endField) override;
83 
84  virtual void initialise(PartBunchBase<double, 3>* bunch);
85 
86  virtual void finalise() override;
87 
88  virtual bool bends() const override;
89 
90  virtual void goOnline(const double& kineticEnergy) override;
91 
92  virtual void goOffline() override;
93 
94  virtual ElementType getType() const override;
95 
96  virtual void getDimensions(double& zBegin, double& zEnd) const override;
97 
98  bool checkPoint(const Vector_t& R);
99 
100  double checkPressure(const Vector_t& R);
101 
102  void setResidualGas(std::string gas);
103  ResidualGas getResidualGas() const;
104  std::string getResidualGasName();
105 
106  void setPressure(double pressure);
107  double getPressure() const;
108 
109  void setPressureMapFN(std::string pmapfn);
110  std::string getPressureMapFN() const;
111 
112  void setPScale(double ps);
113  double getPScale() const;
114 
115  void setTemperature(double temperature);
116  double getTemperature() const;
117 
118  void setStop(bool stopflag);
119  bool getStop() const;
120 
121 
122 protected:
123  void initR(double rmin, double dr, int nrad);
124 
125  void getPressureFromFile();
126 
127  inline int idx(int irad, int ktet) {return (ktet + PField_m.ntetS_m * irad);}
128 
129 
130 private:
131  // Not implemented.
132  void operator=(const Vacuum&);
133 
135 
136  void print();
137 
140  double pressure_m;
141  std::string pmapfn_m;
142  double pscale_m;
143  double temperature_m;
144  bool stop_m;
145 
148  double minr_m;
149  double maxr_m;
150  double minz_m;
151  double maxz_m;
152 
155 
156  static const boost::bimap<ResidualGas, std::string> bmResidualGasString_s;
157 
158 
159 protected:
160  // object of Matrices including pressure field map and its derivates
162 
163  // object of parameters about the map grid
165 };
166 
167 
168 inline
169 bool Vacuum::bends() const {
170  return false;
171 }
172 
173 #endif // CLASSIC_Vacuum_HH
virtual ~Vacuum()
Definition: Vacuum.cpp:92
virtual void goOffline() override
Definition: Vacuum.cpp:285
ResidualGas
Definition: Vacuum.h:55
virtual bool checkVacuum(PartBunchBase< double, 3 > *bunch, Cyclotron *cycl)
Definition: Vacuum.cpp:201
double maxr_m
mm
Definition: Vacuum.h:149
double maxz_m
mm
Definition: Vacuum.h:151
void initR(double rmin, double dr, int nrad)
Definition: Vacuum.cpp:372
int ntot_m
Definition: Vacuum.h:41
double tetmin_m
Definition: Vacuum.h:47
void updateParticleAttributes()
Definition: Vacuum.cpp:259
ParticleMatterInteractionHandler * parmatint_m
Definition: Vacuum.h:154
void getPressureFromFile()
Definition: Vacuum.cpp:381
double minr_m
size limits took from cyclotron
Definition: Vacuum.h:148
double delr_m
Definition: Vacuum.h:46
double getTemperature() const
Definition: Vacuum.cpp:162
Definition: Vacuum.h:61
int idx(int irad, int ktet)
Definition: Vacuum.h:127
std::string pmapfn_m
mbar
Definition: Vacuum.h:141
virtual void initialise(PartBunchBase< double, 3 > *bunch, double &startField, double &endField) override
Definition: Vacuum.cpp:233
ResidualGas gas_m
parameters for Vacuum
Definition: Vacuum.h:139
void setPressure(double pressure)
Definition: Vacuum.cpp:124
std::string getPressureMapFN() const
Definition: Vacuum.cpp:141
double rmin_m
Definition: Vacuum.h:46
double pscale_m
stores the filename of the pressure map
Definition: Vacuum.h:142
bool stop_m
K.
Definition: Vacuum.h:144
double Pfact_m
Definition: Vacuum.h:52
virtual void accept(BeamlineVisitor &) const override
Apply visitor to Vacuum.
Definition: Vacuum.cpp:98
int ntetS_m
Definition: Vacuum.h:40
double checkPressure(const Vector_t &R)
Definition: Vacuum.cpp:298
double getPScale() const
Definition: Vacuum.cpp:149
PPositions PP_m
Definition: Vacuum.h:164
double minz_m
mm
Definition: Vacuum.h:150
ElementType
Definition: ElementBase.h:88
void setPressureMapFN(std::string pmapfn)
Definition: Vacuum.cpp:137
virtual bool apply(const size_t &i, const double &t, Vector_t &E, Vector_t &B) override
Definition: Vacuum.cpp:192
virtual ElementType getType() const override
Get element type std::string.
Definition: Vacuum.cpp:294
void setTemperature(double temperature)
Definition: Vacuum.cpp:158
virtual bool bends() const override
Definition: Vacuum.h:169
void print()
Definition: Vacuum.cpp:276
int ntet_m
Definition: Vacuum.h:39
bool checkPoint(const Vector_t &R)
Definition: Vacuum.cpp:179
double temperature_m
a scale factor for the P-field
Definition: Vacuum.h:143
double dtet_m
Definition: Vacuum.h:47
void setPScale(double ps)
Definition: Vacuum.cpp:145
PFieldData PField_m
Definition: Vacuum.h:161
const std::string name
virtual void getDimensions(double &zBegin, double &zEnd) const override
Definition: Vacuum.cpp:289
virtual void finalise() override
Definition: Vacuum.cpp:266
double pressure_m
Type of gas for residual vacuum.
Definition: Vacuum.h:140
static const boost::bimap< ResidualGas, std::string > bmResidualGasString_s
Definition: Vacuum.h:156
void operator=(const Vacuum &)
std::vector< double > rarr_m
Definition: Vacuum.h:50
std::vector< double > pfld_m
Definition: Vacuum.h:38
Interface for a single beam element.
Definition: Component.h:50
ResidualGas getResidualGas() const
Definition: Vacuum.cpp:111
std::string getResidualGasName()
Definition: Vacuum.cpp:115
virtual bool applyToReferenceParticle(const Vector_t &R, const Vector_t &P, const double &t, Vector_t &E, Vector_t &B) override
Definition: Vacuum.cpp:196
int nrad_m
Definition: Vacuum.h:39
void setStop(bool stopflag)
Definition: Vacuum.cpp:171
void setResidualGas(std::string gas)
Definition: Vacuum.cpp:102
double getPressure() const
Definition: Vacuum.cpp:128
Vacuum()
Definition: Vacuum.cpp:55
bool getStop() const
Definition: Vacuum.cpp:175
virtual void goOnline(const double &kineticEnergy) override
Definition: Vacuum.cpp:272