more fix on Ec/Ev.
[gss-tcad.git] / src / material / Ge / Ge_mob_Analytic.cc
bloba48e7cfb2feb8848b15b88a74ad2a2a81be7dbbf
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: Ge
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 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 high field modification
45 PetscScalar BETAN;
46 PetscScalar BETAP;
47 void Mob_Analytic_Init()
49 MUN_MIN = 5.524000E+01*cm*cm/V/s;
50 MUN_MAX = 1.429230E+03*cm*cm/V/s;
51 NREFN = 1.072000E+17*pow(cm,-3);
52 NUN = -2.300000E+00;
53 XIN = -3.800000E+00;
54 ALPHAN = 7.300000E-01;
55 MUP_MIN = 4.970000E+01*cm*cm/V/s;
56 MUP_MAX = 4.793700E+02*cm*cm/V/s;
57 NREFP = 1.606000E+17*pow(cm,-3);
58 NUP = -2.200000E+00;
59 XIP = -3.700000E+00;
60 ALPHAP = 7.000000E-01;
61 T300 = 300.0*K;
62 BETAN = 2.000000E+00;
63 BETAP = 1.000000E+00;
66 public:
67 //---------------------------------------------------------------------------
68 // Electron low field mobility
69 PetscScalar ElecMobLowField(const PetscScalar &Tl) const
71 PetscScalar Na = ReadDopingNa();
72 PetscScalar Nd = ReadDopingNd();
73 return MUN_MIN+(MUN_MAX*pow(Tl/T300,NUN)-MUN_MIN)/ \
74 (1+pow(Tl/T300,XIN)*pow((Na+Nd)/NREFN,ALPHAN));
76 AutoDScalar ElecMobLowField(const AutoDScalar &Tl) const
78 PetscScalar Na = ReadDopingNa();
79 PetscScalar Nd = ReadDopingNd();
80 return MUN_MIN+(MUN_MAX*pow(Tl/T300,NUN)-MUN_MIN)/ \
81 (1+pow(Tl/T300,XIN)*pow((Na+Nd)/NREFN,ALPHAN));
84 //---------------------------------------------------------------------------
85 // Hole low field mobility
86 PetscScalar HoleMobLowField(const PetscScalar &Tl) const
88 PetscScalar Na = ReadDopingNa();
89 PetscScalar Nd = ReadDopingNd();
90 return MUP_MIN+(MUP_MAX*pow(Tl/T300,NUP)-MUP_MIN)/ \
91 (1+pow(Tl/T300,XIP)*pow((Na+Nd)/NREFP,ALPHAP));
93 AutoDScalar HoleMobLowField(const AutoDScalar &Tl) const
95 PetscScalar Na = ReadDopingNa();
96 PetscScalar Nd = ReadDopingNd();
97 return MUP_MIN+(MUP_MAX*pow(Tl/T300,NUP)-MUP_MIN)/ \
98 (1+pow(Tl/T300,XIP)*pow((Na+Nd)/NREFP,ALPHAP));
101 public:
102 //---------------------------------------------------------------------------
103 // Electron mobility
104 PetscScalar ElecMob(const PetscScalar &p, const PetscScalar &n, const PetscScalar &Tl,
105 const PetscScalar &Ep, const PetscScalar &Et, const PetscScalar &Tn) const
107 PetscScalar vsat = (2.4e7*cm/s)/(1+0.8*exp(Tl/(2*T300)));
108 PetscScalar mu0 = ElecMobLowField(Tl);
109 return mu0/pow(1+pow(mu0*fabs(Ep)/vsat,BETAN),1.0/BETAN);
111 AutoDScalar ElecMob(const AutoDScalar &p, const AutoDScalar &n, const AutoDScalar &Tl,
112 const AutoDScalar &Ep, const AutoDScalar &Et, const AutoDScalar &Tn) const
114 AutoDScalar vsat = (2.4e7*cm/s)/(1+0.8*exp(Tl/(2*T300)));
115 AutoDScalar mu0 = ElecMobLowField(Tl);
116 return mu0/pow(1+pow(mu0*fabs(Ep)/vsat,BETAN),1.0/BETAN);
119 //---------------------------------------------------------------------------
120 // Hole mobility
121 PetscScalar HoleMob (const PetscScalar &p, const PetscScalar &n, const PetscScalar &Tl,
122 const PetscScalar &Ep, const PetscScalar &Et, const PetscScalar &Tp) const
124 PetscScalar vsat = (2.4e7*cm/s)/(1+0.8*exp(Tl/(2*T300)));
125 PetscScalar mu0 = HoleMobLowField(Tl);
126 return mu0/pow(1+pow(mu0*fabs(Ep)/vsat,BETAP),1.0/BETAP);
128 AutoDScalar HoleMob(const AutoDScalar &p, const AutoDScalar &n, const AutoDScalar &Tl,
129 const AutoDScalar &Ep, const AutoDScalar &Et, const AutoDScalar &Tp) const
131 AutoDScalar vsat = (2.4e7*cm/s)/(1+0.8*exp(Tl/(2*T300)));
132 AutoDScalar mu0 = HoleMobLowField(Tl);
133 return mu0/pow(1+pow(mu0*fabs(Ep)/vsat,BETAP),1.0/BETAP);
136 // constructor and destructor
137 public:
138 GSS_Mob_Analytic(const PMIS_Environment &env):PMIS_Mobility(env)
140 Mob_Analytic_Init();
144 ~GSS_Mob_Analytic()
151 /*---------------------------------------------------------------
152 * the interface function called by material databse controller
153 * use Analytic model as default mobility model
155 extern "C"
157 PMIS_Mobility* PMIS_Ge_Mob_Default (const PMIS_Environment& env)
159 return new GSS_Mob_Analytic(env);
162 /* alias */
163 extern "C"
165 PMIS_Mobility* PMIS_Ge_Mob_Analytic (const PMIS_Environment& env)
167 return new GSS_Mob_Analytic(env);