32 vnew =
MIN(vnew,(3 * vold) +2);
66 if ((vnew > vcrit) && (
FABS(vnew - vold) > (vt + vt))) {
68 arg = 1 + (vnew - vold) / vt;
70 vnew = vold + vt * log(arg);
77 vnew = vt *log(vnew/vt);
106 vtsthi =
FABS(2*(vold-vto))+2;
107 vtstlo = vtsthi/2 +2;
117 vnew = vold - vtstlo;
121 vnew =
MAX(vnew,vto+2);
126 if (delv >= vtsthi) {
127 vnew = vold + vtsthi;
135 vnew =
MAX(vnew,vto-.5);
139 vnew =
MIN(vnew,vto+4);
147 vnew = vold - vtsthi;
154 vnew = vold + vtstlo;
197 else if (vgst <= -phi/2) {
198 *capgb = -vgst*cox/(2*
phi);
202 else if (vgst <= 0) {
203 *capgb = -vgst*cox/(2*
phi);
204 *capgs = vgst*cox/(1.5*
phi)+cox/3;
215 vddif = 2.0*vdsat-vds;
217 vddif2 = vddif*vddif;
218 *capgd = cox*(1.0-vdsat*vdsat/vddif2)/3;
219 *capgs = cox*(1.0-vddif1*vddif1/vddif2)/3;
237 xfact = ckt->
CKTdelta/ckt->CKTdeltaOld[1];
238 return( ( (1+xfact) * *(ckt->CKTstate1+loct) ) -
239 ( xfact * *(ckt->CKTstate2+loct) ) );
269 double d1,d2,d3,d4,
c;
282 double c1,c2,c3,c12,c23,c123,dd1,dd2;
285 c1 = ckt->CKTdeltaOld[1]*d1;
286 c2 = ckt->CKTdeltaOld[2]*d1;
287 c3 = ckt->CKTdeltaOld[3]*d1;
296 c = c1*c2*c3*c12*c23*c123;
302 diff[0] = dd1 * d2 * c2 * c23;
303 diff[1] = -dd1 * c12 * c123;
304 diff[2] = dd2 * d4 * c23 * c123;
305 diff[3] = -dd2 * d3 * c2 * c12;
344 d2 = d1 + ckt->CKTdeltaOld[1];
345 d3 = d2 + ckt->CKTdeltaOld[2];
347 diff[0] = d2*d3/((d1-d2)*(d1-d3));
348 diff[1] = d1*d3/((d2-d1)*(d2-d3));
349 diff[2] = d1*d2/((d3-d1)*(d3-d2));
355 diff[1] = -d1/ckt->CKTdeltaOld[1];
356 diff[0] = 1 - diff[1];
357 diff[2] = diff[3] = 0;
double DEVpred(CKTcircuit *ckt, int loct)
double DEVpnjlim(double vnew, double vold, double vt, double vcrit, int *icheck)
double DEVlimvds(double vnew, double vold)
double DEVfetlim(double vnew, double vold, double vto)
struct sCKTtable ** DEVtableHead(GENERIC *ckt)
double * DEVpredNew(CKTcircuit *ckt)
void DEVqmeyer(double vgs, double vgd, double von, double vdsat, double *capgs, double *capgd, double *capgb, double phi, double cox)