more fix on Ec/Ev.
[gss-tcad.git] / src / material / Ge / Ge_gen.cc
blob987e41fd1f40acb5deb15a2030d356cb4761f4b1
1 /*****************************************************************************/
2 /* */
3 /* 8888888 88888888 88888888 */
4 /* 8 8 8 */
5 /* 8 8 8 */
6 /* 8 88888888 88888888 */
7 /* 8 8888 8 8 */
8 /* 8 8 8 8 */
9 /* 888888 888888888 888888888 */
10 /* */
11 /* A Two-Dimensional General Purpose Semiconductor Simulator. */
12 /* */
13 /* GSS material database Version 0.4 */
14 /* Last update: Feb 17, 2006 */
15 /* */
16 /* Gong Ding */
17 /* gdiso@ustc.edu */
18 /* NINT, No.69 P.O.Box, Xi'an City, China */
19 /* */
20 /*****************************************************************************/
22 // Material Type: Ge
24 #include "PMI.h"
26 class GSS_Ge_Avalanche : public PMIS_Avalanche
28 private:
29 PetscScalar N_IONIZA; // The constant term in the multiplicative prefactor of the electron ionization coefficient.
30 PetscScalar ECN_II; // The critical electric field used in the exponential factor of the electron ionization coefficient.
31 PetscScalar EXN_II; // The exponent of the ratio of the critical electrical field to the local electric field.
32 PetscScalar P_IONIZA; // The constant term in the multiplicative prefactor of the hole ionization coefficient.
33 PetscScalar ECP_II; // The critical electric field used in the exponential factor of the hole ionization coefficient.
34 PetscScalar EXP_II; // The exponent of the ratio of the critical electrical field to the local electric field.
35 PetscScalar N_ION_1; // The coefficient multiplying T in the multiplicative prefactor of the electron ionization coefficient.
36 PetscScalar N_ION_2; // The coefficient multiplying T^2 in the multiplicative prefactor of the electron ionization coefficient.
37 PetscScalar P_ION_1; // The coefficient multiplying T in the multiplicative prefactor of the hole ionization coefficient.
38 PetscScalar P_ION_2; // The coefficient multiplying T^2 in the multiplicative prefactor of the hole ionization coefficient.
39 //// Impact Ionization Model Depending on Lattice Temperature.
40 PetscScalar LAN300; // Energy free path for electrons at 300 K, used for the impact ionization model depending on lattice temperature.
41 PetscScalar LAP300; // Energy free path for holes at 300 K, used for the impact ionization model depending on lattice temperature.
42 PetscScalar OP_PH_EN; // Mean optical phonon energy used for the impact ionization model depending on lattice temperature.
44 PetscScalar ElecTauw;
45 PetscScalar HoleTauw;
46 PetscScalar T300 ;
48 void Avalanche_Init()
50 N_IONIZA = 1.550000e+07/cm;
51 ECN_II = 0.000000e+00*V/cm;
52 EXN_II = 1.000000e+00;
53 P_IONIZA = 1.000000e+07/cm;
54 ECP_II = 0.000000e+00*V/cm;
55 EXP_II = 1.000000e+00;
56 N_ION_1 = 0.000000e+00/cm*K;
57 N_ION_2 = 0.000000e+00/cm*K*K;
58 P_ION_1 = 0.000000e+00/cm*K;
59 P_ION_2 = 0.000000e+00/cm*K*K;
60 LAN300 = 6.888250e-07*cm;
61 LAP300 = 8.395050e-07*cm;
62 OP_PH_EN = 3.700000e-02*eV;
64 ElecTauw = 2e-13*s;
65 HoleTauw = 2e-13*s;
66 T300 = 300.0*K;
68 public:
69 //---------------------------------------------------------------------------
70 // Electron Impact Ionization rate for DDM
71 PetscScalar ElecGenRate (const PetscScalar &Tl,const PetscScalar &Ep,const PetscScalar &Eg) const
73 if (Ep < 1e4*V/cm)
75 return 0;
77 else
79 PetscScalar alpha = N_IONIZA + N_ION_1*Tl + N_ION_2*Tl*Tl;
80 PetscScalar L=LAN300*tanh(OP_PH_EN/(2*kb*Tl));
81 return alpha*exp(-pow(Eg/(e*L)/Ep,EXN_II));
84 AutoDScalar ElecGenRate (const AutoDScalar &Tl,const AutoDScalar &Ep,const AutoDScalar &Eg) const
86 if (Ep < 1e4*V/cm)
88 return 0;
90 else
92 AutoDScalar alpha = N_IONIZA + N_ION_1*Tl + N_ION_2*Tl*Tl;
93 AutoDScalar L = LAN300*tanh(OP_PH_EN/(2*kb*Tl));
94 AutoDScalar Ecrit = Eg/(e*L);
95 return alpha*exp(-pow(Ecrit/Ep,EXN_II));
99 //---------------------------------------------------------------------------
100 // Hole Impact Ionization rate for DDM
101 PetscScalar HoleGenRate (const PetscScalar &Tl,const PetscScalar &Ep,const PetscScalar &Eg) const
103 if (Ep < 1e4*V/cm)
105 return 0;
107 else
109 PetscScalar alpha = P_IONIZA+P_ION_1*Tl+P_ION_2*Tl*Tl;
110 PetscScalar L = LAP300*tanh(OP_PH_EN/(2*kb*Tl));
111 return alpha*exp(-pow(Eg/(e*L)/Ep,EXP_II));
114 AutoDScalar HoleGenRate (const AutoDScalar &Tl,const AutoDScalar &Ep,const AutoDScalar &Eg) const
116 if (Ep < 1e4*V/cm)
118 return 0;
120 else
122 AutoDScalar alpha = P_IONIZA+P_ION_1*Tl+P_ION_2*Tl*Tl;
123 AutoDScalar L = LAP300*tanh(OP_PH_EN/(2*kb*Tl));
124 AutoDScalar Ecrit = Eg/(e*L);
125 return alpha*exp(-pow(Ecrit/Ep,EXP_II));
129 //---------------------------------------------------------------------------
130 // Electron Impact Ionization rate for EBM
131 PetscScalar ElecGenRateEBM (const PetscScalar &Tn,const PetscScalar &Tl,const PetscScalar &Eg) const
133 if (fabs(Tn - Tl)<1*K)
135 return 0;
137 else
139 PetscScalar vsat = (2.4e7*cm/s)/(1+0.8*exp(Tl/(2*T300)));
140 PetscScalar L = LAN300*tanh(OP_PH_EN/(2*kb*Tl));
141 PetscScalar Ecrit = Eg/(e*L);
142 PetscScalar uc = 2*vsat*ElecTauw/3*Ecrit;
143 PetscScalar ut = kb/e*(Tn-Tl);
144 return N_IONIZA/e*exp(-pow(uc/ut,EXN_II));
147 AutoDScalar ElecGenRateEBM (const AutoDScalar &Tn,const AutoDScalar &Tl,const AutoDScalar &Eg) const
149 if (fabs(Tn - Tl)<1*K)
151 return 0;
153 else
155 AutoDScalar vsat = (2.4e7*cm/s)/(1+0.8*exp(Tl/(2*T300)));
156 AutoDScalar L = LAN300*tanh(OP_PH_EN/(2*kb*Tl));
157 AutoDScalar Ecrit = Eg/(e*L);
158 AutoDScalar uc = 2*vsat*ElecTauw/3*Ecrit;
159 AutoDScalar ut = kb/e*(Tn-Tl);
160 return N_IONIZA/e*exp(-pow(uc/ut,EXN_II));
164 //---------------------------------------------------------------------------
165 // Hole Impact Ionization rate for EBM
166 PetscScalar HoleGenRateEBM (const PetscScalar &Tp,const PetscScalar &Tl,const PetscScalar &Eg) const
168 if (fabs(Tp - Tl)<1*K)
170 return 0;
172 else
174 PetscScalar vsat = (2.4e7*cm/s)/(1+0.8*exp(Tl/(2*T300)));
175 PetscScalar L = LAN300*tanh(OP_PH_EN/(2*kb*Tl));
176 PetscScalar Ecrit = Eg/(e*L);
177 PetscScalar uc = 2*vsat*HoleTauw/3*Ecrit;
178 PetscScalar ut = kb/e*(Tp-Tl);
179 return P_IONIZA/e*exp(-pow(uc/ut,EXP_II));
182 AutoDScalar HoleGenRateEBM (const AutoDScalar &Tp,const AutoDScalar &Tl,const AutoDScalar &Eg) const
184 if (fabs(Tp - Tl)<1*K)
186 return 0;
188 else
190 AutoDScalar vsat = (2.4e7*cm/s)/(1+0.8*exp(Tl/(2*T300)));
191 AutoDScalar L = LAN300*tanh(OP_PH_EN/(2*kb*Tl));
192 AutoDScalar Ecrit = Eg/(e*L);
193 AutoDScalar uc = 2*vsat*HoleTauw/3*Ecrit;
194 AutoDScalar ut = kb/e*(Tp-Tl);
195 return P_IONIZA/e*exp(-pow(uc/ut,EXP_II));
200 //----------------------------------------------------------------
201 // constructor and destructor
202 public:
203 GSS_Ge_Avalanche(const PMIS_Environment &env):PMIS_Avalanche(env)
205 Avalanche_Init();
207 ~GSS_Ge_Avalanche()
214 extern "C"
216 PMIS_Avalanche* PMIS_Ge_Avalanche_Default (const PMIS_Environment& env)
218 return new GSS_Ge_Avalanche(env);