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: Feb 17, 2006 */
18 /* NINT, No.69 P.O.Box, Xi'an City, China */
20 /*****************************************************************************/
22 // Material Type: AlGaAs
27 class GSS_Mob_Analytic
: public PMIS_Mobility
30 // parameters for Analytic mobility
54 // parameters for high field modification
66 void Mob_Analytic_Init()
68 MUN_MIN
= 2.366000E+03*cm
*cm
/V
/s
;
69 MIN_X1
= -9.831000E-01;
70 MIN_X2
= 0.000000E+00;
71 MUN_MAX
= 9.891700E+03*cm
*cm
/V
/s
;
72 MAN_X1
= -9.495000E-01;
73 MAN_X2
= 0.000000E+00;
74 NREFN
= 3.629700E+17*pow(cm
,-3);
75 NREFN2
= 1.745100E+18*pow(cm
,-3);
78 ALPHAN
= 1.000000E+00;
80 MUP_MIN
= 0.000000E+00*cm
*cm
/V
/s
;
81 MIP_X1
= 0.000000E+00;
82 MIP_X2
= 0.000000E+00;
83 MUP_MAX
= 4.000000E+02*cm
*cm
/V
/s
;
84 MAP_X1
= 0.000000E+00;
85 MAP_X2
= 0.000000E+00;
86 NREFP
= 2.750000E+17*pow(cm
,-3);
87 NREFP2
= 1.000000E+30*pow(cm
,-3);
90 ALPHAP
= 3.950000E-01;
93 VSATN
= 6.351800E+06*cm
/s
;
96 VSATP
= 0.000000E+00*cm
/s
;
99 E0N
= 5.418400E+03*V
/cm
;
102 E0P
= 1.000000E+06*V
/cm
;
107 //---------------------------------------------------------------------------
108 // Electron low field mobility
109 PetscScalar
ElecMobLowField(const PetscScalar
&Tl
) const
111 PetscScalar Na
= ReadDopingNa();
112 PetscScalar Nd
= ReadDopingNd();
113 PetscScalar x
= ReadxMoleFraction();
114 PetscScalar mu_min
= MUN_MIN
*(1+MIN_X1
*x
+MIN_X2
*x
*x
);
115 PetscScalar mu_max
= MUN_MAX
*(1+MAN_X1
*x
+MAN_X2
*x
*x
);
116 return mu_min
+(mu_max
*pow(Tl
/T300
,NUN
)-mu_min
)/ \
117 (1+pow(Tl
/T300
,XIN
)*(pow((Na
+Nd
)/NREFN
,ALPHAN
)+pow((Na
+Nd
)/NREFN2
,3)));
119 AutoDScalar
ElecMobLowField(const AutoDScalar
&Tl
) const
121 PetscScalar Na
= ReadDopingNa();
122 PetscScalar Nd
= ReadDopingNd();
123 PetscScalar x
= ReadxMoleFraction();
124 PetscScalar mu_min
= MUN_MIN
*(1+MIN_X1
*x
+MIN_X2
*x
*x
);
125 PetscScalar mu_max
= MUN_MAX
*(1+MAN_X1
*x
+MAN_X2
*x
*x
);
126 return mu_min
+(mu_max
*pow(Tl
/T300
,NUN
)-mu_min
)/ \
127 (1+pow(Tl
/T300
,XIN
)*(pow((Na
+Nd
)/NREFN
,ALPHAN
)+pow((Na
+Nd
)/NREFN2
,3)));
130 //---------------------------------------------------------------------------
131 // Hole low field mobility
132 PetscScalar
HoleMobLowField(const PetscScalar
&Tl
) const
134 PetscScalar Na
= ReadDopingNa();
135 PetscScalar Nd
= ReadDopingNd();
136 PetscScalar x
= ReadxMoleFraction();
137 PetscScalar mu_min
= MUP_MIN
*(1+MIP_X1
*x
+MIP_X2
*x
*x
);
138 PetscScalar mu_max
= MUP_MAX
*(1+MAP_X1
*x
+MAP_X2
*x
*x
);
139 return mu_min
+(mu_max
*pow(Tl
/T300
,NUP
)-mu_min
)/ \
140 (1+pow(Tl
/T300
,XIP
)*(pow((Na
+Nd
)/NREFP
,ALPHAP
)+pow((Na
+Nd
)/NREFP2
,3)));
142 AutoDScalar
HoleMobLowField(const AutoDScalar
&Tl
) const
144 PetscScalar Na
= ReadDopingNa();
145 PetscScalar Nd
= ReadDopingNd();
146 PetscScalar x
= ReadxMoleFraction();
147 PetscScalar mu_min
= MUP_MIN
*(1+MIP_X1
*x
+MIP_X2
*x
*x
);
148 PetscScalar mu_max
= MUP_MAX
*(1+MAP_X1
*x
+MAP_X2
*x
*x
);
149 return mu_min
+(mu_max
*pow(Tl
/T300
,NUP
)-mu_min
)/ \
150 (1+pow(Tl
/T300
,XIP
)*(pow((Na
+Nd
)/NREFP
,ALPHAP
)+pow((Na
+Nd
)/NREFP2
,3)));
155 //---------------------------------------------------------------------------
157 PetscScalar
ElecMob(const PetscScalar
&p
, const PetscScalar
&n
, const PetscScalar
&Tl
,
158 const PetscScalar
&Ep
, const PetscScalar
&Et
, const PetscScalar
&Tn
) const
160 PetscScalar x
= ReadxMoleFraction();
161 PetscScalar vsat
= VSATN
*(1+ VSN1
*x
+ VSN2
*x
*x
);
162 PetscScalar E0
= E0N
*(1+EN1
*x
+EN2
*x
*x
);
163 PetscScalar mu0
= ElecMobLowField(Tl
);
164 return (mu0
+vsat
*pow(Ep
,3)/pow(E0
,4))/(1+pow(Ep
/E0
,4));
166 AutoDScalar
ElecMob(const AutoDScalar
&p
, const AutoDScalar
&n
, const AutoDScalar
&Tl
,
167 const AutoDScalar
&Ep
, const AutoDScalar
&Et
, const AutoDScalar
&Tn
) const
169 PetscScalar x
= ReadxMoleFraction();
170 PetscScalar vsat
= VSATN
*(1+ VSN1
*x
+ VSN2
*x
*x
);
171 PetscScalar E0
= E0N
*(1+EN1
*x
+EN2
*x
*x
);
172 AutoDScalar mu0
= ElecMobLowField(Tl
);
173 return (mu0
+vsat
*pow(Ep
,3)/pow(E0
,4))/(1+pow(Ep
/E0
,4));
176 //---------------------------------------------------------------------------
178 PetscScalar
HoleMob (const PetscScalar
&p
, const PetscScalar
&n
, const PetscScalar
&Tl
,
179 const PetscScalar
&Ep
, const PetscScalar
&Et
, const PetscScalar
&Tp
) const
181 return HoleMobLowField(Tl
);
183 AutoDScalar
HoleMob(const AutoDScalar
&p
, const AutoDScalar
&n
, const AutoDScalar
&Tl
,
184 const AutoDScalar
&Ep
, const AutoDScalar
&Et
, const AutoDScalar
&Tp
) const
186 return HoleMobLowField(Tl
);
190 // constructor and destructor
192 GSS_Mob_Analytic(const PMIS_Environment
&env
):PMIS_Mobility(env
)
205 /*---------------------------------------------------------------
206 * the interface function called by material databse controller
207 * use Analytic model as default mobility model
211 PMIS_Mobility
* PMIS_AlGaAs_Mob_Default (const PMIS_Environment
& env
)
213 return new GSS_Mob_Analytic(env
);
219 PMIS_Mobility
* PMIS_AlGaAs_Mob_Analytic (const PMIS_Environment
& env
)
221 return new GSS_Mob_Analytic(env
);