OPAL (Object Oriented Parallel Accelerator Library) 2022.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
27
28#include <boost/bimap.hpp>
29
30#include <memory>
31#include <string>
32#include <vector>
33
34class BeamlineVisitor;
35class Cyclotron;
36
37struct 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
44struct PPositions {
45 // these 4 parameters are need to be read from field file.
46 double rmin_m, delr_m;
48
49 // Radii and step width of initial Grid
50 std::vector<double> rarr_m;
51
52 double Pfact_m;
53};
54
55enum class ResidualGas: short {
56 NOGAS = -1,
57 AIR = 0,
58 H2 = 1
59};
60
61class Vacuum: public Component {
62
63public:
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);
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
122protected:
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
130private:
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;
144 bool stop_m;
146
148 double minr_m;
149 double maxr_m;
150 double minz_m;
151 double maxz_m;
153
155
156 static const boost::bimap<ResidualGas, std::string> bmResidualGasString_s;
157
158
159protected:
160 // object of Matrices including pressure field map and its derivates
162
163 // object of parameters about the map grid
165};
166
167
168inline
169bool Vacuum::bends() const {
170 return false;
171}
172
173#endif // CLASSIC_Vacuum_HH
ResidualGas
Definition: Vacuum.h:55
ElementType
Definition: ElementBase.h:88
const std::string name
Interface for a single beam element.
Definition: Component.h:50
std::vector< double > pfld_m
Definition: Vacuum.h:38
int nrad_m
Definition: Vacuum.h:39
int ntet_m
Definition: Vacuum.h:39
int ntot_m
Definition: Vacuum.h:41
int ntetS_m
Definition: Vacuum.h:40
double tetmin_m
Definition: Vacuum.h:47
double dtet_m
Definition: Vacuum.h:47
double delr_m
Definition: Vacuum.h:46
double Pfact_m
Definition: Vacuum.h:52
double rmin_m
Definition: Vacuum.h:46
std::vector< double > rarr_m
Definition: Vacuum.h:50
Definition: Vacuum.h:61
double minr_m
Flag if particles should be stripped or stopped.
Definition: Vacuum.h:148
double pressure_m
Type of gas for residual vacuum.
Definition: Vacuum.h:140
void setPScale(double ps)
Definition: Vacuum.cpp:145
bool stop_m
K.
Definition: Vacuum.h:144
double pscale_m
stores the filename of the pressure map
Definition: Vacuum.h:142
virtual void goOffline() override
Definition: Vacuum.cpp:285
static const boost::bimap< ResidualGas, std::string > bmResidualGasString_s
Definition: Vacuum.h:156
double getPressure() const
Definition: Vacuum.cpp:128
virtual bool bends() const override
Definition: Vacuum.h:169
std::string getPressureMapFN() const
Definition: Vacuum.cpp:141
virtual void getDimensions(double &zBegin, double &zEnd) const override
Definition: Vacuum.cpp:289
void initR(double rmin, double dr, int nrad)
Definition: Vacuum.cpp:372
void setTemperature(double temperature)
Definition: Vacuum.cpp:158
virtual ~Vacuum()
Definition: Vacuum.cpp:92
virtual void goOnline(const double &kineticEnergy) override
Definition: Vacuum.cpp:272
double minz_m
mm
Definition: Vacuum.h:150
int idx(int irad, int ktet)
Definition: Vacuum.h:127
double temperature_m
a scale factor for the P-field
Definition: Vacuum.h:143
virtual ElementType getType() const override
Get element type std::string.
Definition: Vacuum.cpp:294
ResidualGas getResidualGas() const
Definition: Vacuum.cpp:111
double getPScale() const
Definition: Vacuum.cpp:149
void getPressureFromFile()
Definition: Vacuum.cpp:381
void setPressureMapFN(std::string pmapfn)
Definition: Vacuum.cpp:137
double checkPressure(const Vector_t &R)
Definition: Vacuum.cpp:298
virtual void finalise() override
Definition: Vacuum.cpp:266
void operator=(const Vacuum &)
void print()
Definition: Vacuum.cpp:276
virtual void initialise(PartBunchBase< double, 3 > *bunch, double &startField, double &endField) override
Definition: Vacuum.cpp:233
virtual void accept(BeamlineVisitor &) const override
Apply visitor to Vacuum.
Definition: Vacuum.cpp:98
void setPressure(double pressure)
Definition: Vacuum.cpp:124
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
void updateParticleAttributes()
Definition: Vacuum.cpp:259
virtual bool checkVacuum(PartBunchBase< double, 3 > *bunch, Cyclotron *cycl)
Definition: Vacuum.cpp:201
ParticleMatterInteractionHandler * parmatint_m
mm
Definition: Vacuum.h:154
std::string pmapfn_m
mbar
Definition: Vacuum.h:141
double getTemperature() const
Definition: Vacuum.cpp:162
void setResidualGas(std::string gas)
Definition: Vacuum.cpp:102
virtual bool apply(const size_t &i, const double &t, Vector_t &E, Vector_t &B) override
Definition: Vacuum.cpp:192
PFieldData PField_m
Definition: Vacuum.h:161
std::string getResidualGasName()
Definition: Vacuum.cpp:115
double maxr_m
mm
Definition: Vacuum.h:149
Vacuum()
Definition: Vacuum.cpp:55
bool checkPoint(const Vector_t &R)
Definition: Vacuum.cpp:179
bool getStop() const
Definition: Vacuum.cpp:175
double maxz_m
mm
Definition: Vacuum.h:151
PPositions PP_m
Definition: Vacuum.h:164
ResidualGas gas_m
parameters for Vacuum
Definition: Vacuum.h:139
void setStop(bool stopflag)
Definition: Vacuum.cpp:171