initial checkin, based on GSS 0.46 CVS
[gss-tcad.git] / src / solver / qddm1e / jflux1q.h
blobd65346f5b3e37a479fdb6e02cdd880b1252e6334
1 /*****************************************************************************/
2 /* 8888888 88888888 88888888 */
3 /* 8 8 8 */
4 /* 8 8 8 */
5 /* 8 88888888 88888888 */
6 /* 8 8888 8 8 */
7 /* 8 8 8 8 */
8 /* 888888 888888888 888888888 */
9 /* */
10 /* A Two-Dimensional General Purpose Semiconductor Simulator. */
11 /* */
12 /* GSS 0.4x */
13 /* Last update: July 18, 2007 */
14 /* */
15 /* Gong Ding */
16 /* gdiso@ustc.edu */
17 /* NINT, No.69 P.O.Box, Xi'an City, China */
18 /* */
19 /*****************************************************************************/
21 #ifndef _jflux1q_h_
22 #define _jflux1q_h_
23 #include "petsc.h"
24 #include "mathfunc.h"
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;
54 return (E*n+Vt*dndx);
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;
62 return (E*p-Vt*dpdx);
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;
70 return (E*n+Vt*dndx);
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;
78 return (E*p-Vt*dpdx);
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));
109 //-----------------------------------------------------------------------------
110 inline PetscScalar qV(PetscScalar q1,PetscScalar q2,PetscScalar h)
112 PetscScalar x = 0.5*(q1-q2);
113 if(x<0)
114 return (1-exp(x))/h;
115 else
116 return (-x-x*x/2)/h;
119 inline AutoDScalar qV(const AutoDScalar &q1, const AutoDScalar &q2, PetscScalar h)
121 AutoDScalar x = 0.5*(q1-q2);
122 if(x<0)
123 return (1-exp(x))/h;
124 else
125 return (-x-x*x/2)/h;
129 #endif