initial checkin, based on GSS 0.46 CVS
[gss-tcad.git] / src / material / InP / InP_gen.cc
blob82a545395760f0a02d4dbd69d9b1b6c4cb543beb
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: InP
24 #include "PMI.h"
26 class GSS_InP_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 //use parameters for GaAs instead
51 N_IONIZA = 2.994000e+05/cm;
52 ECN_II = 0.000000e+00*V/cm;
53 EXN_II = 1.600000e+00;
54 P_IONIZA = 2.215000e+05/cm;
55 ECP_II = 0.000000e+00*V/cm;
56 EXP_II = 1.750000e+00;
57 N_ION_1 = 0.000000e+00/cm*K;
58 N_ION_2 = 0.000000e+00/cm*K*K;
59 P_ION_1 = 0.000000e+00/cm*K;
60 P_ION_2 = 0.000000e+00/cm*K*K;
61 LAN300 = 3.527240e-06*cm;
62 LAP300 = 3.676490e-06*cm;
63 OP_PH_EN = 3.500000e-02*eV;
65 ElecTauw = 1e-12*s;
66 HoleTauw = 1e-12*s;
67 T300 = 300.0*K;
69 public:
70 //---------------------------------------------------------------------------
71 // Electron Impact Ionization rate for DDM
72 PetscScalar ElecGenRate (const PetscScalar &Tl,const PetscScalar &Ep,const PetscScalar &Eg) const
74 if (Ep < 1e3*V/cm)
76 return 0;
78 else
80 PetscScalar alpha = N_IONIZA + N_ION_1*Tl + N_ION_2*Tl*Tl;
81 PetscScalar L=LAN300*tanh(OP_PH_EN/(2*kb*Tl));
82 return alpha*exp(-pow(Eg/(e*L)/Ep,EXN_II));
85 AutoDScalar ElecGenRate (const AutoDScalar &Tl,const AutoDScalar &Ep,const AutoDScalar &Eg) const
87 if (Ep < 1e3*V/cm)
89 return 0;
91 else
93 AutoDScalar alpha = N_IONIZA + N_ION_1*Tl + N_ION_2*Tl*Tl;
94 AutoDScalar L = LAN300*tanh(OP_PH_EN/(2*kb*Tl));
95 AutoDScalar Ecrit = Eg/(e*L);
96 return alpha*exp(-pow(Ecrit/Ep,EXN_II));
100 //---------------------------------------------------------------------------
101 // Hole Impact Ionization rate for DDM
102 PetscScalar HoleGenRate (const PetscScalar &Tl,const PetscScalar &Ep,const PetscScalar &Eg) const
104 if (Ep < 1e3*V/cm)
106 return 0;
108 else
110 PetscScalar alpha = P_IONIZA+P_ION_1*Tl+P_ION_2*Tl*Tl;
111 PetscScalar L = LAP300*tanh(OP_PH_EN/(2*kb*Tl));
112 return alpha*exp(-pow(Eg/(e*L)/Ep,EXP_II));
115 AutoDScalar HoleGenRate (const AutoDScalar &Tl,const AutoDScalar &Ep,const AutoDScalar &Eg) const
117 if (Ep < 1e3*V/cm)
119 return 0;
121 else
123 AutoDScalar alpha = P_IONIZA+P_ION_1*Tl+P_ION_2*Tl*Tl;
124 AutoDScalar L = LAP300*tanh(OP_PH_EN/(2*kb*Tl));
125 AutoDScalar Ecrit = Eg/(e*L);
126 return alpha*exp(-pow(Ecrit/Ep,EXP_II));
132 //---------------------------------------------------------------------------
133 // Electron Impact Ionization rate for EBM
134 PetscScalar ElecGenRateEBM (const PetscScalar &Tn,const PetscScalar &Tl,const PetscScalar &Eg) const
136 if (fabs(Tn - Tl)<1*K)
138 return 0;
140 else
142 PetscScalar vsat = 11.3E6*cm/s - 1.2E4*cm/s/K*Tl;
143 PetscScalar L = LAN300*tanh(OP_PH_EN/(2*kb*Tl));
144 PetscScalar Ecrit = Eg/(e*L);
145 PetscScalar uc = 2*vsat*ElecTauw/3*Ecrit;
146 PetscScalar ut = kb/e*(Tn-Tl);
147 return N_IONIZA/e*exp(-pow(uc/ut,EXN_II));
150 AutoDScalar ElecGenRateEBM (const AutoDScalar &Tn,const AutoDScalar &Tl,const AutoDScalar &Eg) const
152 if (fabs(Tn - Tl)<1*K)
154 return 0;
156 else
158 AutoDScalar vsat = (2.4e7*cm/s)/(1+0.8*exp(Tl/(2*T300)));
159 AutoDScalar L = LAN300*tanh(OP_PH_EN/(2*kb*Tl));
160 AutoDScalar Ecrit = Eg/(e*L);
161 AutoDScalar uc = 2*vsat*ElecTauw/3*Ecrit;
162 AutoDScalar ut = kb/e*(Tn-Tl);
163 return N_IONIZA/e*exp(-pow(uc/ut,EXN_II));
167 //---------------------------------------------------------------------------
168 // Hole Impact Ionization rate for EBM
169 PetscScalar HoleGenRateEBM (const PetscScalar &Tp,const PetscScalar &Tl,const PetscScalar &Eg) const
171 if (fabs(Tp - Tl)<1*K)
173 return 0;
175 else
177 PetscScalar vsat = 11.3E6*cm/s - 1.2E4*cm/s/K*Tl;
178 PetscScalar L = LAN300*tanh(OP_PH_EN/(2*kb*Tl));
179 PetscScalar Ecrit = Eg/(e*L);
180 PetscScalar uc = 2*vsat*HoleTauw/3*Ecrit;
181 PetscScalar ut = kb/e*(Tp-Tl);
182 return P_IONIZA/e*exp(-pow(uc/ut,EXP_II));
185 AutoDScalar HoleGenRateEBM (const AutoDScalar &Tp,const AutoDScalar &Tl,const AutoDScalar &Eg) const
187 if (fabs(Tp - Tl)<1*K)
189 return 0;
191 else
193 AutoDScalar vsat = (2.4e7*cm/s)/(1+0.8*exp(Tl/(2*T300)));
194 AutoDScalar L = LAN300*tanh(OP_PH_EN/(2*kb*Tl));
195 AutoDScalar Ecrit = Eg/(e*L);
196 AutoDScalar uc = 2*vsat*HoleTauw/3*Ecrit;
197 AutoDScalar ut = kb/e*(Tp-Tl);
198 return P_IONIZA/e*exp(-pow(uc/ut,EXP_II));
203 //----------------------------------------------------------------
204 // constructor and destructor
205 public:
206 GSS_InP_Avalanche(const PMIS_Environment &env):PMIS_Avalanche(env)
208 Avalanche_Init();
210 ~GSS_InP_Avalanche()
217 extern "C"
219 PMIS_Avalanche* PMIS_InP_Avalanche_Default (const PMIS_Environment& env)
221 return new GSS_InP_Avalanche(env);