45 #include <Xyce_config.h>
62 #include <N_ERH_ErrorMgr.h>
66 #include <N_LAS_Matrix.h>
67 #include <N_LAS_Vector.h>
141 "Initial condition of no voltage drops across device");
215 U_OHM,
CAT_RES,
"Drain, source diffusion sheet resistance");
257 U_NONE,
CAT_CAP,
"Bulk p-n forward-bias capacitance coefficient");
315 " 0 = aluminum, 1 = opposite of substrate)");
369 :
DeviceInstance(IB, configuration.getInstanceParameters(), factory_block),
377 l(getDeviceOptions().defl),
378 w(getDeviceOptions().defw),
380 drainArea(getDeviceOptions().defad),
381 sourceArea(getDeviceOptions().defas),
385 sourcePerimeter(0.0),
386 sourceConductance(0.0),
387 drainConductance(0.0),
388 temp(getDeviceOptions().temp.getImmutableValue<double>()),
390 tTransconductance(0.0),
441 GateSourceOverlapCap(0),
442 GateDrainOverlapCap(0),
443 GateBulkOverlapCap(0),
456 ADrainEquDrainNodeOffset(-1),
457 ADrainEquDrainPrimeNodeOffset(-1),
459 AGateEquGateNodeOffset(-1),
460 AGateEquBulkNodeOffset(-1),
461 AGateEquDrainPrimeNodeOffset(-1),
462 AGateEquSourcePrimeNodeOffset(-1),
464 ASourceEquSourceNodeOffset(-1),
465 ASourceEquSourcePrimeNodeOffset(-1),
467 ABulkEquGateNodeOffset(-1),
468 ABulkEquBulkNodeOffset(-1),
469 ABulkEquDrainPrimeNodeOffset(-1),
470 ABulkEquSourcePrimeNodeOffset(-1),
472 ADrainPrimeEquDrainNodeOffset(-1),
473 ADrainPrimeEquGateNodeOffset(-1),
474 ADrainPrimeEquBulkNodeOffset(-1),
475 ADrainPrimeEquDrainPrimeNodeOffset(-1),
476 ADrainPrimeEquSourcePrimeNodeOffset(-1),
478 ASourcePrimeEquGateNodeOffset(-1),
479 ASourcePrimeEquSourceNodeOffset(-1),
480 ASourcePrimeEquBulkNodeOffset(-1),
481 ASourcePrimeEquDrainPrimeNodeOffset(-1),
482 ASourcePrimeEquSourcePrimeNodeOffset(-1),
487 f_DrainEquDrainNodePtr(0),
488 f_DrainEquDrainPrimeNodePtr(0),
490 f_GateEquGateNodePtr(0),
491 f_GateEquBulkNodePtr(0),
492 f_GateEquDrainPrimeNodePtr(0),
493 f_GateEquSourcePrimeNodePtr(0),
495 f_SourceEquSourceNodePtr(0),
496 f_SourceEquSourcePrimeNodePtr(0),
498 f_BulkEquGateNodePtr(0),
499 f_BulkEquBulkNodePtr(0),
500 f_BulkEquDrainPrimeNodePtr(0),
501 f_BulkEquSourcePrimeNodePtr(0),
503 f_DrainPrimeEquDrainNodePtr(0),
504 f_DrainPrimeEquGateNodePtr(0),
505 f_DrainPrimeEquBulkNodePtr(0),
506 f_DrainPrimeEquDrainPrimeNodePtr(0),
507 f_DrainPrimeEquSourcePrimeNodePtr(0),
509 f_SourcePrimeEquGateNodePtr(0),
510 f_SourcePrimeEquSourceNodePtr(0),
511 f_SourcePrimeEquBulkNodePtr(0),
512 f_SourcePrimeEquDrainPrimeNodePtr(0),
513 f_SourcePrimeEquSourcePrimeNodePtr(0),
516 q_DrainEquDrainNodePtr(0),
517 q_DrainEquDrainPrimeNodePtr(0),
519 q_GateEquGateNodePtr(0),
520 q_GateEquBulkNodePtr(0),
521 q_GateEquDrainPrimeNodePtr(0),
522 q_GateEquSourcePrimeNodePtr(0),
524 q_SourceEquSourceNodePtr(0),
525 q_SourceEquSourcePrimeNodePtr(0),
527 q_BulkEquGateNodePtr(0),
528 q_BulkEquBulkNodePtr(0),
529 q_BulkEquDrainPrimeNodePtr(0),
530 q_BulkEquSourcePrimeNodePtr(0),
532 q_DrainPrimeEquDrainNodePtr(0),
533 q_DrainPrimeEquGateNodePtr(0),
534 q_DrainPrimeEquBulkNodePtr(0),
535 q_DrainPrimeEquDrainPrimeNodePtr(0),
536 q_DrainPrimeEquSourcePrimeNodePtr(0),
538 q_SourcePrimeEquGateNodePtr(0),
539 q_SourcePrimeEquSourceNodePtr(0),
540 q_SourcePrimeEquBulkNodePtr(0),
541 q_SourcePrimeEquDrainPrimeNodePtr(0),
542 q_SourcePrimeEquSourcePrimeNodePtr(0),
724 UserError0(*
this) <<
"Effective channel length less than zero.";
735 #ifdef Xyce_DEBUG_DEVICE
738 Xyce::dout() <<
": name = " <<
getName() << std::endl;
769 const std::vector<int> & extLIDVecRef )
776 #ifdef Xyce_DEBUG_DEVICE
779 Xyce::dout() << section_divider << std::endl;
780 Xyce::dout() <<
" In Instance::register LIDs\n\n";
781 Xyce::dout() <<
" name = " <<
getName() << std::endl;
782 Xyce::dout() <<
" number of internal variables: " <<
numIntVars << std::endl;
783 Xyce::dout() <<
" number of external variables: " <<
numExtVars << std::endl;
812 #ifdef Xyce_DEBUG_DEVICE
815 Xyce::dout() <<
"\n variable local indices:\n";
816 Xyce::dout() <<
" li_Drain = " <<
li_Drain << std::endl;
817 Xyce::dout() <<
" li_DrainPrime = " <<
li_DrainPrime << std::endl;
818 Xyce::dout() <<
" li_Source = " <<
li_Source << std::endl;
819 Xyce::dout() <<
" li_SourcePrime = " <<
li_SourcePrime << std::endl;
820 Xyce::dout() <<
" li_Gate = " <<
li_Gate << std::endl;
821 Xyce::dout() <<
" li_Bulk = " <<
li_Bulk << std::endl;
823 Xyce::dout() << section_divider << std::endl;
868 if( loadLeadCurrent && storeNameMap.empty ())
891 #ifdef Xyce_DEBUG_DEVICE
894 Xyce::dout() << std::endl;
895 Xyce::dout() << section_divider << std::endl;
896 Xyce::dout() <<
" In Instance::registerStateLIDs\n\n";
897 Xyce::dout() <<
" name = " <<
getName() << std::endl;
898 Xyce::dout() <<
" Number of State LIDs: " <<
numStateVars << std::endl;
919 #ifdef Xyce_DEBUG_DEVICE
922 Xyce::dout() <<
" State local indices:" << std::endl;
923 Xyce::dout() << std::endl;
934 Xyce::dout() << std::endl;
935 Xyce::dout() << section_divider << std::endl;
1003 std::vector<int> map;
1004 std::vector< std::vector<int> > map2;
1071 #ifndef Xyce_NONPOINTER_MATRIX_LOAD
1158 double Qeqbs(0.0),Qeqbd(0.0),Qeqgb(0.0), Qeqgs(0.0), Qeqgd(0.0);
1167 Qeqbs = Dtype*(
qbs);
1168 Qeqbd = Dtype*(
qbd);
1171 Qeqgb = Dtype*(
qgb);
1172 Qeqgs = Dtype*(
qgs);
1173 Qeqgd = Dtype*(
qgd);
1176 coef = (Qeqgs+Qeqgd+Qeqgb);
1180 coef = Qeqbs + Qeqbd - Qeqgb;
1184 coef = -(Qeqbd + Qeqgd);
1188 coef = -(Qeqbs + Qeqgs);
1217 double gcgd, gcgs, gcgb, gcbs, gcbd;
1229 gcgd = 0.0; gcgs = 0.0; gcgb = 0.0; gcbs = 0.0; gcbd = 0.0;
1237 double coef_Jdxp4 = Dtype*(
1243 double coef_Jdxp5 = Dtype*(
1276 double ceqbs(0.0),ceqbd(0.0),ceqgb(0.0), ceqgs(0.0), ceqgd(0.0);
1283 ceqbs = Dtype*(
cbs);
1284 ceqbd = Dtype*(
cbd);
1299 coef = (ceqgs+ceqgd+ceqgb);
1310 coef = ceqbs + ceqbd - ceqgb;
1330 double coef_Jdxp4 = Dtype*(
1335 double coef_Jdxp5 = Dtype*(
1342 double coef_Jdxp6 = Dtype*(
1430 (+gcbs+gcbd+gcgb)*numberParallel;
1440 (+gcbd+gcgd)*numberParallel;
1447 (+gcbs+gcgs)*numberParallel;
1479 (
gbs+
gbd)*numberParallel;
1518 bool bsuccess =
true;
1617 if ((*flagSolVectorPtr)[
li_Drain] == 0 || (*flagSolVectorPtr)[
li_Gate] == 0 ||
1849 static double sig1[4] = {1.0, -1.0, 1.0, -1.0};
1850 static double sig2[4] = {1.0, 1.0,-1.0, -1.0};
1854 double a4[4],b4[4],x4[8],poly4[8];
1975 double lvbs =
mode==1?vbs:
vbd;
1978 double phiMinVbs =
tPhi - lvbs;
1989 sarg = sqrt(phiMinVbs);
1991 d2sdb2 = 0.5*dsrgdb/phiMinVbs;
1997 sarg = sphi/(1.0+0.5*lvbs/
tPhi);
1999 dsrgdb = -0.5*sarg*tmp;
2000 d2sdb2 = -dsrgdb*tmp;
2002 if ((lvds-lvbs) >= 0)
2004 barg = sqrt(phiMinVbs+lvds);
2006 d2bdb2 = 0.5*dbrgdb/(phiMinVbs+lvds);
2010 barg = sphi/(1.0+0.5*(lvbs-lvds)/
tPhi);
2012 dbrgdb = -0.5*barg*tmp;
2013 d2bdb2 = -dbrgdb*tmp;
2040 argxs = 1.0+xws*tmp;
2041 argxd = 1.0+xwd*tmp;
2045 argss = tmp * (args-1.0);
2046 argsd = tmp * (argd-1.0);
2054 dbargs = tmp*dbxws/args;
2055 dbargd = tmp*dbxwd/argd;
2056 dasdb2 = -
model_.
xd*( d2sdb2+dsrgdb*dsrgdb*
2058 (EffectiveLength*args);
2059 daddb2 = -
model_.
xd*( d2bdb2+dbrgdb*dbrgdb*
2061 (EffectiveLength*argd);
2068 dgdvds = -
model_.
gamma*0.5*ddxwd/(EffectiveLength*argd);
2079 Von = vbin+gamasd*sarg;
2086 bool line1050bool=
false;
2091 cdonco = -(gamasd*dsrgdb+dgddvb*sarg)+factor;
2092 xn = 1.0+cfs/
OxideCap*
w*EffectiveLength+cdonco;
2119 sarg3 = sarg*sarg*sarg;
2124 body = barg*barg*barg-sarg3;
2125 gdbdv = 2.0*gammad*(barg*barg*dbrgdb-sarg*sarg*dsrgdb);
2126 dodvbs = -factor+dgdvbs*sarg+gammad*dsrgdb;
2132 dxndvb = 2.0*dgdvbs*dsrgdb+gammad*d2sdb2+dgddb2*sarg;
2133 dodvbs = dodvbs+
vt*dxndvb;
2134 dxndvd = dgdvds*dsrgdb;
2135 dodvds = dgdvds*sarg+
vt*dxndvd;
2165 gammad = gamasd/eta;
2173 gammd2 = gammad*gammad;
2174 argv = (vgsx-vbin)/eta+phiMinVbs;
2183 arg = sqrt(1.0+4.0*argv/gammd2);
2184 Vdsat = (vgsx-vbin)/eta+gammd2*(1.0-arg)/2.0;
2186 dsdvgs = (1.0-1.0/arg)/eta;
2187 dsdvbs = (gammad*(1.0-arg)+2.0*argv/(gammad*arg))/
2188 eta*dgdvbs+1.0/arg+factor*dsdvgs;
2193 Vdsat = (vgsx-vbin)/eta;
2204 gammd2 = gammad*gammad;
2205 v1 = (vgsx-vbin)/eta+phiMinVbs;
2210 c1 = -2.0*gammad*xv;
2211 d1 = 2.0*v1*(v2+xv)-v2*v2-4.0/3.0*gammad*sarg3;
2214 c = -d1*(a1*a1-4.0*b1)-c1*c1;
2216 s = 2.0*a*a*a/27.0-a*b/3.0+c;
2224 ro = sqrt(s2/4.0+p0);
2227 fi = atan(-2.0*p2/s);
2228 y3 = 2.0*ro*cos(fi/3.0)-a/3.0;
2233 p3 = exp(log(fabs(p3))/3.0);
2235 p4 = exp(log(fabs(p4))/3.0);
2239 a3 = sqrt(a1*a1/4.0-b1+y3);
2240 b3 = sqrt(y3*y3/4.0-d1);
2243 a4[i-1] = a1/2.0+sig1[i-1]*a3;
2244 b4[i-1] = y3/2.0+sig2[i-1]*b3;
2245 delta4 = a4[i-1]*a4[i-1]/4.0-b4[i-1];
2246 if (delta4 < 0)
continue;
2249 x4[iknt-1] = -a4[i-1]/2.0+tmp;
2251 x4[iknt-1] = -a4[i-1]/2.0-tmp;
2254 for(j = 1;j<=iknt;j++)
2256 if (x4[j-1] <= 0)
continue;
2258 poly4[j-1] = x4[j-1]*x4[j-1]*x4[j-1]*x4[j-1]+a1*x4[j-1]*
2260 poly4[j-1] = poly4[j-1]+b1*x4[j-1]*x4[j-1]+c1*x4[j-1]+d1;
2261 if (fabs(poly4[j-1]) > 1.0e-6)
continue;
2267 if (x4[j-1] > xvalid)
continue;
2272 Vdsat = xvalid*xvalid-phiMinVbs;
2279 bool line610bool=
false;
2288 if ((lvbs-Vdsat) <= 0)
2290 bsarg = sqrt(Vdsat+phiMinVbs);
2291 dbsrdb = -0.5/bsarg;
2295 bsarg = sphi/(1.0+0.5*(lvbs-Vdsat)/
tPhi);
2296 dbsrdb = -0.5*bsarg*bsarg/sphi3;
2298 bodys = bsarg*bsarg*bsarg-sarg3;
2299 gdbdvs = 2.0*gammad*(bsarg*bsarg*dbsrdb-sarg*sarg*dsrgdb);
2308 argv = (lvds-Vdsat)/4.0;
2309 sargv = sqrt(1.0+argv*argv);
2310 arg = sqrt(argv+sargv);
2311 xlfact =
model_.
xd/(EffectiveLength*lvds);
2312 xlamda = xlfact*arg;
2313 dldsat = lvds*xlamda/(8.0*sargv);
2318 argv = (vgsx-vbin)/eta-Vdsat;
2321 vqchan = argv-gammad*bsarg;
2322 dqdsat = -1.0+gammad*dbsrdb;
2324 dfunds = vl*dqdsat-ueff*vqchan;
2325 dfundg = (vl-ueff*Vdsat)/eta;
2326 dfundb = -vl*(1.0+dqdsat-factor/eta)+ueff*
2327 (gdbdvs-dgdvbs*bodys/1.5)/eta;
2328 dsdvgs = -dfundg/dfunds;
2329 dsdvbs = -dfundb/dfunds;
2339 xls = sqrt(xlv*xlv+argv);
2340 dldsat = xdv/(2.0*xls);
2341 xlfact = xdv/(EffectiveLength*lvds);
2342 xlamda = xlfact*(xls-xlv);
2349 dldvgs = dldsat*dsdvgs;
2350 dldvds = -xlamda+dldsat;
2351 dldvbs = dldsat*dsdvbs;
2356 bool donevalbool=
false;
2361 xld = EffectiveLength-xwb;
2362 clfact = 1.0-xlamda*lvds;
2363 dldvds = -xlamda-dldvds;
2364 xleff = EffectiveLength*clfact;
2369 xleff = xwb/(1.0+(deltal-xld)/xwb);
2371 dfact = xleff*xleff/(xwb*xwb);
2372 dldvgs = dfact*dldvgs;
2373 dldvds = dfact*dldvds;
2374 dldvbs = dfact*dldvbs;
2377 beta1 = Beta*ufact/clfact;
2383 if (lvds <= 1.0e-10)
2393 gds = beta1*(Von-vbin-gammad*sarg)*exp(argg*(lvgs-Von));
2398 gds = beta1*(lvgs-vbin-gammad*sarg);
2407 if ( !(lvgs > Von) )
2423 if (!donevalbool && !line1050bool)
2434 cdson = beta1*((Von-vbin-eta*vdson*0.5)*vdson-gammad*body/1.5);
2435 didvds = beta1*(Von-vbin-eta*vdson-gammad*barg);
2436 gdson = -cdson*dldvds/clfact-beta1*dgdvds*body/1.5;
2440 gdson = gdson+didvds;
2443 gbson = -cdson*dldvbs/clfact+beta1*
2444 (dodvbs*vdson+factor*vdson-dgdvbs*body/1.5-gdbdv);
2447 gbson = gbson+didvds*dsdvbs;
2449 expg = exp(argg*(lvgs-Von));
2455 gm = gmw+didvds*dsdvgs*expg;
2457 tmp = gmw*(lvgs-Von)/xn;
2458 gds = gdson*expg-
gm*dodvds-tmp*dxndvd;
2459 gmbs = gbson*expg-
gm*dodvbs-tmp*dxndvb;
2465 if (!donevalbool && !line1050bool)
2470 cdrain = beta1*((lvgs-vbin-eta*lvds/2.0)*lvds-gammad*body/1.5);
2471 arg =
cdrain*(dudvgs/ufact-dldvgs/clfact);
2472 gm = arg+beta1*lvds;
2473 arg =
cdrain*(dudvds/ufact-dldvds/clfact);
2474 gds = arg+beta1*(lvgs-vbin-eta*
2475 lvds-gammad*barg-dgdvds*body/1.5);
2476 arg =
cdrain*(dudvbs/ufact-dldvbs/clfact);
2477 gmbs = arg-beta1*(gdbdv+dgdvbs*body/1.5-factor*lvds);
2482 cdrain = beta1*((lvgs-vbin-eta*
2483 Vdsat/2.0)*Vdsat-gammad*bodys/1.5);
2484 arg =
cdrain*(dudvgs/ufact-dldvgs/clfact);
2485 gm = arg+beta1*Vdsat+beta1*(lvgs-
2486 vbin-eta*Vdsat-gammad*bsarg)*dsdvgs;
2487 gds = -
cdrain*dldvds/clfact-beta1*dgdvds*bodys/1.5;
2488 arg =
cdrain*(dudvbs/ufact-dldvbs/clfact);
2489 gmbs = arg-beta1*(gdbdvs+dgdvbs*bodys/1.5-factor*
2490 Vdsat)+beta1* (lvgs-vbin-eta*Vdsat-gammad*bsarg)*dsdvbs;
2558 sarg = sargsw = 1/sqrt(arg);
2577 sargsw = 1/sqrt(arg);
2617 sarg = sargsw = 1/sqrt(arg);
2631 sargsw = 1/sqrt(arg);
2878 double ratio,ratio4;
2886 double gmanew,gmaold;
2891 #ifdef Xyce_DEBUG_DEVICE
2894 Xyce::dout() << subsection_divider << std::endl;
2895 Xyce::dout() <<
" Instance::Begin of updateTemperature. \n";
2896 Xyce::dout() <<
" name = " <<
getName() << std::endl;
2897 Xyce::dout() << std::endl;
2902 if (temp_tmp != -999.0)
temp = temp_tmp;
2912 #ifdef Xyce_DEBUG_DEVICE
2915 Xyce::dout() <<
"Temperature = "<<
temp << std::endl;
2916 Xyce::dout() <<
"tnom = " << tnom << std::endl;
2917 Xyce::dout() <<
"ratio = " << ratio << std::endl;
2927 pbfact = -2*
vt *(1.5*log(fact2)+
CONSTQ*arg);
2929 #ifdef Xyce_DEBUG_DEVICE
2932 Xyce::dout() <<
"vt = " <<
vt << std::endl;
2933 Xyce::dout() <<
"ratio = " << ratio << std::endl;
2934 Xyce::dout() <<
"fact2 = " << fact2 << std::endl;
2935 Xyce::dout() <<
"kt = " << kt << std::endl;
2936 Xyce::dout() <<
"egfet = " << egfet << std::endl;
2937 Xyce::dout() <<
"arg = " << arg << std::endl;
2938 Xyce::dout() <<
"pbfact = " << pbfact << std::endl;
2951 ratio4 = ratio * sqrt(ratio);
2955 tPhi = fact2 * phio + pbfact;
3097 bool bsuccess =
true;
3104 double vgs1, vgd1, vbs1,vgb1, vds1;
3193 egfet1 = 1.16-(7.02e-4*tnom*
tnom)/(tnom+1108);
3234 wkfng = 3.25 + .5 *
egfet1 - fermig;
3236 wkfngs = wkfng - (3.25 + .5 *
egfet1 +fermis);
3239 gamma = sqrt(2 * 11.70 * 8.854214871e-12 *
3290 std::vector<Instance*>::iterator iter;
3294 for (iter=first; iter!=last; ++iter)
3296 (*iter)->processParams();
3314 :
DeviceModel(MB, configuration.getModelParameters(), factory_block),
3316 tnom(getDeviceOptions().tnom),
3318 jctSatCurDensity(0.0),
3320 drainResistance(0.0),
3321 sourceResistance(0.0),
3322 sheetResistance(0.0),
3323 transconductance(0.0),
3324 gateSourceOverlapCapFactor(0.0),
3325 gateDrainOverlapCapFactor(0.0),
3326 gateBulkOverlapCapFactor(0.0),
3327 oxideCapFactor(0.0),
3332 sideWallCapFactor(0.0),
3333 bulkJctPotential(0.0),
3334 bulkJctBotGradingCoeff(0.0),
3335 bulkJctSideGradingCoeff(0.0),
3336 fwdCapDepCoeff(0.0),
3340 substrateDoping(0.0),
3342 surfaceStateDensity(0.0),
3343 oxideThickness(0.0),
3344 surfaceMobility(0.0),
3349 bulkCapFactorGiven(0),
3350 sideWallCapFactorGiven(0),
3359 fastSurfaceStateDensity(0.0),
3372 else if (
getType() ==
"PMOS") {
3407 UserError0(*
this) <<
"Both uo and u0 have been specified and, which is not allowed";
3409 UserWarning0(*
this) <<
"Surface mobility has been specified as u0 instead of uo, uo is the preferred syntax";
3427 std::vector<Instance*>::iterator iter;
3431 for (iter=first; iter!=last; ++iter)
3448 std::vector<Instance*>::const_iterator iter;
3454 os <<
" name model name Parameters" << std::endl;
3455 for (i=0, iter=first; iter!=last; ++iter, ++i)
3457 os <<
" " << i <<
": " << (*iter)->getName() <<
"\t";
3482 for (std::vector<Instance *>::const_iterator it = instanceContainer.begin(); it != instanceContainer.end(); ++it)
3501 bool bsuccess =
true;
3510 double vgs1(0.0), vgd1(0.0), vbs1(0.0),vgb1(0.0), vds1(0.0);
3513 bsuccess = bsuccess && btmp;
3586 bool Master::loadDAEVectors (
double * solVec,
double * fVec,
double *qVec,
double * bVec,
double * storeLeadF,
double * storeLeadQ)
3595 double ceqbs(0.0),ceqbd(0.0),ceqgb(0.0), ceqgs(0.0), ceqgd(0.0);
3596 double Qeqbs(0.0),Qeqbd(0.0),Qeqgb(0.0), Qeqgs(0.0), Qeqgd(0.0);
3600 ceqbs = Dtype*(mi.
cbs);
3601 ceqbd = Dtype*(mi.
cbd);
3614 coef = (ceqgs+ceqgd+ceqgb);
3624 coef = ceqbs + ceqbd - ceqgb;
3637 Qeqbs = Dtype*(mi.
qbs);
3638 Qeqbd = Dtype*(mi.
qbd);
3641 Qeqgb = Dtype*(mi.
qgb);
3642 Qeqgs = Dtype*(mi.
qgs);
3643 Qeqgd = Dtype*(mi.
qgd);
3645 coef = (Qeqgs+Qeqgd+Qeqgb);
3649 coef = Qeqbs + Qeqbd - Qeqgb;
3653 coef = -(Qeqbd + Qeqgd);
3657 coef = -(Qeqbs + Qeqgs);
3665 double coef_Jdxp4 = Dtype*(
3669 double coef_Jdxp5 = Dtype*(
3675 double coef_Jdxp6 = Dtype*(
3691 double gcgd(0.0), gcgs(0.0), gcgb(0.0), gcbs(0.0), gcbd(0.0);
3703 gcgd = 0.0; gcgs = 0.0; gcgb = 0.0; gcbs = 0.0; gcbd = 0.0;
3710 double coef_Jdxp4 = Dtype*(
3715 double coef_Jdxp5 = Dtype*(
3720 double coef_Jdxp6 = Dtype*
3762 #ifndef Xyce_NONPOINTER_MATRIX_LOAD
3911 for (InstanceVector::const_iterator it = instanceContainer.begin(); it != instanceContainer.end(); ++it)
4049 .registerDevice(
"m", 2)
4050 .registerModelType(
"pmos", 2)
4051 .registerModelType(
"nmos", 2);