initial checkin, based on GSS 0.46 CVS
[gss-tcad.git] / src / material / SiGe / SiGe_mob_Lombardi.cc
blobacfd1157c2be28bebfa7e66dc1fd7572b50989ae
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: July 26, 2007 */
15 /* */
16 /* Gong Ding */
17 /* gdiso@ustc.edu */
18 /* NINT, No.69 P.O.Box, Xi'an City, China */
19 /* */
20 /*****************************************************************************/
22 // Material Type: Si(1-x)Ge(x). (in fact, use parameters for Si instead.)
25 #include "PMI.h"
27 class GSS_Mob_Lombardi : public PMIS_Mobility
29 private:
30 PetscScalar EXN1_LSM;
31 PetscScalar EXN2_LSM;
32 PetscScalar EXN3_LSM;
33 PetscScalar EXN4_LSM;
34 PetscScalar EXN8_LSM;
35 PetscScalar MUN0_LSM;
36 PetscScalar MUN1_LSM;
37 PetscScalar MUN2_LSM;
38 PetscScalar CRN_LSM;
39 PetscScalar CSN_LSM;
40 PetscScalar BN_LSM;
41 PetscScalar CN_LSM;
42 PetscScalar DN_LSM;
44 PetscScalar EXP1_LSM;
45 PetscScalar EXP2_LSM;
46 PetscScalar EXP3_LSM;
47 PetscScalar EXP4_LSM;
48 PetscScalar EXP8_LSM;
49 PetscScalar MUP0_LSM;
50 PetscScalar MUP1_LSM;
51 PetscScalar MUP2_LSM;
52 PetscScalar CRP_LSM;
53 PetscScalar CSP_LSM;
54 PetscScalar BP_LSM;
55 PetscScalar CP_LSM;
56 PetscScalar DP_LSM;
57 PetscScalar PC_LSM;
59 // parameters for parallel field modification
60 PetscScalar BETAN;
61 PetscScalar BETAP;
62 PetscScalar T300;
64 void Mob_Lombardi_Init()
66 EXN1_LSM=6.800000E-01;
67 EXN2_LSM=2.000000E+00;
68 EXN3_LSM=2.500000E+00;
69 EXN4_LSM=1.250000E-01;
70 EXN8_LSM=2.000000E+00;
71 MUN0_LSM=5.220000E+01*cm*cm/V/s;
72 MUN1_LSM=4.340000E+01*cm*cm/V/s;
73 MUN2_LSM=1.417000E+03*cm*cm/V/s;
74 CRN_LSM=9.680000E+16*pow(cm,-3);
75 CSN_LSM=3.430000E+20*pow(cm,-3);
76 BN_LSM=4.750000E+07*cm/s;
77 CN_LSM=1.740000E+05*K*cm/s*pow(V/cm,PetscScalar(-2.0/3.0))*pow(cm,3*EXN4_LSM);
78 DN_LSM=5.820000E+14*cm*cm/V/s*pow(V/cm,EXN8_LSM);
80 EXP1_LSM=7.190000E-01;
81 EXP2_LSM=2.000000E+00;
82 EXP3_LSM=2.200000E+00;
83 EXP4_LSM=3.170000E-02;
84 EXP8_LSM=2.000000E+00;
85 MUP0_LSM=4.490000E+01*cm*cm/V/s;
86 MUP1_LSM=2.900000E+01*cm*cm/V/s;
87 MUP2_LSM=4.705000E+02*cm*cm/V/s;
88 CRP_LSM=2.230000E+17*pow(cm,-3);
89 CSP_LSM=6.100000E+20*pow(cm,-3);
90 BP_LSM=9.930000E+06*cm/s;
91 CP_LSM=8.840000E+05*K*cm/s*pow(V/cm,PetscScalar(-2.0/3.0))*pow(cm,3*EXP4_LSM);;
92 DP_LSM=2.050000E+14*cm*cm/V/s*pow(V/cm,EXN8_LSM);
93 PC_LSM=9.230000E+16*pow(cm,-3);
95 BETAN = 2.000000E+00;
96 BETAP = 1.000000E+00;
97 T300 = 300.0*K;
99 //---------------------------------------------------------------------------
100 // Electron low field mobility
101 PetscScalar ElecMobLowField(const PetscScalar &Tl) const
103 PetscScalar Na = ReadDopingNa();
104 PetscScalar Nd = ReadDopingNd();
105 PetscScalar N_total = Na+Nd+1e0*pow(cm,-3);
106 PetscScalar mu_max = MUN2_LSM*pow(Tl/T300,-EXN3_LSM);
107 return MUN0_LSM+(mu_max-MUN0_LSM)/(1+pow(N_total/CRN_LSM,EXN1_LSM))-MUN1_LSM/(1+pow(CSN_LSM/N_total,EXN2_LSM));
109 AutoDScalar ElecMobLowField(const AutoDScalar &Tl) const
111 PetscScalar Na = ReadDopingNa();
112 PetscScalar Nd = ReadDopingNd();
113 PetscScalar N_total = Na+Nd+1e0*pow(cm,-3);
114 AutoDScalar mu_max = MUN2_LSM*pow(Tl/T300,-EXN3_LSM);
115 return MUN0_LSM+(mu_max-MUN0_LSM)/(1+pow(N_total/CRN_LSM,EXN1_LSM))-MUN1_LSM/(1+pow(CSN_LSM/N_total,EXN2_LSM));
118 //---------------------------------------------------------------------------
119 // Hole low field mobility, Analytic model
120 PetscScalar HoleMobLowField(const PetscScalar &Tl) const
122 PetscScalar Na = ReadDopingNa();
123 PetscScalar Nd = ReadDopingNd();
124 PetscScalar N_total = Na+Nd+1e0*pow(cm,-3);
125 PetscScalar mu_max = MUP2_LSM*pow(Tl/T300,-EXP3_LSM);
126 return MUP0_LSM*exp(-PC_LSM/N_total)+mu_max/(1+pow(N_total/CRP_LSM,EXP1_LSM))-MUP1_LSM/(1+pow(CSP_LSM/N_total,EXP2_LSM));
128 AutoDScalar HoleMobLowField(const AutoDScalar &Tl) const
130 PetscScalar Na = ReadDopingNa();
131 PetscScalar Nd = ReadDopingNd();
132 PetscScalar N_total = Na+Nd+1e0*pow(cm,-3);
133 AutoDScalar mu_max = MUP2_LSM*pow(Tl/T300,-EXP3_LSM);
134 return MUP0_LSM*exp(-PC_LSM/N_total)+mu_max/(1+pow(N_total/CRP_LSM,EXP1_LSM))-MUP1_LSM/(1+pow(CSP_LSM/N_total,EXP2_LSM));
137 //---------------------------------------------------------------------------
138 // Electron surface mobility, acoustical phono scattering and roughness scattering
139 PetscScalar ElecMobSurface(const PetscScalar &Tl,const PetscScalar &Et) const
141 PetscScalar Na = ReadDopingNa();
142 PetscScalar Nd = ReadDopingNd();
143 PetscScalar N_total = Na+Nd+1e0*pow(cm,-3);
144 PetscScalar ET = Et+1.0*V/cm;
145 PetscScalar mu_ac = BN_LSM/ET + CN_LSM*pow(N_total,EXN4_LSM)/Tl*pow(ET,PetscScalar(-1.0/3.0));
146 PetscScalar mu_sr = DN_LSM*pow(ET,-EXN8_LSM);
147 return 1.0/(1.0/mu_ac+1.0/mu_sr);
149 AutoDScalar ElecMobSurface(const AutoDScalar &Tl,const AutoDScalar &Et) const
151 PetscScalar Na = ReadDopingNa();
152 PetscScalar Nd = ReadDopingNd();
153 PetscScalar N_total = Na+Nd+1e0*pow(cm,-3);
154 AutoDScalar ET = Et+1.0*V/cm;
155 AutoDScalar mu_ac = BN_LSM/ET + CN_LSM*pow(N_total,EXN4_LSM)/Tl*pow(ET,PetscScalar(-1.0/3.0));
156 AutoDScalar mu_sr = DN_LSM*pow(ET,-EXN8_LSM);
157 return 1.0/(1.0/mu_ac+1.0/mu_sr);
160 //---------------------------------------------------------------------------
161 // Hole surface mobility, acoustical phono scattering and roughness scattering
162 PetscScalar HoleMobSurface(const PetscScalar &Tl,const PetscScalar &Et) const
164 PetscScalar Na = ReadDopingNa();
165 PetscScalar Nd = ReadDopingNd();
166 PetscScalar N_total = Na+Nd+1e0*pow(cm,-3);
167 PetscScalar ET = Et+1.0*V/cm;
168 PetscScalar mu_ac = BP_LSM/ET + CP_LSM*pow(N_total,EXP4_LSM)/Tl*pow(ET,PetscScalar(-1.0/3.0));
169 PetscScalar mu_sr = DN_LSM*pow(ET,-EXP8_LSM);
170 return 1.0/(1.0/mu_ac+1.0/mu_sr);
172 AutoDScalar HoleMobSurface(const AutoDScalar &Tl,const AutoDScalar &Et) const
174 PetscScalar Na = ReadDopingNa();
175 PetscScalar Nd = ReadDopingNd();
176 PetscScalar N_total = Na+Nd+1e0*pow(cm,-3);
177 AutoDScalar ET = Et+1.0*V/cm;
178 AutoDScalar mu_ac = BP_LSM/ET + CP_LSM*pow(N_total,EXP4_LSM)/Tl*pow(ET+1.0*V/cm,PetscScalar(-1.0/3.0));
179 AutoDScalar mu_sr = DN_LSM*pow(ET,-EXP8_LSM);
180 return 1.0/(1.0/mu_ac+1.0/mu_sr);
184 public:
186 //---------------------------------------------------------------------------
187 // Electron mobility
188 PetscScalar ElecMob(const PetscScalar &p, const PetscScalar &n, const PetscScalar &Tl,
189 const PetscScalar &Ep, const PetscScalar &Et, const PetscScalar &Tn) const
191 PetscScalar vsat = (2.4e7*cm/s)/(1+0.8*exp(Tl/(2*T300)));
192 PetscScalar mu0 = 1.0/(1.0/ElecMobLowField(Tl)+1.0/ElecMobSurface(Tl,Et));
193 return mu0/pow(1+pow(mu0*fabs(Ep)/vsat,BETAN),1.0/BETAN);
195 AutoDScalar ElecMob(const AutoDScalar &p, const AutoDScalar &n, const AutoDScalar &Tl,
196 const AutoDScalar &Ep, const AutoDScalar &Et, const AutoDScalar &Tn) const
198 AutoDScalar vsat = (2.4e7*cm/s)/(1+0.8*exp(Tl/(2*T300)));
199 AutoDScalar mu0 = 1.0/(1.0/ElecMobLowField(Tl)+1.0/ElecMobSurface(Tl,Et));
200 return mu0/pow(1+pow(mu0*fabs(Ep)/vsat,BETAN),1.0/BETAN);
203 //---------------------------------------------------------------------------
204 // Hole mobility
205 PetscScalar HoleMob (const PetscScalar &p, const PetscScalar &n, const PetscScalar &Tl,
206 const PetscScalar &Ep, const PetscScalar &Et, const PetscScalar &Tp) const
208 PetscScalar vsat = (2.4e7*cm/s)/(1+0.8*exp(Tl/(2*T300)));
209 PetscScalar mu0 = 1.0/(1.0/HoleMobLowField(Tl)+1.0/HoleMobSurface(Tl,Et));
210 return mu0/pow(1+pow(mu0*fabs(Ep)/vsat,BETAP),1.0/BETAP);
212 AutoDScalar HoleMob(const AutoDScalar &p, const AutoDScalar &n, const AutoDScalar &Tl,
213 const AutoDScalar &Ep, const AutoDScalar &Et, const AutoDScalar &Tp) const
215 AutoDScalar vsat = (2.4e7*cm/s)/(1+0.8*exp(Tl/(2*T300)));
216 AutoDScalar mu0 = 1.0/(1.0/HoleMobLowField(Tl)+1.0/HoleMobSurface(Tl,Et));
217 return mu0/pow(1+pow(mu0*fabs(Ep)/vsat,BETAP),1.0/BETAP);
220 // constructor
221 public:
222 GSS_Mob_Lombardi(const PMIS_Environment &env):PMIS_Mobility(env)
224 Mob_Lombardi_Init();
227 ~GSS_Mob_Lombardi(){}
231 /*---------------------------------------------------------------
232 * the interface function called by material databse controller
233 * and it setup Lucent mobility model
235 extern "C"
237 PMIS_Mobility* PMIS_SiGe_Mob_Lombardi (const PMIS_Environment& env)
239 return new GSS_Mob_Lombardi(env);