1 /*****************************************************************************/
3 /* 8888888 88888888 88888888 */
6 /* 8 88888888 88888888 */
9 /* 888888 888888888 888888888 */
11 /* A Two-Dimensional General Purpose Semiconductor Simulator. */
13 /* GSS material database Version 0.4 */
14 /* Last update: July 26, 2007 */
18 /* NINT, No.69 P.O.Box, Xi'an City, China */
20 /*****************************************************************************/
22 // Material Type: Si(1-x)Ge(x). (in fact, use parameters for Si instead.)
27 class GSS_Mob_Lombardi
: public PMIS_Mobility
59 // parameters for parallel field modification
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);
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
);
186 //---------------------------------------------------------------------------
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 //---------------------------------------------------------------------------
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
);
222 GSS_Mob_Lombardi(const PMIS_Environment
&env
):PMIS_Mobility(env
)
227 ~GSS_Mob_Lombardi(){}
231 /*---------------------------------------------------------------
232 * the interface function called by material databse controller
233 * and it setup Lucent mobility model
237 PMIS_Mobility
* PMIS_SiGe_Mob_Lombardi (const PMIS_Environment
& env
)
239 return new GSS_Mob_Lombardi(env
);