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;
846 tmpstr =
getName()+
"_drainprime";
853 tmpstr =
getName()+
"_sourceprime";
874 if( loadLeadCurrent && storeNameMap.empty ())
878 std::string modName(getName());
879 spiceInternalName(modName);
881 tmpstr = modName+
":DEV_ID";
882 storeNameMap[ li_store_dev_id ] = tmpstr;
883 tmpstr = modName+
":DEV_IG";
884 storeNameMap[ li_store_dev_ig ] = tmpstr;
885 tmpstr = modName+
":DEV_IS";
886 storeNameMap[ li_store_dev_is ] = tmpstr;
887 tmpstr = modName+
":DEV_IB";
888 storeNameMap[ li_store_dev_ib ] = tmpstr;
906 #ifdef Xyce_DEBUG_DEVICE
909 Xyce::dout() << std::endl;
910 Xyce::dout() << section_divider << std::endl;
911 Xyce::dout() <<
" In Instance::registerStateLIDs\n\n";
912 Xyce::dout() <<
" name = " <<
getName() << std::endl;
913 Xyce::dout() <<
" Number of State LIDs: " <<
numStateVars << std::endl;
934 #ifdef Xyce_DEBUG_DEVICE
937 Xyce::dout() <<
" State local indices:" << std::endl;
938 Xyce::dout() << std::endl;
949 Xyce::dout() << std::endl;
950 Xyce::dout() << section_divider << std::endl;
1018 std::vector<int> map;
1019 std::vector< std::vector<int> > map2;
1086 #ifndef Xyce_NONPOINTER_MATRIX_LOAD
1173 double Qeqbs(0.0),Qeqbd(0.0),Qeqgb(0.0), Qeqgs(0.0), Qeqgd(0.0);
1182 Qeqbs = Dtype*(
qbs);
1183 Qeqbd = Dtype*(
qbd);
1186 Qeqgb = Dtype*(
qgb);
1187 Qeqgs = Dtype*(
qgs);
1188 Qeqgd = Dtype*(
qgd);
1191 coef = (Qeqgs+Qeqgd+Qeqgb);
1195 coef = Qeqbs + Qeqbd - Qeqgb;
1199 coef = -(Qeqbd + Qeqgd);
1203 coef = -(Qeqbs + Qeqgs);
1232 double gcgd, gcgs, gcgb, gcbs, gcbd;
1244 gcgd = 0.0; gcgs = 0.0; gcgb = 0.0; gcbs = 0.0; gcbd = 0.0;
1252 double coef_Jdxp4 = Dtype*(
1258 double coef_Jdxp5 = Dtype*(
1291 double ceqbs(0.0),ceqbd(0.0),ceqgb(0.0), ceqgs(0.0), ceqgd(0.0);
1298 ceqbs = Dtype*(
cbs);
1299 ceqbd = Dtype*(
cbd);
1314 coef = (ceqgs+ceqgd+ceqgb);
1325 coef = ceqbs + ceqbd - ceqgb;
1345 double coef_Jdxp4 = Dtype*(
1350 double coef_Jdxp5 = Dtype*(
1357 double coef_Jdxp6 = Dtype*(
1445 (+gcbs+gcbd+gcgb)*numberParallel;
1455 (+gcbd+gcgd)*numberParallel;
1462 (+gcbs+gcgs)*numberParallel;
1494 (
gbs+
gbd)*numberParallel;
1533 bool bsuccess =
true;
1632 if ((*flagSolVectorPtr)[
li_Drain] == 0 || (*flagSolVectorPtr)[
li_Gate] == 0 ||
1864 static double sig1[4] = {1.0, -1.0, 1.0, -1.0};
1865 static double sig2[4] = {1.0, 1.0,-1.0, -1.0};
1869 double a4[4],b4[4],x4[8],poly4[8];
1990 double lvbs =
mode==1?vbs:
vbd;
1993 double phiMinVbs =
tPhi - lvbs;
2004 sarg = sqrt(phiMinVbs);
2006 d2sdb2 = 0.5*dsrgdb/phiMinVbs;
2012 sarg = sphi/(1.0+0.5*lvbs/
tPhi);
2014 dsrgdb = -0.5*sarg*tmp;
2015 d2sdb2 = -dsrgdb*tmp;
2017 if ((lvds-lvbs) >= 0)
2019 barg = sqrt(phiMinVbs+lvds);
2021 d2bdb2 = 0.5*dbrgdb/(phiMinVbs+lvds);
2025 barg = sphi/(1.0+0.5*(lvbs-lvds)/
tPhi);
2027 dbrgdb = -0.5*barg*tmp;
2028 d2bdb2 = -dbrgdb*tmp;
2055 argxs = 1.0+xws*tmp;
2056 argxd = 1.0+xwd*tmp;
2060 argss = tmp * (args-1.0);
2061 argsd = tmp * (argd-1.0);
2069 dbargs = tmp*dbxws/args;
2070 dbargd = tmp*dbxwd/argd;
2071 dasdb2 = -
model_.
xd*( d2sdb2+dsrgdb*dsrgdb*
2073 (EffectiveLength*args);
2074 daddb2 = -
model_.
xd*( d2bdb2+dbrgdb*dbrgdb*
2076 (EffectiveLength*argd);
2083 dgdvds = -
model_.
gamma*0.5*ddxwd/(EffectiveLength*argd);
2094 Von = vbin+gamasd*sarg;
2101 bool line1050bool=
false;
2106 cdonco = -(gamasd*dsrgdb+dgddvb*sarg)+factor;
2107 xn = 1.0+cfs/
OxideCap*
w*EffectiveLength+cdonco;
2134 sarg3 = sarg*sarg*sarg;
2139 body = barg*barg*barg-sarg3;
2140 gdbdv = 2.0*gammad*(barg*barg*dbrgdb-sarg*sarg*dsrgdb);
2141 dodvbs = -factor+dgdvbs*sarg+gammad*dsrgdb;
2147 dxndvb = 2.0*dgdvbs*dsrgdb+gammad*d2sdb2+dgddb2*sarg;
2148 dodvbs = dodvbs+
vt*dxndvb;
2149 dxndvd = dgdvds*dsrgdb;
2150 dodvds = dgdvds*sarg+
vt*dxndvd;
2180 gammad = gamasd/eta;
2184 vgsx = Xycemax(lvgs,Von);
2188 gammd2 = gammad*gammad;
2189 argv = (vgsx-vbin)/eta+phiMinVbs;
2198 arg = sqrt(1.0+4.0*argv/gammd2);
2199 Vdsat = (vgsx-vbin)/eta+gammd2*(1.0-arg)/2.0;
2200 Vdsat = Xycemax(Vdsat,0.0);
2201 dsdvgs = (1.0-1.0/arg)/eta;
2202 dsdvbs = (gammad*(1.0-arg)+2.0*argv/(gammad*arg))/
2203 eta*dgdvbs+1.0/arg+factor*dsdvgs;
2208 Vdsat = (vgsx-vbin)/eta;
2209 Vdsat = Xycemax(Vdsat,0.0);
2219 gammd2 = gammad*gammad;
2220 v1 = (vgsx-vbin)/eta+phiMinVbs;
2225 c1 = -2.0*gammad*xv;
2226 d1 = 2.0*v1*(v2+xv)-v2*v2-4.0/3.0*gammad*sarg3;
2229 c = -d1*(a1*a1-4.0*b1)-c1*c1;
2231 s = 2.0*a*a*a/27.0-a*b/3.0+c;
2239 ro = sqrt(s2/4.0+p0);
2242 fi = atan(-2.0*p2/s);
2243 y3 = 2.0*ro*cos(fi/3.0)-a/3.0;
2248 p3 = exp(log(fabs(p3))/3.0);
2250 p4 = exp(log(fabs(p4))/3.0);
2254 a3 = sqrt(a1*a1/4.0-b1+y3);
2255 b3 = sqrt(y3*y3/4.0-d1);
2258 a4[i-1] = a1/2.0+sig1[i-1]*a3;
2259 b4[i-1] = y3/2.0+sig2[i-1]*b3;
2260 delta4 = a4[i-1]*a4[i-1]/4.0-b4[i-1];
2261 if (delta4 < 0)
continue;
2264 x4[iknt-1] = -a4[i-1]/2.0+tmp;
2266 x4[iknt-1] = -a4[i-1]/2.0-tmp;
2269 for(j = 1;j<=iknt;j++)
2271 if (x4[j-1] <= 0)
continue;
2273 poly4[j-1] = x4[j-1]*x4[j-1]*x4[j-1]*x4[j-1]+a1*x4[j-1]*
2275 poly4[j-1] = poly4[j-1]+b1*x4[j-1]*x4[j-1]+c1*x4[j-1]+d1;
2276 if (fabs(poly4[j-1]) > 1.0e-6)
continue;
2282 if (x4[j-1] > xvalid)
continue;
2287 Vdsat = xvalid*xvalid-phiMinVbs;
2294 bool line610bool=
false;
2303 if ((lvbs-Vdsat) <= 0)
2305 bsarg = sqrt(Vdsat+phiMinVbs);
2306 dbsrdb = -0.5/bsarg;
2310 bsarg = sphi/(1.0+0.5*(lvbs-Vdsat)/
tPhi);
2311 dbsrdb = -0.5*bsarg*bsarg/sphi3;
2313 bodys = bsarg*bsarg*bsarg-sarg3;
2314 gdbdvs = 2.0*gammad*(bsarg*bsarg*dbsrdb-sarg*sarg*dsrgdb);
2323 argv = (lvds-Vdsat)/4.0;
2324 sargv = sqrt(1.0+argv*argv);
2325 arg = sqrt(argv+sargv);
2326 xlfact =
model_.
xd/(EffectiveLength*lvds);
2327 xlamda = xlfact*arg;
2328 dldsat = lvds*xlamda/(8.0*sargv);
2333 argv = (vgsx-vbin)/eta-Vdsat;
2336 vqchan = argv-gammad*bsarg;
2337 dqdsat = -1.0+gammad*dbsrdb;
2339 dfunds = vl*dqdsat-ueff*vqchan;
2340 dfundg = (vl-ueff*Vdsat)/eta;
2341 dfundb = -vl*(1.0+dqdsat-factor/eta)+ueff*
2342 (gdbdvs-dgdvbs*bodys/1.5)/eta;
2343 dsdvgs = -dfundg/dfunds;
2344 dsdvbs = -dfundb/dfunds;
2353 argv = Xycemax(argv,0.0);
2354 xls = sqrt(xlv*xlv+argv);
2355 dldsat = xdv/(2.0*xls);
2356 xlfact = xdv/(EffectiveLength*lvds);
2357 xlamda = xlfact*(xls-xlv);
2364 dldvgs = dldsat*dsdvgs;
2365 dldvds = -xlamda+dldsat;
2366 dldvbs = dldsat*dsdvbs;
2371 bool donevalbool=
false;
2376 xld = EffectiveLength-xwb;
2377 clfact = 1.0-xlamda*lvds;
2378 dldvds = -xlamda-dldvds;
2379 xleff = EffectiveLength*clfact;
2384 xleff = xwb/(1.0+(deltal-xld)/xwb);
2386 dfact = xleff*xleff/(xwb*xwb);
2387 dldvgs = dfact*dldvgs;
2388 dldvds = dfact*dldvds;
2389 dldvbs = dfact*dldvbs;
2392 beta1 = Beta*ufact/clfact;
2398 if (lvds <= 1.0e-10)
2408 gds = beta1*(Von-vbin-gammad*sarg)*exp(argg*(lvgs-Von));
2413 gds = beta1*(lvgs-vbin-gammad*sarg);
2422 if ( !(lvgs > Von) )
2438 if (!donevalbool && !line1050bool)
2440 vdson = Xycemin(Vdsat,lvds);
2449 cdson = beta1*((Von-vbin-eta*vdson*0.5)*vdson-gammad*body/1.5);
2450 didvds = beta1*(Von-vbin-eta*vdson-gammad*barg);
2451 gdson = -cdson*dldvds/clfact-beta1*dgdvds*body/1.5;
2455 gdson = gdson+didvds;
2458 gbson = -cdson*dldvbs/clfact+beta1*
2459 (dodvbs*vdson+factor*vdson-dgdvbs*body/1.5-gdbdv);
2462 gbson = gbson+didvds*dsdvbs;
2464 expg = exp(argg*(lvgs-Von));
2470 gm = gmw+didvds*dsdvgs*expg;
2472 tmp = gmw*(lvgs-Von)/xn;
2473 gds = gdson*expg-
gm*dodvds-tmp*dxndvd;
2474 gmbs = gbson*expg-
gm*dodvbs-tmp*dxndvb;
2480 if (!donevalbool && !line1050bool)
2485 cdrain = beta1*((lvgs-vbin-eta*lvds/2.0)*lvds-gammad*body/1.5);
2486 arg =
cdrain*(dudvgs/ufact-dldvgs/clfact);
2487 gm = arg+beta1*lvds;
2488 arg =
cdrain*(dudvds/ufact-dldvds/clfact);
2489 gds = arg+beta1*(lvgs-vbin-eta*
2490 lvds-gammad*barg-dgdvds*body/1.5);
2491 arg =
cdrain*(dudvbs/ufact-dldvbs/clfact);
2492 gmbs = arg-beta1*(gdbdv+dgdvbs*body/1.5-factor*lvds);
2497 cdrain = beta1*((lvgs-vbin-eta*
2498 Vdsat/2.0)*Vdsat-gammad*bodys/1.5);
2499 arg =
cdrain*(dudvgs/ufact-dldvgs/clfact);
2500 gm = arg+beta1*Vdsat+beta1*(lvgs-
2501 vbin-eta*Vdsat-gammad*bsarg)*dsdvgs;
2502 gds = -
cdrain*dldvds/clfact-beta1*dgdvds*bodys/1.5;
2503 arg =
cdrain*(dudvbs/ufact-dldvbs/clfact);
2504 gmbs = arg-beta1*(gdbdvs+dgdvbs*bodys/1.5-factor*
2505 Vdsat)+beta1* (lvgs-vbin-eta*Vdsat-gammad*bsarg)*dsdvbs;
2573 sarg = sargsw = 1/sqrt(arg);
2592 sargsw = 1/sqrt(arg);
2632 sarg = sargsw = 1/sqrt(arg);
2646 sargsw = 1/sqrt(arg);
2893 double ratio,ratio4;
2901 double gmanew,gmaold;
2906 #ifdef Xyce_DEBUG_DEVICE
2909 Xyce::dout() << subsection_divider << std::endl;
2910 Xyce::dout() <<
" Instance::Begin of updateTemperature. \n";
2911 Xyce::dout() <<
" name = " <<
getName() << std::endl;
2912 Xyce::dout() << std::endl;
2917 if (temp_tmp != -999.0)
temp = temp_tmp;
2927 #ifdef Xyce_DEBUG_DEVICE
2930 Xyce::dout() <<
"Temperature = "<<
temp << std::endl;
2931 Xyce::dout() <<
"tnom = " << tnom << std::endl;
2932 Xyce::dout() <<
"ratio = " << ratio << std::endl;
2942 pbfact = -2*
vt *(1.5*log(fact2)+
CONSTQ*arg);
2944 #ifdef Xyce_DEBUG_DEVICE
2947 Xyce::dout() <<
"vt = " <<
vt << std::endl;
2948 Xyce::dout() <<
"ratio = " << ratio << std::endl;
2949 Xyce::dout() <<
"fact2 = " << fact2 << std::endl;
2950 Xyce::dout() <<
"kt = " << kt << std::endl;
2951 Xyce::dout() <<
"egfet = " << egfet << std::endl;
2952 Xyce::dout() <<
"arg = " << arg << std::endl;
2953 Xyce::dout() <<
"pbfact = " << pbfact << std::endl;
2966 ratio4 = ratio * sqrt(ratio);
2970 tPhi = fact2 * phio + pbfact;
3112 bool bsuccess =
true;
3119 double vgs1, vgd1, vbs1,vgb1, vds1;
3208 egfet1 = 1.16-(7.02e-4*tnom*
tnom)/(tnom+1108);
3249 wkfng = 3.25 + .5 *
egfet1 - fermig;
3251 wkfngs = wkfng - (3.25 + .5 *
egfet1 +fermis);
3254 gamma = sqrt(2 * 11.70 * 8.854214871e-12 *
3322 wkfng = 3.25 + .5 *
egfet1 - fermig;
3324 wkfngs = wkfng - (3.25 + .5 *
egfet1 +fermis);
3327 gamma = sqrt(2 * 11.70 * 8.854214871e-12 *
3362 std::vector<Instance*>::iterator iter;
3366 for (iter=first; iter!=last; ++iter)
3368 (*iter)->processParams();
3386 :
DeviceModel(MB, configuration.getModelParameters(), factory_block),
3388 tnom(getDeviceOptions().tnom),
3390 jctSatCurDensity(0.0),
3392 drainResistance(0.0),
3393 sourceResistance(0.0),
3394 sheetResistance(0.0),
3395 transconductance(0.0),
3396 gateSourceOverlapCapFactor(0.0),
3397 gateDrainOverlapCapFactor(0.0),
3398 gateBulkOverlapCapFactor(0.0),
3399 oxideCapFactor(0.0),
3404 sideWallCapFactor(0.0),
3405 bulkJctPotential(0.0),
3406 bulkJctBotGradingCoeff(0.0),
3407 bulkJctSideGradingCoeff(0.0),
3408 fwdCapDepCoeff(0.0),
3412 substrateDoping(0.0),
3414 surfaceStateDensity(0.0),
3415 oxideThickness(0.0),
3416 surfaceMobility(0.0),
3421 bulkCapFactorGiven(0),
3422 sideWallCapFactorGiven(0),
3431 fastSurfaceStateDensity(0.0),
3444 else if (
getType() ==
"PMOS") {
3479 UserError0(*
this) <<
"You have specified both uo and u0, which is not allowed.";
3481 UserWarning0(*
this) <<
"You have specified the surface mobility as u0 instead of uo. This is supported, but ill-advised.";
3499 std::vector<Instance*>::iterator iter;
3503 for (iter=first; iter!=last; ++iter)
3520 std::vector<Instance*>::const_iterator iter;
3526 os <<
" name model name Parameters" << std::endl;
3527 for (i=0, iter=first; iter!=last; ++iter, ++i)
3529 os <<
" " << i <<
": " << (*iter)->getName() <<
"\t";
3554 for (std::vector<Instance *>::const_iterator it = instanceContainer.begin(); it != instanceContainer.end(); ++it)
3573 bool bsuccess =
true;
3582 double vgs1(0.0), vgd1(0.0), vbs1(0.0),vgb1(0.0), vds1(0.0);
3585 bsuccess = bsuccess && btmp;
3667 double ceqbs(0.0),ceqbd(0.0),ceqgb(0.0), ceqgs(0.0), ceqgd(0.0);
3668 double Qeqbs(0.0),Qeqbd(0.0),Qeqgb(0.0), Qeqgs(0.0), Qeqgd(0.0);
3672 ceqbs = Dtype*(mi.
cbs);
3673 ceqbd = Dtype*(mi.
cbd);
3686 coef = (ceqgs+ceqgd+ceqgb);
3696 coef = ceqbs + ceqbd - ceqgb;
3709 Qeqbs = Dtype*(mi.
qbs);
3710 Qeqbd = Dtype*(mi.
qbd);
3713 Qeqgb = Dtype*(mi.
qgb);
3714 Qeqgs = Dtype*(mi.
qgs);
3715 Qeqgd = Dtype*(mi.
qgd);
3717 coef = (Qeqgs+Qeqgd+Qeqgb);
3721 coef = Qeqbs + Qeqbd - Qeqgb;
3725 coef = -(Qeqbd + Qeqgd);
3729 coef = -(Qeqbs + Qeqgs);
3737 double coef_Jdxp4 = Dtype*(
3741 double coef_Jdxp5 = Dtype*(
3747 double coef_Jdxp6 = Dtype*(
3763 double gcgd(0.0), gcgs(0.0), gcgb(0.0), gcbs(0.0), gcbd(0.0);
3775 gcgd = 0.0; gcgs = 0.0; gcgb = 0.0; gcbs = 0.0; gcbd = 0.0;
3782 double coef_Jdxp4 = Dtype*(
3787 double coef_Jdxp5 = Dtype*(
3792 double coef_Jdxp6 = Dtype*
3834 #ifndef Xyce_NONPOINTER_MATRIX_LOAD
3983 for (InstanceVector::const_iterator it = instanceContainer.begin(); it != instanceContainer.end(); ++it)
4121 .registerDevice(
"m", 2)
4122 .registerModelType(
"pmos", 2)
4123 .registerModelType(
"nmos", 2);