OPAL (Object Oriented Parallel Accelerator Library)  2.2.0
OPAL
SecondaryEmissionPhysics.h
Go to the documentation of this file.
1 #ifndef OPAL_SECONDARY_EMISSION_PHYSICS_HH
2 #define OPAL_SECONDARY_EMISSION_PHYSICS_HH
3 
4 #include <hdf5.h>
5 #include <cmath>
6 #include <limits>
7 #include <sys/stat.h>
8 #include "Physics/Physics.h"
11 
12 extern Inform *gmsg;
13 
14 namespace myeps {
15  const double EPS = std::numeric_limits<double>::epsilon();
17 }
18 
20 
21 {
22 public:
23 
29 
36 
37  void nSec(const double &incEnergy,
38  const double &cosTheta,
39  const int &matNumber,
40  int &seNum,
41  int &seType,
42  const double &incQ,
43  const Vector_t &TriNorm,
44  const Vector_t &inteCoords,
45  const Vector_t &localX,
46  PartBunchBase<double, 3> *itsBunch,
47  double &seyNum, const
48  double &ppVw,
49  const double &vVThermal,
50  const bool nEmissionMode);
51 
52  void nSec(const double &incEnergy,
53  const double &cosTheta,
54  int &seNum,
55  int &seType,
56  const double &incQ,
57  const Vector_t &TriNorm,
58  const Vector_t &inteCoords,
59  const Vector_t &localX,
60  PartBunchBase<double, 3> *itsBunch,
61  double &seyNum,
62  const double &ppVw,
63  const double &vSeyZero,
64  const double &vEzero,
65  const double &vSeyMax,
66  const double &vEmax,
67  const double &vKenergy,
68  const double &vKtheta,
69  const double &vVThermal,
70  const bool nEmissionMode);
71 
72  double deltae_m;
73  double deltar_m;
74  double deltats_m;
75 
76  private:
77 
83 
87  double seAlpha_m;
88 
89 
90  /*==============================================================================================
91  parameters for backscattered electrons
92  ==============================================================================================*/
93 
94 
95 
99  double sePScat_m;
111  double seW_m;
115  double seP_m;
119  double seDelta_m;
123  double seEOne_m;
127  double seETwo_m;
128 
129 
130 
131  /*==============================================================================================
132  parameters for rediffused electrons
133  ==============================================================================================*/
134 
135 
136 
140  double sePRed_m;
144  double seERed_m;
148  double seR_m;
152  double seQ_m;
156  double seROne_m;
160  double seRTwo_m;
161 
162 
163  /*==============================================================================================
164  parameters for true secondary electrons
165  ==============================================================================================*/
166 
170  double seYPeakTS_m;
174  double seEPeakTS_m;
178  double seSTS_m;
182  double seTOneTS_m;
186  double seTTwoTS_m;
190  double seTThreeTS_m;
194  double seTFourTS_m;
198  double seEPeakTot_m;
202  double seYPeakTot_m;
203 
204  /*==============================================================================================
205  parameters in he TABLE II of Phys. Rev. ST Accel. Beams 5, 124404 (2002)
206  ==============================================================================================*/
207  double sePn_m[10];
208  double seEpsn_m[10];
209 
210 
211  void calcEmiNum(const double incEnergy,
212  const double cosTheta,
213  int &seNum,
214  const double &vSeyZero,
215  const double &vEzero,
216  const double &vSeyMax,
217  const double &vEmax,
218  const double &vKenergy,
219  const double &vKtheta,
220  double &seyNum);
221 
222  void calcEmiNum(const double incEnergy, const double cosTheta, const double *prob, int &seNum);
223 
224  double calcDeltats(const double incEnergy, const double cosTheta);
225 
226  double calcDeltar(const double incEnergy, const double cosTheta);
227 
228  double calcDeltae(const double incEnergy, const double cosTheta);
229 
230  double calcProb(const double incEnergy, const double cosTheta, double *prob);
231 
232  void setSeMaterial(int material_num);
233 
234  /*==========================================
235  *http://www.taygeta.com/random/gaussian.html
236  *return a gaussian distributed random number
237  *==========================================*/
238 
239  double gaussRand();
240 
241  double gammp(const double a, const double x);
242 
243  double gser(const double a, const double x);
244  double gcf(const double a, const double x);
245  double gammpapprox(double a, double x, int psig);
246  double gammln(const double xx);
247 
248  double invgammp(double p, double a);
249  double min_Gamma(double x, double y);
250  double max_Gamma(double x, double y);
251 
252 
253  double betai(const double x, const double a, const double b);
254  double betacf(const double a, const double b, const double x);
255  double betaiapprox(double a, double b, double x);
256  double invbetai(double p, double a, double b);
257  void coordConverter (const Vector_t &/*TriNormal*/, Vector_t &/*x*/) { }
258 
259 
260 
261 };
262 
263 inline
264 double SecondaryEmissionPhysics::min_Gamma(double x, double y) {
265  if(x > y)
266  return y;
267  else
268  return x;
269 }
270 
271 inline
272 double SecondaryEmissionPhysics::max_Gamma(double x, double y) {
273  if(x < y)
274  return y;
275  else
276  return x;
277 }
278 
279 
280 /* ==========================================================================*/
281 
282 
283 
284 
285 
286 
287 
288 #endif //OPAL_SECONDARY_EMISSION_PHYSICS_HH
double invbetai(double p, double a, double b)
double calcProb(const double incEnergy, const double cosTheta, double *prob)
double gammpapprox(double a, double x, int psig)
Inform * gmsg
Definition: Main.cpp:21
void coordConverter(const Vector_t &, Vector_t &)
double gammp(const double a, const double x)
double calcDeltae(const double incEnergy, const double cosTheta)
double max_Gamma(double x, double y)
double min_Gamma(double x, double y)
double calcDeltar(const double incEnergy, const double cosTheta)
double betacf(const double a, const double b, const double x)
double gcf(const double a, const double x)
void calcEmiNum(const double incEnergy, const double cosTheta, int &seNum, const double &vSeyZero, const double &vEzero, const double &vSeyMax, const double &vEmax, const double &vKenergy, const double &vKtheta, double &seyNum)
double betaiapprox(double a, double b, double x)
double betai(const double x, const double a, const double b)
double gser(const double a, const double x)
void setSeMaterial(int material_num)
double calcDeltats(const double incEnergy, const double cosTheta)
double invgammp(double p, double a)
Timing::TimerRef TimerRef
Definition: IpplTimings.h:176
const double EPS
Definition: Inform.h:41
const double FPMIN
T::PETE_Expr_t::PETE_Return_t min(const PETE_Expr< T > &expr, NDIndex< D > &loc)
Definition: ReductionLoc.h:95
void nSec(const double &incEnergy, const double &cosTheta, const int &matNumber, int &seNum, int &seType, const double &incQ, const Vector_t &TriNorm, const Vector_t &inteCoords, const Vector_t &localX, PartBunchBase< double, 3 > *itsBunch, double &seyNum, const double &ppVw, const double &vVThermal, const bool nEmissionMode)
IpplTimings::TimerRef TPnSec_m