initial checkin, based on GSS 0.46 CVS
[gss-tcad.git] / src / material / SiGe / SiGe_mob_HP.cc
blobe37bddfd8723f8e02dbc7f8ca5a2734c5e5aff94
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 23, 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_HP : public PMIS_Mobility
29 private:
30 // parameters for Analytic mobility
31 PetscScalar MUN_MIN ;
32 PetscScalar MUN_MAX ;
33 PetscScalar NREFN ;
34 PetscScalar NUN ;
35 PetscScalar XIN ;
36 PetscScalar ALPHAN ;
37 PetscScalar MUP_MIN ;
38 PetscScalar MUP_MAX ;
39 PetscScalar NREFP ;
40 PetscScalar NUP ;
41 PetscScalar XIP ;
42 PetscScalar ALPHAP ;
43 PetscScalar T300 ;
44 // parameters for HP high field modification
45 PetscScalar MUN0_HP;
46 PetscScalar ECN_HP;
47 PetscScalar VSN_HP;
48 PetscScalar VCN_HP;
49 PetscScalar GN_HP;
50 PetscScalar MUP0_HP;
51 PetscScalar ECP_HP;
52 PetscScalar VSP_HP;
53 PetscScalar VCP_HP;
54 PetscScalar GP_HP;
55 PetscScalar NREF_HP;
57 void Mob_HP_Init()
59 MUN_MIN = 5.524000E+01*cm*cm/V/s;
60 MUN_MAX = 1.429230E+03*cm*cm/V/s;
61 NREFN = 1.072000E+17*pow(cm,-3);
62 NUN = -2.300000E+00;
63 XIN = -3.800000E+00;
64 ALPHAN = 7.300000E-01;
65 MUP_MIN = 4.970000E+01*cm*cm/V/s;
66 MUP_MAX = 4.793700E+02*cm*cm/V/s;
67 NREFP = 1.606000E+17*pow(cm,-3);
68 NUP = -2.200000E+00;
69 XIP = -3.700000E+00;
70 ALPHAP = 7.000000E-01;
71 T300 = 300.0*K;
73 MUN0_HP = 7.740000E+02*cm*cm/V/s;
74 ECN_HP = 5.500000E+05*V/cm;
75 VSN_HP = 1.036000E+07*cm/s;
76 VCN_HP = 4.900000E+06*cm/s;
77 GN_HP = 8.800000E+00;
78 MUP0_HP = 2.500000E+02*cm*cm/V/s;
79 ECP_HP = 2.780000E+05*V/cm;
80 VSP_HP = 1.200000E+07*cm/s;
81 VCP_HP = 2.928000E+06*cm/s;
82 GP_HP = 1.600000E+00;
83 NREF_HP = 5.000000E+17*pow(cm,-3);
86 public:
87 //---------------------------------------------------------------------------
88 // Electron low field mobility, Analytic model
89 PetscScalar ElecMobLowField(const PetscScalar &Tl) const
91 PetscScalar Na = ReadDopingNa();
92 PetscScalar Nd = ReadDopingNd();
93 return MUN_MIN+(MUN_MAX*pow(Tl/T300,NUN)-MUN_MIN)/ \
94 (1+pow(Tl/T300,XIN)*pow((Na+Nd)/NREFN,ALPHAN));
96 AutoDScalar ElecMobLowField(const AutoDScalar &Tl) const
98 PetscScalar Na = ReadDopingNa();
99 PetscScalar Nd = ReadDopingNd();
100 return MUN_MIN+(MUN_MAX*pow(Tl/T300,NUN)-MUN_MIN)/ \
101 (1+pow(Tl/T300,XIN)*pow((Na+Nd)/NREFN,ALPHAN));
104 //---------------------------------------------------------------------------
105 // Hole low field mobility, Analytic model
106 PetscScalar HoleMobLowField(const PetscScalar &Tl) const
108 PetscScalar Na = ReadDopingNa();
109 PetscScalar Nd = ReadDopingNd();
110 return MUP_MIN+(MUP_MAX*pow(Tl/T300,NUP)-MUP_MIN)/ \
111 (1+pow(Tl/T300,XIP)*pow((Na+Nd)/NREFP,ALPHAP));
113 AutoDScalar HoleMobLowField(const AutoDScalar &Tl) const
115 PetscScalar Na = ReadDopingNa();
116 PetscScalar Nd = ReadDopingNd();
117 return MUP_MIN+(MUP_MAX*pow(Tl/T300,NUP)-MUP_MIN)/ \
118 (1+pow(Tl/T300,XIP)*pow((Na+Nd)/NREFP,ALPHAP));
122 public:
123 //---------------------------------------------------------------------------
124 // Electron mobility
125 PetscScalar ElecMob(const PetscScalar &p, const PetscScalar &n, const PetscScalar &Tl,
126 const PetscScalar &Ep, const PetscScalar &Et, const PetscScalar &Tn) const
128 PetscScalar Ntotal = ReadDopingNa()+ReadDopingNd();
129 PetscScalar mu0;
130 if(Ntotal > NREF_HP) mu0=ElecMobLowField(Tl);
131 else mu0 = MUN0_HP/(1+Et/ECN_HP);
132 PetscScalar alpha = mu0*Ep/VCN_HP;
133 PetscScalar beta = mu0*Ep/VSN_HP;
134 return mu0/sqrt(1+alpha*alpha/(alpha+GN_HP)+beta*beta);
136 AutoDScalar ElecMob(const AutoDScalar &p, const AutoDScalar &n, const AutoDScalar &Tl,
137 const AutoDScalar &Ep, const AutoDScalar &Et, const AutoDScalar &Tn) const
139 PetscScalar Ntotal = ReadDopingNa()+ReadDopingNd();
140 AutoDScalar mu0;
141 if(Ntotal > NREF_HP) mu0=ElecMobLowField(Tl);
142 else mu0 = MUN0_HP/(1+Et/ECN_HP);
143 AutoDScalar alpha = mu0*Ep/VCN_HP;
144 AutoDScalar beta = mu0*Ep/VSN_HP;
145 return mu0/sqrt(1+alpha*alpha/(alpha+GN_HP)+beta*beta);
148 //---------------------------------------------------------------------------
149 // Hole mobility
150 PetscScalar HoleMob (const PetscScalar &p, const PetscScalar &n, const PetscScalar &Tl,
151 const PetscScalar &Ep, const PetscScalar &Et, const PetscScalar &Tp) const
153 PetscScalar Ntotal = ReadDopingNa()+ReadDopingNd();
154 PetscScalar mu0;
155 if(Ntotal > NREF_HP) mu0=HoleMobLowField(Tl);
156 else mu0 = MUP0_HP/(1+Et/ECP_HP);
157 PetscScalar alpha = mu0*Ep/VCP_HP;
158 PetscScalar beta = mu0*Ep/VSP_HP;
159 return mu0/sqrt(1+alpha*alpha/(alpha+GP_HP)+beta*beta);
161 AutoDScalar HoleMob(const AutoDScalar &p, const AutoDScalar &n, const AutoDScalar &Tl,
162 const AutoDScalar &Ep, const AutoDScalar &Et, const AutoDScalar &Tp) const
164 PetscScalar Ntotal = ReadDopingNa()+ReadDopingNd();
165 AutoDScalar mu0;
166 if(Ntotal > NREF_HP) mu0=HoleMobLowField(Tl);
167 else mu0 = MUP0_HP/(1+Et/ECP_HP);
168 AutoDScalar alpha = mu0*Ep/VCP_HP;
169 AutoDScalar beta = mu0*Ep/VSP_HP;
170 return mu0/sqrt(1+alpha*alpha/(alpha+GP_HP)+beta*beta);
173 // constructor
174 public:
175 GSS_Mob_HP(const PMIS_Environment &env):PMIS_Mobility(env)
177 Mob_HP_Init();
181 ~GSS_Mob_HP()
188 /*---------------------------------------------------------------
189 * the interface function called by material databse controller
190 * use Analytic model as default mobility model
192 /* alias */
193 extern "C"
195 PMIS_Mobility* PMIS_SiGe_Mob_HP (const PMIS_Environment& env)
197 return new GSS_Mob_HP(env);