-
Notifications
You must be signed in to change notification settings - Fork 2
/
ionization.h
executable file
·91 lines (66 loc) · 2.88 KB
/
ionization.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#ifndef _IONIZATION_HEADER
#define _IONIZATION_HEADER
#include "solver.h"
float_type keldysh_rate_ln(float_type lnI);
float_type PPT_rate_ln(float_type lnI, float_type Ui, float_type Z, int l);
float_type plasma_source_function(float_type reA, float_type imA, float_type ro);
float_type absorbtion_function(float_type reA, float_type imA, float_type ro);
#ifdef YUDIN_IVANOV_CORRECTION
float_type YI_Phi(float_type theta, float_type g);
#define MAX_YI_GAMMA (20)
#endif
float_type photoionization_function(float_type reA, float_type imA, float_type ro);
#ifdef MULTI_LEVEL_IONIZATION
void photoionization_functionsN(float_type reA, float_type imA, float_type* W);
#endif
float_type photoabsorbtion_function(float_type reA, float_type imA, float_type ro);
float_type avalanche_ionization_function(float_type reA, float_type imA, float_type ro);
float_type recombination_function(float_type ro);
inline float_type photoionization_rate_ln(float_type lnI)
{
#ifdef MULTIPHOTON_IONIZATION
return 0; //photoionization is calculated in a direct fashion
#endif
#ifdef TUNNEL_IONIZATION
throw "photoionization_rate_ln() : Tunnel ionization is not supported yet!";
#endif
#ifdef KELDYSH_IONIZATION
return keldysh_rate_ln(lnI);
#endif
#ifdef PPT_IONIZATION
return PPT_rate_ln(lnI, IONIZATION_POTENTIAL, load_namedfloat(SC_FID, "PPT_Z",true,1), load_namedint(SC_FID, "PPT_L",true,0));
#endif
}
#ifdef MULTI_LEVEL_IONIZATION
inline float_type photoionization_rateN_ln(float_type lnI, int level)
{
#ifdef PPT_IONIZATION
return PPT_rate_ln(lnI, IONIZATION_POTENTIALS[level], level+1, load_namedint(SC_FID, "PPT_L",true,0));
#endif
}
#endif
inline float_type plasma_source_function(float_type reA, float_type imA, float_type ro)
{
return photoionization_function(reA, imA,ro) + avalanche_ionization_function(reA, imA, ro) - recombination_function(ro);
}
inline float_type photoabsorbtion_function(float_type reA, float_type imA, float_type ro)
{
float_type I = abs2(reA, imA);
return (I < IONIZATION_MIN_I/IONRATE_DENOM)?(0):(0.5*photoionization_function(reA, imA, ro)/I*(IONIZATION_POTENTIAL+PONDEROMOTIVE_COEFFICIENT*I));
}
inline float_type photoabsorbtion_function2(float_type reA, float_type imA, float_type ro1, float_type ro2)
{
float_type I = abs2(reA, imA);
return (I < IONIZATION_MIN_I/IONRATE_DENOM)?(0):(0.5*photoionization_function(reA, imA, ro1)/I*(IONIZATION_POTENTIAL+PONDEROMOTIVE_COEFFICIENT*I));
}
inline float_type avalanche_ionization_function(float_type reA, float_type imA, float_type ro)
{
if (ro < 0 || ro > NEUTRAL_DENSITY) return 0;
float_type I = abs2(reA, imA);
return AVALANCHE_CROSSSECTION/(IONIZATION_POTENTIAL+PONDEROMOTIVE_COEFFICIENT*I)*I*ro*(1-ro/NEUTRAL_DENSITY);
}
inline float_type recombination_function(float_type ro)
{
return (ro>0)?(ro/RECOMBINATION_TAU):0;
}
#endif