1 /*****************************************************************************/
2 /* 8888888 88888888 88888888 */
5 /* 8 88888888 88888888 */
8 /* 888888 888888888 888888888 */
10 /* A Two-Dimensional General Purpose Semiconductor Simulator. */
13 /* Last update: Nov 23, 2005 */
17 /* NINT, No.69 P.O.Box, Xi'an City, China */
19 /*****************************************************************************/
27 inline PetscScalar
nmid(PetscScalar Vt
, PetscScalar Vc1
, PetscScalar Vc2
, PetscScalar n1
, PetscScalar n2
)
29 return n1
*aux2((Vc2
-Vc1
)/(2*Vt
)) + n2
*aux2((Vc1
-Vc2
)/(2*Vt
));
32 inline PetscScalar
pmid(PetscScalar Vt
, PetscScalar Vv1
, PetscScalar Vv2
, PetscScalar p1
, PetscScalar p2
)
34 return p1
*aux2((Vv1
-Vv2
)/(2*Vt
)) + p2
*aux2((Vv2
-Vv1
)/(2*Vt
));
37 inline AutoDScalar
nmid(PetscScalar Vt
, const AutoDScalar
&Vc1
, const AutoDScalar
&Vc2
, const AutoDScalar
&n1
, const AutoDScalar
&n2
)
39 return n1
*aux2((Vc2
-Vc1
)/(2*Vt
)) + n2
*aux2((Vc1
-Vc2
)/(2*Vt
));
42 inline AutoDScalar
pmid(PetscScalar Vt
, const AutoDScalar
&Vv1
, const AutoDScalar
&Vv2
, const AutoDScalar
&p1
, const AutoDScalar
&p2
)
44 return p1
*aux2((Vv1
-Vv2
)/(2*Vt
)) + p2
*aux2((Vv2
-Vv1
)/(2*Vt
));
48 //-----------------------------------------------------------------------------
49 inline PetscScalar
In(PetscScalar Vt
,PetscScalar Vc1
,PetscScalar Vc2
,PetscScalar n1
,PetscScalar n2
,PetscScalar h
)
51 PetscScalar E
= (Vc2
-Vc1
)/h
;
52 PetscScalar n
= n1
*aux2((Vc2
-Vc1
)/(2*Vt
)) + n2
*aux2((Vc1
-Vc2
)/(2*Vt
));
53 PetscScalar dndx
= aux1((Vc2
-Vc1
)/(2*Vt
))*(n2
-n1
)/h
;
57 inline PetscScalar
Ip(PetscScalar Vt
,PetscScalar Vv1
,PetscScalar Vv2
,PetscScalar p1
,PetscScalar p2
,PetscScalar h
)
59 PetscScalar E
= (Vv2
-Vv1
)/h
;
60 PetscScalar p
= p1
*aux2((Vv1
-Vv2
)/(2*Vt
)) + p2
*aux2((Vv2
-Vv1
)/(2*Vt
));
61 PetscScalar dpdx
= aux1((Vv2
-Vv1
)/(2*Vt
))*(p2
-p1
)/h
;
65 inline AutoDScalar
In(PetscScalar Vt
, const AutoDScalar
&Vc1
, const AutoDScalar
&Vc2
, const AutoDScalar
&n1
, const AutoDScalar
&n2
, PetscScalar h
)
67 AutoDScalar E
= (Vc2
-Vc1
)/h
;
68 AutoDScalar n
= n1
*aux2((Vc2
-Vc1
)/(2*Vt
)) + n2
*aux2((Vc1
-Vc2
)/(2*Vt
));
69 AutoDScalar dndx
= aux1((Vc2
-Vc1
)/(2*Vt
))*(n2
-n1
)/h
;
73 inline AutoDScalar
Ip(PetscScalar Vt
, const AutoDScalar
&Vv1
, const AutoDScalar
&Vv2
, const AutoDScalar
&p1
, const AutoDScalar
&p2
, PetscScalar h
)
75 AutoDScalar E
= (Vv2
-Vv1
)/h
;
76 AutoDScalar p
= p1
*aux2((Vv1
-Vv2
)/(2*Vt
)) + p2
*aux2((Vv2
-Vv1
)/(2*Vt
));
77 AutoDScalar dpdx
= aux1((Vv2
-Vv1
)/(2*Vt
))*(p2
-p1
)/h
;
85 //-----------------------------------------------------------------------------
86 inline PetscScalar
In(PetscScalar Vt
,PetscScalar dVc
,PetscScalar n1
,PetscScalar n2
,PetscScalar h
)
88 return Vt
/h
*(n2
*bern(-dVc
/Vt
)-n1
*bern(dVc
/Vt
));
91 inline PetscScalar
Ip(PetscScalar Vt
,PetscScalar dVv
,PetscScalar p1
,PetscScalar p2
,PetscScalar h
)
93 return Vt
/h
*(p1
*bern(-dVv
/Vt
)-p2
*bern(dVv
/Vt
));
96 inline AutoDScalar
In(PetscScalar Vt
,const AutoDScalar
&dVc
,const AutoDScalar
&n1
,const AutoDScalar
&n2
, PetscScalar h
)
98 return Vt
/h
*(n2
*bern(-dVc
/Vt
)-n1
*bern(dVc
/Vt
));
101 inline AutoDScalar
Ip(PetscScalar Vt
,const AutoDScalar
&dVv
,const AutoDScalar
&p1
,const AutoDScalar
&p2
, PetscScalar h
)
103 return Vt
/h
*(p1
*bern(-dVv
/Vt
)-p2
*bern(dVv
/Vt
));