more fix on Ec/Ev.
[gss-tcad.git] / src / material / AlGaAs / AlGaAs_mob_Analytic.cc
blob2ef93d96b75791e91c2d49a6796acda6d08f763f
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: AlGaAs
25 #include "PMI.h"
27 class GSS_Mob_Analytic : public PMIS_Mobility
29 private:
30 // parameters for Analytic mobility
31 PetscScalar MUN_MIN;
32 PetscScalar MIN_X1;
33 PetscScalar MIN_X2;
34 PetscScalar MUN_MAX;
35 PetscScalar MAN_X1;
36 PetscScalar MAN_X2;
37 PetscScalar NREFN;
38 PetscScalar NREFN2;
39 PetscScalar NUN;
40 PetscScalar XIN;
41 PetscScalar ALPHAN;
42 PetscScalar MUP_MIN;
43 PetscScalar MIP_X1;
44 PetscScalar MIP_X2;
45 PetscScalar MUP_MAX;
46 PetscScalar MAP_X1;
47 PetscScalar MAP_X2;
48 PetscScalar NREFP;
49 PetscScalar NREFP2;
50 PetscScalar NUP;
51 PetscScalar XIP;
52 PetscScalar ALPHAP;
53 PetscScalar T300;
54 // parameters for high field modification
55 PetscScalar VSATN;
56 PetscScalar VSN1;
57 PetscScalar VSN2;
58 PetscScalar VSATP;
59 PetscScalar VSP1;
60 PetscScalar VSP2;
61 PetscScalar E0N;
62 PetscScalar EN1;
63 PetscScalar EN2;
64 PetscScalar E0P;
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);
76 NUN = 0.000000E+00;
77 XIN = 0.000000E+00;
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);
88 NUP = -2.100000E+00;
89 XIP = 0.000000E+00;
90 ALPHAP = 3.950000E-01;
91 T300 = 300.0*K;
93 VSATN = 6.351800E+06*cm/s;
94 VSN1 = -5.304000E-01;
95 VSN2 = -7.484000E-02;
96 VSATP = 0.000000E+00*cm/s;
97 VSP1 = 0.000000E+00;
98 VSP2 = 0.000000E+00;
99 E0N = 5.418400E+03*V/cm;
100 EN1 = -2.471000E+00;
101 EN2 = 7.194200E+00;
102 E0P = 1.000000E+06*V/cm;
106 public:
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)));
154 public:
155 //---------------------------------------------------------------------------
156 // Electron mobility
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 //---------------------------------------------------------------------------
177 // Hole mobility
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
191 public:
192 GSS_Mob_Analytic(const PMIS_Environment &env):PMIS_Mobility(env)
194 Mob_Analytic_Init();
198 ~GSS_Mob_Analytic()
205 /*---------------------------------------------------------------
206 * the interface function called by material databse controller
207 * use Analytic model as default mobility model
209 extern "C"
211 PMIS_Mobility* PMIS_AlGaAs_Mob_Default (const PMIS_Environment& env)
213 return new GSS_Mob_Analytic(env);
216 /* alias */
217 extern "C"
219 PMIS_Mobility* PMIS_AlGaAs_Mob_Analytic (const PMIS_Environment& env)
221 return new GSS_Mob_Analytic(env);