initial checkin, based on GSS 0.46 CVS
[gss-tcad.git] / src / material / InAs / InAs_mob_Analytic.cc
blob619c9c450b07a8fff22e335d400b53902e6c1588
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: InAs
25 #include "PMI.h"
27 class GSS_Mob_Analytic : public PMIS_Mobility
30 private:
31 // parameters for Analytic mobility
32 PetscScalar Ar_mumin_n;
33 PetscScalar Ar_mumin_p;
34 PetscScalar Ar_alm_n ;
35 PetscScalar Ar_alm_p ;
36 PetscScalar Ar_mud_n ;
37 PetscScalar Ar_mud_p ;
38 PetscScalar Ar_ald_n ;
39 PetscScalar Ar_ald_p ;
40 PetscScalar Ar_N0_n ;
41 PetscScalar Ar_N0_p ;
42 PetscScalar Ar_alN_n ;
43 PetscScalar Ar_alN_p ;
44 PetscScalar Ar_a_n ;
45 PetscScalar Ar_a_p ;
46 PetscScalar Ar_ala_n ;
47 PetscScalar Ar_ala_p ;
48 PetscScalar T300 ;
49 // parameters for high field modification
50 PetscScalar E0N ;
51 PetscScalar E0P ;
52 void Mob_Analytic_Init()
54 //Source: data base of DESSIS
55 Ar_mumin_n = 2.2600e+04*cm*cm/V/s;
56 Ar_mumin_p = 2.5000e+02*cm*cm/V/s;
57 Ar_alm_n = -1.5000e+00;
58 Ar_alm_p = -1.5000e+00;
59 Ar_mud_n = 0.0000e+00*cm*cm/V/s;
60 Ar_mud_p = 0.0000e+00*cm*cm/V/s;
61 Ar_ald_n = 0.0000e+00;
62 Ar_ald_p = 0.0000e+00;
63 Ar_N0_n = 1.0000e+17*pow(cm,-3);
64 Ar_N0_p = 1.0000e+17*pow(cm,-3);
65 Ar_alN_n = 0.0000e+00;
66 Ar_alN_p = 0.0000e+00;
67 Ar_a_n = 0.0000e+00;
68 Ar_a_p = 0.0000e+00;
69 Ar_ala_n = 0.0000e+00;
70 Ar_ala_p = 0.0000e+00;
71 T300 = 300*K;
72 E0N = 4.0000e+03*V/cm;
73 E0P = 4.0000e+03*V/cm;
76 //---------------------------------------------------------------------------
77 // Electron low field mobility
78 PetscScalar ElecMobLowField(const PetscScalar &Tl) const
80 return Ar_mumin_n*pow(Tl/T300,Ar_alm_n);
82 AutoDScalar ElecMobLowField(const AutoDScalar &Tl) const
84 return Ar_mumin_n*pow(Tl/T300,Ar_alm_n);
87 //---------------------------------------------------------------------------
88 // Hole low field mobility
89 PetscScalar HoleMobLowField(const PetscScalar &Tl) const
91 return Ar_mumin_p*pow(Tl/T300,Ar_alm_p);
93 AutoDScalar HoleMobLowField(const AutoDScalar &Tl) const
95 return Ar_mumin_p*pow(Tl/T300,Ar_alm_p);
99 public:
100 //---------------------------------------------------------------------------
101 // Electron mobility
102 PetscScalar ElecMob(const PetscScalar &p, const PetscScalar &n, const PetscScalar &Tl,
103 const PetscScalar &Ep, const PetscScalar &Et, const PetscScalar &Tn) const
105 PetscScalar vsat = 1.0000e+07*cm/s;
106 PetscScalar mu0 = ElecMobLowField(Tl);
107 PetscScalar E = Ep>0 ? Ep : 0 ;
108 return (mu0+vsat*pow(E,3)/pow(E0N,4))/(1+pow(E/E0N,4));
110 AutoDScalar ElecMob(const AutoDScalar &p, const AutoDScalar &n, const AutoDScalar &Tl,
111 const AutoDScalar &Ep, const AutoDScalar &Et, const AutoDScalar &Tn) const
113 PetscScalar vsat = 1.0000e+07*cm/s;
114 AutoDScalar mu0 = ElecMobLowField(Tl);
115 AutoDScalar E = fmax(Ep, 0.0) ;
116 return (mu0+vsat*pow(E,3)/pow(E0N,4))/(1+pow(E/E0N,4));
120 //---------------------------------------------------------------------------
121 // Hole mobility
122 PetscScalar HoleMob (const PetscScalar &p, const PetscScalar &n, const PetscScalar &Tl,
123 const PetscScalar &Ep, const PetscScalar &Et, const PetscScalar &Tp) const
125 PetscScalar vsat = 1.0000e+07*cm/s;
126 PetscScalar mu0 = HoleMobLowField(Tl);
127 PetscScalar E = Ep>0 ? Ep : 0 ;
128 return (mu0+vsat*pow(E,3)/pow(E0P,4))/(1+pow(E/E0P,4));
130 AutoDScalar HoleMob(const AutoDScalar &p, const AutoDScalar &n, const AutoDScalar &Tl,
131 const AutoDScalar &Ep, const AutoDScalar &Et, const AutoDScalar &Tp) const
133 PetscScalar vsat = 1.0000e+07*cm/s;
134 AutoDScalar mu0 = HoleMobLowField(Tl);
135 AutoDScalar E = fmax(Ep, 0.0) ;
136 return (mu0+vsat*pow(E,3)/pow(E0P,4))/(1+pow(E/E0P,4));
139 // constructor and destructor
140 public:
141 GSS_Mob_Analytic(const PMIS_Environment &env):PMIS_Mobility(env)
143 Mob_Analytic_Init();
147 ~GSS_Mob_Analytic()
154 /*---------------------------------------------------------------
155 * the interface function called by material databse controller
156 * use Analytic model as default mobility model
158 extern "C"
160 PMIS_Mobility* PMIS_InAs_Mob_Default (const PMIS_Environment& env)
162 return new GSS_Mob_Analytic(env);
165 /* alias */
166 extern "C"
168 PMIS_Mobility* PMIS_InAs_Mob_Analytic (const PMIS_Environment& env)
170 return new GSS_Mob_Analytic(env);