OPAL (Object Oriented Parallel Accelerator Library) 2024.2
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 <memory>
29#include <string>
30#include <string_view>
31#include <vector>
32
33class BeamlineVisitor;
34class Cyclotron;
35
36struct PFieldData {
37 std::vector<double> pfld_m; // Pressure field from file
38 int nrad_m, ntet_m; // Grid-Size, from inputfile.
39 int ntetS_m; // extra grid line is stored in azimuthal direction
40 int ntot_m; // total grid points number
41};
42
43struct PPositions {
44 // these 4 parameters are need to be read from field file.
45 double rmin_m, delr_m;
47
48 // Radii and step width of initial Grid
49 std::vector<double> rarr_m;
50
51 double Pfact_m;
52};
53
54enum class ResidualGas: short {
55 NOGAS,
56 AIR,
57 H2
58};
59
60class Vacuum: public Component {
61
62public:
64 explicit Vacuum(const std::string& name);
65
66 Vacuum();
67 Vacuum(const Vacuum& rhs);
68 virtual ~Vacuum();
69
71 virtual void accept(BeamlineVisitor&) const override;
72
73 virtual bool apply(const size_t& i, const double& t, Vector_t& E, Vector_t& B) override;
74
75 virtual bool applyToReferenceParticle(const Vector_t& R, const Vector_t& P,
76 const double& t, Vector_t& E, Vector_t& B) override;
77
78 virtual bool checkVacuum(PartBunchBase<double, 3>* bunch, Cyclotron* cycl);
79
80 virtual void initialise(PartBunchBase<double, 3>* bunch,
81 double& startField, double& endField) override;
82
83 virtual void initialise(PartBunchBase<double, 3>* bunch);
84
85 virtual void finalise() override;
86
87 virtual bool bends() const override;
88
89 virtual void goOnline(const double& kineticEnergy) override;
90
91 virtual void goOffline() override;
92
93 virtual ElementType getType() const override;
94
95 virtual void getDimensions(double& zBegin, double& zEnd) const override;
96
97 bool checkPoint(const Vector_t& R);
98
99 double checkPressure(const Vector_t& R);
100
101 void setResidualGas(std::string_view gas) noexcept;
102 ResidualGas getResidualGas() const noexcept;
103 std::string getResidualGasName() const;
104
105 void setPressure(double pressure);
106 double getPressure() const;
107
108 void setPressureMapFN(std::string pmapfn);
109 std::string getPressureMapFN() const;
110
111 void setPScale(double ps);
112 double getPScale() const;
113
114 void setTemperature(double temperature);
115 double getTemperature() const;
116
117 void setStop(bool stopflag);
118 bool getStop() const;
119
120
121protected:
122 void initR(double rmin, double dr, int nrad);
123
124 void getPressureFromFile();
125
126 inline int idx(int irad, int ktet) {return (ktet + PField_m.ntetS_m * irad);}
127
128
129private:
130 // Not implemented.
131 void operator=(const Vacuum&);
132
134
135 void print();
136
139 double pressure_m;
140 std::string pmapfn_m;
141 double pscale_m;
143 bool stop_m;
145
147 double minr_m;
148 double maxr_m;
149 double minz_m;
150 double maxz_m;
152
154
155protected:
156 // object of Matrices including pressure field map and its derivates
158
159 // object of parameters about the map grid
161};
162
163
164inline
165bool Vacuum::bends() const {
166 return false;
167}
168
169#endif // CLASSIC_Vacuum_HH
ResidualGas
Definition Vacuum.h:54
ElementType
Definition ElementBase.h:89
const std::string name
Interface for a single beam element.
Definition Component.h:50
std::vector< double > pfld_m
Definition Vacuum.h:37
int nrad_m
Definition Vacuum.h:38
int ntet_m
Definition Vacuum.h:38
int ntot_m
Definition Vacuum.h:40
int ntetS_m
Definition Vacuum.h:39
double tetmin_m
Definition Vacuum.h:46
double dtet_m
Definition Vacuum.h:46
double delr_m
Definition Vacuum.h:45
double Pfact_m
Definition Vacuum.h:51
double rmin_m
Definition Vacuum.h:45
std::vector< double > rarr_m
Definition Vacuum.h:49
double minr_m
Flag if particles should be stripped or stopped.
Definition Vacuum.h:147
double pressure_m
Type of gas for residual vacuum.
Definition Vacuum.h:139
ResidualGas getResidualGas() const noexcept
Definition Vacuum.cpp:100
void setPScale(double ps)
Definition Vacuum.cpp:134
bool stop_m
K.
Definition Vacuum.h:143
double pscale_m
stores the filename of the pressure map
Definition Vacuum.h:141
void setResidualGas(std::string_view gas) noexcept
Definition Vacuum.cpp:96
virtual void goOffline() override
Definition Vacuum.cpp:274
double getPressure() const
Definition Vacuum.cpp:117
virtual bool bends() const override
Definition Vacuum.h:165
std::string getPressureMapFN() const
Definition Vacuum.cpp:130
virtual void getDimensions(double &zBegin, double &zEnd) const override
Definition Vacuum.cpp:278
void initR(double rmin, double dr, int nrad)
Definition Vacuum.cpp:361
void setTemperature(double temperature)
Definition Vacuum.cpp:147
virtual ~Vacuum()
Definition Vacuum.cpp:82
virtual void goOnline(const double &kineticEnergy) override
Definition Vacuum.cpp:261
double minz_m
mm
Definition Vacuum.h:149
int idx(int irad, int ktet)
Definition Vacuum.h:126
double temperature_m
a scale factor for the P-field
Definition Vacuum.h:142
virtual ElementType getType() const override
Get element type std::string.
Definition Vacuum.cpp:283
double getPScale() const
Definition Vacuum.cpp:138
void getPressureFromFile()
Definition Vacuum.cpp:370
void setPressureMapFN(std::string pmapfn)
Definition Vacuum.cpp:126
double checkPressure(const Vector_t &R)
Definition Vacuum.cpp:287
virtual void finalise() override
Definition Vacuum.cpp:255
void operator=(const Vacuum &)
void print()
Definition Vacuum.cpp:265
virtual void initialise(PartBunchBase< double, 3 > *bunch, double &startField, double &endField) override
Definition Vacuum.cpp:222
virtual void accept(BeamlineVisitor &) const override
Apply visitor to Vacuum.
Definition Vacuum.cpp:87
void setPressure(double pressure)
Definition Vacuum.cpp:113
std::string getResidualGasName() const
Definition Vacuum.cpp:104
virtual bool applyToReferenceParticle(const Vector_t &R, const Vector_t &P, const double &t, Vector_t &E, Vector_t &B) override
Definition Vacuum.cpp:185
void updateParticleAttributes()
Definition Vacuum.cpp:248
virtual bool checkVacuum(PartBunchBase< double, 3 > *bunch, Cyclotron *cycl)
Definition Vacuum.cpp:190
ParticleMatterInteractionHandler * parmatint_m
mm
Definition Vacuum.h:153
std::string pmapfn_m
mbar
Definition Vacuum.h:140
double getTemperature() const
Definition Vacuum.cpp:151
virtual bool apply(const size_t &i, const double &t, Vector_t &E, Vector_t &B) override
Definition Vacuum.cpp:181
PFieldData PField_m
Definition Vacuum.h:157
double maxr_m
mm
Definition Vacuum.h:148
Vacuum()
Definition Vacuum.cpp:48
bool checkPoint(const Vector_t &R)
Definition Vacuum.cpp:168
bool getStop() const
Definition Vacuum.cpp:164
double maxz_m
mm
Definition Vacuum.h:150
PPositions PP_m
Definition Vacuum.h:160
ResidualGas gas_m
parameters for Vacuum
Definition Vacuum.h:138
void setStop(bool stopflag)
Definition Vacuum.cpp:160