48 #include <Xyce_config.h>
76 #include <N_ERH_ErrorMgr.h>
80 #include <N_LAS_Matrix.h>
81 #include <N_LAS_Vector.h>
87 namespace MOSFET_B3SOI {
205 "Initial condition of no voltage drops accross device");
215 U_NONE,
CAT_CONTROL,
"SIO model selector, SOIMOD=0: BSIMPD, SOIMOD=1: undefined model for PD and FE, SOIMOD=2: ideal FD");
242 NULL,
U_METER,
CAT_NONE,
"Delta oxide thickness in meters in CapMod3");
266 NULL,
U_MSM1,
CAT_DC,
"Saturation velocity at temp = TNOM");
270 NULL,
U_MSM1,
CAT_TEMP,
"Temperature coefficient for saturation velocity");
274 NULL,
U_NONE,
CAT_DC,
"Bulk charge effect coefficient for channel length");
290 NULL,
U_VOLTM1,
CAT_DC,
"Body-bias coefficient of bulk charge effect");
303 NULL,
U_CMM3,
CAT_DC,
"Poly gate doping concentration");
323 U_VOLT,
CAT_DC,
"Maximum applied body-bias in threshold voltage calculation");
337 NULL,
U_VOLT,
CAT_TEMP,
"Themperature coefficient for threshold voltage");
341 NULL,
U_VM,
CAT_TEMP,
"Channel length dependence of the temerature coefficient for the threshold voltage");
345 NULL,
U_NONE,
CAT_TEMP,
"Body-bias coefficient fo the threshold voltage temperature effect");
350 U_NONE,
CAT_DC,
"second-order body effect coefficient");
366 NULL,
U_METER,
CAT_DC,
"Lateral non-uniform doping parameter");
370 NULL,
U_NONE,
CAT_DC,
"First coefficient of short-channel effect effect on threshold voltage");
374 NULL,
U_NONE,
CAT_DC,
"Second coefficient of short-channel effect effect on threshold voltage");
378 NULL,
U_VOLTM1,
CAT_DC,
"Body-bias coefficient of short-channel effect effect on threshold voltage");
382 NULL,
U_METERM1,
CAT_DC,
"First coefficient of narrow-width effect effect on threshold voltage for small channel length");
386 NULL,
U_METERM1,
CAT_DC,
"Second coefficient of narrow-width effect effect on threshold voltage for small channel length");
390 NULL,
U_VOLTM1,
CAT_DC,
"Body-bias coefficient of narrow-width effect effect on threshold voltage for small channel length");
394 NULL,
U_NONE,
CAT_DC,
"L-depedance Coefficient of the DIBL correction parameter in Rout");
398 NULL,
U_NONE,
CAT_DC,
"DIBL coefficient exponent in subthreshhold region");
402 NULL,
U_MVM1,
CAT_DC,
"First-order mobility degradation coefficient");
410 NULL,
U_M2VM2,
CAT_DC,
"First-order mobility degradation coefficient");
418 NULL,
U_MVM2,
CAT_DC,
"Body effect of mobility degridation coefficient");
435 NULL,
U_VOLT,
CAT_DC,
"Offset voltage in the subthreshold region at large W and L");
443 NULL,
U_FARADMM1,
CAT_CAP,
"Non-LLD region source-gate overlap capacitance per unit channel length");
447 NULL,
U_FARADMM1,
CAT_CAP,
"Non-LLD region drain-gate overlap capacitance per unit channel length");
459 NULL,
U_OHM,
CAT_RES,
"Drain, source diffusion sheet resistance");
479 NULL,
U_NONE,
CAT_DC,
"DIBL coefficient in subthreshold region");
483 NULL,
U_VOLTM1,
CAT_DC,
"Body-bias coefficient for the subthreshold DIBL effect");
487 NULL,
U_NONE,
CAT_DC,
"Channel length modulation parameter");
491 NULL,
U_NONE,
CAT_DC,
"First output resistance DIBL effect correction parameter");
495 NULL,
U_NONE,
CAT_DC,
"Second output resistance DIBL effect correction parameter");
499 NULL,
U_VOLTM1,
CAT_DC,
"Body effect coefficient of DIBL correction parameter");
503 NULL,
U_NONE,
CAT_DC,
"Gate dependence of early voltage");
507 NULL,
U_NONE,
CAT_CONTROL,
"Flag for self-heating, 0-no self-heating, 1-self-heating");
531 NULL,
U_VOLT,
CAT_DC,
"GIDL Vds enhancement coefficient");
547 NULL,
U_NONE,
CAT_TEMP,
"Power dependence of JBJT on temperature");
551 NULL,
U_NONE,
CAT_TEMP,
"Power dependence of JDIF on temperature");
555 NULL,
U_NONE,
CAT_TEMP,
"Power dependence of JREC on temperature");
559 NULL,
U_NONE,
CAT_TEMP,
"Power dependence of JTUN on temperature");
563 NULL,
U_VOLT,
CAT_CAP,
"Source/drain gate sidewall junction built-in potential");
567 NULL,
U_NONE,
CAT_CAP,
"Source/grain gate sidewall junction capacitance grading coeficient");
571 NULL,
U_FARADMM1,
CAT_CAP,
"Source/grain gate sidewall junction capacitance per unit width");
575 NULL,
U_METER,
CAT_DC,
"Length of offset fiting parameter from I-V without bias");
607 NULL,
U_MEXPLLLW,
CAT_GEOMETRY,
"Coefficient of length and width dependence for CV channel length offset");
611 NULL,
U_NONE,
CAT_DC,
"Width offset from Weff for Rds Calculation");
615 NULL,
U_METER,
CAT_DC,
"Width-offset fitting parameter from I-V without bias");
619 NULL,
U_MVMH,
CAT_DC,
"Coefficient of gate depedence of Weff");
623 NULL,
U_MVMH,
CAT_DC,
"Coefficient of substrate body bias dependence of Weff");
655 NULL,
U_MEXPWLWW,
CAT_GEOMETRY,
"Coefficient of length and width dependence for CV channel width offset");
659 NULL,
U_METER,
CAT_DC,
"Bulk charge effect coefficient for channel width");
667 NULL,
U_FARADMM1,
CAT_CAP,
"Light-doped source-gate region overlap capacitance");
675 NULL,
U_FARADMM1,
CAT_CAP,
"Coefficient for lightly doped region overlap capacitance fireing field capacitance");
687 NULL,
U_NONE,
CAT_CAP,
"Exponetial term for the short-channel model");
691 NULL,
U_METER,
CAT_CAP,
"Width offset fitting parameter from C-V");
695 NULL,
U_METER,
CAT_CAP,
"Length offset fitting parameter from C-V");
699 NULL,
U_MVM1,
CAT_DC,
"First parameter of impact-ionization current");
759 NULL,
U_NONE,
CAT_NONE,
"Floating body excess noise ideality factor");
763 NULL,
U_METER,
CAT_DC,
"First body effect width depenent parameter");
767 NULL,
U_METER,
CAT_DC,
"Second body effect width depenent parameter");
771 NULL,
U_VOLT,
CAT_DC,
"Surface potential adjustment for bulk charge effect");
775 NULL,
U_METER,
CAT_DC,
"Width offset for body contact isolation edge");
779 NULL,
U_VOLT,
CAT_DC,
"Second parameter of impact-ionization current");
783 NULL,
U_NONE,
CAT_DC,
"Second Vds dependent parameter of impact ionizatin current");
787 NULL,
U_VOLT,
CAT_DC,
"Third Vds dependent parameter of impact ionizatin current");
791 NULL,
U_VOLT,
CAT_DC,
"Normal drain saturatio voltage at threshold for impact ionization current");
795 NULL,
U_NONE,
CAT_DC,
"Temperature dependent parameter for impact ionization current");
799 NULL,
U_NONE,
CAT_DC,
"Channel length dependent parameter at threshold for impact ionization current");
803 NULL,
U_VOLTM1,
CAT_DC,
"First Vgs dependent parameter of impact ionizatin current");
807 NULL,
U_VOLTM1,
CAT_DC,
"Second Vgs dependent parameter of impact ionizatin current");
811 NULL,
U_NONE,
CAT_DC,
"Third Vgs dependent parameter of impact ionizatin current");
815 NULL,
U_VOLTM1,
CAT_DC,
"Vds dependent parameter of drain saturation voltage for impact ionizatin current");
819 NULL,
U_NONE,
CAT_DC,
"Fraction of bipolar current affecting the impact ionization");
823 NULL,
U_VMM1,
CAT_DC,
"Saturation channel electric field for impact ionization current");
827 NULL,
U_NONE,
CAT_DC,
"Reverse tunneling non-ideality factor");
831 NULL,
U_NONE,
CAT_DC,
"Recombination non-ideality factor at foward bias");
835 NULL,
U_NONE,
CAT_DC,
"Recombination non-ideality factor at reverse bias");
843 NULL,
U_AMPMM2,
CAT_DC,
"BOdy to source/drain injection saturation current");
847 NULL,
U_AMPMM2,
CAT_DC,
"Recombinatin in depletion saturation current");
859 NULL,
U_VOLT,
CAT_DC,
"Voltage dependent parameter for recombination current");
863 NULL,
U_VOLT,
CAT_DC,
"Voltage dependent parameter for tunneling current");
867 NULL,
U_NONE,
CAT_DC,
"Power coefficient of channel length");
871 NULL,
U_METER,
CAT_DC,
"Reference channel length for bipolar current");
875 NULL,
U_NONE,
CAT_CAP,
"Channel length dependency coefficient of diffusion capacitance");
879 NULL,
U_VOLT,
CAT_DC,
"Early voltage for bipolar current");
883 NULL,
U_VMM1,
CAT_DC,
"Channel length dependency of early voltage for bipolar current");
887 NULL,
U_NONE,
CAT_DC,
"High level injection parameter for bipolar current");
891 NULL,
U_OSQM1,
CAT_DC,
"Intrinsic body contact sheet resistance");
895 NULL,
U_OSQM1,
CAT_DC,
"Intrinsic body contact sheet resistance");
899 NULL,
U_FARADMM1,
CAT_CAP,
"Gate substrate overlap capacitance per unit channel length");
903 NULL,
U_SECOND,
CAT_CAP,
"Diffusion capacitance transit time coefficient");
907 NULL,
U_NONE,
CAT_CAP,
"Power coefficient of channel length dependency for diffusion capacitance");
912 U_VOLT,
CAT_CAP,
"Sorce/Drain bottom diffusion capacitance flatband voltage");
917 U_VOLT,
CAT_CAP,
"Sorce/Drain bottom diffusion capacitance threshold voltage");
922 U_VOLT,
CAT_CAP,
"Sorce/Drain bottom diffusion minimum capacitance");
926 NULL,
U_NONE,
CAT_CAP,
"Sorce/Drain bottom diffusion smoothing parameter");
930 NULL,
U_FARADMM1,
CAT_CAP,
"Sorce/Drain sidewall fringing capacitance per unit length");
942 NULL,
U_METER,
CAT_CAP,
"Length offset fitting parameter for body charge");
958 NULL,
U_MVM1,
CAT_CAP,
"Exponetial coefficient for charge thickness in capmod = 3 for accumulation and depletion regions");
962 NULL,
U_NONE,
CAT_CAP,
"Coefficient for the gate-bias dependent surface potential");
966 NULL,
U_NONE,
CAT_CAP,
"CV parameter in Vgsteff, CV for weak to strong inversion");
978 NULL,
U_METER,
CAT_CAP,
"Length offset fitting parameter for backgate charge");
982 NULL,
U_NONE,
CAT_NONE,
"Gate-channel tunneling current model selector");
990 NULL,
U_METER,
CAT_TEMP,
"Minimum width for thermal resistance calculation");
1006 NULL,
U_VOLT,
CAT_TUNNEL,
"Effective bandgap in gate current calculation");
1010 NULL,
U_NONE,
CAT_TUNNEL,
"Vaux parameter for valence band electron tunneling");
1014 NULL,
U_VOLTM1,
CAT_TUNNEL,
"First Vox dependent parameter for gate current in inversion");
1018 NULL,
U_VOLTM2,
CAT_TUNNEL,
"Second Vox dependent parameter for gate current in inversion");
1022 NULL,
U_VOLT,
CAT_TUNNEL,
"Third Vox dependent parameter for gate current in inversion");
1026 NULL,
U_NONE,
CAT_TUNNEL,
"Vaux parameter for conduction band electron tunneling");
1030 NULL,
U_VOLTM1,
CAT_TUNNEL,
"First Vox dependent parameter for gate current in accumulation");
1034 NULL,
U_VOLTM2,
CAT_TUNNEL,
"First Vox dependent parameter for gate current in accumulation");
1038 NULL,
U_VOLT,
CAT_TUNNEL,
"Third Vox dependent parameter for gate current in accumulation");
1042 NULL,
U_NONE,
CAT_NONE,
"The limit of Vox in gate current calculation");
1046 NULL,
U_NONE,
CAT_NONE,
"The smoothing parameter in the Vox smoothing function");
1090 NULL,
U_NONE,
CAT_NONE,
"Upper bound of built-in potential lowering for FD operation");
1094 NULL,
U_VOLT,
CAT_NONE,
"Lower bound of built-in potential lowering for FD operation");
1098 NULL,
U_VOLT,
CAT_VBI,
"Offset voltage due to non-idealities");
1110 NULL,
U_NONE,
CAT_VBI,
"First backgate body effect parameter");
1114 NULL,
U_NONE,
CAT_VBI,
"Second backgate body effect parameter for short channel effect");
1118 NULL,
U_NONE,
CAT_VBI,
"Third backgate body effect parameter for short channel effect");
1122 NULL,
U_NONE,
CAT_VBI,
"First short channel effect parameter in FD module");
1126 NULL,
U_NONE,
CAT_VBI,
"Second short channel effect parameter in FD module");
1130 NULL,
U_NONE,
CAT_VBI,
"Gate bias dependance coefficient of surface potential in FD module");
1134 NULL,
U_NONE,
CAT_RF,
"Parameter for distributed channel resistance effect for intrinsic input resistance");
1138 NULL,
U_NONE,
CAT_RF,
"Parameter to account for the excess channel diffusion resistance for intrinsic input resistance");
1150 NULL,
U_METER,
CAT_RF,
"Distance from the gate contact to the channel edge");
1154 NULL,
U_METER,
CAT_RF,
"Offset of the gate length due to variations in patterning");
2698 U_VOLT,
CAT_DC,
"Threshold voltage at Vbs = 0 for large L");
2703 .setDescription(
"Version number");
2706 .setDescription(
"Flag for capacitance models");
2709 .setDescription(
"Mobility model selector");
2712 .setDescription(
"Parameter value check");
2715 .setDescription(
"Binning unit selector");
2718 .setDescription(
"SIO model selector, SOIMOD=0: BSIMPD, SOIMOD=1: undefined model for PD and FE, SOIMOD=2: ideal FD");
2721 .setDescription(
"Gate resistance model selector");
2724 .setDescription(
"Voltage limter fix for bug 1830");
2749 #define Xyce_USE_BSIMSOI_CONST 1
2751 #ifdef Xyce_USE_BSIMSOI_CONST
2752 #define CONSTEPSOX (3.453133e-11)
2753 #define CONSTEPSSI (1.03594e-10)
2755 #ifdef CONSTQ // if this is defined, we need to undef it to avoid compiler warnings
2758 #define CONSTQ (1.60219e-19)
2760 #ifdef CONSTKoverQ // if this is defined, we need to undef it to avoid compiler warnings
2763 #define CONSTKoverQ (8.617087e-5) // Kb / q
2765 #ifdef CONSTEg300 // if this is defined, we need to undef it to avoid compiler warnings
2768 #define CONSTEg300 (1.115) // energy gap at 300K
2770 #define CONSTboltz (1.3806226e-23)
2772 #ifdef M_PI // if this is defined, we need to undef it to avoid compiler warnings
2775 #define M_PI (3.141592654)
2777 #endif // Xyce_USE_BSIMSOI_CONST
2779 #define DELTA_1 0.02
2780 #define DELTA_2 0.02
2781 #define DELTA_3 0.02
2783 #define DELTA_3_SOI 0.08
2784 #define DELTA_4 0.02
2785 #define DELT_Vbseff 0.005
2786 #define DELTA_VFB 0.02
2787 #define OFF_Vbsitf 0.02 // v3.1
2789 #define MAX_EXPL 2.688117142e+43
2790 #define MIN_EXPL 3.720075976e-44
2791 #define EXPL_THRESHOLD 100.0
2792 #define DEXP(A,B) { \
2793 if (A > EXPL_THRESHOLD) { \
2794 B = MAX_EXPL*(1.0+(A)-EXPL_THRESHOLD); \
2795 } else if (A < -EXPL_THRESHOLD) { \
2801 #define CEXP(A,B,C) { \
2802 if (A > EXPL_THRESHOLD) { \
2803 B = MAX_EXPL*(1.0+(A)-EXPL_THRESHOLD); \
2805 } else if (A < -EXPL_THRESHOLD) { \
2845 :
DeviceInstance(IB, configuration.getInstanceParameters(), factory_block),
2853 pNodeMappedToB (false),
2869 numberParallel (0.0),
2873 sourceSquares (1.0),
2874 drainPerimeter (0.0),
2875 sourcePerimeter (0.0),
2876 drainConductance (0.0),
2977 sourceConductance (0.0),
3052 ChargeComputationNeeded (true),
3086 dDeltaPhi_dVg (0.0),
3087 dDeltaPhi_dVd (0.0),
3088 dDeltaPhi_dVb (0.0),
3120 ceqqgmid_Jdxp (0.0),
3130 ceqbodcon_Jdxp (0.0),
3135 IgateMid_Jdxp (0.0),
3158 TempRatioMinus1 (0.0),
3262 wdiosCV_NoSwap (0.0),
3263 wdiodCV_NoSwap (0.0),
3309 Qeqqgmid_Jdxp (0.0),
3321 li_store_deltemp (0),
3326 li_store_dev_id (0),
3327 li_store_dev_ig (0),
3328 li_store_dev_is (0),
3329 li_store_dev_ie (0),
3330 li_store_dev_ib (0),
3354 ADrainEquDrainNodeOffset (0),
3355 ADrainEquDrainPrimeNodeOffset (0),
3356 ADrainEquIdsOffset (0),
3357 AGateEquGateNodeOffset (0),
3358 AGateEquBodyNodeOffset (0),
3359 AGateEquDrainPrimeNodeOffset (0),
3360 AGateEquSourcePrimeNodeOffset (0),
3361 AGateEquGatePrimeNodeOffset (0),
3362 AGateEquGateMidNodeOffset (0),
3363 AGateEquIgsOffset (0),
3364 ASourceEquSourceNodeOffset (0),
3365 ASourceEquSourcePrimeNodeOffset (0),
3366 ASourceEquIdsOffset (0),
3367 ASourceEquIgsOffset (0),
3368 ASourceEquIbsOffset (0),
3369 ASourceEquIesOffset (0),
3370 ASourceEquIpsOffset (0),
3371 ASubstrateEquSubstrateNodeOffset (0),
3372 ASubstrateEquBodyNodeOffset (0),
3373 ASubstrateEquTemperatureNodeOffset (0),
3374 ASubstrateEquDrainPrimeNodeOffset (0),
3375 ASubstrateEquSourcePrimeNodeOffset (0),
3376 ASubstrateEquGatePrimeNodeOffset (0),
3377 ASubstrateEquGateMidNodeOffset (0),
3378 ASubstrateEquIesOffset (0),
3379 AExtBodyEquExtBodyNodeOffset (0),
3380 AExtBodyEquBodyNodeOffset (0),
3381 AExtBodyEquIpsOffset (0),
3382 ABodyEquSubstrateNodeOffset (0),
3383 ABodyEquExtBodyNodeOffset (0),
3384 ABodyEquBodyNodeOffset (0),
3385 ABodyEquTemperatureNodeOffset (0),
3386 ABodyEquDrainPrimeNodeOffset (0),
3387 ABodyEquSourcePrimeNodeOffset (0),
3388 ABodyEquGatePrimeNodeOffset (0),
3389 ABodyEquIbsOffset (0),
3390 ATemperatureEquSubstrateNodeOffset (0),
3391 ATemperatureEquBodyNodeOffset (0),
3392 ATemperatureEquTemperatureNodeOffset (0),
3393 ATemperatureEquDrainPrimeNodeOffset (0),
3394 ATemperatureEquSourcePrimeNodeOffset (0),
3395 ATemperatureEquGatePrimeNodeOffset (0),
3396 ADrainPrimeEquDrainNodeOffset (0),
3397 ADrainPrimeEquSubstrateNodeOffset (0),
3398 ADrainPrimeEquBodyNodeOffset (0),
3399 ADrainPrimeEquTemperatureNodeOffset (0),
3400 ADrainPrimeEquDrainPrimeNodeOffset (0),
3401 ADrainPrimeEquSourcePrimeNodeOffset (0),
3402 ADrainPrimeEquGatePrimeNodeOffset (0),
3403 ADrainPrimeEquGateMidNodeOffset (0),
3404 ASourcePrimeEquSourceNodeOffset (0),
3405 ASourcePrimeEquSubstrateNodeOffset (0),
3406 ASourcePrimeEquBodyNodeOffset (0),
3407 ASourcePrimeEquTemperatureNodeOffset (0),
3408 ASourcePrimeEquDrainPrimeNodeOffset (0),
3409 ASourcePrimeEquSourcePrimeNodeOffset (0),
3410 ASourcePrimeEquGatePrimeNodeOffset (0),
3411 ASourcePrimeEquGateMidNodeOffset (0),
3412 AGatePrimeEquGateNodeOffset (0),
3413 AGatePrimeEquSubstrateNodeOffset (0),
3414 AGatePrimeEquBodyNodeOffset (0),
3415 AGatePrimeEquTemperatureNodeOffset (0),
3416 AGatePrimeEquDrainPrimeNodeOffset (0),
3417 AGatePrimeEquSourcePrimeNodeOffset (0),
3418 AGatePrimeEquGatePrimeNodeOffset (0),
3419 AGatePrimeEquGateMidNodeOffset (0),
3420 AGateMidEquGateNodeOffset (0),
3421 AGateMidEquSubstrateNodeOffset (0),
3422 AGateMidEquBodyNodeOffset (0),
3423 AGateMidEquDrainPrimeNodeOffset (0),
3424 AGateMidEquSourcePrimeNodeOffset (0),
3425 AGateMidEquGatePrimeNodeOffset (0),
3426 AGateMidEquGateMidNodeOffset (0),
3427 icVDSEquVdOffset (0),
3428 icVDSEquVsOffset (0),
3429 icVDSEquIdsOffset (0),
3430 icVGSEquVgOffset (0),
3431 icVGSEquVsOffset (0),
3432 icVGSEquIgsOffset (0),
3433 icVBSEquVsOffset (0),
3434 icVBSEquVbOffset (0),
3435 icVBSEquIbsOffset (0),
3436 icVESEquVeOffset (0),
3437 icVESEquVsOffset (0),
3438 icVESEquIesOffset (0),
3439 icVPSEquVpOffset (0),
3440 icVPSEquVsOffset (0),
3441 icVPSEquIpsOffset (0),
3446 f_DrainEquDrainNodePtr(0),
3447 f_DrainEquDrainPrimeNodePtr(0),
3448 f_DrainEquIdsPtr(0),
3451 f_GateEquGateNodePtr(0),
3452 f_GateEquBodyNodePtr(0),
3453 f_GateEquDrainPrimeNodePtr(0),
3454 f_GateEquSourcePrimeNodePtr(0),
3455 f_GateEquGatePrimeNodePtr(0),
3456 f_GateEquGateMidNodePtr(0),
3460 f_SourceEquSourceNodePtr(0),
3461 f_SourceEquSourcePrimeNodePtr(0),
3462 f_SourceEquIdsPtr(0),
3463 f_SourceEquIgsPtr(0),
3464 f_SourceEquIbsPtr(0),
3465 f_SourceEquIesPtr(0),
3466 f_SourceEquIpsPtr(0),
3469 f_SubstrateEquSubstrateNodePtr(0),
3470 f_SubstrateEquBodyNodePtr(0),
3471 f_SubstrateEquTemperatureNodePtr(0),
3472 f_SubstrateEquDrainPrimeNodePtr(0),
3473 f_SubstrateEquSourcePrimeNodePtr(0),
3474 f_SubstrateEquGatePrimeNodePtr(0),
3475 f_SubstrateEquGateMidNodePtr(0),
3476 f_SubstrateEquIesPtr(0),
3479 f_ExtBodyEquExtBodyNodePtr(0),
3480 f_ExtBodyEquBodyNodePtr(0),
3481 f_ExtBodyEquIpsPtr(0),
3484 f_BodyEquSubstrateNodePtr(0),
3485 f_BodyEquExtBodyNodePtr(0),
3486 f_BodyEquBodyNodePtr(0),
3487 f_BodyEquTemperatureNodePtr(0),
3488 f_BodyEquDrainPrimeNodePtr(0),
3489 f_BodyEquSourcePrimeNodePtr(0),
3490 f_BodyEquGatePrimeNodePtr(0),
3494 f_TemperatureEquSubstrateNodePtr(0),
3495 f_TemperatureEquBodyNodePtr(0),
3496 f_TemperatureEquTemperatureNodePtr(0),
3497 f_TemperatureEquDrainPrimeNodePtr(0),
3498 f_TemperatureEquSourcePrimeNodePtr(0),
3499 f_TemperatureEquGatePrimeNodePtr(0),
3502 f_DrainPrimeEquDrainNodePtr(0),
3503 f_DrainPrimeEquSubstrateNodePtr(0),
3504 f_DrainPrimeEquBodyNodePtr(0),
3505 f_DrainPrimeEquTemperatureNodePtr(0),
3506 f_DrainPrimeEquDrainPrimeNodePtr(0),
3507 f_DrainPrimeEquSourcePrimeNodePtr(0),
3508 f_DrainPrimeEquGatePrimeNodePtr(0),
3509 f_DrainPrimeEquGateMidNodePtr(0),
3512 f_SourcePrimeEquSourceNodePtr(0),
3513 f_SourcePrimeEquSubstrateNodePtr(0),
3514 f_SourcePrimeEquBodyNodePtr(0),
3515 f_SourcePrimeEquTemperatureNodePtr(0),
3516 f_SourcePrimeEquDrainPrimeNodePtr(0),
3517 f_SourcePrimeEquSourcePrimeNodePtr(0),
3518 f_SourcePrimeEquGatePrimeNodePtr(0),
3519 f_SourcePrimeEquGateMidNodePtr(0),
3522 f_GatePrimeEquGateNodePtr(0),
3523 f_GatePrimeEquSubstrateNodePtr(0),
3524 f_GatePrimeEquBodyNodePtr(0),
3525 f_GatePrimeEquTemperatureNodePtr(0),
3526 f_GatePrimeEquDrainPrimeNodePtr(0),
3527 f_GatePrimeEquSourcePrimeNodePtr(0),
3528 f_GatePrimeEquGatePrimeNodePtr(0),
3529 f_GatePrimeEquGateMidNodePtr(0),
3532 f_GateMidEquGateNodePtr(0),
3533 f_GateMidEquSubstrateNodePtr(0),
3534 f_GateMidEquBodyNodePtr(0),
3535 f_GateMidEquDrainPrimeNodePtr(0),
3536 f_GateMidEquSourcePrimeNodePtr(0),
3537 f_GateMidEquGatePrimeNodePtr(0),
3538 f_GateMidEquGateMidNodePtr(0),
3546 f_icVDSEquIdsPtr(0),
3551 f_icVGSEquIgsPtr(0),
3556 f_icVBSEquIbsPtr(0),
3561 f_icVESEquIesPtr(0),
3566 f_icVPSEquIpsPtr(0),
3571 q_DrainEquDrainNodePtr(0),
3572 q_DrainEquDrainPrimeNodePtr(0),
3573 q_DrainEquIdsPtr(0),
3576 q_GateEquGateNodePtr(0),
3577 q_GateEquBodyNodePtr(0),
3578 q_GateEquDrainPrimeNodePtr(0),
3579 q_GateEquSourcePrimeNodePtr(0),
3580 q_GateEquGatePrimeNodePtr(0),
3581 q_GateEquGateMidNodePtr(0),
3585 q_SourceEquSourceNodePtr(0),
3586 q_SourceEquSourcePrimeNodePtr(0),
3587 q_SourceEquIdsPtr(0),
3588 q_SourceEquIgsPtr(0),
3589 q_SourceEquIbsPtr(0),
3590 q_SourceEquIesPtr(0),
3591 q_SourceEquIpsPtr(0),
3594 q_SubstrateEquSubstrateNodePtr(0),
3595 q_SubstrateEquBodyNodePtr(0),
3596 q_SubstrateEquTemperatureNodePtr(0),
3597 q_SubstrateEquDrainPrimeNodePtr(0),
3598 q_SubstrateEquSourcePrimeNodePtr(0),
3599 q_SubstrateEquGatePrimeNodePtr(0),
3600 q_SubstrateEquGateMidNodePtr(0),
3601 q_SubstrateEquIesPtr(0),
3604 q_ExtBodyEquExtBodyNodePtr(0),
3605 q_ExtBodyEquBodyNodePtr(0),
3606 q_ExtBodyEquIpsPtr(0),
3609 q_BodyEquSubstrateNodePtr(0),
3610 q_BodyEquExtBodyNodePtr(0),
3611 q_BodyEquBodyNodePtr(0),
3612 q_BodyEquTemperatureNodePtr(0),
3613 q_BodyEquDrainPrimeNodePtr(0),
3614 q_BodyEquSourcePrimeNodePtr(0),
3615 q_BodyEquGatePrimeNodePtr(0),
3619 q_TemperatureEquSubstrateNodePtr(0),
3620 q_TemperatureEquBodyNodePtr(0),
3621 q_TemperatureEquTemperatureNodePtr(0),
3622 q_TemperatureEquDrainPrimeNodePtr(0),
3623 q_TemperatureEquSourcePrimeNodePtr(0),
3624 q_TemperatureEquGatePrimeNodePtr(0),
3627 q_DrainPrimeEquDrainNodePtr(0),
3628 q_DrainPrimeEquSubstrateNodePtr(0),
3629 q_DrainPrimeEquBodyNodePtr(0),
3630 q_DrainPrimeEquTemperatureNodePtr(0),
3631 q_DrainPrimeEquDrainPrimeNodePtr(0),
3632 q_DrainPrimeEquSourcePrimeNodePtr(0),
3633 q_DrainPrimeEquGatePrimeNodePtr(0),
3634 q_DrainPrimeEquGateMidNodePtr(0),
3637 q_SourcePrimeEquSourceNodePtr(0),
3638 q_SourcePrimeEquSubstrateNodePtr(0),
3639 q_SourcePrimeEquBodyNodePtr(0),
3640 q_SourcePrimeEquTemperatureNodePtr(0),
3641 q_SourcePrimeEquDrainPrimeNodePtr(0),
3642 q_SourcePrimeEquSourcePrimeNodePtr(0),
3643 q_SourcePrimeEquGatePrimeNodePtr(0),
3644 q_SourcePrimeEquGateMidNodePtr(0),
3647 q_GatePrimeEquGateNodePtr(0),
3648 q_GatePrimeEquSubstrateNodePtr(0),
3649 q_GatePrimeEquBodyNodePtr(0),
3650 q_GatePrimeEquTemperatureNodePtr(0),
3651 q_GatePrimeEquDrainPrimeNodePtr(0),
3652 q_GatePrimeEquSourcePrimeNodePtr(0),
3653 q_GatePrimeEquGatePrimeNodePtr(0),
3654 q_GatePrimeEquGateMidNodePtr(0),
3657 q_GateMidEquGateNodePtr(0),
3658 q_GateMidEquSubstrateNodePtr(0),
3659 q_GateMidEquBodyNodePtr(0),
3660 q_GateMidEquDrainPrimeNodePtr(0),
3661 q_GateMidEquSourcePrimeNodePtr(0),
3662 q_GateMidEquGatePrimeNodePtr(0),
3663 q_GateMidEquGateMidNodePtr(0),
3671 q_icVDSEquIdsPtr(0),
3676 q_icVGSEquIgsPtr(0),
3681 q_icVBSEquIbsPtr(0),
3686 q_icVESEquIesPtr(0),
3691 q_icVPSEquIpsPtr(0),
3695 blockHomotopyID (0),
3715 if (!
given(
"RGATEMOD"))
3717 if (!
given(
"SOIMOD"))
3758 UserError0(*
this)<<
"Channel length " <<
l <<
" out of specified range ("
3764 UserError0(*
this) <<
"Channel width " <<
w <<
" out of specified range ("
3778 if (
given(
"TNODEOUT"))
3779 UserError0(*
this) <<
"Less than 5 external nodes with tnodeout set";
3781 UserError0(*
this) <<
"Less than 4 external nodes without tnodeout set";
3785 if (
given(
"TNODEOUT"))
3786 UserError0(*
this) <<
"Over 7 nodes with tnodeout set";
3788 UserError0(*
this) <<
"Over 6 nodes without tnodeout set";
3852 if (!
given(
"TNODEOUT"))
3880 UserWarning0(*
this) <<
"Model parameter rbody is 0, setting to 1";
3925 UserWarning0(*
this) <<
"Model parameter rbody is 0, setting to 1";
4072 std::cerr << std::endl;
4073 std::cerr <<
"numExtVars = " <<
numExtVars << std::endl;
4074 std::cerr <<
"numIntVars = " <<
numIntVars << std::endl;
4075 std::cerr <<
"dNode = " <<
dNode << std::endl;
4076 std::cerr <<
"gNode = " <<
gNode << std::endl;
4077 std::cerr <<
"sNode = " <<
sNode << std::endl;
4078 std::cerr <<
"eNode = " <<
eNode << std::endl;
4079 std::cerr <<
"bNode = " <<
bNode << std::endl;
4080 std::cerr <<
"pNode = " <<
pNode << std::endl;
4081 std::cerr <<
"tNode = " <<
tNode << std::endl;
4082 std::cerr <<
"dNodePrime = " <<
dNodePrime << std::endl;
4083 std::cerr <<
"sNodePrime = " <<
sNodePrime << std::endl;
4084 std::cerr <<
"gNodePrime = " <<
gNodePrime << std::endl;
4085 std::cerr <<
"gNodeMid = " <<
gNodeMid << std::endl;
4086 std::string msg =
"Instance::Instance: Internal error in lead connectivity";
4088 N_ERH_ErrorMgr::report ( N_ERH_ErrorMgr::DEV_FATAL,msg);
4102 #ifdef Xyce_DEBUG_DEVICE
4103 debugOutputModelParams();
4124 int c, d, off, i, j, k, m, i_b, j_b, k_b, sz, t;
4125 int row1, row2, dest, n_swap, top;
4270 for (i=0 ; i<11 ; ++i)
4290 for (c=0 ; c<2 ; ++c)
4296 for (i=0 ; i<11 ; ++i)
4318 for (k=0 ; k<
jacStamp_v[0][j].size()-1 ; ++k)
4339 for (i=0 ; i<11 ; ++i)
4348 for (c=0 ; c<2 ; ++c)
4352 for (i=0 ; i<11 ; ++i)
4354 if (i != 4 && i != 5 && (c != 1 || i != 10))
4357 for (k=0 ; k<
jacStamp_v[24*c][i].size() ; ++k)
4369 for (c=0 ; c<6 ; ++c)
4398 for (i=0 ; i<3 ; ++i)
4406 for (j=0 ; j<2 ; ++j)
4415 for (k=0 ; k<2 ; ++k)
4427 for (m=0 ; m<2 ; ++m)
4462 int lastRow = numRows;
4463 int numExtraRows = 0;
4471 numRows += numExtraRows;
4472 numRowsMap += numExtraRows;
4476 std::vector< int > additionalValues( numRows, 0 );
4482 additionalValues[ 0 ] += 1;
4483 additionalValues[ 2 ] += 1;
4484 additionalValues[ icVDSRow ] += 3;
4491 additionalValues[ 1 ] += 1;
4492 additionalValues[ 2 ] += 1;
4493 additionalValues[ icVGSRow ] += 3;
4500 additionalValues[ 5 ] += 1;
4501 additionalValues[ 2 ] += 1;
4502 additionalValues[ icVBSRow ] += 3;
4509 additionalValues[ 3 ] += 1;
4510 additionalValues[ 2 ] += 1;
4511 additionalValues[ icVESRow ] += 3;
4518 additionalValues[ 4 ] += 1;
4519 additionalValues[ 2 ] += 1;
4520 additionalValues[ icVPSRow ] += 3;
4527 for (
int rw=0; rw < numRows; ++rw )
4529 int numNonZeros = 0;
4533 additionalValues[rw];
4542 assert( numNonZeros ==
jacStampIC[rw].size() );
4546 numNonZeros = additionalValues[ rw ];
4561 for(
int rw=0; rw < numRowsMap; ++rw )
4563 int numNonZeros = 0;
4568 numNonZeros += additionalValues[ rw ];
4590 int mapOffset =
jacMapIC2[0].size() - 1;
4608 jacMapIC2 [icVDSRow + mapRowOffset ][0] = 0;
4609 jacMapIC2 [icVDSRow + mapRowOffset ][1] = 1;
4610 jacMapIC2 [icVDSRow + mapRowOffset ][2] = 2;
4616 int mapOffset =
jacMapIC2[1].size() - 1;
4633 jacMapIC2 [icVGSRow + mapRowOffset ][0] = 0;
4634 jacMapIC2 [icVGSRow + mapRowOffset ][1] = 1;
4635 jacMapIC2 [icVGSRow + mapRowOffset ][2] = 2;
4641 int mapOffset =
jacMapIC2[5].size() - 1;
4658 jacMapIC2 [icVBSRow + mapRowOffset ][0] = 0;
4659 jacMapIC2 [icVBSRow + mapRowOffset ][1] = 1;
4660 jacMapIC2 [icVBSRow + mapRowOffset ][2] = 2;
4666 int mapOffset =
jacMapIC2[3].size() - 1;
4682 jacMapIC2 [icVESRow + mapRowOffset ][0] = 0;
4683 jacMapIC2 [icVESRow + mapRowOffset ][1] = 1;
4684 jacMapIC2 [icVESRow + mapRowOffset ][2] = 2;
4690 int mapOffset =
jacMapIC2[4].size() - 1;
4706 jacMapIC2 [icVGSRow + mapRowOffset ][0] = 0;
4707 jacMapIC2 [icVGSRow + mapRowOffset ][1] = 1;
4708 jacMapIC2 [icVGSRow + mapRowOffset ][2] = 2;
4711 #ifdef Xyce_DEBUG_DEVICE
4714 Xyce::dout() <<
"Original jacobian stamp before IC's added" << std::endl;
4717 Xyce::dout() <<
"jacStamp_v[ " <<
jacID <<
" ][ " << rw <<
"] = { " ;
4723 Xyce::dout() <<
", ";
4726 Xyce::dout() <<
"}" << std::endl;
4728 Xyce::dout() << std::endl;
4730 Xyce::dout() <<
"And as viewed through the maps" << std::endl;
4738 if( cl != (jacMap2_v[
jacID ][rw].size()-1) )
4740 Xyce::dout() <<
", ";
4743 Xyce::dout() <<
"}" << std::endl;
4745 Xyce::dout() << std::endl;
4748 Xyce::dout() <<
"jacobian stamp including initial conditions: " << std::endl
4749 <<
"icVDSRow = " << icVDSRow << std::endl
4750 <<
"icVGSRow = " << icVGSRow << std::endl
4751 <<
"icVBSRow = " << icVBSRow << std::endl
4752 <<
"icVESRow = " << icVESRow << std::endl
4753 <<
"icVPSRow = " << icVPSRow << std::endl;
4754 for(
int rw=0; rw <
jacStampIC.size() ; ++rw )
4756 Xyce::dout() <<
"jacStampIC[ " << rw <<
"] = { " ;
4757 for(
int cl=0; cl <
jacStampIC[rw].size(); ++cl )
4762 Xyce::dout() <<
", ";
4765 Xyce::dout() <<
"}" << std::endl;
4767 Xyce::dout() << std::endl;
4769 Xyce::dout() <<
"And as viewed through the maps" << std::endl;
4770 for(
int rw=0; rw <
jacMapIC.size() ; ++rw )
4772 Xyce::dout() <<
"jacStampIC[ " <<
jacMapIC[rw] <<
"] = { " ;
4773 for(
int cl=0; cl <
jacMapIC2[rw].size(); ++cl )
4776 if( cl != (jacMapIC2[rw].size()-1) )
4778 Xyce::dout() <<
", ";
4781 Xyce::dout() <<
"}" << std::endl;
4783 Xyce::dout() << std::endl;
4786 #endif // Xyce_DEBUG_DEVICE
4791 #ifdef Xyce_DEBUG_DEVICE
4800 void Instance::debugOutputModelParams()
4804 Xyce::dout() << Xyce::section_divider
4806 Xyce::dout() <<
"Instance: constructor: "<<
getName() <<std::endl;
4807 Xyce::dout() <<
"Model Params: " << std::endl;
4808 Xyce::dout() <<
"capMod = " <<
model_.
capMod << std::endl;
4809 Xyce::dout() <<
"mobMod = " <<
model_.
mobMod << std::endl;
4811 Xyce::dout() <<
"binUnit = " <<
model_.
binUnit << std::endl;
4812 Xyce::dout() <<
"version = " <<
model_.
version << std::endl;
4813 Xyce::dout() <<
"tox = " <<
model_.
tox << std::endl;
4814 Xyce::dout() <<
"toxm = " <<
model_.
toxm << std::endl;
4815 Xyce::dout() <<
"dtoxcv = " <<
model_.
dtoxcv << std::endl;
4816 Xyce::dout() <<
"cdsc = " <<
model_.
cdsc << std::endl;
4817 Xyce::dout() <<
"cdscb = " <<
model_.
cdscb << std::endl;
4818 Xyce::dout() <<
"cdscd = " <<
model_.
cdscd << std::endl;
4819 Xyce::dout() <<
"cit = " <<
model_.
cit << std::endl;
4820 Xyce::dout() <<
"nfactor = " <<
model_.
nfactor << std::endl;
4821 Xyce::dout() <<
"vsat = " <<
model_.
vsat << std::endl;
4822 Xyce::dout() <<
"at = " <<
model_.
at << std::endl;
4823 Xyce::dout() <<
"a0 = " <<
model_.
a0 << std::endl;
4824 Xyce::dout() <<
"ags = " <<
model_.
ags << std::endl;
4825 Xyce::dout() <<
"a1 = " <<
model_.
a1 << std::endl;
4826 Xyce::dout() <<
"a2 = " <<
model_.
a2 << std::endl;
4827 Xyce::dout() <<
"keta = " <<
model_.
keta << std::endl;
4828 Xyce::dout() <<
"nsub = " <<
model_.
nsub << std::endl;
4829 Xyce::dout() <<
"npeak = " <<
model_.
npeak << std::endl;
4830 Xyce::dout() <<
"ngate = " <<
model_.
ngate << std::endl;
4831 Xyce::dout() <<
"gamma1 = " <<
model_.
gamma1 << std::endl;
4832 Xyce::dout() <<
"gamma2 = " <<
model_.
gamma2 << std::endl;
4833 Xyce::dout() <<
"vbx = " <<
model_.
vbx << std::endl;
4834 Xyce::dout() <<
"vbm = " <<
model_.
vbm << std::endl;
4835 Xyce::dout() <<
"xt = " <<
model_.
xt << std::endl;
4836 Xyce::dout() <<
"k1 = " <<
model_.
k1 << std::endl;
4837 Xyce::dout() <<
"kt1 = " <<
model_.
kt1 << std::endl;
4838 Xyce::dout() <<
"kt1l = " <<
model_.
kt1l << std::endl;
4839 Xyce::dout() <<
"kt2 = " <<
model_.
kt2 << std::endl;
4840 Xyce::dout() <<
"k2 = " <<
model_.
k2 << std::endl;
4841 Xyce::dout() <<
"k3 = " <<
model_.
k3 << std::endl;
4842 Xyce::dout() <<
"k3b = " <<
model_.
k3b << std::endl;
4843 Xyce::dout() <<
"w0 = " <<
model_.
w0 << std::endl;
4844 Xyce::dout() <<
"nlx = " <<
model_.
nlx << std::endl;
4845 Xyce::dout() <<
"dvt0 = " <<
model_.
dvt0 << std::endl;
4846 Xyce::dout() <<
"dvt1 = " <<
model_.
dvt1 << std::endl;
4847 Xyce::dout() <<
"dvt2 = " <<
model_.
dvt2 << std::endl;
4848 Xyce::dout() <<
"dvt0w = " <<
model_.
dvt0w << std::endl;
4849 Xyce::dout() <<
"dvt1w = " <<
model_.
dvt1w << std::endl;
4850 Xyce::dout() <<
"dvt2w = " <<
model_.
dvt2w << std::endl;
4851 Xyce::dout() <<
"drout = " <<
model_.
drout << std::endl;
4852 Xyce::dout() <<
"dsub = " <<
model_.
dsub << std::endl;
4853 Xyce::dout() <<
"vth0= " <<
model_.
vth0 << std::endl;
4854 Xyce::dout() <<
"ua = " <<
model_.
ua << std::endl;
4855 Xyce::dout() <<
"ua1 = " <<
model_.
ua1 << std::endl;
4856 Xyce::dout() <<
"ub = " <<
model_.
ub << std::endl;
4857 Xyce::dout() <<
"ub1 = " <<
model_.
ub1 << std::endl;
4858 Xyce::dout() <<
"uc = " <<
model_.
uc << std::endl;
4859 Xyce::dout() <<
"uc1 = " <<
model_.
uc1 << std::endl;
4860 Xyce::dout() <<
"u0 = " <<
model_.
u0 << std::endl;
4861 Xyce::dout() <<
"ute = " <<
model_.
ute << std::endl;
4862 Xyce::dout() <<
"voff = " <<
model_.
voff << std::endl;
4863 Xyce::dout() <<
"tnom = " <<
model_.
tnom << std::endl;
4864 Xyce::dout() <<
"cgso = " <<
model_.
cgso << std::endl;
4865 Xyce::dout() <<
"cgdo = " <<
model_.
cgdo << std::endl;
4866 Xyce::dout() <<
"xpart = " <<
model_.
xpart << std::endl;
4867 Xyce::dout() <<
"delta = " <<
model_.
delta << std::endl;
4869 Xyce::dout() <<
"rdsw = " <<
model_.
rdsw << std::endl;
4870 Xyce::dout() <<
"prwg = " <<
model_.
prwg << std::endl;
4871 Xyce::dout() <<
"prwb = " <<
model_.
prwb << std::endl;
4872 Xyce::dout() <<
"prt = " <<
model_.
prt << std::endl;
4873 Xyce::dout() <<
"eta0 = " <<
model_.
eta0 << std::endl;
4874 Xyce::dout() <<
"etab = " <<
model_.
etab << std::endl;
4875 Xyce::dout() <<
"pclm = " <<
model_.
pclm << std::endl;
4876 Xyce::dout() <<
"pdibl1 = " <<
model_.
pdibl1 << std::endl;
4877 Xyce::dout() <<
"pdibl2 = " <<
model_.
pdibl2 << std::endl;
4878 Xyce::dout() <<
"pdiblb = " <<
model_.
pdiblb << std::endl;
4879 Xyce::dout() <<
"pvag = " <<
model_.
pvag << std::endl;
4880 Xyce::dout() <<
"shMod = " <<
model_.
shMod << std::endl;
4881 Xyce::dout() <<
"tbox = " <<
model_.
tbox << std::endl;
4882 Xyce::dout() <<
"tsi = " <<
model_.
tsi << std::endl;
4883 Xyce::dout() <<
"xj = " <<
model_.
xj << std::endl;
4884 Xyce::dout() <<
"rth0 = " <<
model_.
rth0 << std::endl;
4885 Xyce::dout() <<
"cth0 = " <<
model_.
cth0 << std::endl;
4886 Xyce::dout() <<
"ngidl = " <<
model_.
ngidl << std::endl;
4887 Xyce::dout() <<
"agidl = " <<
model_.
agidl << std::endl;
4888 Xyce::dout() <<
"bgidl = " <<
model_.
bgidl << std::endl;
4889 Xyce::dout() <<
"ndiode = " <<
model_.
ndiode << std::endl;
4890 Xyce::dout() <<
"xbjt = " <<
model_.
xbjt << std::endl;
4891 Xyce::dout() <<
"xdif = " <<
model_.
xdif << std::endl;
4892 Xyce::dout() <<
"xrec = " <<
model_.
xrec << std::endl;
4893 Xyce::dout() <<
"xtun = " <<
model_.
xtun << std::endl;
4897 Xyce::dout() <<
"Lint = " <<
model_.
Lint << std::endl;
4898 Xyce::dout() <<
"Ll = " <<
model_.
Ll << std::endl;
4899 Xyce::dout() <<
"Llc = " <<
model_.
Llc << std::endl;
4900 Xyce::dout() <<
"Lln = " <<
model_.
Lln << std::endl;
4901 Xyce::dout() <<
"Lw = " <<
model_.
Lw << std::endl;
4902 Xyce::dout() <<
"Lwc = " <<
model_.
Lwc << std::endl;
4903 Xyce::dout() <<
"Lwn = " <<
model_.
Lwn << std::endl;
4904 Xyce::dout() <<
"Lwl = " <<
model_.
Lwl << std::endl;
4905 Xyce::dout() <<
"Lwlc = " <<
model_.
Lwlc << std::endl;
4906 Xyce::dout() <<
"wr = " <<
model_.
wr << std::endl;
4907 Xyce::dout() <<
"Wint = " <<
model_.
Wint << std::endl;
4908 Xyce::dout() <<
"dwg = " <<
model_.
dwg << std::endl;
4909 Xyce::dout() <<
"dwb = " <<
model_.
dwb << std::endl;
4910 Xyce::dout() <<
"Wl = " <<
model_.
Wl << std::endl;
4911 Xyce::dout() <<
"Wlc = " <<
model_.
Wlc << std::endl;
4912 Xyce::dout() <<
"Wln = " <<
model_.
Wln << std::endl;
4913 Xyce::dout() <<
"Ww = " <<
model_.
Ww << std::endl;
4914 Xyce::dout() <<
"Wwc = " <<
model_.
Wwc << std::endl;
4915 Xyce::dout() <<
"Wwn = " <<
model_.
Wwn << std::endl;
4916 Xyce::dout() <<
"Wwl = " <<
model_.
Wwl << std::endl;
4917 Xyce::dout() <<
"Wwlc = " <<
model_.
Wwlc << std::endl;
4918 Xyce::dout() <<
"b0 = " <<
model_.
b0 << std::endl;
4919 Xyce::dout() <<
"b1 = " <<
model_.
b1 << std::endl;
4920 Xyce::dout() <<
"cgsl = " <<
model_.
cgsl << std::endl;
4921 Xyce::dout() <<
"cgdl = " <<
model_.
cgdl << std::endl;
4922 Xyce::dout() <<
"ckappa = " <<
model_.
ckappa << std::endl;
4923 Xyce::dout() <<
"cf = " <<
model_.
cf << std::endl;
4924 Xyce::dout() <<
"clc = " <<
model_.
clc << std::endl;
4925 Xyce::dout() <<
"cle = " <<
model_.
cle << std::endl;
4926 Xyce::dout() <<
"dwc = " <<
model_.
dwc << std::endl;
4927 Xyce::dout() <<
"dlc = " <<
model_.
dlc << std::endl;
4928 Xyce::dout() <<
"alpha0 = " <<
model_.
alpha0 << std::endl;
4932 Xyce::dout() <<
"fnoiMod = " <<
model_.
fnoiMod << std::endl;
4933 Xyce::dout() <<
"tnoiMod = " <<
model_.
tnoiMod << std::endl;
4934 Xyce::dout() <<
"tnoia = " <<
model_.
tnoia << std::endl;
4935 Xyce::dout() <<
"tnoib = " <<
model_.
tnoib << std::endl;
4936 Xyce::dout() <<
"rnoia = " <<
model_.
rnoia << std::endl;
4937 Xyce::dout() <<
"rnoib = " <<
model_.
rnoib << std::endl;
4938 Xyce::dout() <<
"ntnoi = " <<
model_.
ntnoi << std::endl;
4939 Xyce::dout() <<
"em = " <<
model_.
em << std::endl;
4940 Xyce::dout() <<
"ef = " <<
model_.
ef << std::endl;
4941 Xyce::dout() <<
"af = " <<
model_.
af << std::endl;
4942 Xyce::dout() <<
"kf = " <<
model_.
kf << std::endl;
4943 Xyce::dout() <<
"noif = " <<
model_.
noif << std::endl;
4944 Xyce::dout() <<
"k1w1 = " <<
model_.
k1w1 << std::endl;
4945 Xyce::dout() <<
"k1w2 = " <<
model_.
k1w2 << std::endl;
4946 Xyce::dout() <<
"ketas = " <<
model_.
ketas << std::endl;
4947 Xyce::dout() <<
"dwbc = " <<
model_.
dwbc << std::endl;
4948 Xyce::dout() <<
"beta0 = " <<
model_.
beta0 << std::endl;
4949 Xyce::dout() <<
"beta1 = " <<
model_.
beta1 << std::endl;
4950 Xyce::dout() <<
"beta2 = " <<
model_.
beta2 << std::endl;
4952 Xyce::dout() <<
"tii = " <<
model_.
tii << std::endl;
4953 Xyce::dout() <<
"lii = " <<
model_.
lii << std::endl;
4954 Xyce::dout() <<
"sii0 = " <<
model_.
sii0 << std::endl;
4955 Xyce::dout() <<
"sii1 = " <<
model_.
sii1 << std::endl;
4956 Xyce::dout() <<
"sii2 = " <<
model_.
sii2 << std::endl;
4957 Xyce::dout() <<
"siid = " <<
model_.
siid << std::endl;
4958 Xyce::dout() <<
"fbjtii = " <<
model_.
fbjtii << std::endl;
4959 Xyce::dout() <<
"esatii = " <<
model_.
esatii << std::endl;
4960 Xyce::dout() <<
"ntun = " <<
model_.
ntun << std::endl;
4961 Xyce::dout() <<
"nrecf0 = " <<
model_.
nrecf0 << std::endl;
4962 Xyce::dout() <<
"nrecr0 = " <<
model_.
nrecr0 << std::endl;
4963 Xyce::dout() <<
"isbjt = " <<
model_.
isbjt << std::endl;
4964 Xyce::dout() <<
"isdif = " <<
model_.
isdif << std::endl;
4965 Xyce::dout() <<
"isrec = " <<
model_.
isrec << std::endl;
4966 Xyce::dout() <<
"istun = " <<
model_.
istun << std::endl;
4967 Xyce::dout() <<
"ln = " <<
model_.
ln << std::endl;
4968 Xyce::dout() <<
"vrec0 = " <<
model_.
vrec0 << std::endl;
4969 Xyce::dout() <<
"vtun0 = " <<
model_.
vtun0 << std::endl;
4970 Xyce::dout() <<
"nbjt = " <<
model_.
nbjt << std::endl;
4971 Xyce::dout() <<
"lbjt0 = " <<
model_.
lbjt0 << std::endl;
4972 Xyce::dout() <<
"ldif0 = " <<
model_.
ldif0 << std::endl;
4973 Xyce::dout() <<
"vabjt = " <<
model_.
vabjt << std::endl;
4974 Xyce::dout() <<
"aely = " <<
model_.
aely << std::endl;
4975 Xyce::dout() <<
"ahli = " <<
model_.
ahli << std::endl;
4976 Xyce::dout() <<
"rbody = " <<
model_.
rbody << std::endl;
4977 Xyce::dout() <<
"rbsh = " <<
model_.
rbsh << std::endl;
4978 Xyce::dout() <<
"cgeo = " <<
model_.
cgeo << std::endl;
4979 Xyce::dout() <<
"tt = " <<
model_.
tt << std::endl;
4980 Xyce::dout() <<
"ndif = " <<
model_.
ndif << std::endl;
4981 Xyce::dout() <<
"vsdfb = " <<
model_.
vsdfb << std::endl;
4982 Xyce::dout() <<
"vsdth = " <<
model_.
vsdth << std::endl;
4983 Xyce::dout() <<
"csdmin = " <<
model_.
csdmin << std::endl;
4984 Xyce::dout() <<
"asd = " <<
model_.
asd << std::endl;
4985 Xyce::dout() <<
"csdesw = " <<
model_.
csdesw << std::endl;
4986 Xyce::dout() <<
"ntrecf = " <<
model_.
ntrecf << std::endl;
4987 Xyce::dout() <<
"ntrecr = " <<
model_.
ntrecr << std::endl;
4988 Xyce::dout() <<
"dlcb = " <<
model_.
dlcb << std::endl;
4989 Xyce::dout() <<
"fbody = " <<
model_.
fbody << std::endl;
4990 Xyce::dout() <<
"tcjswg = " <<
model_.
tcjswg << std::endl;
4991 Xyce::dout() <<
"tpbswg = " <<
model_.
tpbswg << std::endl;
4992 Xyce::dout() <<
"acde = " <<
model_.
acde << std::endl;
4993 Xyce::dout() <<
"moin = " <<
model_.
moin << std::endl;
4994 Xyce::dout() <<
"noff = " <<
model_.
noff << std::endl;
4995 Xyce::dout() <<
"delvt = " <<
model_.
delvt << std::endl;
4996 Xyce::dout() <<
"kb1 = " <<
model_.
kb1 << std::endl;
4997 Xyce::dout() <<
"dlbg = " <<
model_.
dlbg << std::endl;
4998 Xyce::dout() <<
"igbMod = " <<
model_.
igbMod << std::endl;
4999 Xyce::dout() <<
"igcMod= " <<
model_.
igcMod << std::endl;
5000 Xyce::dout() <<
"toxqm = " <<
model_.
toxqm << std::endl;
5001 Xyce::dout() <<
"wth0 = " <<
model_.
wth0 << std::endl;
5002 Xyce::dout() <<
"rhalo = " <<
model_.
rhalo << std::endl;
5003 Xyce::dout() <<
"ntox = " <<
model_.
ntox << std::endl;
5004 Xyce::dout() <<
"toxref = " <<
model_.
toxref << std::endl;
5005 Xyce::dout() <<
"ebg = " <<
model_.
ebg << std::endl;
5006 Xyce::dout() <<
"vevb = " <<
model_.
vevb << std::endl;
5008 Xyce::dout() <<
"betaGB1 = " <<
model_.
betaGB1 << std::endl;
5009 Xyce::dout() <<
"vgb1 = " <<
model_.
vgb1 << std::endl;
5010 Xyce::dout() <<
"vecb = " <<
model_.
vecb << std::endl;
5012 Xyce::dout() <<
"betaGB2 = " <<
model_.
betaGB2 << std::endl;
5013 Xyce::dout() <<
"vgb2 = " <<
model_.
vgb2 << std::endl;
5014 Xyce::dout() <<
"voxh = " <<
model_.
voxh << std::endl;
5016 Xyce::dout() <<
"aigc = " <<
model_.
aigc << std::endl;
5017 Xyce::dout() <<
"bigc = " <<
model_.
bigc << std::endl;
5018 Xyce::dout() <<
"cigc = " <<
model_.
cigc << std::endl;
5019 Xyce::dout() <<
"aigsd = " <<
model_.
aigsd << std::endl;
5020 Xyce::dout() <<
"bigsd = " <<
model_.
bigsd << std::endl;
5021 Xyce::dout() <<
"cigsd = " <<
model_.
cigsd << std::endl;
5022 Xyce::dout() <<
"nigc = " <<
model_.
nigc << std::endl;
5023 Xyce::dout() <<
"pigcd = " <<
model_.
pigcd << std::endl;
5024 Xyce::dout() <<
"poxedge = " <<
model_.
poxedge << std::endl;
5025 Xyce::dout() <<
"dlcig = " <<
model_.
dlcig << std::endl;
5026 Xyce::dout() <<
"soiMod = " <<
model_.
soiMod << std::endl;
5027 Xyce::dout() <<
"vbs0pd = " <<
model_.
vbs0pd << std::endl;
5028 Xyce::dout() <<
"vbs0fd = " <<
model_.
vbs0fd << std::endl;
5029 Xyce::dout() <<
"vbsa = " <<
model_.
vbsa << std::endl;
5030 Xyce::dout() <<
"nofffd = " <<
model_.
nofffd << std::endl;
5031 Xyce::dout() <<
"vofffd = " <<
model_.
vofffd << std::endl;
5032 Xyce::dout() <<
"k1b = " <<
model_.
k1b << std::endl;
5033 Xyce::dout() <<
"k2b = " <<
model_.
k2b << std::endl;
5034 Xyce::dout() <<
"dk2b = " <<
model_.
dk2b << std::endl;
5035 Xyce::dout() <<
"dvbd0 = " <<
model_.
dvbd0 << std::endl;
5036 Xyce::dout() <<
"dvbd1 = " <<
model_.
dvbd1 << std::endl;
5037 Xyce::dout() <<
"moinFD = " <<
model_.
moinFD << std::endl;
5039 Xyce::dout() <<
"xrcrg1 = " <<
model_.
xrcrg1 << std::endl;
5040 Xyce::dout() <<
"xrcrg2 = " <<
model_.
xrcrg2 << std::endl;
5041 Xyce::dout() <<
"rshg = " <<
model_.
rshg << std::endl;
5042 Xyce::dout() <<
"ngcon = " <<
model_.
ngcon << std::endl;
5043 Xyce::dout() <<
"xgw = " <<
model_.
xgw << std::endl;
5044 Xyce::dout() <<
"xgl = " <<
model_.
xgl << std::endl;
5045 Xyce::dout() <<
"lxj = " <<
model_.
lxj << std::endl;
5050 Xyce::dout() <<
"lcgsl = " <<
model_.
lcgsl << std::endl;
5051 Xyce::dout() <<
"lcgdl = " <<
model_.
lcgdl << std::endl;
5052 Xyce::dout() <<
"lckappa = " <<
model_.
lckappa << std::endl;
5053 Xyce::dout() <<
"lndif = " <<
model_.
lndif << std::endl;
5054 Xyce::dout() <<
"lute = " <<
model_.
lute << std::endl;
5055 Xyce::dout() <<
"lkt1 = " <<
model_.
lkt1 << std::endl;
5056 Xyce::dout() <<
"lkt1l = " <<
model_.
lkt1l << std::endl;
5057 Xyce::dout() <<
"lkt2 = " <<
model_.
lkt2 << std::endl;
5058 Xyce::dout() <<
"lua1 = " <<
model_.
lua1 << std::endl;
5059 Xyce::dout() <<
"lub1 = " <<
model_.
lub1 << std::endl;
5060 Xyce::dout() <<
"luc1 = " <<
model_.
luc1 << std::endl;
5061 Xyce::dout() <<
"lat = " <<
model_.
lat << std::endl;
5062 Xyce::dout() <<
"lprt = " <<
model_.
lprt << std::endl;
5063 Xyce::dout() <<
"lntrecf = " <<
model_.
lntrecf << std::endl;
5064 Xyce::dout() <<
"lntrecr = " <<
model_.
lntrecr << std::endl;
5065 Xyce::dout() <<
"lxbjt = " <<
model_.
lxbjt << std::endl;
5066 Xyce::dout() <<
"lxdif = " <<
model_.
lxdif << std::endl;
5067 Xyce::dout() <<
"lxrec = " <<
model_.
lxrec << std::endl;
5068 Xyce::dout() <<
"lxtun = " <<
model_.
lxtun << std::endl;
5069 Xyce::dout() <<
"laigc = " <<
model_.
laigc << std::endl;
5070 Xyce::dout() <<
"lbigc = " <<
model_.
lbigc << std::endl;
5071 Xyce::dout() <<
"lcigc = " <<
model_.
lcigc << std::endl;
5072 Xyce::dout() <<
"laigsd = " <<
model_.
laigsd << std::endl;
5073 Xyce::dout() <<
"lbigsd = " <<
model_.
lbigsd << std::endl;
5074 Xyce::dout() <<
"lcigsd = " <<
model_.
lcigsd << std::endl;
5075 Xyce::dout() <<
"lnigc = " <<
model_.
lnigc << std::endl;
5076 Xyce::dout() <<
"lpigcd = " <<
model_.
lpigcd << std::endl;
5078 Xyce::dout() <<
"lnpeak = " <<
model_.
lnpeak << std::endl;
5079 Xyce::dout() <<
"lnsub = " <<
model_.
lnsub << std::endl;
5080 Xyce::dout() <<
"lngate = " <<
model_.
lngate << std::endl;
5081 Xyce::dout() <<
"lvth0 = " <<
model_.
lvth0 << std::endl;
5082 Xyce::dout() <<
"lk1 = " <<
model_.
lk1 << std::endl;
5083 Xyce::dout() <<
"lk1w1 = " <<
model_.
lk1w1 << std::endl;
5084 Xyce::dout() <<
"lk1w2 = " <<
model_.
lk1w2 << std::endl;
5085 Xyce::dout() <<
"lk2 = " <<
model_.
lk2 << std::endl;
5086 Xyce::dout() <<
"lk3 = " <<
model_.
lk3 << std::endl;
5087 Xyce::dout() <<
"lk3b = " <<
model_.
lk3b << std::endl;
5088 Xyce::dout() <<
"lkb1 = " <<
model_.
lkb1 << std::endl;
5089 Xyce::dout() <<
"lw0 = " <<
model_.
lw0 << std::endl;
5090 Xyce::dout() <<
"lnlx = " <<
model_.
lnlx << std::endl;
5091 Xyce::dout() <<
"ldvt0 = " <<
model_.
ldvt0 << std::endl;
5092 Xyce::dout() <<
"ldvt1 = " <<
model_.
ldvt1 << std::endl;
5093 Xyce::dout() <<
"ldvt2 = " <<
model_.
ldvt2 << std::endl;
5094 Xyce::dout() <<
"ldvt0w = " <<
model_.
ldvt0w << std::endl;
5095 Xyce::dout() <<
"ldvt1w = " <<
model_.
ldvt1w << std::endl;
5096 Xyce::dout() <<
"ldvt2w = " <<
model_.
ldvt2w << std::endl;
5097 Xyce::dout() <<
"lu0 = " <<
model_.
lu0 << std::endl;
5098 Xyce::dout() <<
"lua = " <<
model_.
lua << std::endl;
5099 Xyce::dout() <<
"lub = " <<
model_.
lub << std::endl;
5100 Xyce::dout() <<
"luc = " <<
model_.
luc << std::endl;
5101 Xyce::dout() <<
"lvsat = " <<
model_.
lvsat << std::endl;
5102 Xyce::dout() <<
"la0 = " <<
model_.
la0 << std::endl;
5103 Xyce::dout() <<
"lags = " <<
model_.
lags << std::endl;
5104 Xyce::dout() <<
"lb0 = " <<
model_.
lb0 << std::endl;
5105 Xyce::dout() <<
"lb1 = " <<
model_.
lb1 << std::endl;
5106 Xyce::dout() <<
"lketa = " <<
model_.
lketa << std::endl;
5107 Xyce::dout() <<
"lketas = " <<
model_.
lketas << std::endl;
5108 Xyce::dout() <<
"la1 = " <<
model_.
la1 << std::endl;
5109 Xyce::dout() <<
"la2 = " <<
model_.
la2 << std::endl;
5110 Xyce::dout() <<
"lrdsw = " <<
model_.
lrdsw << std::endl;
5111 Xyce::dout() <<
"lprwb = " <<
model_.
lprwb << std::endl;
5112 Xyce::dout() <<
"lprwg = " <<
model_.
lprwg << std::endl;
5113 Xyce::dout() <<
"lwr = " <<
model_.
lwr << std::endl;
5115 Xyce::dout() <<
"ldwg = " <<
model_.
ldwg << std::endl;
5116 Xyce::dout() <<
"ldwb = " <<
model_.
ldwb << std::endl;
5117 Xyce::dout() <<
"lvoff = " <<
model_.
lvoff << std::endl;
5118 Xyce::dout() <<
"leta0 = " <<
model_.
leta0 << std::endl;
5119 Xyce::dout() <<
"letab = " <<
model_.
letab << std::endl;
5120 Xyce::dout() <<
"ldsub = " <<
model_.
ldsub << std::endl;
5121 Xyce::dout() <<
"lcit = " <<
model_.
lcit << std::endl;
5122 Xyce::dout() <<
"lcdsc = " <<
model_.
lcdsc << std::endl;
5123 Xyce::dout() <<
"lcdscb = " <<
model_.
lcdscb << std::endl;
5124 Xyce::dout() <<
"lcdscd = " <<
model_.
lcdscd << std::endl;
5125 Xyce::dout() <<
"lpclm = " <<
model_.
lpclm << std::endl;
5126 Xyce::dout() <<
"lpdibl1 = " <<
model_.
lpdibl1 << std::endl;
5127 Xyce::dout() <<
"lpdibl2 = " <<
model_.
lpdibl2 << std::endl;
5128 Xyce::dout() <<
"lpdiblb = " <<
model_.
lpdiblb << std::endl;
5129 Xyce::dout() <<
"ldrout = " <<
model_.
ldrout << std::endl;
5130 Xyce::dout() <<
"lpvag = " <<
model_.
lpvag << std::endl;
5131 Xyce::dout() <<
"ldelta = " <<
model_.
ldelta << std::endl;
5132 Xyce::dout() <<
"lalpha0 = " <<
model_.
lalpha0 << std::endl;
5133 Xyce::dout() <<
"lfbjtii = " <<
model_.
lfbjtii << std::endl;
5134 Xyce::dout() <<
"lbeta0 = " <<
model_.
lbeta0 << std::endl;
5135 Xyce::dout() <<
"lbeta1 = " <<
model_.
lbeta1 << std::endl;
5136 Xyce::dout() <<
"lbeta2 = " <<
model_.
lbeta2 << std::endl;
5138 Xyce::dout() <<
"llii = " <<
model_.
llii << std::endl;
5139 Xyce::dout() <<
"lesatii = " <<
model_.
lesatii << std::endl;
5140 Xyce::dout() <<
"lsii0 = " <<
model_.
lsii0 << std::endl;
5141 Xyce::dout() <<
"lsii1 = " <<
model_.
lsii1 << std::endl;
5142 Xyce::dout() <<
"lsii2 = " <<
model_.
lsii2 << std::endl;
5143 Xyce::dout() <<
"lsiid = " <<
model_.
lsiid << std::endl;
5144 Xyce::dout() <<
"lagidl = " <<
model_.
lagidl << std::endl;
5145 Xyce::dout() <<
"lbgidl = " <<
model_.
lbgidl << std::endl;
5146 Xyce::dout() <<
"lngidl = " <<
model_.
lngidl << std::endl;
5147 Xyce::dout() <<
"lntun = " <<
model_.
lntun << std::endl;
5148 Xyce::dout() <<
"lndiode = " <<
model_.
lndiode << std::endl;
5149 Xyce::dout() <<
"lnrecf0 = " <<
model_.
lnrecf0 << std::endl;
5150 Xyce::dout() <<
"lnrecr0 = " <<
model_.
lnrecr0 << std::endl;
5151 Xyce::dout() <<
"lisbjt = " <<
model_.
lisbjt << std::endl;
5152 Xyce::dout() <<
"lisdif = " <<
model_.
lisdif << std::endl;
5153 Xyce::dout() <<
"lisrec = " <<
model_.
lisrec << std::endl;
5154 Xyce::dout() <<
"listun = " <<
model_.
listun << std::endl;
5155 Xyce::dout() <<
"lvrec0 = " <<
model_.
lvrec0 << std::endl;
5156 Xyce::dout() <<
"lvtun0 = " <<
model_.
lvtun0 << std::endl;
5157 Xyce::dout() <<
"lnbjt = " <<
model_.
lnbjt << std::endl;
5158 Xyce::dout() <<
"llbjt0 = " <<
model_.
llbjt0 << std::endl;
5159 Xyce::dout() <<
"lvabjt = " <<
model_.
lvabjt << std::endl;
5160 Xyce::dout() <<
"laely = " <<
model_.
laely << std::endl;
5161 Xyce::dout() <<
"lahli = " <<
model_.
lahli << std::endl;
5162 Xyce::dout() <<
"lvsdfb = " <<
model_.
lvsdfb << std::endl;
5163 Xyce::dout() <<
"lvsdth = " <<
model_.
lvsdth << std::endl;
5164 Xyce::dout() <<
"ldelvt = " <<
model_.
ldelvt << std::endl;
5165 Xyce::dout() <<
"lacde = " <<
model_.
lacde << std::endl;
5166 Xyce::dout() <<
"lmoin = " <<
model_.
lmoin << std::endl;
5167 Xyce::dout() <<
"lnoff = " <<
model_.
lnoff << std::endl;
5168 Xyce::dout() <<
"lxrcrg1 = " <<
model_.
lxrcrg1 << std::endl;
5169 Xyce::dout() <<
"lxrcrg2 = " <<
model_.
lxrcrg2 << std::endl;
5170 Xyce::dout() <<
"wxj = " <<
model_.
wxj << std::endl;
5175 Xyce::dout() <<
"wcgsl = " <<
model_.
wcgsl << std::endl;
5176 Xyce::dout() <<
"wcgdl = " <<
model_.
wcgdl << std::endl;
5177 Xyce::dout() <<
"wckappa = " <<
model_.
wckappa << std::endl;
5178 Xyce::dout() <<
"wndif = " <<
model_.
wndif << std::endl;
5179 Xyce::dout() <<
"wute = " <<
model_.
wute << std::endl;
5180 Xyce::dout() <<
"wkt1 = " <<
model_.
wkt1 << std::endl;
5181 Xyce::dout() <<
"wkt1l = " <<
model_.
wkt1l << std::endl;
5182 Xyce::dout() <<
"wkt2 = " <<
model_.
wkt2 << std::endl;
5183 Xyce::dout() <<
"wua1 = " <<
model_.
wua1 << std::endl;
5184 Xyce::dout() <<
"wub1 = " <<
model_.
wub1 << std::endl;
5185 Xyce::dout() <<
"wuc1 = " <<
model_.
wuc1 << std::endl;
5186 Xyce::dout() <<
"wat = " <<
model_.
wat << std::endl;
5187 Xyce::dout() <<
"wprt = " <<
model_.
wprt << std::endl;
5188 Xyce::dout() <<
"wntrecf = " <<
model_.
wntrecf << std::endl;
5189 Xyce::dout() <<
"wntrecr = " <<
model_.
wntrecr << std::endl;
5190 Xyce::dout() <<
"wxbjt = " <<
model_.
wxbjt << std::endl;
5191 Xyce::dout() <<
"wxdif = " <<
model_.
wxdif << std::endl;
5192 Xyce::dout() <<
"wxrec = " <<
model_.
wxrec << std::endl;
5193 Xyce::dout() <<
"wxtun = " <<
model_.
wxtun << std::endl;
5194 Xyce::dout() <<
"waigc = " <<
model_.
waigc << std::endl;
5195 Xyce::dout() <<
"wbigc = " <<
model_.
wbigc << std::endl;
5196 Xyce::dout() <<
"wcigc = " <<
model_.
wcigc << std::endl;
5197 Xyce::dout() <<
"waigsd = " <<
model_.
waigsd << std::endl;
5198 Xyce::dout() <<
"wbigsd = " <<
model_.
wbigsd << std::endl;
5199 Xyce::dout() <<
"wcigsd = " <<
model_.
wcigsd << std::endl;
5200 Xyce::dout() <<
"wnigc = " <<
model_.
wnigc << std::endl;
5201 Xyce::dout() <<
"wpigcd = " <<
model_.
wpigcd << std::endl;
5203 Xyce::dout() <<
"wnpeak = " <<
model_.
wnpeak << std::endl;
5204 Xyce::dout() <<
"wnsub = " <<
model_.
wnsub << std::endl;
5205 Xyce::dout() <<
"wngate = " <<
model_.
wngate << std::endl;
5206 Xyce::dout() <<
"wvth0 = " <<
model_.
wvth0 << std::endl;
5207 Xyce::dout() <<
"wk1 = " <<
model_.
wk1 << std::endl;
5208 Xyce::dout() <<
"wk1w1 = " <<
model_.
wk1w1 << std::endl;
5209 Xyce::dout() <<
"wk1w2 = " <<
model_.
wk1w2 << std::endl;
5210 Xyce::dout() <<
"wk2 = " <<
model_.
wk2 << std::endl;
5211 Xyce::dout() <<
"wk3 = " <<
model_.
wk3 << std::endl;
5212 Xyce::dout() <<
"wk3b = " <<
model_.
wk3b << std::endl;
5213 Xyce::dout() <<
"wkb1 = " <<
model_.
wkb1 << std::endl;
5214 Xyce::dout() <<
"ww0 = " <<
model_.
ww0 << std::endl;
5215 Xyce::dout() <<
"wnlx = " <<
model_.
wnlx << std::endl;
5216 Xyce::dout() <<
"wdvt0 = " <<
model_.
wdvt0 << std::endl;
5217 Xyce::dout() <<
"wdvt1 = " <<
model_.
wdvt1 << std::endl;
5218 Xyce::dout() <<
"wdvt2 = " <<
model_.
wdvt2 << std::endl;
5219 Xyce::dout() <<
"wdvt0w = " <<
model_.
wdvt0w << std::endl;
5220 Xyce::dout() <<
"wdvt1w = " <<
model_.
wdvt1w << std::endl;
5221 Xyce::dout() <<
"wdvt2w = " <<
model_.
wdvt2w << std::endl;
5222 Xyce::dout() <<
"wu0 = " <<
model_.
wu0 << std::endl;
5223 Xyce::dout() <<
"wua = " <<
model_.
wua << std::endl;
5224 Xyce::dout() <<
"wub = " <<
model_.
wub << std::endl;
5225 Xyce::dout() <<
"wuc = " <<
model_.
wuc << std::endl;
5226 Xyce::dout() <<
"wvsat = " <<
model_.
wvsat << std::endl;
5227 Xyce::dout() <<
"wa0 = " <<
model_.
wa0 << std::endl;
5228 Xyce::dout() <<
"wags = " <<
model_.
wags << std::endl;
5229 Xyce::dout() <<
"wb0 = " <<
model_.
wb0 << std::endl;
5230 Xyce::dout() <<
"wb1 = " <<
model_.
wb1 << std::endl;
5231 Xyce::dout() <<
"wketa = " <<
model_.
wketa << std::endl;
5232 Xyce::dout() <<
"wketas = " <<
model_.
wketas << std::endl;
5233 Xyce::dout() <<
"wa1 = " <<
model_.
wa1 << std::endl;
5234 Xyce::dout() <<
"wa2 = " <<
model_.
wa2 << std::endl;
5235 Xyce::dout() <<
"wrdsw= " <<
model_.
wrdsw << std::endl;
5236 Xyce::dout() <<
"wprwb = " <<
model_.
wprwb << std::endl;
5237 Xyce::dout() <<
"wprwg = " <<
model_.
wprwg << std::endl;
5238 Xyce::dout() <<
"wwr = " <<
model_.
wwr << std::endl;
5240 Xyce::dout() <<
"wdwg = " <<
model_.
wdwg << std::endl;
5241 Xyce::dout() <<
"wdwb = " <<
model_.
wdwb << std::endl;
5242 Xyce::dout() <<
"wvoff = " <<
model_.
wvoff << std::endl;
5243 Xyce::dout() <<
"weta0 = " <<
model_.
weta0 << std::endl;
5244 Xyce::dout() <<
"wetab = " <<
model_.
wetab << std::endl;
5245 Xyce::dout() <<
"wdsub = " <<
model_.
wdsub << std::endl;
5246 Xyce::dout() <<
"wcit = " <<
model_.
wcit << std::endl;
5247 Xyce::dout() <<
"wcdsc = " <<
model_.
wcdsc << std::endl;
5248 Xyce::dout() <<
"wcdscb = " <<
model_.
wcdscb << std::endl;
5249 Xyce::dout() <<
"wcdscd = " <<
model_.
wcdscd << std::endl;
5250 Xyce::dout() <<
"wpclm = " <<
model_.
wpclm << std::endl;
5251 Xyce::dout() <<
"wpdibl1 = " <<
model_.
wpdibl1 << std::endl;
5252 Xyce::dout() <<
"wpdibl2 = " <<
model_.
wpdibl2 << std::endl;
5253 Xyce::dout() <<
"wpdiblb = " <<
model_.
wpdiblb << std::endl;
5254 Xyce::dout() <<
"wdrout = " <<
model_.
wdrout << std::endl;
5255 Xyce::dout() <<
"wpvag = " <<
model_.
wpvag << std::endl;
5256 Xyce::dout() <<
"wdelta = " <<
model_.
wdelta << std::endl;
5257 Xyce::dout() <<
"walpha0 = " <<
model_.
walpha0 << std::endl;
5258 Xyce::dout() <<
"wfbjtii = " <<
model_.
wfbjtii << std::endl;
5259 Xyce::dout() <<
"wbeta0 = " <<
model_.
wbeta0 << std::endl;
5260 Xyce::dout() <<
"wbeta1 = " <<
model_.
wbeta1 << std::endl;
5261 Xyce::dout() <<
"wbeta2 = " <<
model_.
wbeta2 << std::endl;
5263 Xyce::dout() <<
"wlii = " <<
model_.
wlii << std::endl;
5264 Xyce::dout() <<
"wesatii = " <<
model_.
wesatii << std::endl;
5265 Xyce::dout() <<
"wsii0 = " <<
model_.
wsii0 << std::endl;
5266 Xyce::dout() <<
"wsii1 = " <<
model_.
wsii1 << std::endl;
5267 Xyce::dout() <<
"wsii2 = " <<
model_.
wsii2 << std::endl;
5268 Xyce::dout() <<
"wsiid = " <<
model_.
wsiid << std::endl;
5269 Xyce::dout() <<
"wagidl = " <<
model_.
wagidl << std::endl;
5270 Xyce::dout() <<
"wbgidl = " <<
model_.
wbgidl << std::endl;
5271 Xyce::dout() <<
"wngidl = " <<
model_.
wngidl << std::endl;
5272 Xyce::dout() <<
"wntun = " <<
model_.
wntun << std::endl;
5273 Xyce::dout() <<
"wndiode = " <<
model_.
wndiode << std::endl;
5274 Xyce::dout() <<
"wnrecf0 = " <<
model_.
wnrecf0 << std::endl;
5275 Xyce::dout() <<
"wnrecr0 = " <<
model_.
wnrecr0 << std::endl;
5276 Xyce::dout() <<
"wisbjt = " <<
model_.
wisbjt << std::endl;
5277 Xyce::dout() <<
"wisdif = " <<
model_.
wisdif << std::endl;
5278 Xyce::dout() <<
"wisrec = " <<
model_.
wisrec << std::endl;
5279 Xyce::dout() <<
"wistun = " <<
model_.
wistun << std::endl;
5280 Xyce::dout() <<
"wvrec0 = " <<
model_.
wvrec0 << std::endl;
5281 Xyce::dout() <<
"wvtun0 = " <<
model_.
wvtun0 << std::endl;
5282 Xyce::dout() <<
"wnbjt = " <<
model_.
wnbjt << std::endl;
5283 Xyce::dout() <<
"wlbjt0 = " <<
model_.
wlbjt0 << std::endl;
5284 Xyce::dout() <<
"wvabjt = " <<
model_.
wvabjt << std::endl;
5285 Xyce::dout() <<
"waely = " <<
model_.
waely << std::endl;
5286 Xyce::dout() <<
"wahli = " <<
model_.
wahli << std::endl;
5287 Xyce::dout() <<
"wvsdfb = " <<
model_.
wvsdfb << std::endl;
5288 Xyce::dout() <<
"wvsdth = " <<
model_.
wvsdth << std::endl;
5289 Xyce::dout() <<
"wdelvt = " <<
model_.
wdelvt << std::endl;
5290 Xyce::dout() <<
"wacde = " <<
model_.
wacde << std::endl;
5291 Xyce::dout() <<
"wmoin = " <<
model_.
wmoin << std::endl;
5292 Xyce::dout() <<
"wnoff = " <<
model_.
wnoff << std::endl;
5293 Xyce::dout() <<
"wxrcrg1 = " <<
model_.
wxrcrg1 << std::endl;
5294 Xyce::dout() <<
"wxrcrg2 = " <<
model_.
wxrcrg2 << std::endl;
5295 Xyce::dout() <<
"pxj = " <<
model_.
pxj << std::endl;
5300 Xyce::dout() <<
"pcgsl = " <<
model_.
pcgsl << std::endl;
5301 Xyce::dout() <<
"pcgdl = " <<
model_.
pcgdl << std::endl;
5302 Xyce::dout() <<
"pckappa = " <<
model_.
pckappa << std::endl;
5303 Xyce::dout() <<
"pndif = " <<
model_.
pndif << std::endl;
5304 Xyce::dout() <<
"pute = " <<
model_.
pute << std::endl;
5305 Xyce::dout() <<
"pkt1 = " <<
model_.
pkt1 << std::endl;
5306 Xyce::dout() <<
"pkt1l = " <<
model_.
pkt1l << std::endl;
5307 Xyce::dout() <<
"pkt2 = " <<
model_.
pkt2 << std::endl;
5308 Xyce::dout() <<
"pua1 = " <<
model_.
pua1 << std::endl;
5309 Xyce::dout() <<
"pub1 = " <<
model_.
pub1 << std::endl;
5310 Xyce::dout() <<
"puc1 = " <<
model_.
puc1 << std::endl;
5311 Xyce::dout() <<
"pat = " <<
model_.
pat << std::endl;
5312 Xyce::dout() <<
"pprt = " <<
model_.
pprt << std::endl;
5313 Xyce::dout() <<
"pntrecf = " <<
model_.
pntrecf << std::endl;
5314 Xyce::dout() <<
"pntrecr = " <<
model_.
pntrecr << std::endl;
5315 Xyce::dout() <<
"pxbjt = " <<
model_.
pxbjt << std::endl;
5316 Xyce::dout() <<
"pxdif = " <<
model_.
pxdif << std::endl;
5317 Xyce::dout() <<
"pxrec = " <<
model_.
pxrec << std::endl;
5318 Xyce::dout() <<
"pxtun = " <<
model_.
pxtun << std::endl;
5319 Xyce::dout() <<
"paigc = " <<
model_.
paigc << std::endl;
5320 Xyce::dout() <<
"pbigc = " <<
model_.
pbigc << std::endl;
5321 Xyce::dout() <<
"pcigc = " <<
model_.
pcigc << std::endl;
5322 Xyce::dout() <<
"paigsd = " <<
model_.
paigsd << std::endl;
5323 Xyce::dout() <<
"pbigsd = " <<
model_.
pbigsd << std::endl;
5324 Xyce::dout() <<
"pcigsd = " <<
model_.
pcigsd << std::endl;
5325 Xyce::dout() <<
"pnigc = " <<
model_.
pnigc << std::endl;
5326 Xyce::dout() <<
"ppigcd = " <<
model_.
ppigcd << std::endl;
5328 Xyce::dout() <<
"pnpeak = " <<
model_.
pnpeak << std::endl;
5329 Xyce::dout() <<
"pnsub = " <<
model_.
pnsub << std::endl;
5330 Xyce::dout() <<
"pngate = " <<
model_.
pngate << std::endl;
5331 Xyce::dout() <<
"pvth0 = " <<
model_.
pvth0 << std::endl;
5332 Xyce::dout() <<
"pk1 = " <<
model_.
pk1 << std::endl;
5333 Xyce::dout() <<
"pk1w1 = " <<
model_.
pk1w1 << std::endl;
5334 Xyce::dout() <<
"pk1w2 = " <<
model_.
pk1w2 << std::endl;
5335 Xyce::dout() <<
"pk2 = " <<
model_.
pk2 << std::endl;
5336 Xyce::dout() <<
"pk3 = " <<
model_.
pk3 << std::endl;
5337 Xyce::dout() <<
"pk3b = " <<
model_.
pk3b << std::endl;
5338 Xyce::dout() <<
"pkb1 = " <<
model_.
pkb1 << std::endl;
5339 Xyce::dout() <<
"pw0 = " <<
model_.
pw0 << std::endl;
5340 Xyce::dout() <<
"pnlx = " <<
model_.
pnlx << std::endl;
5341 Xyce::dout() <<
"pdvt0 = " <<
model_.
pdvt0 << std::endl;
5342 Xyce::dout() <<
"pdvt1 = " <<
model_.
pdvt1 << std::endl;
5343 Xyce::dout() <<
"pdvt2 = " <<
model_.
pdvt2 << std::endl;
5344 Xyce::dout() <<
"pdvt0w = " <<
model_.
pdvt0w << std::endl;
5345 Xyce::dout() <<
"pdvt1w = " <<
model_.
pdvt1w << std::endl;
5346 Xyce::dout() <<
"pdvt2w = " <<
model_.
pdvt2w << std::endl;
5347 Xyce::dout() <<
"pu0 = " <<
model_.
pu0 << std::endl;
5348 Xyce::dout() <<
"pua = " <<
model_.
pua << std::endl;
5349 Xyce::dout() <<
"pub = " <<
model_.
pub << std::endl;
5350 Xyce::dout() <<
"puc = " <<
model_.
puc << std::endl;
5351 Xyce::dout() <<
"pvsat = " <<
model_.
pvsat << std::endl;
5352 Xyce::dout() <<
"pa0 = " <<
model_.
pa0 << std::endl;
5353 Xyce::dout() <<
"pags = " <<
model_.
pags << std::endl;
5354 Xyce::dout() <<
"pb0 = " <<
model_.
pb0 << std::endl;
5355 Xyce::dout() <<
"pb1 = " <<
model_.
pb1 << std::endl;
5356 Xyce::dout() <<
"pketa = " <<
model_.
pketa << std::endl;
5357 Xyce::dout() <<
"pketas = " <<
model_.
pketas << std::endl;
5358 Xyce::dout() <<
"pa1 = " <<
model_.
pa1 << std::endl;
5359 Xyce::dout() <<
"pa2 = " <<
model_.
pa2 << std::endl;
5360 Xyce::dout() <<
"prdsw = " <<
model_.
prdsw << std::endl;
5361 Xyce::dout() <<
"pprwb = " <<
model_.
pprwb << std::endl;
5362 Xyce::dout() <<
"pprwg = " <<
model_.
pprwg << std::endl;
5363 Xyce::dout() <<
"pwr = " <<
model_.
pwr << std::endl;
5365 Xyce::dout() <<
"pdwg = " <<
model_.
pdwg << std::endl;
5366 Xyce::dout() <<
"pdwb = " <<
model_.
pdwb << std::endl;
5367 Xyce::dout() <<
"pvoff= " <<
model_.
pvoff << std::endl;
5368 Xyce::dout() <<
"peta0 = " <<
model_.
peta0 << std::endl;
5369 Xyce::dout() <<
"petab = " <<
model_.
petab << std::endl;
5370 Xyce::dout() <<
"pdsub = " <<
model_.
pdsub << std::endl;
5371 Xyce::dout() <<
"pcit = " <<
model_.
pcit << std::endl;
5372 Xyce::dout() <<
"pcdsc = " <<
model_.
pcdsc << std::endl;
5373 Xyce::dout() <<
"pcdscb = " <<
model_.
pcdscb << std::endl;
5374 Xyce::dout() <<
"pcdscd = " <<
model_.
pcdscd << std::endl;
5375 Xyce::dout() <<
"ppclm = " <<
model_.
ppclm << std::endl;
5376 Xyce::dout() <<
"ppdibl1 = " <<
model_.
ppdibl1 << std::endl;
5377 Xyce::dout() <<
"ppdibl2 = " <<
model_.
ppdibl2 << std::endl;
5378 Xyce::dout() <<
"ppdiblb = " <<
model_.
ppdiblb << std::endl;
5379 Xyce::dout() <<
"pdrout = " <<
model_.
pdrout << std::endl;
5380 Xyce::dout() <<
"ppvag = " <<
model_.
ppvag << std::endl;
5381 Xyce::dout() <<
"pdelta = " <<
model_.
pdelta << std::endl;
5382 Xyce::dout() <<
"palpha0 = " <<
model_.
palpha0 << std::endl;
5383 Xyce::dout() <<
"pfbjtii = " <<
model_.
pfbjtii << std::endl;
5384 Xyce::dout() <<
"pbeta0 = " <<
model_.
pbeta0 << std::endl;
5385 Xyce::dout() <<
"pbeta1 = " <<
model_.
pbeta1 << std::endl;
5386 Xyce::dout() <<
"pbeta2 = " <<
model_.
pbeta2 << std::endl;
5388 Xyce::dout() <<
"plii = " <<
model_.
plii << std::endl;
5389 Xyce::dout() <<
"pesatii = " <<
model_.
pesatii << std::endl;
5390 Xyce::dout() <<
"psii0 = " <<
model_.
psii0 << std::endl;
5391 Xyce::dout() <<
"psii1 = " <<
model_.
psii1 << std::endl;
5392 Xyce::dout() <<
"psii2 = " <<
model_.
psii2 << std::endl;
5393 Xyce::dout() <<
"psiid = " <<
model_.
psiid << std::endl;
5394 Xyce::dout() <<
"pagidl = " <<
model_.
pagidl << std::endl;
5395 Xyce::dout() <<
"pbgidl = " <<
model_.
pbgidl << std::endl;
5396 Xyce::dout() <<
"pngidl= " <<
model_.
pngidl << std::endl;
5397 Xyce::dout() <<
"pntun = " <<
model_.
pntun << std::endl;
5398 Xyce::dout() <<
"pndiode = " <<
model_.
pndiode << std::endl;
5399 Xyce::dout() <<
"pnrecf0 = " <<
model_.
pnrecf0 << std::endl;
5400 Xyce::dout() <<
"pnrecr0 = " <<
model_.
pnrecr0 << std::endl;
5401 Xyce::dout() <<
"pisbjt = " <<
model_.
pisbjt << std::endl;
5402 Xyce::dout() <<
"pisdif = " <<
model_.
pisdif << std::endl;
5403 Xyce::dout() <<
"pisrec = " <<
model_.
pisrec << std::endl;
5404 Xyce::dout() <<
"pistun = " <<
model_.
pistun << std::endl;
5405 Xyce::dout() <<
"pvrec0 = " <<
model_.
pvrec0 << std::endl;
5406 Xyce::dout() <<
"pvtun0 = " <<
model_.
pvtun0 << std::endl;
5407 Xyce::dout() <<
"pnbjt = " <<
model_.
pnbjt << std::endl;
5408 Xyce::dout() <<
"plbjt0 = " <<
model_.
plbjt0 << std::endl;
5409 Xyce::dout() <<
"pvabjt = " <<
model_.
pvabjt << std::endl;
5410 Xyce::dout() <<
"paely = " <<
model_.
paely << std::endl;
5411 Xyce::dout() <<
"pahli = " <<
model_.
pahli << std::endl;
5412 Xyce::dout() <<
"pvsdfb = " <<
model_.
pvsdfb << std::endl;
5413 Xyce::dout() <<
"pvsdth = " <<
model_.
pvsdth << std::endl;
5414 Xyce::dout() <<
"pdelvt = " <<
model_.
pdelvt << std::endl;
5415 Xyce::dout() <<
"pacde = " <<
model_.
pacde << std::endl;
5416 Xyce::dout() <<
"pmoin = " <<
model_.
pmoin << std::endl;
5417 Xyce::dout() <<
"pnoff = " <<
model_.
pnoff << std::endl;
5418 Xyce::dout() <<
"pxrcrg1 = " <<
model_.
pxrcrg1 << std::endl;
5419 Xyce::dout() <<
"pxrcrg2 = " <<
model_.
pxrcrg2 << std::endl;
5421 Xyce::dout() << std::endl;
5422 Xyce::dout() <<
"Instance Params: " << std::endl;
5423 Xyce::dout() <<
"l: " <<
l << std::endl;
5424 Xyce::dout() <<
"w: " <<
w << std::endl;
5425 Xyce::dout() <<
"drainArea: " <<
drainArea << std::endl;
5426 Xyce::dout() <<
"sourceArea: " <<
sourceArea << std::endl;
5427 Xyce::dout() <<
"drainSquares: " <<
drainSquares << std::endl;
5428 Xyce::dout() <<
"sourceSquares: " <<
sourceSquares << std::endl;
5429 Xyce::dout() <<
"drainPerimeter: " <<
drainPerimeter << std::endl;
5431 Xyce::dout() <<
"icVBS: " <<
icVBS << std::endl;
5432 Xyce::dout() <<
"icVDS: " <<
icVDS << std::endl;
5433 Xyce::dout() <<
"icVGS: " <<
icVGS << std::endl;
5434 Xyce::dout() <<
"bjtoff: " <<
bjtoff << std::endl;
5435 Xyce::dout() <<
"debugMod: " <<
debugMod << std::endl;
5436 Xyce::dout() <<
"rth0: " <<
rth0 << std::endl;
5437 Xyce::dout() <<
"cth0: " <<
cth0 << std::endl;
5438 Xyce::dout() <<
"bodySquares: " <<
bodySquares << std::endl;
5439 Xyce::dout() <<
"frbody: " <<
frbody << std::endl;
5440 Xyce::dout() <<
"soiMod: " <<
soiMod << std::endl;
5441 Xyce::dout() <<
"nbc: " <<
nbc << std::endl;
5442 Xyce::dout() <<
"nseg: " <<
nseg << std::endl;
5443 Xyce::dout() <<
"pdbcp: " <<
pdbcp << std::endl;
5444 Xyce::dout() <<
"psbcp: " <<
psbcp << std::endl;
5445 Xyce::dout() <<
"agbcp: " <<
agbcp << std::endl;
5446 Xyce::dout() <<
"aebcp: " <<
aebcp << std::endl;
5447 Xyce::dout() <<
"vbsusr: " <<
vbsusr << std::endl;
5448 Xyce::dout() <<
"tnodeout: " <<
tnodeout << std::endl;
5449 Xyce::dout() <<
"rgateMod: " <<
rgateMod << std::endl;
5450 Xyce::dout() <<
"numberParallel: " <<
numberParallel << std::endl;
5466 #ifndef REUSE_PARAMPTR
5467 if (
paramPtr != static_cast<SizeDependParam *> (NULL))
5481 const std::vector<int> & extLIDVecRef )
5512 #ifdef Xyce_DEBUG_DEVICE
5515 Xyce::dout() << section_divider << std::endl;
5516 Xyce::dout() <<
" In Instance::register LIDs\n\n";
5517 Xyce::dout() <<
" name = " <<
getName() << std::endl;
5518 Xyce::dout() <<
" number of internal variables: " <<
numIntVars << std::endl;
5519 Xyce::dout() <<
" number of external variables: " <<
numExtVars << std::endl;
5524 Xyce::dout() <<
"int["<<i1<<
"] = " << intLIDVecRef[i1] << std::endl;
5526 Xyce::dout() << std::endl;
5529 Xyce::dout() <<
"ext["<<i1<<
"] = " << extLIDVecRef[i1] << std::endl;
5558 else if (
bNode == 2)
5570 else if (
tNode == 2)
5599 DevelFatal(*this).in(
"Instance::registerLIDs")
5600 <<
"Tried to specify an initial condition on V_Drain_Source when Drain and Source nodes are the same node";
5609 DevelFatal(*this).in(
"Instance::registerLIDs")
5610 <<
"Tried to specify an initial condition on V_Gate_Source when Gate and Source nodes are the same node";
5619 DevelFatal(*this).in(
"Instance::registerLIDs")
5620 <<
"Tried to specify an initial condition on V_Body_Source when Body and Source nodes are the same node, or"
5621 <<
"when Body node does not exist";
5630 DevelFatal(*this).in(
"Instance::registerLIDs")
5631 <<
"Tried to specify an initial condition on V_Substrate_Source when Substrate and Source nodes are the same node";
5639 DevelFatal(*this).in(
"Instance::registerLIDs")
5640 <<
"Tried to specify an initial condition on V_ExtBody_Source when External Body and Source nodes are the same node, "
5641 <<
"or when External Body node does not exist.";
5646 #ifdef Xyce_DEBUG_DEVICE
5649 Xyce::dout() <<
"\n local variable indices:\n";
5650 Xyce::dout() <<
" li_Drain = " <<
li_Drain << std::endl;
5651 Xyce::dout() <<
" li_Gate = " <<
li_Gate << std::endl;
5652 Xyce::dout() <<
" li_Source = " <<
li_Source << std::endl;
5653 Xyce::dout() <<
" li_Substrate = " <<
li_Substrate << std::endl;
5654 Xyce::dout() <<
" li_ExtBody = " <<
li_ExtBody << std::endl;
5655 Xyce::dout() <<
" li_Body = " <<
li_Body << std::endl;
5656 Xyce::dout() <<
" li_Temperature = " <<
li_Temperature << std::endl;
5657 Xyce::dout() <<
" li_DrainPrime = " <<
li_DrainPrime << std::endl;
5658 Xyce::dout() <<
" li_SourcePrime = " <<
li_SourcePrime << std::endl;
5659 Xyce::dout() <<
" li_GatePrime = " <<
li_GatePrime << std::endl;
5660 Xyce::dout() <<
" li_GateMid = " <<
li_GateMid << std::endl;
5662 Xyce::dout() <<
" li_Ids = " <<
li_Ids << std::endl;
5665 Xyce::dout() <<
" li_Igs = " <<
li_Igs << std::endl;
5668 Xyce::dout() <<
" li_Ibs = " <<
li_Ibs << std::endl;
5671 Xyce::dout() <<
" li_Ies = " <<
li_Ies << std::endl;
5674 Xyce::dout() <<
" li_Ips = " <<
li_Ips << std::endl;
5676 Xyce::dout() << section_divider << std::endl;
5729 tmpstr =
getName()+
"_midgate";
5735 tmpstr =
getName()+
"_branch_DS";
5741 tmpstr =
getName()+
"_branch_GS";
5747 tmpstr =
getName()+
"_branch_BS";
5753 tmpstr =
getName()+
"_branch_ES";
5763 tmpstr =
getName()+
"_branch_PS";
5790 std::string modName(
getName());
5793 tmpstr = modName+
":DEV_ID";
5795 tmpstr = modName+
":DEV_IG";
5797 tmpstr = modName+
":DEV_IS";
5799 tmpstr = modName+
":DEV_IE";
5801 tmpstr = modName+
":DEV_IB";
5818 const std::vector<int> & staLIDVecRef )
5822 #ifdef Xyce_DEBUG_DEVICE
5826 Xyce::dout() << std::endl;
5827 Xyce::dout() << section_divider << std::endl;
5828 Xyce::dout() <<
" In Instance::registerStateLIDs\n\n";
5829 Xyce::dout() <<
" name = " <<
getName() << std::endl;
5830 Xyce::dout() <<
" Number of State LIDs: " <<
numStateVars << std::endl;
5846 #ifdef Xyce_DEBUG_DEVICE
5849 Xyce::dout() <<
" Local State indices:" << std::endl;
5850 Xyce::dout() << std::endl;
5852 Xyce::dout() <<
" li_state_qb = " <<
li_state_qb << std::endl;
5853 Xyce::dout() <<
" li_state_qg = " <<
li_state_qg << std::endl;
5854 Xyce::dout() <<
" li_state_qd = " <<
li_state_qd << std::endl;
5855 Xyce::dout() <<
" li_state_qe = " <<
li_state_qe << std::endl;
5856 Xyce::dout() <<
" li_state_qgmid = " <<
li_state_qgmid << std::endl;
5857 Xyce::dout() <<
" li_state_qth = " <<
li_state_qth << std::endl;
5858 Xyce::dout() << std::endl;
5859 Xyce::dout() << section_divider << std::endl;
5874 const std::vector<int> & stoLIDVecRef )
5939 const std::vector< std::vector<int> > & jacLIDVec )
5942 std::vector<int> map;
5943 std::vector< std::vector<int> > map2;
5947 int lastDrainIndex = 0;
5948 int lastGateIndex = 0;
5949 int lastBodyIndex = 0;
5950 int lastSourceIndex = 0;
5951 int lastSubstrateIndex = 0;
5952 int lastExtBodyIndex = 0;
5953 int lastRowUsed = 0;
6045 lastSourceIndex = 1;
6046 lastSubstrateIndex = 6;
6047 lastExtBodyIndex = 1;
6117 lastSourceIndex = 1;
6118 lastSubstrateIndex = 5;
6119 lastExtBodyIndex = 1;
6183 lastSourceIndex = 1;
6184 lastSubstrateIndex = 5;
6185 lastExtBodyIndex = 0;
6239 lastSourceIndex = 1;
6240 lastSubstrateIndex = 4;
6241 lastExtBodyIndex = 0;
6323 lastSourceIndex = 1;
6324 lastSubstrateIndex = 6;
6325 lastExtBodyIndex = 1;
6408 lastSourceIndex = 1;
6409 lastSubstrateIndex = 6;
6410 lastExtBodyIndex = 1;
6415 std::string msg =
"Instance::registerJacLIDs:";
6416 msg +=
"jacID out of supported range";
6417 N_ERH_ErrorMgr::report(N_ERH_ErrorMgr::DEV_FATAL, msg);
6426 icVDSEquVdOffset = jacLIDVec[map[lastRowUsed+extraVars]][map2[lastRowUsed+extraVars][0]];
6427 icVDSEquVsOffset = jacLIDVec[map[lastRowUsed+extraVars]][map2[lastRowUsed+extraVars][1]];
6428 icVDSEquIdsOffset = jacLIDVec[map[lastRowUsed+extraVars]][map2[lastRowUsed+extraVars][2]];
6435 icVGSEquVgOffset = jacLIDVec[map[lastRowUsed+extraVars]][map2[lastRowUsed+extraVars][0]];
6436 icVGSEquVsOffset = jacLIDVec[map[lastRowUsed+extraVars]][map2[lastRowUsed+extraVars][1]];
6437 icVGSEquIgsOffset = jacLIDVec[map[lastRowUsed+extraVars]][map2[lastRowUsed+extraVars][2]];
6444 icVBSEquVbOffset = jacLIDVec[map[lastRowUsed+extraVars]][map2[lastRowUsed+extraVars][0]];
6445 icVBSEquVsOffset = jacLIDVec[map[lastRowUsed+extraVars]][map2[lastRowUsed+extraVars][1]];
6446 icVBSEquIbsOffset = jacLIDVec[map[lastRowUsed+extraVars]][map2[lastRowUsed+extraVars][2]];
6453 icVESEquVeOffset = jacLIDVec[map[lastRowUsed+extraVars]][map2[lastRowUsed+extraVars][0]];
6454 icVESEquVsOffset = jacLIDVec[map[lastRowUsed+extraVars]][map2[lastRowUsed+extraVars][1]];
6455 icVESEquIesOffset = jacLIDVec[map[lastRowUsed+extraVars]][map2[lastRowUsed+extraVars][2]];
6462 icVPSEquVpOffset = jacLIDVec[map[lastRowUsed+extraVars]][map2[lastRowUsed+extraVars][0]];
6463 icVPSEquVsOffset = jacLIDVec[map[lastRowUsed+extraVars]][map2[lastRowUsed+extraVars][1]];
6464 icVPSEquIpsOffset = jacLIDVec[map[lastRowUsed+extraVars]][map2[lastRowUsed+extraVars][2]];
6479 #ifndef Xyce_NONPOINTER_MATRIX_LOAD
6779 double tmp, tmp1, tmp2, T0, T1, T2, T3, T4, T5, Ldrn, Wdrn;
6780 double TempRatio, Inv_L, Inv_W, Inv_LW, Tnom;
6781 double SDphi, SDgamma;
6782 double tmp3, T7, Eg;
6784 #ifdef Xyce_DEBUG_DEVICE
6787 Xyce::dout() << std::endl << subsection_divider << std::endl;
6788 Xyce::dout() <<
"Instance::updateTemperature\n";
6789 Xyce::dout() <<
"name = " <<
getName() << std::endl;
6794 if (temp_tmp != -999.0)
temp = temp_tmp;
6807 TempRatio =
temp/Tnom;
6810 Eg = 1.16 - 7.02e-4 * temp * temp / (temp + 1108.0);
6812 * exp(21.5565981 - Eg / (2.0 *
vtm));
6816 #ifdef REUSE_PARAMPTR
6821 std::list<SizeDependParam*>::iterator it_dpL =
6823 std::list<SizeDependParam*>::iterator end_dpL =
6828 for( ; it_dpL != end_dpL; ++it_dpL ) {
6829 if( (*it_dpL)->Length ==
l && (*it_dpL)->Width ==
w &&
6830 (*it_dpL)->Rth0 ==
rth0 && (*it_dpL)->Cth0 ==
cth0) {
6845 if (
paramPtr == static_cast<SizeDependParam *> (NULL))
6888 UserError0(*
this) <<
"Effective channel length <= 0";
6895 UserError0(*
this) <<
"Effective channel width <= 0";
6904 UserError0(*
this) <<
"Effective channel length for C-V <= 0";
6911 UserError0(*
this) <<
"Effective channel width for C-V <= 0";
6920 UserError0(*
this) <<
"Effective channel length for C-V (body) <= 0";
6926 UserError0(*
this) <<
"Effective channel length for C-V (backgate) <= 0";
7476 T0 = (TempRatio - 1.0);
7516 UserError0(*
this) <<
"Problem detected during B3SOIV3 parameter check";
7582 SDgamma * sqrt(SDphi);
7585 SDgamma * sqrt(SDphi);
7647 UserWarning(*
this) <<
"k1 should be specified with k2.";
7653 UserWarning(*
this) <<
"k2 should be specified with k1.";
7658 UserWarning(*
this) <<
"xt is ignored because k1 or k2 is given.";
7662 UserWarning(*
this) <<
"vbx is ignored because k1 or k2 is given.";
7666 UserWarning(*
this) <<
"vbm is ignored because k1 or k2 is given.";
7670 UserWarning(*
this) <<
"gamma1 ignored because k1 or k2 is given.";
7674 UserWarning(*
this) <<
"gamma2 ignored because k1 or k2 is given.";
7749 T2 = (T0 + 2.0 * T0 * T0);
7752 #ifdef REUSE_PARAMPTR
7839 T2 = T1 * (1.0 + 2.0 * T1);
7843 T2 = T1 * (1.0 + 2.0 * T1);
7851 T3 = T1 * (1.0 + 2.0 * T1);
7855 T3 = T1 * (1.0 + 2.0 * T1);
7866 * (TempRatio - 1.0);
7891 UserWarning(*
this) <<
"The gate conductance reset to 1.0e3 mho.";
7912 bool bsuccess =
true;
7914 double VgstNVt, ExpVgst;
7918 double Vfbeff, dVfbeff_dVd, dVfbeff_dVg, dVfbeff_dVrg, dVfbeff_dVb;
7919 double dVfbeff_dT, V3, V4;
7920 double Vgs_eff, Vfb, dVfb_dVb, dVfb_dVd, dVfb_dT;
7925 double Phis, dPhis_dVb, sqrtPhis, dsqrtPhis_dVb, Vth, dVth_dVb, dVth_dVd;
7926 double sqrtPhisExt, dsqrtPhisExt_dVb;
7930 double n, dn_dVb, dn_dVd, noff, dnoff_dVd, dnoff_dVb;
7931 double ExpArg, V0, CoxWLcen, QovCox, LINK;
7932 double CoxWLb, CoxWLcenb;
7935 double Cox, Tox, Tcen, dTcen_dVg, dTcen_dVd, dTcen_dVb;
7936 double Ccen, Coxeff, dCoxeff_dVg, dCoxeff_dVd, dCoxeff_dVb;
7937 double dTcen_dT, dCoxeff_dT, dCoxWLcenb_dT;
7938 double Denomi ,dDenomi_dVg ,dDenomi_dVd ,dDenomi_dVb ,dDenomi_dT;
7939 double Ce1b ,Ce1e, Ce1T;
7940 double CbT, CsT, CgT;
7942 double Giie, dRatio_dVe;
7943 double Vdsatii0, dVdsatii0_dT;
7944 double VgsStep, dVgsStep_dT;
7946 double Vdiff, dVdiff_dVg, dVdiff_dVb, dVdiff_dVd, dVdiff_dVe, dVdiff_dT;
7947 double Ratio, dRatio_dVg, dRatio_dVb, dRatio_dVd, dRatio_dT;
7948 double Gbpbs, Gbpps;
7950 double qjs_local, gcjsbs, gcjsT;
7951 double qjd_local, gcjdbs, gcjdds, gcjdT;
7952 double cjsbs, cjdbs, dcjdbs_dT, dcjsbs_dT;
7953 double PhiBSWG, dPhiBSWG_dT;
7954 double darg_dT, ddT3_dVb_dT;
7958 double OxideRatio, Vaux, dVaux_dVg, dVaux_dVd, dVaux_dVb;
7959 double Igb, dIgb_dVg, dIgb_dVd, dIgb_dVb, dIgb_dVe, dIgb_dT;
7962 double Ibs1 ,dIbs1_dVb ,dIbs1_dT;
7963 double Ibs2 ,dIbs2_dVb ,dIbs2_dT;
7964 double Ibs3 ,dIbs3_dVb ,dIbs3_dVd, dIbs3_dT;
7965 double Ibs4 ,dIbs4_dVb ,dIbs4_dT;
7966 double Ibd1 ,dIbd1_dVb ,dIbd1_dVd ,dIbd1_dT;
7967 double Ibd2 ,dIbd2_dVb ,dIbd2_dVd ,dIbd2_dT;
7968 double Ibd3 ,dIbd3_dVb ,dIbd3_dVd ,dIbd3_dT;
7969 double Ibd4 ,dIbd4_dVb ,dIbd4_dVd ,dIbd4_dT;
7970 double Igc, dIgc_dVg, dIgc_dVd, dIgc_dVb;
7971 double Igs_local, dIgs_dVg, dIgs_dVs, Igd_local, dIgd_dVg, dIgd_dVd;
7972 double Igcs_local, dIgcs_dVg, dIgcs_dVd, dIgcs_dVb;
7973 double Igcd_local, dIgcd_dVg, dIgcd_dVd, dIgcd_dVb;
7974 double Igb1, dIgb1_dVg, dIgb1_dVd, dIgb1_dVb, dIgb1_dT, dIgb1_dVe;
7975 double Igb2, dIgb2_dVg, dIgb2_dVd, dIgb2_dVb, dIgb2_dT;
7977 double vgs_eff, dvgs_eff_dvg, vgd_eff, dvgd_eff_dvg;
7978 double dT0_dVox, Voxeff, dVoxeff_dVox, dVox_dT, dVaux_dT;
7980 double Vgb, dVgb_dVg, dVgb_dVb, Vox, dVox_dVg, dVox_dVd, dVox_dVb;
7981 double dT1_dVe, dT5_dVe, dVox_dVe, dVoxdepinv_dVe, dVaux_dVe;
7982 double Voxacc, dVoxacc_dVg, dVoxacc_dVd, dVoxacc_dVb;
7983 double Voxdepinv, dVoxdepinv_dVg, dVoxdepinv_dVb, dVoxdepinv_dVd;
7984 double dVoxdepinv_dT, VxNVt, ExpVxNVt;
7986 double Gjsd=0.0, Gjsb=0.0, GjsT=0.0, Gjdd=0.0, Gjdb=0.0, GjdT=0.0;
7987 double Ien, dIen_dT, Iendif, dIendif_dT;
7988 double Ibsdif, dIbsdif_dVb, dIbsdif_dT;
7989 double Ibddif, dIbddif_dVb, dIbddif_dVd, dIbddif_dT;
7990 double Ehlis, dEhlis_dVb, dEhlis_dT;
7991 double EhlisFactor, dEhlisFactor_dVb, dEhlisFactor_dT;
7992 double Ehlid, dEhlid_dVb, dEhlid_dVd, dEhlid_dT;
7993 double EhlidFactor, dEhlidFactor_dVb, dEhlidFactor_dVd, dEhlidFactor_dT;
7994 double E2ndFactor, dE2ndFactor_dVb, dE2ndFactor_dVd, dE2ndFactor_dT;
7996 double ExpVbsNVtm, dExpVbsNVtm_dVb, dExpVbsNVtm_dT;
7997 double ExpVbdNVtm, dExpVbdNVtm_dVb, dExpVbdNVtm_dVd, dExpVbdNVtm_dT;
7999 double ueff_local, dueff_dVg, dueff_dVd, dueff_dVb, dueff_dT;
8004 double EsatL, dEsatL_dVg, dEsatL_dVd, dEsatL_dVb, dEsatL_dT;
8006 double dVdsat_dVg, dVdsat_dVb, dVdsat_dVd, dVdsat_dT, Vasat;
8007 double dVasat_dVg, dVasat_dVb, dVasat_dVd, dVasat_dT;
8008 double Va, dVa_dVd, dVa_dVg, dVa_dVb, dVa_dT;
8009 double WTsi, NVtm1, NVtm2;
8012 double WsTsi, WdTsi;
8013 double NVtmf, NVtmr, dNVtmf_dT, dNVtmr_dT;
8015 double Ibp, Iii, Gcd, Gcb, GcT;
8016 double Giid=0.0, Giig=0.0, Giib=0.0, GiiT=0.0;
8018 double Vbseff, dVbseff_dVb;
8021 double Idgidl, Gdgidld, Gdgidlg, Isgidl, Gsgidlg;
8023 double K1, Cbox, CboxWL, Vesfb;
8024 double T0, dT0_dVg, dT0_dVd, dT0_dVb, dT0_dVe;
8025 double T1, dT1_dVg, dT1_dVd, dT1_dVb;
8026 double T2, dT2_dVg, dT2_dVd, dT2_dVb, dT2_dVe;
8027 double T3, dT3_dVg, dT3_dVd, dT3_dVb, dT3_dT;
8028 double T4, dT4_dVd, dT4_dVb, dT4_dT;
8029 double T5, dT5_dVg, dT5_dVd, dT5_dVb, dT5_dT;
8030 double T6, dT6_dVg, dT6_dVd, dT6_dVb, dT6_dT;
8034 double T10, dT10_dVb, dT10_dVd;
8036 double dT10_dT, dT11_dT, DioMax;
8039 double dT11_dVb, dT13_dVb, dT14_dVb;
8041 double tmp, Abulk_local, dAbulk_dVb, Abulk0, dAbulk0_dVb;
8043 double VACLM, dVACLM_dVg, dVACLM_dVd, dVACLM_dVb, dVACLM_dT;
8044 double VADIBL, dVADIBL_dVg, dVADIBL_dVd, dVADIBL_dVb, dVADIBL_dT;
8046 double Xdep, dXdep_dVb, lt1, dlt1_dVb, ltw, dltw_dVb;
8047 double Delt_vth, dDelt_vth_dVb;
8049 double Theta0, dTheta0_dVb;
8050 double T3zb, lt1zb, ltwzb, Theta0zb;
8051 double Delt_vthzb, dDelt_vthzb_dT;
8052 double DeltVthwzb, dDeltVthwzb_dT;
8053 double DeltVthtempzb, dDeltVthtempzb_dT;
8054 double Vthzb, dVthzb_dT, Vfbzb, dVfbzb_dT;
8057 double Temp, TempRatio, dTempRatio_dT, tmp1, tmp2, tmp3, tmp4;
8061 double ni_local, Eg, vbi, dvbi_dT, vfbb, dvfbb_dT, sqrtPhi, Xdep0;
8062 double Ahli, dAhli_dT, jbjt, jdif, jrec, djbjt_dT, djdif_dT, djrec_dT;
8063 double jtun, djtun_dT, u0temp, du0temp_dT, vsattemp, dvsattemp_dT;
8064 double rds0, drds0_dT, ua, ub, uc, dua_dT, dub_dT, duc_dT;
8065 double dni_dT, dT7_dT, dT0_dT, dT0_dT7, dT1_dT, dT1_dT7;
8066 double dT2_dT, dT2_dT7;
8068 double Vbs0, dVbs0_dVg, dVbs0_dVd, dVbs0_dVe, dVbs0_dT;
8069 double Vbs0mos, dVbs0mos_dVe, dVbs0mos_dT;
8070 double Vbsmos, dVbsmos_dVg, dVbsmos_dVd, dVbsmos_dVb, dVbsmos_dVe, dVbsmos_dT;
8072 double wdios, wdiod, wdiosCV, wdiodCV;
8074 double Vbp, dVbp_dVb, dVtm_dT;
8075 double Vbsh, dVbsh_dVb;
8076 double dDelt_vth_dT;
8077 double DeltVthw, dDeltVthw_dVb, dDeltVthw_dT, DeltVthtemp, dDeltVthtemp_dT;
8078 double VthFD, dVthFD_dVd, dVthFD_dVb, dVthFD_dVe, dVthFD_dT;
8079 double VtgsFD, ExpVtgsFD, VgstFD, ExpVgstFD;
8080 double VtgseffFD, dVtgseffFD_dVd, dVtgseffFD_dVg, dVtgseffFD_dVe;
8081 double dVtgseffFD_dT;
8082 double Vbsitf, dVbsitf_dVg, dVbsitf_dVd, dVbsitf_dVb, dVbsitf_dVe, dVbsitf_dT;
8083 double PhiFD, dPhiFD_dVg, dPhiFD_dVd, dPhiFD_dVe, dPhiFD_dT;
8084 double PhiON, dPhiON_dVg, dPhiON_dVd, dPhiON_dVe, dPhiON_dT;
8085 double dVbsh_dVg, dVbsh_dVd, dVbsh_dVe, dVbsh_dT;
8086 double VgsteffFD, dVgsteffFD_dVd, dVgsteffFD_dVg, dVgsteffFD_dVe;
8087 double dVgsteffFD_dT;
8088 double dVgsteff_dVe, dVbseff_dVg, dVbseff_dVd, dVbseff_dVe, dVbseff_dT;
8089 double Vbs0t, dVbs0t_dVg, dVbs0t_dVd, dVbs0t_dVe, dVbs0t_dT;
8090 double Vgsteff_local, dVgsteff_dVg, dVgsteff_dVd, dVgsteff_dVb, dVgsteff_dT;
8091 double Vdseff_local, dVdseff_dVg, dVdseff_dVd, dVdseff_dVb, dVdseff_dT;
8092 double dVgst_dVd, dVth_dT, dVgst2Vtm_dT;
8094 double DIBL_Sft, dDIBL_Sft_dVd, dDIBL_Sft_dVb;
8096 double Lambda, dLambda_dVg;
8100 double VdseffCV, dVdseffCV_dVg, dVdseffCV_dVd, dVdseffCV_dVb;
8104 double beta, dbeta_dVg, dbeta_dVd, dbeta_dVb, dbeta_dT;
8105 double gche, dgche_dVg, dgche_dVd, dgche_dVb, dgche_dT;
8106 double fgche1, dfgche1_dVg, dfgche1_dVd, dfgche1_dVb, dfgche1_dT;
8107 double fgche2, dfgche2_dVg, dfgche2_dVd, dfgche2_dVb, dfgche2_dT;
8108 double Idl, dIdl_dVg, dIdl_dVd, dIdl_dVb, dIdl_dT;
8109 double Gm0, Gds0, Gmb0, GmT0;
8115 double Rds, dRds_dVg, dRds_dVb, dRds_dT, WVCox, WVCoxRds;
8116 double Vgst2Vtm, VdsatCV;
8120 double Leff, Weff, dWeff_dVg, dWeff_dVb;
8121 double AbulkCV, dAbulkCV_dVb;
8123 double Qe1 , dQe1_dVb, dQe1_dVe, dQe1_dT;
8125 double Csg(0.0), Csd(0.0), Csb(0.0), Cbg(0.0), Cbd(0.0), Cbb(0.0);
8126 double Cgb(0.0), Cgg(0.0), Cgd(0.0);
8127 double Cgg1(0.0), Cgb1(0.0), Cgd1(0.0), Cbg1(0.0), Cbb1(0.0), Cbd1(0.0);
8128 double Csg1(0.0), Csd1(0.0), Csb1(0.0);
8131 double dQac0_dVg, dQac0_dVb, dQac0_dVd, dQac0_dVrg, dQac0_dT;
8132 double dQsub0_dVg, dQsub0_dVd, dQsub0_dVb, dQsub0_dVrg, dQsub0_dT;
8136 double vg_old, vd_old, vp_old, ve_old, vgp_old, vgm_old, vs_old, delTemp_old;
8137 double vbd_old, vbs_old, vds_old;
8166 #ifdef Xyce_DEBUG_DEVICE
8169 Xyce::dout() << subsection_divider << std::endl;
8170 Xyce::dout() <<
" In updateIntermediateVars\n";
8171 Xyce::dout() <<
" name = " <<
getName();
8173 Xyce::dout() <<
" dtype is " <<
model_.
dtype << std::endl;
8174 Xyce::dout().width(21); Xyce::dout().precision(13); Xyce::dout().setf(std::ios::scientific);
8175 Xyce::dout() <<
" " << std::endl;
8237 #ifdef Xyce_DEBUG_DEVICE
8240 Xyce::dout().precision(18);
8241 Xyce::dout() << std::endl;
8242 Xyce::dout() <<
getName() <<
" Blim: Vd = " <<
Vd << std::endl;
8243 Xyce::dout() <<
getName() <<
" Blim: Vg = " <<
Vg << std::endl;
8244 Xyce::dout() <<
getName() <<
" Blim: Vs = " <<
Vs << std::endl;
8245 Xyce::dout() <<
getName() <<
" Blim: Ve = " <<
Ve << std::endl;
8246 Xyce::dout() <<
getName() <<
" Blim: Vb = " <<
Vb << std::endl;
8247 Xyce::dout() <<
getName() <<
" Blim: Vp = " <<
Vp << std::endl;
8248 Xyce::dout() <<
getName() <<
" Blim:delTemp = " <<
delTemp << std::endl;
8249 Xyce::dout() <<
getName() <<
" Blim: Vsp = " <<
Vsp << std::endl;
8250 Xyce::dout() <<
getName() <<
" Blim: Vdp = " <<
Vdp << std::endl;
8251 Xyce::dout() <<
getName() <<
" Blim: Vgp = " <<
Vgp << std::endl;
8252 Xyce::dout() <<
getName() <<
" Blim: Vgm = " <<
Vgm << std::endl;
8253 Xyce::dout() << std::endl;
8270 #ifdef Xyce_DEBUG_DEVICE
8273 Xyce::dout().precision(18);
8274 Xyce::dout() << std::endl;
8275 Xyce::dout() <<
getName() <<
" Blim: vbs = " <<
vbs << std::endl;
8276 Xyce::dout() <<
getName() <<
" Blim: vbd = " <<
vbd << std::endl;
8277 Xyce::dout() <<
getName() <<
" Blim: vps = " <<
vps << std::endl;
8278 Xyce::dout() <<
getName() <<
" Blim: vpd = " <<
vpd << std::endl;
8279 Xyce::dout() <<
getName() <<
" Blim: vgs = " <<
vgs << std::endl;
8280 Xyce::dout() <<
getName() <<
" Blim: vds = " << vds << std::endl;
8281 Xyce::dout() <<
getName() <<
" Blim: ves = " <<
ves << std::endl;
8282 Xyce::dout() <<
getName() <<
" Blim: ved = " <<
ved << std::endl;
8283 Xyce::dout() <<
getName() <<
" Blim: vgd = " <<
vgd << std::endl;
8284 Xyce::dout() <<
getName() <<
" Blim: vges = " <<
vges<< std::endl;
8285 Xyce::dout() <<
getName() <<
" Blim: vgms = " <<
vgms<< std::endl;
8309 if ((*flagSolVectorPtr)[
li_Drain] == 0 || (*flagSolVectorPtr)[
li_Gate] == 0 ||
8509 #ifdef Xyce_DEBUG_DEVICE
8512 Xyce::dout() << std::endl;
8513 Xyce::dout().precision(18);
8514 Xyce::dout() << std::endl;
8515 Xyce::dout() <<
getName() <<
" Alim: Vd = " <<
Vd << std::endl;
8516 Xyce::dout() <<
getName() <<
" Alim: Vg = " <<
Vg << std::endl;
8517 Xyce::dout() <<
getName() <<
" Alim: Vs = " <<
Vs << std::endl;
8518 Xyce::dout() <<
getName() <<
" Alim: Ve = " <<
Ve << std::endl;
8519 Xyce::dout() <<
getName() <<
" Alim: Vb = " <<
Vb << std::endl;
8520 Xyce::dout() <<
getName() <<
" Alim: Vp = " <<
Vp << std::endl;
8521 Xyce::dout() <<
getName() <<
" Alim:delTemp = " <<
delTemp << std::endl;
8522 Xyce::dout() <<
getName() <<
" Alim: Vsp = " <<
Vsp << std::endl;
8523 Xyce::dout() <<
getName() <<
" Alim: Vdp = " <<
Vdp << std::endl;
8524 Xyce::dout() <<
getName() <<
" Alim: Vgp = " <<
Vgp << std::endl;
8525 Xyce::dout() <<
getName() <<
" Alim: Vgm = " <<
Vgm << std::endl;
8527 Xyce::dout() <<
getName() <<
" Alim: vbs = " <<
vbs << std::endl;
8528 Xyce::dout() <<
getName() <<
" Alim: vps = " <<
vps << std::endl;
8529 Xyce::dout() <<
getName() <<
" Alim: vgs = " <<
vgs << std::endl;
8530 Xyce::dout() <<
getName() <<
" Alim: ves = " <<
ves << std::endl;
8531 Xyce::dout() <<
getName() <<
" Alim: vds = " << vds << std::endl;
8532 Xyce::dout() <<
getName() <<
" Alim: vges = " <<
vges << std::endl;
8533 Xyce::dout() <<
getName() <<
" Alim: vgms = " <<
vgms << std::endl;
8535 Xyce::dout() <<
getName() <<
" Alim: vbd = " <<
vbd << std::endl;
8537 Xyce::dout() <<
getName() <<
" Alim: T0 = " <<
vbd << std::endl;
8538 Xyce::dout() << std::endl;
8539 Xyce::dout() << std::endl;
8550 Xyce::dout() << std::endl;
8573 TempRatio = Temp * dTempRatio_dT;
8581 Eg = 1.16 - 7.02e-4 * T5 / T0;
8582 T1 = ((7.02e-4 * T5) - T0 * (14.04e-4 * Temp)) / T0 / T0;
8588 T3 = 1.45e10 * Temp * T5 * T2;
8589 T4 = exp(21.5565981 - Eg / (2.0 * Vtm));
8591 dni_dT = 2.175e10 * T2 * T5 * T4 + T3 * T4 *
8592 (-Vtm * T1 + Eg *
CONSTKoverQ) / (2.0 * Vtm * Vtm);
8596 dvbi_dT =
CONSTKoverQ * T0 + Vtm * (-2.0 * dni_dT / ni_local);
8609 (
CONSTKoverQ * T0 - Vtm * 2.0 * dni_dT / ni_local);
8614 sqrtPhi = sqrt(phi_local);
8622 T3 = TempRatio - 1.0;
8629 CEXP(T7, T0, dT0_dT7);
8630 dT0_dT = dT0_dT7 * dT7_dT;
8641 CEXP(T7, T1, dT1_dT7);
8642 dT1_dT = dT1_dT7 * dT7_dT;
8647 CEXP(T7, T2, dT2_dT7);
8648 dT2_dT = dT2_dT7 * dT7_dT;
8663 CEXP(T7, T0, dT0_dT7);
8664 dT0_dT = dT0_dT7 * dT7_dT;
8707 dni_dT = dvbi_dT = dvfbb_dT = djbjt_dT = djdif_dT = 0.0;
8708 djrec_dT = djtun_dT = du0temp_dT = dvsattemp_dT = 0.0;
8709 drds0_dT = dua_dT = dub_dT = duc_dT = 0.0;
8792 #ifdef Xyce_DEBUG_DEVICE
8795 Xyce::dout() <<
"HOMOTOPY INFO: gainscale = "
8797 Xyce::dout() <<
"HOMOTOPY INFO: before vds = " <<
Vds << std::endl;
8798 Xyce::dout() <<
"HOMOTOPY INFO: before vgst = " <<
Vgs << std::endl;
8823 #ifdef Xyce_DEBUG_DEVICE
8826 Xyce::dout() <<
"HOMOTOPY INFO: after vds = " <<
Vds << std::endl;
8827 Xyce::dout() <<
"HOMOTOPY INFO: after vgst = " <<
Vgs << std::endl;
8842 T4 = sqrt(1.0 + 2.0 * (
Vgs - T0) / T1);
8843 T2 = T1 * (T4 - 1.0);
8844 T3 = 0.5 * T2 * T2 / T1;
8845 T7 = 1.12 - T3 - 0.05;
8846 T6 = sqrt(T7 * T7 + 0.224);
8847 T5 = 1.12 - 0.5 * (T7 + T6);
8849 dVgs_eff_dVg = 1.0 - (0.5 - 0.5 / T4) * (1.0 + T7 / T6);
8867 V0 = vbi - phi_local;
8880 else dVbsmos_dT = 0.0;
8890 T2 = T1 * (vbi - phi_local);
8894 dVbs0t_dT = T1 * dvbi_dT;
8900 T5 =
model_.
k2b * (exp(0.5*T3) + 2*exp(T3));
8904 Vbs0 = T4 * Vbs0t + T2;
8907 dVbs0_dT = T4 * dVbs0t_dT - T1 * dvfbb_dT;
8913 T1 = Vbs0t - Vbs0 - 0.005;
8914 T2 = sqrt(T1 * T1 + (2.5e-5));
8915 T3 = 0.5 * (T1 + T2);
8917 Vbs0mos = Vbs0 - 0.5 * T3 * T4;
8918 T5 = 0.5 * T4 * (1 + T1 / T2);
8919 dVbs0mos_dVe = dVbs0_dVe * (1 + T5);
8921 dVbs0mos_dT = dVbs0_dT * (1 + T5) - T5 * dVbs0t_dT;
8927 T1 = phi_local - 0.02;
8928 T2 = T1 - Vbs0mos - 0.005;
8929 T3 = sqrt(T2 * T2 + 4.0 * 0.005);
8930 Vbs0mos = T1 - 0.5 * (T2 + T3);
8931 T4 = 0.5 * (1 + T2 / T3);
8932 dVbs0mos_dVe = T4 * dVbs0mos_dVe;
8934 dVbs0mos_dT = T4 * dVbs0mos_dT;
8935 else dVbs0mos_dT = 0.0;
8939 Phis = phi_local - Vbs0mos;
8941 sqrtPhis = sqrt(Phis);
8942 dsqrtPhis_dVb = -0.5 / sqrtPhis;
8943 Xdep = Xdep0 * sqrtPhis / sqrtPhi;
8944 dXdep_dVb = (Xdep0 / sqrtPhi) * dsqrtPhis_dVb;
8953 { T4 = 1.0 / (3.0 + 8.0 * T0);
8954 T1 = (1.0 + 3.0 * T0) * T4;
8958 dlt1_dVb =
model_.
factor1 * (0.5 / T3 * T1 * dXdep_dVb + T3 * T2);
8966 { T4 = 1.0 / (3.0 + 8.0 * T0);
8967 T1 = (1.0 + 3.0 * T0) * T4;
8971 dltw_dVb=
model_.
factor1*(0.5 / T3 * T1 * dXdep_dVb + T3 * T2);
8976 Theta0 = T1 * (1.0 + 2.0 * T1);
8977 dT1_dVb = -T0 / lt1 * T1 * dlt1_dVb;
8978 dTheta0_dVb = (1.0 + 4.0 * T1) * dT1_dVb;
8982 Theta0 = T1 * (1.0 + 2.0 * T1);
8990 else dDelt_vth_dT = 0.0;
8995 T2 = T1 * (1.0 + 2.0 * T1);
8996 dT1_dVb = -T0 / ltw * T1 * dltw_dVb;
8997 dT2_dVb = (1.0 + 4.0 * T1) * dT1_dVb;
9001 T2 = T1 * (1.0 + 2.0 * T1);
9008 if (
selfheat) dDeltVthw_dT = T0 * dvbi_dT;
9009 else dDeltVthw_dT = 0.0;
9019 dDeltVthtemp_dT = 0.0;
9026 { T9 = 1.0 / (3.0 - 2.0e4 * T3);
9027 T3 = (2.0e-4 - T3) * T9;
9042 * Vbs0mos) * tmp2 + DeltVthtemp - DIBL_Sft;
9047 - dDelt_vth_dVb - dDeltVthw_dVb
9048 + T6 - dDIBL_Sft_dVb;
9049 dVthFD_dVe = dVthFD_dVb * dVbs0mos_dVe;
9050 dVthFD_dVd = -dDIBL_Sft_dVd;
9052 dVthFD_dT = dDeltVthtemp_dT - dDelt_vth_dT - dDeltVthw_dT
9053 + dVthFD_dVb * dVbs0mos_dT;
9054 else dVthFD_dT = 0.0;
9058 VtgsFD = VthFD - Vgs_eff;
9061 VtgseffFD = T10 * log(1.0 + ExpVtgsFD);
9062 T0 /= (1.0 + ExpVtgsFD);
9063 dVtgseffFD_dVd = T0 * dVthFD_dVd;
9065 dVtgseffFD_dVe = T0 * dVthFD_dVe;
9067 dVtgseffFD_dT = T0 * (dVthFD_dT - (VtgsFD -
model_.
vofffd)
9068 / Temp) + VtgseffFD/Temp;
9069 else dVtgseffFD_dT = 0.0;
9073 VgstFD = Vgs_eff - VthFD;
9075 VgsteffFD = T10 * log(1.0 + ExpVgstFD);
9076 T0 /= (1.0 + ExpVgstFD);
9077 dVgsteffFD_dVd = -T0 * dVthFD_dVd;
9079 dVgsteffFD_dVe = -T0 * dVthFD_dVe;
9081 dVgsteffFD_dT = T0 * (-dVthFD_dT - (VgstFD -
model_.
vofffd)
9082 / Temp) + VgsteffFD/Temp;
9083 else dVgsteffFD_dT = 0.0;
9091 dT2_dVg = dVgsteffFD_dVg;
9092 dT2_dVd = dVgsteffFD_dVd;
9093 dT2_dVe = dVgsteffFD_dVe;
9094 if (
selfheat) dT2_dT = dVgsteffFD_dT;
9097 T0 = 1+ VgsteffFD * T2 / T1;
9098 dT0_dVg = (VgsteffFD * dT2_dVg + T2 * dVgsteffFD_dVg) / T1;
9099 dT0_dVd = (VgsteffFD * dT2_dVd + T2 * dVgsteffFD_dVd) / T1;
9100 dT0_dVe = (VgsteffFD * dT2_dVe + T2 * dVgsteffFD_dVe) / T1;
9102 dT0_dT = (VgsteffFD * (dT2_dT - T2/T1 * dT1_dT) + T2
9103 * dVgsteffFD_dT) / T1;
9107 PhiON = phi_local + Vtm* log(T0) ;
9108 dPhiON_dVg = Vtm* dT0_dVg/T0 ;
9109 dPhiON_dVd = Vtm* dT0_dVd/T0 ;
9110 dPhiON_dVe = Vtm* dT0_dVe/T0 ;
9112 dPhiON_dT = Vtm* dT0_dT/T0 + (PhiON-phi_local)/Temp ;
9113 else dPhiON_dT = 0.0;
9119 PhiFD = PhiON - T0 * VtgseffFD;
9120 dPhiFD_dVg = dPhiON_dVg - T0 * dVtgseffFD_dVg;
9121 dPhiFD_dVd = dPhiON_dVd - T0 * dVtgseffFD_dVd;
9122 dPhiFD_dVe = dPhiON_dVe - T0 * dVtgseffFD_dVe;
9124 dPhiFD_dT = dPhiON_dT - T0 * dVtgseffFD_dT;
9131 T2 = T1 * (vbi - phi_local);
9134 dVbs0t_dVg = dPhiFD_dVg;
9135 dVbs0t_dVd = dPhiFD_dVd;
9136 dVbs0t_dVe = dPhiFD_dVe;
9138 dVbs0t_dT = dPhiFD_dT + T1 * dvbi_dT;
9144 T5 =
model_.
k2b * (exp(0.5*T3) + 2*exp(T3));
9148 Vbs0 = T0 * Vbs0t + T2;
9149 dVbs0_dVg = T0 * dVbs0t_dVg;
9150 dVbs0_dVd = T0 * dVbs0t_dVd;
9151 dVbs0_dVe = T0 * dVbs0t_dVe + T1;
9153 dVbs0_dT = T0 * dVbs0t_dT - T1 * dvfbb_dT;
9163 dVbsitf_dVg = dVbs0_dVg;
9164 dVbsitf_dVd = dVbs0_dVd;
9165 dVbsitf_dVe = dVbs0_dVe;
9167 if (
selfheat) dVbsitf_dT = dVbs0_dT;
9168 else dVbsitf_dT = 0;
9173 T2 = sqrt(T1*T1 + 0.0001);
9174 T3 = 0.5 * (1 + T1/T2);
9175 Vbsitf = (Vbs0 +
OFF_Vbsitf) + 0.5 * (T1 + T2);
9176 dVbsitf_dVg = (1 - T3) * dVbs0_dVg;
9177 dVbsitf_dVd = (1 - T3) * dVbs0_dVd;
9178 dVbsitf_dVe = (1 - T3) * dVbs0_dVe;
9180 if (
selfheat) dVbsitf_dT = (1 - T3) * dVbs0_dT;
9181 else dVbsitf_dT = 0.0;
9185 T1 = Vbs0t - Vbsitf - 0.005;
9186 T2 = sqrt(T1 * T1 + (2.5e-5));
9187 T3 = 0.5 * (T1 + T2);
9189 Vbsmos = Vbsitf - 0.5 * T3 * T4;
9190 T5 = 0.5 * T4 * (1 + T1 / T2);
9191 dVbsmos_dVg = dVbsitf_dVg * (1 + T5) - T5 * dVbs0t_dVg;
9192 dVbsmos_dVd = dVbsitf_dVd * (1 + T5) - T5 * dVbs0t_dVd;
9193 dVbsmos_dVb = dVbsitf_dVb * (1 + T5);
9194 dVbsmos_dVe = dVbsitf_dVe * (1 + T5) - T5 * dVbs0t_dVe;
9196 dVbsmos_dT = dVbsitf_dT * (1 + T5) - T5 * dVbs0t_dT;
9209 T0 = Vbsmos + 5 - 0.001;
9210 T1 = sqrt(T0 * T0 - 0.004 * (-5));
9211 T2 = (-5) + 0.5 * (T0 + T1);
9212 dT2_dVb = (0.5 * (1.0 + T0 / T1)) * dVbsmos_dVb;
9213 dT2_dVg = (0.5 * (1.0 + T0 / T1)) * dVbsmos_dVg;
9214 dT2_dVd = (0.5 * (1.0 + T0 / T1)) * dVbsmos_dVd;
9215 dT2_dVe = (0.5 * (1.0 + T0 / T1)) * dVbsmos_dVe;
9216 if (
selfheat) dT2_dT = (0.5 * (1.0 + T0 / T1)) * dVbsmos_dT;
9221 T1 = T0 - T2 - 0.002;
9222 T3 = sqrt(T1 * T1 + 0.008 * T0);
9223 Vbsh = T0 - 0.5 * (T1 + T3);
9224 dVbsh_dVb = 0.5 * (1.0 + T1 / T3) * dT2_dVb;
9225 dVbsh_dVg = 0.5 * (1.0 + T1 / T3) * dT2_dVg;
9226 dVbsh_dVd = 0.5 * (1.0 + T1 / T3) * dT2_dVd;
9227 dVbsh_dVe = 0.5 * (1.0 + T1 / T3) * dT2_dVe;
9228 if (
selfheat) dVbsh_dT = 0.5 * (1.0 + T1 / T3) * dT2_dT;
9229 else dVbsh_dT = 0.0;
9232 T0 = 0.95 * phi_local;
9233 T1 = T0 - Vbsh - 0.002;
9234 T2 = sqrt(T1 * T1 + 0.008 * T0);
9235 Vbseff = T0 - 0.5 * (T1 + T2);
9236 dVbseff_dVb = 0.5 * (1.0 + T1 / T2) * dVbsh_dVb;
9237 dVbseff_dVg = 0.5 * (1.0 + T1 / T2) * dVbsh_dVg;
9238 dVbseff_dVd = 0.5 * (1.0 + T1 / T2) * dVbsh_dVd;
9239 dVbseff_dVe = 0.5 * (1.0 + T1 / T2) * dVbsh_dVe;
9240 if (
selfheat) dVbseff_dT = 0.5 * (1.0 + T1 / T2) * dVbsh_dT;
9241 else dVbseff_dT = 0.0;
9247 if (dVbseff_dVb < 1e-20) {
9248 dVbseff_dVb = 1e-20;
9252 dVbsh_dVb /= dVbseff_dVb;
9254 Phis = phi_local - Vbseff;
9256 sqrtPhis = sqrt(Phis);
9257 dsqrtPhis_dVb = -0.5 / sqrtPhis;
9259 Xdep = Xdep0 * sqrtPhis / sqrtPhi;
9260 dXdep_dVb = (Xdep0 / sqrtPhi) * dsqrtPhis_dVb;
9272 { T4 = 1.0 / (3.0 + 8.0 * T0);
9273 T1 = (1.0 + 3.0 * T0) * T4;
9277 dlt1_dVb =
model_.
factor1 * (0.5 / T3 * T1 * dXdep_dVb + T3 * T2);
9286 { T4 = 1.0 / (3.0 + 8.0 * T0);
9287 T1 = (1.0 + 3.0 * T0) * T4;
9291 dltw_dVb=
model_.
factor1*(0.5 / T3 * T1 * dXdep_dVb + T3 * T2);
9296 Theta0 = T1 * (1.0 + 2.0 * T1);
9297 dT1_dVb = -T0 / lt1 * T1 * dlt1_dVb;
9298 dTheta0_dVb = (1.0 + 4.0 * T1) * dT1_dVb;
9302 Theta0 = T1 * (1.0 + 2.0 * T1);
9310 else dDelt_vth_dT = 0.0;
9315 T2 = T1 * (1.0 + 2.0 * T1);
9316 dT1_dVb = -T0 / ltw * T1 * dltw_dVb;
9317 dT2_dVb = (1.0 + 4.0 * T1) * dT1_dVb;
9321 T2 = T1 * (1.0 + 2.0 * T1);
9328 if (
selfheat) dDeltVthw_dT = T0 * dvbi_dT;
9329 else dDeltVthw_dT = 0.0;
9339 dDeltVthtemp_dT = 0.0;
9346 { T9 = 1.0 / (3.0 - 2.0e4 * T3);
9347 T3 = (2.0e-4 - T3) * T9;
9359 T9 = 2.2361 / sqrtPhi;
9360 sqrtPhisExt = sqrtPhis - T9 * (Vbsh - Vbseff);
9361 dsqrtPhisExt_dVb = dsqrtPhis_dVb - T9 * (dVbsh_dVb - 1);
9366 * Vbseff) * tmp2 + DeltVthtemp - DIBL_Sft;
9372 - dDelt_vth_dVb - dDeltVthw_dVb
9373 + T6 - dDIBL_Sft_dVb;
9376 dVth_dVd = -dDIBL_Sft_dVd;
9378 dVth_dT = dDeltVthtemp_dT - dDelt_vth_dT - dDeltVthw_dT;
9390 Theta0zb = T1 * (1.0 + 2.0 * T1);
9394 Theta0zb = T1 * (1.0 + 2.0 * T1);
9402 T2 = T1 * (1.0 + 2.0 * T1);
9406 T2 = T1 * (1.0 + 2.0 * T1);
9409 DeltVthwzb = T0 * V0;
9410 dDeltVthwzb_dT = T0 * dvbi_dT;
9419 - Delt_vthzb - DeltVthwzb +
paramPtr->
k3 * tmp2
9421 dVthzb_dT = dDeltVthtempzb_dT - dDelt_vthzb_dT - dDeltVthwzb_dT;
9429 dT2_dVb = - T2 / Xdep * dXdep_dVb;
9437 dT4_dVb = (dT2_dVb + Theta0 * dT3_dVb + dTheta0_dVb * T3)
9439 dT4_dVd = Theta0 * dT3_dVd /
model_.
cox;
9448 { T0 = 1.0 / (3.0 + 8.0 * T4);
9449 n = (1.0 + 3.0 * T4) * T0;
9451 dn_dVb = T0 * dT4_dVb;
9452 dn_dVd = T0 * dT4_dVd;
9457 Vgst = Vgs_eff - Vth;
9459 dVgst_dVd = -dVth_dVd;
9462 T10 = 2.0 * n * Vtm;
9463 VgstNVt = Vgst / T10;
9469 { Vgsteff_local = Vgst;
9473 dVgsteff_dVd = -dVth_dVd + T0 * dVbseff_dVd;
9474 dVgsteff_dVb = T0 * dVbseff_dVb;
9475 dVgsteff_dVe = T0 * dVbseff_dVe;
9477 dVgsteff_dT = -dVth_dT + T0 * dVbseff_dT;
9485 T3 = Vgsteff_local / (n * Vtm) ;
9487 T1 = -T3 * (dVth_dVb + T0 * Vtm * dn_dVb);
9489 dVgsteff_dVd = -T3 * (dVth_dVd + T0 * Vtm * dn_dVd)+
9491 dVgsteff_dVe = T1 * dVbseff_dVe;
9492 dVgsteff_dVb = T1 * dVbseff_dVb;
9494 dVgsteff_dT = -T3 * (dVth_dT + T0 * dVtm_dT * n)
9495 + Vgsteff_local / Temp+ T1 * dVbseff_dT;
9500 { ExpVgst = exp(VgstNVt);
9501 T1 = T10 * log(1.0 + ExpVgst);
9503 dT1_dVg = ExpVgst / (1.0 + ExpVgst);
9504 dT1_dVb = -dT1_dVg * (dVth_dVb + Vgst / n * dn_dVb)
9506 dT1_dVd = -dT1_dVg * (dVth_dVd + Vgst / n * dn_dVd)
9510 dT1_dT = -dT1_dVg * (dVth_dT + Vgst * T3) + T1 * T3;
9515 T2 = 1.0 - T10 * dT2_dVg;
9516 dT2_dVd = -dT2_dVg * (dVth_dVd - 2.0 * Vtm * ExpArg * dn_dVd)
9517 + (T2 - 1.0) / n * dn_dVd;
9518 dT2_dVb = -dT2_dVg * (dVth_dVb - 2.0 * Vtm * ExpArg * dn_dVb)
9519 + (T2 - 1.0) / n * dn_dVb;
9521 dT2_dT = -dT2_dVg * (dVth_dT - ExpArg * T10 * T3);
9525 Vgsteff_local = T1 / T2;
9528 T4 = (T2 * dT1_dVb - T1 * dT2_dVb) / T3;
9529 dVgsteff_dVb = T4 * dVbseff_dVb;
9530 dVgsteff_dVe = T4 * dVbseff_dVe;
9531 dVgsteff_dVg = (T2 * dT1_dVg - T1 * dT2_dVg) / T3 *
dVgs_eff_dVg
9533 dVgsteff_dVd = (T2 * dT1_dVd - T1 * dT2_dVd) / T3 +
9536 dVgsteff_dT = (T2 * dT1_dT - T1 * dT2_dT) / T3 +
9541 Vgst2Vtm = Vgsteff_local + 2.0 * Vtm;
9543 dVgst2Vtm_dT = dVgsteff_dT + 2.0 * dVtm_dT;
9544 else dVgst2Vtm_dT = 0.0;
9548 T9 = sqrtPhis - sqrtPhi;
9555 { T0 = 1.0 / (6.0e-8 - 2.0 * Weff);
9556 Weff = 2.0e-8 * (4.0e-8 - Weff) * T0;
9564 { Rds = rds0 * (1.0 + T0);
9568 if (
selfheat && (Rds!=0.0)) dRds_dT = (1.0 + T0) * drds0_dT;
9573 { T1 = 1.0 / (17.0 + 20.0 * T0);
9574 Rds = rds0 * (0.8 + T0) * T1;
9579 if (
selfheat && (Rds!=0.0)) dRds_dT = (0.8 + T0) * T1 * drds0_dT;
9586 Abulk0 = Abulk_local = 1.0;
9587 dAbulk0_dVb = dAbulk_dVg = dAbulk_dVb = 0.0;
9592 T11 = 1.0 / (1.0 + T10);
9596 T12 = 1.0 / (0.8 + T10);
9597 T11 = (17.0 + 20.0 * T10) * T12;
9604 T13 = (Vbsh * T11) / T10;
9605 dT13_dVb = (Vbsh * dT11_dVb + T11 * dVbsh_dVb) / T10;
9609 T14 = 1 / sqrt(1-T13);
9610 T10 = 0.5 * T14 / (1-T13);
9611 dT14_dVb = T10 * dT13_dVb;
9614 T11 = 1.0 / (1.0 - 1.043406*T13);
9615 T14 = (6.00167 - 6.26044 * T13) * T11;
9616 T10 = 0.001742 * T11 * T11;
9617 dT14_dVb = T10 * dT13_dVb;
9624 dT1_dVb = T10 * dT14_dVb;
9627 tmp1 = Leff + 2.0 * T9;
9633 dT2_dVb = -T9 * tmp2 / tmp1 / Xdep * dXdep_dVb;
9637 Abulk0 = 1 + T1 * T2;
9638 dAbulk0_dVb = T1 * dT2_dVb + T2 * dT1_dVb;
9641 dAbulk_dVg = -T1 * T8;
9642 Abulk_local = Abulk0 + dAbulk_dVg * Vgsteff_local;
9644 dAbulk_dVb = dAbulk0_dVb
9645 - T8 * Vgsteff_local * (dT1_dVb + 3.0 * T1 * dT2_dVb / tmp2);
9650 T9 = 1.0 / (3.0 - 200.0 * Abulk0);
9651 Abulk0 = (0.02 - Abulk0) * T9;
9652 dAbulk0_dVb *= T9 * T9;
9655 if (Abulk_local < 0.01)
9657 T9 = 1.0 / (3.0 - 200.0 * Abulk_local);
9658 Abulk_local = (0.02 - Abulk_local) * T9;
9659 dAbulk_dVb *= T9 * T9;
9664 Abulk = Abulk_local;
9668 { T0 = Vgsteff_local + Vth + Vth;
9669 T2 = ua + uc * Vbseff;
9671 T5 = T3 * (T2 + ub * T3);
9672 dDenomi_dVg = (T2 + 2.0 * ub * T3) /
model_.
tox;
9673 dDenomi_dVd = dDenomi_dVg * 2 * dVth_dVd;
9674 dDenomi_dVb = dDenomi_dVg * 2 * dVth_dVb + uc * T3 ;
9676 dDenomi_dT = dDenomi_dVg * 2 * dVth_dT
9677 + (dua_dT + Vbseff * duc_dT + dub_dT * T3 ) * T3;
9682 { T5 = Vgsteff_local /
model_.
tox * (ua + uc * Vbseff
9684 dDenomi_dVg = (ua + uc * Vbseff + 2.0 * ub * Vgsteff_local
9687 dDenomi_dVb = Vgsteff_local * uc /
model_.
tox ;
9689 dDenomi_dT = Vgsteff_local /
model_.
tox * (dua_dT + Vbseff
9690 * duc_dT + dub_dT * Vgsteff_local /
model_.
tox);
9695 { T0 = Vgsteff_local + Vth + Vth;
9696 T2 = 1.0 + uc * Vbseff;
9698 T4 = T3 * (ua + ub * T3);
9700 dDenomi_dVg = (ua + 2.0 * ub * T3) * T2 /
model_.
tox;
9701 dDenomi_dVd = dDenomi_dVg * 2.0 * dVth_dVd;
9702 dDenomi_dVb = dDenomi_dVg * 2.0 * dVth_dVb + uc * T4 ;
9704 dDenomi_dT = dDenomi_dVg * 2.0 * dVth_dT + (dua_dT + dub_dT * T3)
9705 * T3 * T2 + T4 * Vbseff * duc_dT;
9711 { Denomi = 1.0 + T5;
9714 { T9 = 1.0 / (7.0 + 10.0 * T5);
9715 Denomi = (0.6 + T5) * T9;
9721 else dDenomi_dT = 0.0;
9724 ueff = ueff_local = u0temp / Denomi;
9725 T9 = -ueff_local / Denomi;
9726 dueff_dVg = T9 * dDenomi_dVg;
9727 dueff_dVd = T9 * dDenomi_dVd;
9728 dueff_dVb = T9 * dDenomi_dVb;
9729 if (
selfheat) dueff_dT = T9 * dDenomi_dT + du0temp_dT / Denomi;
9730 else dueff_dT = 0.0;
9734 WVCoxRds = WVCox * Rds;
9739 Esat = 2.0 * vsattemp / ueff_local;
9740 EsatL = Esat * Leff;
9741 T0 = -EsatL /ueff_local;
9742 dEsatL_dVg = T0 * dueff_dVg;
9743 dEsatL_dVd = T0 * dueff_dVd;
9744 dEsatL_dVb = T0 * dueff_dVb;
9746 dEsatL_dT = T0 * dueff_dT + EsatL / vsattemp * dvsattemp_dT;
9759 T1 = T0 -
paramPtr->
a1 * Vgsteff_local - 0.0001;
9760 T2 = sqrt(T1 * T1 + 0.0004 * T0);
9761 Lambda =
paramPtr->
a2 + T0 - 0.5 * (T1 + T2);
9762 dLambda_dVg = 0.5 *
paramPtr->
a1 * (1.0 + T1 / T2);
9767 Lambda = 0.5 * (T1 + T2);
9768 dLambda_dVg = 0.5 *
paramPtr->
a1 * (1.0 + T1 / T2);
9774 { tmp2 = dRds_dVg / Rds + dWeff_dVg / Weff;
9775 tmp3 = dRds_dVb / Rds + dWeff_dVb / Weff;
9778 { tmp2 = dWeff_dVg / Weff;
9779 tmp3 = dWeff_dVb / Weff;
9781 if ((Rds == 0.0) && (Lambda == 1.0))
9782 { T0 = 1.0 / (Abulk_local * EsatL + Vgst2Vtm);
9786 T3 = EsatL * Vgst2Vtm;
9789 dT0_dVg = -(Abulk_local * dEsatL_dVg + EsatL * dAbulk_dVg + 1.0) * T1;
9790 dT0_dVd = -(Abulk_local * dEsatL_dVd) * T1;
9791 dT0_dVb = -(Abulk_local * dEsatL_dVb + EsatL * dAbulk_dVb) * T1;
9793 dT0_dT = -(Abulk_local * dEsatL_dT + dVgst2Vtm_dT) * T1;
9796 dVdsat_dVg = T3 * dT0_dVg + T2 * dEsatL_dVg + EsatL * T0;
9797 dVdsat_dVd = T3 * dT0_dVd + T2 * dEsatL_dVd;
9798 dVdsat_dVb = T3 * dT0_dVb + T2 * dEsatL_dVb;
9800 dVdsat_dT = T3 * dT0_dT + T2 * dEsatL_dT
9801 + EsatL * T0 * dVgst2Vtm_dT;
9802 else dVdsat_dT = 0.0;
9805 { tmp1 = dLambda_dVg / (Lambda * Lambda);
9806 T9 = Abulk_local * WVCoxRds;
9807 T8 = Abulk_local * T9;
9809 T6 = Vgst2Vtm * WVCoxRds;
9810 T0 = 2.0 * Abulk_local * (T9 - 1.0 + 1.0 / Lambda);
9811 dT0_dVg = 2.0 * (T8 * tmp2 - Abulk_local * tmp1
9812 + (2.0 * T9 + 1.0 / Lambda - 1.0) * dAbulk_dVg);
9816 dT0_dVb = 2.0 * (T8 * (2.0 / Abulk_local * dAbulk_dVb + tmp3)
9817 + (1.0 / Lambda - 1.0) * dAbulk_dVb);
9823 tmp4 = dRds_dT / Rds + dvsattemp_dT / vsattemp;
9825 tmp4 = dvsattemp_dT / vsattemp;
9827 dT0_dT = 2.0 * T8 * tmp4;
9829 }
else tmp4 = dT0_dT = 0.0;
9831 T1 = Vgst2Vtm * (2.0 / Lambda - 1.0) + Abulk_local * EsatL + 3.0 * T7;
9833 dT1_dVg = (2.0 / Lambda - 1.0) - 2.0 * Vgst2Vtm * tmp1
9834 + Abulk_local * dEsatL_dVg + EsatL * dAbulk_dVg + 3.0 * (T9
9835 + T7 * tmp2 + T6 * dAbulk_dVg);
9836 dT1_dVb = Abulk_local * dEsatL_dVb + EsatL * dAbulk_dVb
9837 + 3.0 * (T6 * dAbulk_dVb + T7 * tmp3);
9838 dT1_dVd = Abulk_local * dEsatL_dVd;
9842 tmp4 += dVgst2Vtm_dT / Vgst2Vtm;
9843 dT1_dT = (2.0 / Lambda - 1.0) * dVgst2Vtm_dT + Abulk_local
9844 * dEsatL_dT + 3.0 * T7 * tmp4;
9848 T2 = Vgst2Vtm * (EsatL + 2.0 * T6);
9849 dT2_dVg = EsatL + Vgst2Vtm * dEsatL_dVg
9850 + T6 * (4.0 + 2.0 * Vgst2Vtm * tmp2);
9851 dT2_dVb = Vgst2Vtm * (dEsatL_dVb + 2.0 * T6 * tmp3);
9852 dT2_dVd = Vgst2Vtm * dEsatL_dVd;
9854 dT2_dT = Vgst2Vtm * dEsatL_dT + EsatL * dVgst2Vtm_dT
9855 + 2.0 * T6 * (dVgst2Vtm_dT + Vgst2Vtm * tmp4);
9859 T3 = sqrt(T1 * T1 - 2.0 * T0 * T2);
9860 Vdsat = (T1 - T3) / T0;
9862 dVdsat_dVg = (dT1_dVg - (T1 * dT1_dVg - dT0_dVg * T2
9863 - T0 * dT2_dVg) / T3 - Vdsat * dT0_dVg) / T0;
9864 dVdsat_dVb = (dT1_dVb - (T1 * dT1_dVb - dT0_dVb * T2
9865 - T0 * dT2_dVb) / T3 - Vdsat * dT0_dVb) / T0;
9866 dVdsat_dVd = (dT1_dVd - (T1 * dT1_dVd - T0 * dT2_dVd) / T3) / T0;
9868 dVdsat_dT = (dT1_dT - (T1 * dT1_dT - dT0_dT * T2
9869 - T0 * dT2_dT) / T3 - Vdsat * dT0_dT) / T0;
9870 else dVdsat_dT = 0.0;
9876 dT1_dVg = dVdsat_dVg;
9877 dT1_dVd = dVdsat_dVd - 1.0;
9878 dT1_dVb = dVdsat_dVb;
9884 dT2_dVg = T0 * dT1_dVg + T3 * dVdsat_dVg;
9885 dT2_dVd = T0 * dT1_dVd + T3 * dVdsat_dVd;
9886 dT2_dVb = T0 * dT1_dVb + T3 * dVdsat_dVb;
9888 dT2_dT = T0 * dT1_dT + T3 * dVdsat_dT;
9892 Vdseff_local = Vdsat - 0.5 * (T1 + T2);
9893 dVdseff_dVg = dVdsat_dVg - 0.5 * (dT1_dVg + dT2_dVg);
9894 dVdseff_dVd = dVdsat_dVd - 0.5 * (dT1_dVd + dT2_dVd);
9895 dVdseff_dVb = dVdsat_dVb - 0.5 * (dT1_dVb + dT2_dVb);
9898 dVdseff_dT = dVdsat_dT - 0.5 * (dT1_dT + dT2_dT);
9902 if (Vdseff_local >
Vds)
9906 diffVds =
Vds - Vdseff_local;
9910 tmp4 = 1.0 - 0.5 * Abulk_local * Vdsat / Vgst2Vtm;
9911 T9 = WVCoxRds * Vgsteff_local;
9913 T0 = EsatL + Vdsat + 2.0 * T9 * tmp4;
9915 T7 = 2.0 * WVCoxRds * tmp4;
9916 dT0_dVg = dEsatL_dVg + dVdsat_dVg + T7 * (1.0 + tmp2 * Vgsteff_local)
9917 - T8 * (Abulk_local * dVdsat_dVg - Abulk_local * Vdsat / Vgst2Vtm
9918 + Vdsat * dAbulk_dVg);
9919 dT0_dVb = dEsatL_dVb + dVdsat_dVb + T7 * tmp3 * Vgsteff_local
9920 - T8 * (dAbulk_dVb * Vdsat + Abulk_local * dVdsat_dVb);
9921 dT0_dVd = dEsatL_dVd + dVdsat_dVd - T8 * Abulk_local * dVdsat_dVd;
9926 tmp4 = dRds_dT / Rds + dvsattemp_dT / vsattemp;
9928 tmp4 = dvsattemp_dT / vsattemp;
9929 dT0_dT = dEsatL_dT + dVdsat_dT + T7 * tmp4 * Vgsteff_local - T8 *
9930 (Abulk_local * dVdsat_dT - Abulk_local * Vdsat * dVgst2Vtm_dT
9935 T9 = WVCoxRds * Abulk_local;
9936 T1 = 2.0 / Lambda - 1.0 + T9;
9937 dT1_dVg = -2.0 * tmp1 + WVCoxRds * (Abulk_local * tmp2 + dAbulk_dVg);
9938 dT1_dVb = dAbulk_dVb * WVCoxRds + T9 * tmp3;
9945 dVasat_dVg = (dT0_dVg - Vasat * dT1_dVg) / T1;
9946 dVasat_dVb = (dT0_dVb - Vasat * dT1_dVb) / T1;
9947 dVasat_dVd = dT0_dVd / T1;
9949 dVasat_dT = (dT0_dT - Vasat * dT1_dT) / T1;
9956 dT0_dVb = -T0 / Abulk_local * dAbulk_dVb;
9957 dT0_dVg = -T0 / Abulk_local * dAbulk_dVg;
9959 T2 = Vgsteff_local / EsatL;
9960 T1 = Leff * (Abulk_local + T2);
9961 dT1_dVg = Leff * ((1.0 - T2 * dEsatL_dVg) / EsatL + dAbulk_dVg);
9962 dT1_dVb = Leff * (dAbulk_dVb - T2 * dEsatL_dVb / EsatL);
9963 dT1_dVd = -T2 * dEsatL_dVd / Esat;
9965 dT1_dT = -T2 * dEsatL_dT / Esat;
9970 VACLM = T9 * diffVds;
9971 dVACLM_dVg = T0 * dT1_dVg * diffVds - T9 * dVdseff_dVg
9972 + T1 * diffVds * dT0_dVg;
9973 dVACLM_dVb = (dT0_dVb * T1 + T0 * dT1_dVb) * diffVds
9975 dVACLM_dVd = T0 * dT1_dVd * diffVds + T9 * (1.0 - dVdseff_dVd);
9977 dVACLM_dT = T0 * dT1_dT * diffVds - T9 * dVdseff_dT;
9983 dVACLM_dVd = dVACLM_dVg = dVACLM_dVb = dVACLM_dT = 0.0;
9988 { T8 = Abulk_local * Vdsat;
9991 dT0_dVg = Vgst2Vtm * Abulk_local * dVdsat_dVg + T8
9992 + Vgst2Vtm * Vdsat * dAbulk_dVg;
9993 dT1_dVg = 1.0 + Abulk_local * dVdsat_dVg + Vdsat * dAbulk_dVg;
9994 dT1_dVb = dAbulk_dVb * Vdsat + Abulk_local * dVdsat_dVb;
9995 dT0_dVb = Vgst2Vtm * dT1_dVb;
9996 dT1_dVd = Abulk_local * dVdsat_dVd;
9997 dT0_dVd = Vgst2Vtm * dT1_dVd;
10000 dT0_dT = dVgst2Vtm_dT * T8 + Abulk_local * Vgst2Vtm * dVdsat_dT;
10001 dT1_dT = dVgst2Vtm_dT + Abulk_local * dVdsat_dT;
10003 dT0_dT = dT1_dT = 0.0;
10007 VADIBL = (Vgst2Vtm - T0 / T1) / T2;
10008 dVADIBL_dVg = (1.0 - dT0_dVg / T1 + T0 * dT1_dVg / T9) / T2;
10009 dVADIBL_dVb = (-dT0_dVb / T1 + T0 * dT1_dVb / T9) / T2;
10010 dVADIBL_dVd = (-dT0_dVd / T1 + T0 * dT1_dVd / T9) / T2;
10012 dVADIBL_dT = (dVgst2Vtm_dT - dT0_dT/T1 + T0*dT1_dT/T9) / T2;
10018 { T3 = 1.0 / (1.0 + T7);
10024 else dVADIBL_dT = 0.0;
10028 { T4 = 1.0 / (0.8 + T7);
10029 T3 = (17.0 + 20.0 * T7) * T4;
10031 dVADIBL_dVb = dVADIBL_dVb * T3
10035 else dVADIBL_dT = 0.0;
10041 dVADIBL_dVd = dVADIBL_dVg = dVADIBL_dVb = dVADIBL_dT = 0.0;
10047 T9 = T8 * Vgsteff_local;
10050 dT0_dVg = T8 * (1.0 - Vgsteff_local * dEsatL_dVg / EsatL);
10051 dT0_dVb = -T9 * dEsatL_dVb / EsatL;
10052 dT0_dVd = -T9 * dEsatL_dVd / EsatL;
10054 dT0_dT = -T9 * dEsatL_dT / EsatL;
10059 { T1 = 1.0 / (17.0 + 20.0 * T9);
10060 T0 = (0.8 + T9) * T1;
10062 dT0_dVg = T8 * (1.0 - Vgsteff_local * dEsatL_dVg / EsatL) * T1;
10065 dT0_dVb = -T9 * dEsatL_dVb;
10066 dT0_dVd = -T9 * dEsatL_dVd;
10068 dT0_dT = -T9 * dEsatL_dT;
10073 tmp1 = VACLM * VACLM;
10074 tmp2 = VADIBL * VADIBL;
10075 tmp3 = VACLM + VADIBL;
10077 T1 = VACLM * VADIBL / tmp3;
10079 dT1_dVg = (tmp1 * dVADIBL_dVg + tmp2 * dVACLM_dVg) / tmp3;
10080 dT1_dVd = (tmp1 * dVADIBL_dVd + tmp2 * dVACLM_dVd) / tmp3;
10081 dT1_dVb = (tmp1 * dVADIBL_dVb + tmp2 * dVACLM_dVb) / tmp3;
10083 dT1_dT = (tmp1 * dVADIBL_dT + tmp2 * dVACLM_dT ) / tmp3;
10087 Va = Vasat + T0 * T1;
10088 dVa_dVg = dVasat_dVg + T1 * dT0_dVg + T0 * dT1_dVg;
10089 dVa_dVd = dVasat_dVd + T1 * dT0_dVd + T0 * dT1_dVd;
10090 dVa_dVb = dVasat_dVb + T1 * dT0_dVb + T0 * dT1_dVb;
10092 dVa_dT = dVasat_dT + T1 * dT0_dT + T0 * dT1_dT;
10098 beta = ueff_local * CoxWovL;
10099 dbeta_dVg = CoxWovL * dueff_dVg + beta * dWeff_dVg / Weff ;
10100 dbeta_dVd = CoxWovL * dueff_dVd;
10101 dbeta_dVb = CoxWovL * dueff_dVb + beta * dWeff_dVb / Weff ;
10102 if (
selfheat) dbeta_dT = CoxWovL * dueff_dT;
10103 else dbeta_dT = 0.0;
10105 T0 = 1.0 - 0.5 * Abulk_local * Vdseff_local / Vgst2Vtm;
10106 dT0_dVg = -0.5 * (Abulk_local * dVdseff_dVg
10107 - Abulk_local * Vdseff_local / Vgst2Vtm + Vdseff_local
10108 * dAbulk_dVg) / Vgst2Vtm;
10109 dT0_dVd = -0.5 * Abulk_local * dVdseff_dVd / Vgst2Vtm;
10110 dT0_dVb = -0.5 * (Abulk_local * dVdseff_dVb + dAbulk_dVb *
10111 Vdseff_local) / Vgst2Vtm;
10113 dT0_dT = -0.5 * (Abulk_local * dVdseff_dT
10114 - Abulk_local * Vdseff_local / Vgst2Vtm
10115 * dVgst2Vtm_dT) / Vgst2Vtm;
10119 fgche1 = Vgsteff_local * T0;
10120 dfgche1_dVg = Vgsteff_local * dT0_dVg + T0;
10121 dfgche1_dVd = Vgsteff_local * dT0_dVd;
10122 dfgche1_dVb = Vgsteff_local * dT0_dVb;
10123 if (
selfheat) dfgche1_dT = Vgsteff_local * dT0_dT;
10124 else dfgche1_dT = 0.0;
10126 T9 = Vdseff_local / EsatL;
10128 dfgche2_dVg = (dVdseff_dVg - T9 * dEsatL_dVg) / EsatL;
10129 dfgche2_dVd = (dVdseff_dVd - T9 * dEsatL_dVd) / EsatL;
10130 dfgche2_dVb = (dVdseff_dVb - T9 * dEsatL_dVb) / EsatL;
10132 dfgche2_dT = (dVdseff_dT - T9 * dEsatL_dT) / EsatL;
10136 gche = beta * fgche1 / fgche2;
10138 dgche_dVg = (beta * dfgche1_dVg + fgche1 * dbeta_dVg
10139 - gche * dfgche2_dVg) / fgche2;
10140 dgche_dVd = (beta * dfgche1_dVd + fgche1 * dbeta_dVd
10141 - gche * dfgche2_dVd) / fgche2;
10142 dgche_dVb = (beta * dfgche1_dVb + fgche1 * dbeta_dVb
10143 - gche * dfgche2_dVb) / fgche2;
10145 dgche_dT = (beta * dfgche1_dT + fgche1 * dbeta_dT
10146 - gche * dfgche2_dT) / fgche2;
10150 T0 = 1.0 + gche * Rds;
10151 T9 = Vdseff_local / T0;
10157 dIdl_dVg = (gche * dVdseff_dVg + T9 * dgche_dVg) / T0
10158 - Idl * gche / T0 * dRds_dVg ;
10159 dIdl_dVd = (gche * dVdseff_dVd + T9 * dgche_dVd) / T0;
10160 dIdl_dVb = (gche * dVdseff_dVb + T9 * dgche_dVb
10161 - Idl * dRds_dVb * gche) / T0;
10163 dIdl_dT = (gche * dVdseff_dT + T9 * dgche_dT
10164 - Idl * dRds_dT * gche) / T0;
10172 Gm0 = T0 * dIdl_dVg - Idl * ( dVdseff_dVg + T9 * dVa_dVg) / Va;
10173 Gmb0 = T0 * dIdl_dVb - Idl * ( dVdseff_dVb + T9 * dVa_dVb) / Va;
10174 Gds0 = T0 * dIdl_dVd + Idl * (1.0 - dVdseff_dVd - T9 * dVa_dVd) / Va;
10177 tmp1 = Gds0 + Gm0 * dVgsteff_dVd;
10178 tmp2 = Gmb0 + Gm0 * dVgsteff_dVb;
10183 GmT0 = T0 * dIdl_dT - Idl * (dVdseff_dT + T9 * dVa_dT) / Va;
10189 Gm = (Gm0 * dVgsteff_dVg+ Gmb0 * dVbseff_dVg) /
nseg;
10190 Gmb = (Gm0 * dVgsteff_dVb + Gmb0 * dVbseff_dVb) /
nseg;
10191 Gds = (Gm0 * dVgsteff_dVd+ Gmb0 * dVbseff_dVd + Gds0) /
nseg;
10192 Gme = (Gm0 * dVgsteff_dVe + Gmb0 * dVbseff_dVe) /
nseg;
10194 GmT = (Gm0 * dVgsteff_dT+ Gmb0 * dVbseff_dT + GmT0) /
nseg;
10207 { Idgidl = Gdgidld = Gdgidlg = 0.0;
10216 T3 = Idgidl / T1 * (T2 + 1);
10217 Gdgidld = T3 * dT1_dVd;
10218 Gdgidlg = T3 * dT1_dVg;
10223 Gdgidld = T3 * dT1_dVd;
10224 Gdgidlg = T3 * dT1_dVg;
10233 { Isgidl = Gsgidlg = 0;
10242 T3 = Isgidl / T1 * (T2 + 1);
10243 Gsgidlg = T3 * dT1_dVg;
10248 Gsgidlg = T3 * dT1_dVg;
10263 dT0_dVb = 1.0 / NVtm1;
10265 dT0_dT = -
Vbs / NVtm1 / NVtm1 * dNVtm1_dT;
10268 CEXP(T0, ExpVbsNVtm, T1);
10269 dExpVbsNVtm_dVb = T1 * dT0_dVb;
10271 dExpVbsNVtm_dT = T1 * dT0_dT;
10273 dExpVbsNVtm_dT = 0;
10276 dT0_dVb = 1.0 / NVtm1;
10277 dT0_dVd = -dT0_dVb;
10279 dT0_dT = -
Vbd / NVtm1 / NVtm1 * dNVtm1_dT;
10282 CEXP(T0, ExpVbdNVtm, T1);
10283 dExpVbdNVtm_dVb = T1 * dT0_dVb;
10284 dExpVbdNVtm_dVd = -dExpVbdNVtm_dVb;
10286 dExpVbdNVtm_dT = T1 * dT0_dT;
10288 dExpVbdNVtm_dT = 0;
10292 Ibs1 = dIbs1_dVb = dIbs1_dT = Ibd1 = dIbd1_dVb
10293 = dIbd1_dVd = dIbd1_dT = 0;
10298 dT0_dT = WsTsi * djdif_dT;
10301 Ibs1 = T0 * (ExpVbsNVtm - 1);
10302 dIbs1_dVb = T0 * dExpVbsNVtm_dVb;
10304 dIbs1_dT = T0 * dExpVbsNVtm_dT + (ExpVbsNVtm - 1) * dT0_dT;
10310 dT0_dT = WdTsi * djdif_dT;
10313 Ibd1 = T0 * (ExpVbdNVtm - 1);
10314 dIbd1_dVb = T0 * dExpVbdNVtm_dVb;
10315 dIbd1_dVd = -dIbd1_dVb;
10317 dIbd1_dT = T0 * dExpVbdNVtm_dT + (ExpVbdNVtm -1) * dT0_dT;
10334 dNVtmf_dT = dNVtmr_dT = 0;
10337 Ibs2 = dIbs2_dVb = dIbs2_dT = 0;
10338 Ibd2 = dIbd2_dVb = dIbd2_dVd = dIbd2_dT = 0;
10345 dT10_dVb = T4 * T2;
10347 dT10_dT = - T4 * T2 *
Vbs / NVtmf * dNVtmf_dT ;
10348 else dT10_dT = 0.0;
10358 dT11_dVb = dT11_dT = 0;
10365 dT0_dT = -T0 / NVtmr * dNVtmr_dT;
10370 dT11_dVb = -T2 * dT0_dVb;
10372 dT11_dT = -T2 * dT0_dT;
10376 Ibs2 = T3 * (T10 + T11);
10377 dIbs2_dVb = T3 * (dT10_dVb + dT11_dVb);
10379 dIbs2_dT = T3 * (dT10_dT + dT11_dT) + WsTsi * (T10 + T11)
10387 dT10_dVb = T4 * T2;
10390 dT10_dT = - T4 * T2 *
Vbd / NVtmf * dNVtmf_dT ;
10404 dT11_dVb = dT11_dT = 0;
10411 dT0_dT = -T0 / NVtmr * dNVtmr_dT;
10416 dT11_dVb = -T2 * dT0_dVb;
10418 dT11_dT = -T2 * dT0_dT;
10423 Ibd2 = T3 * (T10 + T11);
10424 dIbd2_dVb = T3 * (dT10_dVb + dT11_dVb);
10426 dIbd2_dVd = -dIbd2_dVb;
10428 dIbd2_dT = T3 * (dT10_dT + dT11_dT) + WdTsi * (T10 + T11)
10438 Ibs3 = dIbs3_dVb = dIbs3_dVd = dIbs3_dT = 0.0;
10439 Ibd3 = dIbd3_dVb = dIbd3_dVd = dIbd3_dT = 0.0;
10440 Ibsdif = dIbsdif_dVb = dIbsdif_dT = 0;
10441 Ibddif = dIbddif_dVb = dIbddif_dVd = dIbddif_dT = 0;
10442 ic = Ic = Gcd = Gcb = GcT = 0.0;
10452 if ((Ehlis = Ahli * (ExpVbsNVtm - 1)) < 1e-5) {
10453 Ehlis = dEhlis_dVb = dEhlis_dT = 0;
10455 dEhlisFactor_dVb = dEhlisFactor_dT = 0;
10458 dEhlis_dVb = Ahli * dExpVbsNVtm_dVb;
10460 dEhlis_dT = Ahli * dExpVbsNVtm_dT + (ExpVbsNVtm - 1) * dAhli_dT;
10463 EhlisFactor = 1.0 / sqrt(1 + Ehlis);
10464 T0 = -0.5 * EhlisFactor / (1 + Ehlis);
10465 dEhlisFactor_dVb = T0 * dEhlis_dVb;
10467 dEhlisFactor_dT = T0 * dEhlis_dT;
10469 dEhlisFactor_dT = 0;
10473 if ((Ehlid = Ahli * (ExpVbdNVtm - 1)) < 1e-5) {
10474 Ehlid = dEhlid_dVb = dEhlid_dVd = dEhlid_dT = 0;
10476 dEhlidFactor_dVb = dEhlidFactor_dVd = dEhlidFactor_dT = 0;
10479 dEhlid_dVb = Ahli * dExpVbdNVtm_dVb;
10480 dEhlid_dVd = -dEhlid_dVb;
10482 dEhlid_dT = Ahli * dExpVbdNVtm_dT + (ExpVbdNVtm - 1) * dAhli_dT;
10485 EhlidFactor = 1.0 / sqrt(1 + Ehlid);
10486 T0 = -0.5 * EhlidFactor / (1 + Ehlid);
10487 dEhlidFactor_dVb = T0 * dEhlid_dVb;
10488 dEhlidFactor_dVd = -dEhlidFactor_dVb;
10490 dEhlidFactor_dT = T0 * dEhlid_dT;
10492 dEhlidFactor_dT = 0;
10500 dT1_dT = T0 * dIen_dT;
10504 Ibs3 = T1 * (ExpVbsNVtm - 1) * EhlisFactor;
10505 dIbs3_dVb = T1 * (dExpVbsNVtm_dVb * EhlisFactor
10506 + (ExpVbsNVtm - 1) * dEhlisFactor_dVb);
10509 dIbs3_dT = dT1_dT * (ExpVbsNVtm - 1) * EhlisFactor
10510 + T1 * (dExpVbsNVtm_dT * EhlisFactor
10511 + (ExpVbsNVtm - 1) * dEhlisFactor_dT);
10515 Ibd3 = T1 * (ExpVbdNVtm - 1) * EhlidFactor;
10516 dIbd3_dVb = T1 * (dExpVbdNVtm_dVb * EhlidFactor
10517 + (ExpVbdNVtm - 1) * dEhlidFactor_dVb);
10518 dIbd3_dVd = -dIbd3_dVb;
10520 dIbd3_dT = dT1_dT * (ExpVbdNVtm - 1) * EhlidFactor
10521 + T1 * (dExpVbdNVtm_dT * EhlidFactor
10522 + (ExpVbdNVtm - 1) * dEhlidFactor_dT);
10534 Ibsdif = Iendif * (ExpVbsNVtm - 1) * EhlisFactor;
10535 dIbsdif_dVb = Iendif * (dExpVbsNVtm_dVb * EhlisFactor
10536 + (ExpVbsNVtm - 1) * dEhlisFactor_dVb);
10538 dIbsdif_dT = dIendif_dT * (ExpVbsNVtm - 1) * EhlisFactor
10539 + Iendif * (dExpVbsNVtm_dT * EhlisFactor
10540 + (ExpVbsNVtm - 1) * dEhlisFactor_dT);
10544 Ibddif = Iendif * (ExpVbdNVtm - 1) * EhlidFactor;
10545 dIbddif_dVb = Iendif * (dExpVbdNVtm_dVb * EhlidFactor
10546 + (ExpVbdNVtm - 1) * dEhlidFactor_dVb);
10547 dIbddif_dVd = -dIbddif_dVb;
10549 dIbddif_dT = dIendif_dT * (ExpVbdNVtm - 1) * EhlidFactor
10550 + Iendif * (dExpVbdNVtm_dT * EhlidFactor
10551 + (ExpVbdNVtm - 1) * dEhlidFactor_dT);
10557 ic = Ic = Gcd = Gcb = GcT = 0.0;
10565 T1 = Ehlis + Ehlid;
10566 dT1_dVb = dEhlis_dVb + dEhlid_dVb;
10567 dT1_dVd = dEhlid_dVd;
10569 dT1_dT = dEhlis_dT + dEhlid_dT;
10573 T3 = sqrt(T0 * T0 + 4 * T1);
10574 dT3_dVb = 0.5 / T3 * (2 * T0 * dT0_dVb + 4 * dT1_dVb);
10575 dT3_dVd = 0.5 / T3 * (2 * T0 * dT0_dVd + 4 * dT1_dVd);
10577 dT3_dT = 2 * dT1_dT / T3;
10581 T2 = (T0 + T3) / 2.0;
10582 dT2_dVb = (dT0_dVb + dT3_dVb) / 2.0;
10583 dT2_dVd = (dT0_dVd + dT3_dVd) / 2.0;
10585 dT2_dT = dT3_dT /2.0;
10592 dE2ndFactor_dVb = dE2ndFactor_dVd = dE2ndFactor_dT = 0;
10596 E2ndFactor = 1.0 / T2;
10597 dE2ndFactor_dVb = -E2ndFactor / T2 * dT2_dVb;
10598 dE2ndFactor_dVd = -E2ndFactor / T2 * dT2_dVd;
10600 dE2ndFactor_dT = -E2ndFactor / T2 * dT2_dT;
10602 dE2ndFactor_dT = 0;
10611 = T0 * (ExpVbsNVtm - ExpVbdNVtm) * E2ndFactor;
10612 Gcb = T0 * ((dExpVbsNVtm_dVb - dExpVbdNVtm_dVb) * E2ndFactor
10613 + (ExpVbsNVtm - ExpVbdNVtm) * dE2ndFactor_dVb);
10614 Gcd = T0 * (-dExpVbdNVtm_dVd * E2ndFactor
10615 + (ExpVbsNVtm - ExpVbdNVtm) * dE2ndFactor_dVd);
10617 GcT = T0 * (dExpVbsNVtm_dT - dExpVbdNVtm_dT) * E2ndFactor
10618 + dT0_dT * (ExpVbsNVtm - ExpVbdNVtm) * E2ndFactor
10619 + T0 * (ExpVbsNVtm - ExpVbdNVtm) * dE2ndFactor_dT;
10628 { Ibs4 = Ibd4 = dIbs4_dVb = dIbs4_dT = dIbd4_dVb
10629 = dIbd4_dVd = dIbd4_dT = 0;
10639 Ibs4 = T3 * (1- T1);
10641 dIbs4_dVb = dIbs4_dT = 0;
10650 Ibs4 = T3 * (1- T1);
10651 dIbs4_dVb = -T3 * T2 * dT0_dVb;
10653 dIbs4_dT = (1 - T1) * WsTsi * djtun_dT;
10665 Ibd4 = T3 * (1- T1);
10667 dIbd4_dVb = dIbd4_dT = 0;
10678 Ibd4 = T3 * (1- T1);
10679 dIbd4_dVb = -T3 * T2 * dT0_dVb;
10681 dIbd4_dVd = -dIbd4_dVb;
10684 dIbd4_dT = (1 - T1) * WdTsi * djtun_dT;
10689 itun = - Ibd3 - Ibd4;
10690 ibs = Ibs = Ibs1 + Ibs2 + Ibs3 + Ibs4;
10691 ibd = Ibd = Ibd1 + Ibd2 + Ibd3 + Ibd4;
10693 Gjsb = dIbs1_dVb + dIbs2_dVb + dIbs3_dVb + dIbs4_dVb;
10696 GjsT = dIbs1_dT + dIbs2_dT + dIbs3_dT + dIbs4_dT;
10700 Gjdb = dIbd1_dVb + dIbd2_dVb + dIbd3_dVb + dIbd4_dVb;
10702 Gjdd = dIbd1_dVd + dIbd2_dVd + dIbd3_dVd + dIbd4_dVd;
10704 GjdT = dIbd1_dT + dIbd2_dT + dIbd3_dT + dIbd4_dT;
10711 igidl= Idgidl = Gdgidld = Gdgidlg = 0.0;
10712 Isgidl = Gsgidlg = 0;
10717 ic = Ic = Gcd = Gcb = GcT = 0.0;
10730 Vgb = Vgs_eff -
Vbs;
10738 T3 = Vfb - Vgs_eff + Vbs -
DELTA_3;
10744 T0 = sqrt(T3 * T3 - 4.0 * DELTA_3 * Vfb);
10745 dT0_dVg = 1.0/(2.0 * T0) * 2.0*T3 * dT3_dVg;
10746 dT0_dVb = 0.5*(1.0/T0) * 2.0*T3 * dT3_dVb;
10749 T0 = sqrt(T3 * T3 + 4.0 * DELTA_3 * Vfb);
10750 dT0_dVg = 1.0/(2.0 * T0) * 2.0*T3 * dT3_dVg;
10751 dT0_dVb = 0.5*(1.0/T0) * 2.0*T3 * dT3_dVb;
10754 Vfbeff = Vfb - 0.5 * (T3 + T0);
10755 dVfbeff_dVg = -0.5 * (dT3_dVg + dT0_dVg);
10756 dVfbeff_dVb = -0.5 * (dT3_dVb + dT0_dVb);
10758 Voxacc = Vfb - Vfbeff;
10759 dVoxacc_dVg = -dVfbeff_dVg;
10761 dVoxacc_dVb = -dVfbeff_dVb;
10763 Voxacc = dVoxacc_dVg = dVoxacc_dVb = 0.0;
10765 T0 = Vgs_eff - Vgsteff_local - Vfbeff - Vbseff;
10768 dT0_dVd = -dVgsteff_dVd - dVbseff_dVd;
10769 dT0_dVb = -dVgsteff_dVb - dVfbeff_dVb - dVbseff_dVb;
10770 dT0_dVe = -dVgsteff_dVe - dVbseff_dVe;
10773 dT0_dT = -dVgsteff_dT - dVbseff_dT;
10776 Voxdepinv = dVoxdepinv_dVg
10797 dT1_dVg = T2 * dT0_dVg;
10798 dT1_dVd = T2 * dT0_dVd;
10799 dT1_dVb = T2 * dT0_dVb;
10800 dT1_dVe = T2 * dT0_dVe;
10802 dT1_dT = T2 * dT0_dT;
10805 Voxdepinv = Vgs_eff - (T1*T1 +
Vbs) - Vfb;
10807 dVoxdepinv_dVd = -(2.0*T1*dT1_dVd);
10808 dVoxdepinv_dVb = -(2.0*T1*dT1_dVb + 1);
10809 dVoxdepinv_dVe = -(2.0*T1*dT1_dVe);
10811 dVoxdepinv_dT = -(2.0*T1*dT1_dT);
10828 { Vaux = T0 * log(1.0 +
MIN_EXPL);
10829 dVaux_dVg = dVaux_dVd = dVaux_dVb = 0.0;
10832 { ExpVxNVt = exp(VxNVt);
10833 Vaux = T0 * log(1.0 + ExpVxNVt);
10834 dVaux_dVg = ExpVxNVt / (1.0 + ExpVxNVt);
10835 dVaux_dVd = -dVaux_dVg * 0.0;
10836 dVaux_dVb = -dVaux_dVg * 0.0;
10840 T2 = Vgs_eff * Vaux;
10842 dT2_dVd = Vgs_eff * dVaux_dVd;
10843 dT2_dVb = Vgs_eff * dVaux_dVb;
10850 - T4 * Voxdepinv * Voxdepinv);
10854 dT6_dVg = dT6_dVd = dT6_dVb = 0.0;
10858 dT6_dVg = dT6_dVd = dT6_dVb = 0.0;
10862 dT6_dVg = T6 * T12 * (T3 - 2.0 * T4 * Voxdepinv);
10863 dT6_dVd = dT6_dVg * dVoxdepinv_dVd;
10864 dT6_dVb = dT6_dVg * dVoxdepinv_dVb;
10865 dT6_dVg *= dVoxdepinv_dVg;
10868 Igc = T11 * T2 * T6;
10869 dIgc_dVg = T11 * (T2 * dT6_dVg + T6 * dT2_dVg);
10870 dIgc_dVd = T11 * (T2 * dT6_dVd + T6 * dT2_dVd);
10871 dIgc_dVb = T11 * (T2 * dT6_dVb + T6 * dT2_dVb);
10874 T8 = T7 * T7 + 2.0e-4;
10890 T1 = T9 - 1.0 + 1.0e-4;
10891 T10 = (T1 - T7) / T8;
10893 - (T1 - T7) * dT8_dVd) / T0;
10894 Igcs_local = Igc * T10;
10895 dIgcs_dVg = dIgc_dVg * T10;
10896 dIgcs_dVd = dIgc_dVd * T10 + Igc * dT10_dVd;
10897 dIgcs_dVb = dIgc_dVb * T10;
10899 T1 = T9 - 1.0 - 1.0e-4;
10900 T10 = (T7 * T9 - T1) / T8;
10902 * dT9_dVd - T10 * dT8_dVd) / T8;
10903 Igcd_local = Igc * T10;
10904 dIgcd_dVg = dIgc_dVg * T10;
10905 dIgcd_dVd = dIgc_dVd * T10 + Igc * dT10_dVd;
10906 dIgcd_dVb = dIgc_dVb * T10;
10911 gIgcsb = dIgcs_dVb * dVbseff_dVb;
10915 gIgcdb = dIgcd_dVb * dVbseff_dVb;
10919 vgs_eff = sqrt(T0 * T0 + 1.0e-4);
10920 dvgs_eff_dvg = T0 / vgs_eff;
10922 T2 =
vgs * vgs_eff;
10923 dT2_dVg =
vgs * dvgs_eff_dvg + vgs_eff;
10930 vgs_eff * vgs_eff);
10941 dT6_dVg = T6 * T12 * (T3 - 2.0 * T4 * vgs_eff)
10944 Igs_local = T11 * T2 * T6;
10945 dIgs_dVg = T11 * (T2 * dT6_dVg + T6 * dT2_dVg);
10946 dIgs_dVs = -dIgs_dVg;
10950 vgd_eff = sqrt(T0 * T0 + 1.0e-4);
10951 dvgd_eff_dvg = T0 / vgd_eff;
10953 T2 =
vgd * vgd_eff;
10954 dT2_dVg =
vgd * dvgd_eff_dvg + vgd_eff;
10956 - T4 * vgd_eff * vgd_eff);
10967 dT6_dVg = T6 * T12 * (T3 - 2.0 * T4 * vgd_eff)
10970 Igd_local = T11 * T2 * T6;
10971 dIgd_dVg = T11 * (T2 * dT6_dVg + T6 * dT2_dVg);
10972 dIgd_dVd = -dIgd_dVg;
11003 Voxeff = T0 - 0.5 * (T1 + T3);
11004 dVoxeff_dVox = 0.5 * (1.0 + T1 / T3);
11007 dVox_dVg = dVoxdepinv_dVg * dVoxeff_dVox;
11008 dVox_dVd = dVoxdepinv_dVd * dVoxeff_dVox;
11009 dVox_dVb = dVoxdepinv_dVb * dVoxeff_dVox;
11010 dVox_dVe = dVoxdepinv_dVe * dVoxeff_dVox;
11011 dVox_dT = dVoxdepinv_dT * dVoxeff_dVox;
11020 dT1_dT = T2 * dT0_dT;
11023 dVaux_dVg = T2 / (1 + T1) * dVox_dVg;
11024 dVaux_dVd = T2 / (1 + T1) * dVox_dVd;
11025 dVaux_dVb = T2 / (1 + T1) * dVox_dVb;
11026 dVaux_dVe = T2 / (1 + T1) * dVox_dVe;
11028 dVaux_dT = T2 / (1 + T1) * dVox_dT;
11037 dT0_dVox = dT0_dT = 0.0;
11042 dT0_dVox = dT0_dT = 0.0;
11046 T1 = Leff * Weff * 3.7622e-7 * OxideRatio /
nseg;
11052 T6 = T2*(T3 - T4 * Vox) / T0;
11053 if (
selfheat) dT6_dT = -T2 * T4 * dVox_dT / T0 - T6/T0 * dT0_dT;
11056 dT5_dVg = -T7 * dVox_dVg * T2 / T0 * (T4 + (T3 - T4 * Vox)
11058 dT5_dVd = -T7 * dVox_dVd * T2 / T0 * (T4 + (T3 - T4 * Vox)
11060 dT5_dVb = -T7 * dVox_dVb * T2 / T0 * (T4 + (T3 - T4 * Vox)
11062 dT5_dVe = -T7 * dVox_dVe * T2 / T0 * (T4 + (T3 - T4 * Vox)
11065 dT5_dT = T7 * dT6_dT;
11067 Igb1 = T1 * Vgb * Vaux * T5;
11068 dIgb1_dVg = T1 * (Vgb*Vaux*dT5_dVg + dVgb_dVg*Vaux*T5 +
11070 dIgb1_dVd = T1 * (Vgb*Vaux*dT5_dVd + Vgb*T5*dVaux_dVd);
11071 dIgb1_dVb = T1 * (Vgb*Vaux*dT5_dVb + dVgb_dVb*Vaux*T5 +
11073 dIgb1_dVe = T1 * (Vgb*Vaux*dT5_dVe + Vgb*T5*dVaux_dVe);
11075 dIgb1_dT = T1 * Vgb * (Vaux*dT5_dT + T5*dVaux_dT);
11076 else dIgb1_dT = 0.0;
11084 Voxeff = T0 - 0.5 * (T1 + T3);
11085 dVoxeff_dVox = 0.5 * (1.0 + T1 / T3);
11088 dVox_dVg = dVoxacc_dVg * dVoxeff_dVox;
11089 dVox_dVd = dVoxacc_dVd * dVoxeff_dVox;
11090 dVox_dVb = dVoxacc_dVb * dVoxeff_dVox;
11102 dVaux_dVg = -T2 / (1 + T1);
11104 dVaux_dVb = -dVaux_dVg;
11114 dT0_dVox = dT0_dT =0.0;
11119 dT0_dVox = dT0_dT =0.0;
11123 T1 = Leff * Weff * 4.9758e-7 * OxideRatio /
nseg;
11129 T6 = T2*(T3 - T4 * Vox) / T0;
11130 if (
selfheat) dT6_dT = -T2 * T4 * dVox_dT / T0 - T6/T0 * dT0_dT;
11133 dT5_dVg = -T7 * dVox_dVg * T2 / T0 * (T4 + (T3 - T4 * Vox)
11135 dT5_dVd = -T7 * dVox_dVd * T2 / T0 * (T4 + (T3 - T4 * Vox)
11137 dT5_dVb = -T7 * dVox_dVb * T2 / T0 * (T4 + (T3 - T4 * Vox)
11140 dT5_dT = T7 * dT6_dT;
11142 Igb2 = T1 * Vgb * Vaux * T5;
11143 dIgb2_dVg = T1 * (Vgb*Vaux*dT5_dVg + dVgb_dVg*Vaux*T5 +
11145 dIgb2_dVd = T1 * (Vgb*Vaux*dT5_dVd + Vgb*T5*dVaux_dVd);
11146 dIgb2_dVb = T1 * (Vgb*Vaux*dT5_dVb + dVgb_dVb*Vaux*T5 +
11149 dIgb2_dT = T1 * Vgb * (Vaux*dT5_dT + T5*dVaux_dT);
11150 else dIgb2_dT = 0.0;
11159 dIgb_dVg = dIgb1_dVg;
11160 dIgb_dVd = dIgb1_dVd;
11161 dIgb_dVb = dIgb1_dVb;
11162 dIgb_dVe = dIgb1_dVe;
11163 dIgb_dT = dIgb1_dT;
11168 dIgb_dVg = dIgb2_dVg;
11169 dIgb_dVd = dIgb2_dVd;
11170 dIgb_dVb = dIgb2_dVb;
11172 dIgb_dT = dIgb2_dT;
11190 gigs = -(dIgb_dVg + dIgb_dVd + dIgb_dVb + dIgb_dVe);
11201 Giig = Giib = Giid = GiiT = 0.0;
11226 dT2_dVg = T3 * (
dVgst_dVg - dVth_dVb * dVbseff_dVg) - T4
11228 dT2_dVb = T3 *
dVgst_dVb * dVbseff_dVb - T4 * dVgsteff_dVb;
11229 dT2_dVe = T3 *
dVgst_dVb * dVbseff_dVe - T4 * dVgsteff_dVe;
11230 dT2_dVd = T3 * (dVgst_dVd - dVth_dVb * dVbseff_dVd) - T4
11233 dT2_dT = -(dVth_dT + dVth_dVb * dVbseff_dT) * T3
11241 VgsStep = T1 * T2 * T3;
11243 dVgsStep_dT = T1 * T3 * dT2_dT;
11244 else dVgsStep_dT = 0;
11245 Vdsatii = Vdsatii0 + VgsStep;
11246 Vdiff =
Vds - Vdsatii;
11247 dVdiff_dVg = - T1 * T3 * dT2_dVg;
11248 dVdiff_dVb = - T1 * T3 * dT2_dVb;
11249 dVdiff_dVe = - T1 * T3 * dT2_dVe;
11250 dVdiff_dVd = 1.0 - T1 * (T3 * dT2_dVd + T2 * dT3_dVd);
11252 dVdiff_dT = -(dVdsatii0_dT + dVgsStep_dT);
11253 else dVdiff_dT = 0;
11260 dT0_dVg = dT0_dVd = dT0_dVb = dT0_dT = 0.0;
11266 dT0_dVg = T1 * dVdiff_dVg;
11267 dT0_dVb = T1 * dVdiff_dVb;
11268 dT0_dVd = T1 * dVdiff_dVd;
11269 dT0_dVe = T1 * dVdiff_dVe;
11271 dT0_dT = T1 * dVdiff_dT;
11278 dRatio_dVg = dRatio_dVb = dRatio_dVd = dRatio_dT = 0.0;
11283 dRatio_dVg = dRatio_dVb = dRatio_dVd = dRatio_dT = 0.0;
11288 T1 = Ratio / T0 / T0;
11289 dRatio_dVg = T1 * (T0 * dVdiff_dVg - Vdiff * dT0_dVg);
11290 dRatio_dVb = T1 * (T0 * dVdiff_dVb - Vdiff * dT0_dVb);
11291 dRatio_dVd = T1 * (T0 * dVdiff_dVd - Vdiff * dT0_dVd);
11293 dRatio_dVe = T1 * (T0 * dVdiff_dVe - Vdiff * dT0_dVe);
11296 dRatio_dT = T1 * (T0 * dVdiff_dT - Vdiff * dT0_dT);
11302 if (Ratio > 10.0) {
11304 dRatio_dVg = dRatio_dVb = dRatio_dVd = dRatio_dT = 0.0;
11309 iii = Iii = Ratio * T0;
11310 Giig = Ratio *
Gm + T0 * dRatio_dVg;
11316 Giie = Ratio *
Gme + T0 * dRatio_dVe;
11330 Ibp = Gbpbs = Gbpps = 0.0;
11341 Gbpbs = T0 * dVbp_dVb;
11342 Gbpps = -T0 * dVbp_dVb;
11367 Giig = Giib = Giid = Giie = GiiT = 0.0;
11374 Gbpbs = Gbpps = 0.0;
11383 cd = Ids + Ic - Ibd + Iii + Idgidl;
11384 cb = Ibs + Ibd + Ibp - Iii - Idgidl - Isgidl - Igb;
11396 dT0_dVd = (dbeta_dVd + dbeta_dVg * dVgsteff_dVd) * T9;
11397 dT0_dVb = (dbeta_dVb + dbeta_dVg * dVgsteff_dVb) * T9;
11398 dT0_dVg = dbeta_dVg * T9;
11409 T11 = grgeltd +
gcrg;
11410 gcrg = grgeltd * gcrg / T11;
11411 T12 = T10 / T11 /T11;
11437 gtempd = -Gds * Vds - Ids;
11454 gjdb = Gjdb - Giib;
11455 gjdd = Gjdd - (Giid + Gdgidld);
11456 gjdg = - (Giig + Gdgidlg);
11463 cjd = Ibd - Iii - Idgidl;
11478 cjs = Ibs - Isgidl;
11487 gbbs = Giib - Gjsb - Gjdb - Gbpbs;
11488 gbgs = Giig + Gdgidlg + Gsgidlg;
11489 gbds = Giid + Gdgidld - Gjsd - Gjdd;
11495 gbT = GiiT - GjsT - GjdT;
11509 cbody = Iii + Idgidl + Isgidl - Ibs - Ibd - Ibp + Igb;
11531 T1 = Vgsteff_local * (1.0 - 0.5 * Abulk_local * Vdseff_local / Vgst2Vtm);
11563 ExpVgst *= ExpVgst;
11565 Vgsteff_local = noff * Vtm * log(1.0 + ExpVgst);
11566 T0 = ExpVgst / (1.0 + ExpVgst);
11567 T1 = -T0 * (dVth_dVb + (Vgst-
paramPtr->
delvt) / noff * dnoff_dVb)
11568 + Vgsteff_local / noff * dnoff_dVb;
11569 dVgsteff_dVd = -T0 * (dVth_dVd + dVth_dVb*dVbseff_dVd + Vgst / noff
11570 * dnoff_dVd) + Vgsteff_local / noff * dnoff_dVd;
11571 dVgsteff_dVg = T0 * (
dVgs_eff_dVg - dVth_dVb*dVbseff_dVg);
11572 dVgsteff_dVb = T1 * dVbseff_dVb;
11573 dVgsteff_dVe = T1 * dVbseff_dVe;
11575 dVgsteff_dT = -T0 * (dVth_dT+dVth_dVb*dVbseff_dT
11577 + Vgsteff_local / Temp;
11590 Qac0 = dQac0_dVrg = dQac0_dVd = dQac0_dVb = dQac0_dT = 0.0;
11591 Qsub0 = dQsub0_dVrg = dQsub0_dVg = dQsub0_dVd
11592 = dQsub0_dVb = dQsub0_dT = 0.0;
11599 dVfb_dVd = dVth_dVd;
11604 { T0 = sqrt(V3 * V3 - 4.0 * DELTA_3_SOI * Vfb);
11605 T2 = -DELTA_3_SOI / T0;
11608 { T0 = sqrt(V3 * V3 + 4.0 * DELTA_3_SOI * Vfb);
11609 T2 = DELTA_3_SOI / T0;
11612 T1 = 0.5 * (1.0 + V3 / T0);
11613 Vfbeff = Vfb - 0.5 * (V3 + T0);
11614 dVfbeff_dVd = (1.0 - T1 - T2) * dVfb_dVd;
11615 dVfbeff_dVb = (1.0 - T1 - T2) * dVfb_dVb - T1;
11618 dVfbeff_dT = (1.0 - T1 - T2) * dVfb_dT;
11622 Qac0 = CoxWLb * (Vfbeff - Vfb);
11623 dQac0_dVrg = CoxWLb * dVfbeff_dVrg;
11624 dQac0_dVd = CoxWLb * (dVfbeff_dVd - dVfb_dVd);
11625 dQac0_dVb = CoxWLb * (dVfbeff_dVb - dVfb_dVb);
11627 dQac0_dT = CoxWLb * (dVfbeff_dT - dVfb_dT);
11632 T3 = Vgs_eff - Vfbeff - Vbseff - Vgsteff_local;
11642 { T1 = sqrt(T0 * T0 + T3);
11643 T2 = CoxWLb * T0 / T1;
11646 Qsub0 = CoxWLb * K1 * (T1 - T0);
11647 dQsub0_dVrg = T2 * (dVgs_eff_dVg - dVfbeff_dVrg);
11649 dQsub0_dVd = -T2 * dVfbeff_dVd;
11650 dQsub0_dVb = -T2 * (dVfbeff_dVb + 1);
11652 dQsub0_dT = -T2 * dVfbeff_dT;
11662 VdsatCV = Vgsteff_local / AbulkCV;
11666 V4 = VdsatCV - Vds -
DELTA_4;
11667 T0 = sqrt(V4 * V4 + 4.0 * DELTA_4 * VdsatCV);
11668 VdseffCV = VdsatCV - 0.5 * (V4 + T0);
11669 T1 = 0.5 * (1.0 + V4 / T0);
11671 T3 = (1.0 - T1 - T2) / AbulkCV;
11672 dVdseffCV_dVg = T3;
11673 dVdseffCV_dVd = T1;
11674 dVdseffCV_dVb = -T3 * VdsatCV * dAbulkCV_dVb;
11680 qbulk = Cbg1 = Cbd1 = Cbb1 = 0;
11684 T0 = AbulkCV * VdseffCV;
11685 T1 = 12.0 * (Vgsteff_local - 0.5 * T0 + 1e-20);
11686 T2 = VdseffCV / T1;
11688 T4 = (1.0 - 12.0 * T2 * T2 * AbulkCV);
11689 T5 = (6.0 * T0 * (4.0 * Vgsteff_local- T0) / (T1 * T1) - 0.5);
11690 T6 = 12.0 * T2 * T2 * Vgsteff_local;
11692 T7 = 1.0 - AbulkCV;
11693 qbulk = CoxWLb * T7 * (0.5 * VdseffCV - T3);
11694 T4 = -T7 * (T4 - 1.0);
11696 T6 = -(T7 * T6 + (0.5 * VdseffCV - T3));
11698 Cbg1 = CoxWLb * (T4 + T5 * dVdseffCV_dVg);
11699 Cbd1 = CoxWLb * T5 * dVdseffCV_dVd ;
11700 Cbb1 = CoxWLb * (T5 * dVdseffCV_dVb + T6 * dAbulkCV_dVb);
11706 T0 = AbulkCV * VdseffCV;
11707 T1 = 12.0 * (Vgsteff_local - 0.5 * T0 + 1e-20);
11715 T4 = (1.0 - 12.0 * T2 * T2);
11716 T7 = T2 * (2.0 + 6.0 * T2) - 0.5;
11719 T6 = T7 * VdseffCV;
11722 qinv_local = CoxWL * (Vgsteff_local - 0.5 * T0 + T3);
11724 qinv = -qinv_local;
11726 Cgg1 = CoxWL * (T4 + T5 * dVdseffCV_dVg);
11727 Cgd1 = CoxWL * T5 * dVdseffCV_dVd;
11728 Cgb1 = CoxWL * (T5 * dVdseffCV_dVb + T6 * dAbulkCV_dVb);
11734 qsrc = -CoxWL * (0.5 * Vgsteff_local + 0.25 * T0
11736 T7 = (4.0 * Vgsteff_local - T0) / (T1 * T1);
11737 T4 = -(0.5 + 24.0 * T0 * T0 / (T1 * T1));
11738 T5 = -(0.25 * AbulkCV - 12.0 * AbulkCV * T0 * T7);
11739 T6 = -(0.25 * VdseffCV - 12.0 * T0 * VdseffCV * T7);
11740 Csg1 = CoxWL * (T4 + T5 * dVdseffCV_dVg);
11741 Csd1 = CoxWL * T5 * dVdseffCV_dVd;
11742 Csb1 = CoxWL * (T5 * dVdseffCV_dVb + T6 * dAbulkCV_dVb);
11748 T2 = 0.5 * CoxWL / (T1 * T1);
11749 T3 = Vgsteff_local * (2.0 * T0 * T0 / 3.0 + Vgsteff_local
11750 * (Vgsteff_local - 4.0 * T0 / 3.0))
11751 - 2.0 * T0 * T0 * T0 / 15.0;
11753 T7 = 4.0 / 3.0 * Vgsteff_local * (Vgsteff_local - T0)
11755 T4 = -2.0 * qsrc / T1 - T2 * (Vgsteff_local * (3.0
11756 * Vgsteff_local - 8.0 * T0 / 3.0) + 2.0 * T0 * T0 / 3.0);
11757 T5 = (qsrc / T1 + T2 * T7) * AbulkCV;
11758 T6 = (qsrc / T1 * VdseffCV + T2 * T7 * VdseffCV);
11759 Csg1 = T4 + T5 * dVdseffCV_dVg;
11760 Csd1 = T5 * dVdseffCV_dVd;
11761 Csb1 = T5 * dVdseffCV_dVb + T6 * dAbulkCV_dVb;
11766 Csg1 = - 0.5 * (Cgg1 + Cbg1);
11767 Csb1 = - 0.5 * (Cgb1 + Cbb1);
11768 Csd1 = - 0.5 * (Cgd1 + Cbd1);
11777 Qe1 = dQe1_dVb = dQe1_dVe = dQe1_dT = 0;
11784 Qe1 = CboxWL * (Vesfb -
Vbs);
11785 dQe1_dVb = -CboxWL;
11788 dQe1_dT = -CboxWL * dvfbb_dT;
11795 qgate = qinv_local + Qac0 + Qsub0;
11805 Csg = Csg1 * dVgsteff_dVg;
11806 Csd = Csd1 + Csg1 * dVgsteff_dVd;
11807 Csb = Csg1 * dVgsteff_dVb + Csb1 * dVbseff_dVb;
11809 CsT = Csg1 * dVgsteff_dT;
11813 Cgg = (Cgg1 + dQsub0_dVg) * dVgsteff_dVg
11814 + dQac0_dVrg + dQsub0_dVrg;
11815 Cgd = (Cgg1 + dQsub0_dVg) * dVgsteff_dVd + Cgd1
11816 + dQac0_dVd + dQsub0_dVd;
11817 Cgb = (Cgg1 + dQsub0_dVg) * dVgsteff_dVb
11818 + (Cgb1 + dQsub0_dVb + dQac0_dVb) * dVbseff_dVb;
11820 CgT = (Cgg1 + dQsub0_dVg) * dVgsteff_dT + dQac0_dT + dQsub0_dT;
11824 Cbg = (Cbg1 - dQsub0_dVg) * dVgsteff_dVg - dQac0_dVrg - dQsub0_dVrg;
11825 Cbd = (Cbg1 - dQsub0_dVg) * dVgsteff_dVd + Cbd1 - dQac0_dVd
11827 Cbb = (Cbg1 - dQsub0_dVg) * dVgsteff_dVb - dQe1_dVb
11828 + (Cbb1 - dQsub0_dVb - dQac0_dVb) * dVbseff_dVb;
11830 CbT = (Cbg1 - dQsub0_dVg) * dVgsteff_dT - dQac0_dT - dQsub0_dT
11837 cgsb = - (Cgg + Cgd + Cgb);
11842 cbsb = -(Cbg + Cbd + Cbb) + Ce1e;
11850 cdgb = -(Cgg + Cbg + Csg);
11851 cddb = -(Cgd + Cbd + Csd);
11853 cdT = -(CgT + CbT + CsT) - dQe1_dT;
11854 cdsb = (Cgg + Cgd + Cgb + Cbg + Cbd + Cbb
11855 + Csg + Csd + Csb) + Ce1b;
11861 dVgsteff_dVb /= dVbseff_dVb;
11871 Qac0 = dQac0_dVg = dQac0_dVb = dQac0_dT = 0.0;
11872 Qsub0 = dQsub0_dVg = dQsub0_dVd = dQsub0_dVb = dQsub0_dT = 0.0;
11879 dVfbzb_dT = dVthzb_dT;
11886 V3 = Vfbzb - Vgs_eff + Vbseff -
DELTA_3;
11888 { T0 = sqrt(V3 * V3 - 4.0 * DELTA_3 * Vfbzb);
11889 T2 = -DELTA_3 / T0;
11892 { T0 = sqrt(V3 * V3 + 4.0 * DELTA_3 * Vfbzb);
11896 T1 = 0.5 * (1.0 + V3 / T0);
11897 Vfbeff = Vfbzb - 0.5 * (V3 + T0);
11901 dVfbeff_dT = (1.0 - T1 - T2) * dVfbzb_dT;
11906 T0 = (Vgs_eff - Vbseff - Vfbzb) / Tox;
11907 dT0_dVg = dVgs_eff_dVg / Tox;
11908 dT0_dVb = -1.0 / Tox;
11914 dTcen_dVb = dTcen_dVg * dT0_dVb;
11915 dTcen_dVg *= dT0_dVg;
11923 dTcen_dVg = dTcen_dVb = dTcen_dT = 0.0;
11927 dTcen_dVg = dTcen_dVb = dTcen_dT = 0.0;
11934 T1 = 0.5 * (1.0 + V3 / V4);
11943 T2 = Cox / (Cox + Ccen);
11944 Coxeff = T2 * Ccen;
11946 dCoxeff_dVg = T2 * T2 * T3;
11947 dCoxeff_dVb = dCoxeff_dVg * dTcen_dVb;
11948 dCoxeff_dVg *= dTcen_dVg;
11950 dCoxeff_dT = T3 * dTcen_dT * (T2 - Coxeff / (Cox + Ccen));
11953 CoxWLcenb = CoxWLb * Coxeff / Cox;
11955 dCoxWLcenb_dT = CoxWLb * dCoxeff_dT / Cox;
11959 Qac0 = CoxWLcenb * (Vfbeff - Vfbzb);
11960 QovCox = Qac0 / Coxeff;
11961 dQac0_dVg = CoxWLcenb * dVfbeff_dVg
11962 + QovCox * dCoxeff_dVg;
11963 dQac0_dVb = CoxWLcenb * dVfbeff_dVb
11964 + QovCox * dCoxeff_dVb;
11966 dQac0_dT = CoxWLcenb * (dVfbeff_dT - dVfbzb_dT)
11967 + dCoxWLcenb_dT * (Vfbeff - Vfbzb);
11972 T3 = Vgs_eff - Vfbeff - Vbseff - Vgsteff_local;
11982 { T1 = sqrt(T0 * T0 + T3);
11983 T2 = CoxWLcenb * T0 / T1;
11987 QovCox = Qsub0 / Coxeff;
11988 dQsub0_dVg = T2 * (dVgs_eff_dVg - dVfbeff_dVg - dVgsteff_dVg)
11989 + QovCox * dCoxeff_dVg;
11990 dQsub0_dVd = -T2 * dVgsteff_dVd;
11991 dQsub0_dVb = -T2 * (dVfbeff_dVb + 1 + dVgsteff_dVb)
11992 + QovCox * dCoxeff_dVb;
11994 dQsub0_dT = -T2 * (dVfbeff_dT + dVgsteff_dT)
12012 T1 = 2.0 * T0 + Vgsteff_local;
12014 DeltaPhi = Vtm * log(1.0 + T1 * Vgsteff_local / Denomi);
12015 dDeltaPhi_dVg = 2.0 * Vtm * (T1 -T0) / (Denomi + T1 * Vgsteff_local);
12022 T3 = 4.0 * (Vth - Vfbzb - phi_local);
12023 T2 = sqrt(T3*T3 + 0.0001);
12024 T5 = 0.5 * (1 + T3/T2);
12025 T4 = 0.5 * (T3 + T2);
12028 T0 = (Vgsteff_local + T4) / Tox;
12029 tmp = exp(0.7 * log(T0));
12031 T2 = 0.7 * tmp / (T0 * Tox);
12032 Tcen = 1.9e-9 / T1;
12033 dTcen_dVg = -Tcen * T2 / T1;
12034 dTcen_dVd = dTcen_dVg * (T5 * 4.0 * dVth_dVd + dVgsteff_dVd);
12035 dTcen_dVb = dTcen_dVg * (T5 * 4.0 * dVth_dVb + dVgsteff_dVb);
12036 dTcen_dVg *= dVgsteff_dVg;
12038 dTcen_dT = -Tcen * T2 / T1
12039 * (T5 * 4.0 * (dVth_dT - dVfbzb_dT) + dVgsteff_dT);
12045 T0 = Cox / (Cox + Ccen);
12046 Coxeff = T0 * Ccen;
12048 dCoxeff_dVg = T0 * T0 * T1;
12049 dCoxeff_dVd = dCoxeff_dVg * dTcen_dVd;
12050 dCoxeff_dVb = dCoxeff_dVg * dTcen_dVb;
12051 dCoxeff_dVg *= dTcen_dVg;
12053 dCoxeff_dT = T1 * dTcen_dT * (T0 - Coxeff / (Cox + Ccen));
12054 else dCoxeff_dT = 0;
12055 CoxWLcen = CoxWL * Coxeff / Cox;
12056 CoxWLcenb = CoxWLb * Coxeff / Cox;
12060 VdsatCV = (Vgsteff_local - DeltaPhi) / AbulkCV;
12061 V4 = VdsatCV - Vds -
DELTA_4;
12062 T0 = sqrt(V4 * V4 + 4.0 * DELTA_4 * VdsatCV);
12063 VdseffCV = VdsatCV - 0.5 * (V4 + T0);
12064 T1 = 0.5 * (1.0 + V4 / T0);
12066 T3 = (1.0 - T1 - T2) / AbulkCV;
12068 dVdseffCV_dVg = T4;
12069 dVdseffCV_dVd = T1;
12070 dVdseffCV_dVb = -T3 * VdsatCV * dAbulkCV_dVb;
12072 T0 = AbulkCV * VdseffCV;
12073 T1 = Vgsteff_local - DeltaPhi;
12074 T2 = 12.0 * (T1 - 0.5 * T0 + 1.0e-20);
12076 T4 = 1.0 - 12.0 * T3 * T3;
12077 T5 = AbulkCV * (6.0 * T0 * (4.0 * T1 - T0) / (T2 * T2) - 0.5);
12078 T6 = T5 * VdseffCV / AbulkCV;
12080 qinv_local =
qgate = qinoi = CoxWLcen * (T1 - T0 * (0.5 - T3));
12081 QovCox =
qgate / Coxeff;
12083 + T5 * dVdseffCV_dVg);
12084 Cgd1 = CoxWLcen * T5 * dVdseffCV_dVd + Cgg1
12085 * dVgsteff_dVd + QovCox * dCoxeff_dVd;
12086 Cgb1 = CoxWLcen * (T5 * dVdseffCV_dVb + T6 * dAbulkCV_dVb)
12087 + Cgg1 * dVgsteff_dVb + QovCox * dCoxeff_dVb;
12088 Cgg1 = Cgg1 * dVgsteff_dVg + QovCox * dCoxeff_dVg;
12094 qbulk = Cbg1 = Cbd1 = Cbb1 = Cbg1 = 0;
12098 T7 = 1.0 - AbulkCV;
12100 T9 = 12.0 * T7 * T0 * T0 / (T8 * AbulkCV);
12102 T11 = -T7 * T5 / AbulkCV;
12103 T12 = -(T9 * T1 / AbulkCV + VdseffCV * (0.5 - T0 / T2));
12105 qbulk = CoxWLcenb * T7 * (0.5 * VdseffCV - T0 * VdseffCV / T2);
12106 QovCox =
qbulk / Coxeff;
12107 Cbg1 = CoxWLcenb * (T10 + T11 * dVdseffCV_dVg);
12108 Cbd1 = CoxWLcenb * T11 * dVdseffCV_dVd + Cbg1
12109 * dVgsteff_dVd + QovCox * dCoxeff_dVd;
12110 Cbb1 = CoxWLcenb * (T11 * dVdseffCV_dVb + T12 * dAbulkCV_dVb)
12111 + Cbg1 * dVgsteff_dVb + QovCox * dCoxeff_dVb;
12112 Cbg1 = Cbg1 * dVgsteff_dVg + QovCox * dCoxeff_dVg;
12119 qsrc = -CoxWLcen * (T1 / 2.0 + T0 / 4.0
12120 - 0.5 * T0 * T0 / T2);
12121 QovCox =
qsrc / Coxeff;
12124 T7 = -(0.25 - 12.0 * T0 * (4.0 * T1 - T0) / T3);
12127 T6 = T7 * VdseffCV;
12129 Csg = CoxWLcen * (T4 + T5 * dVdseffCV_dVg);
12130 Csd = CoxWLcen * T5 * dVdseffCV_dVd + Csg * dVgsteff_dVd
12131 + QovCox * dCoxeff_dVd;
12132 Csb = CoxWLcen * (T5 * dVdseffCV_dVb + T6 * dAbulkCV_dVb)
12133 + Csg * dVgsteff_dVb + QovCox * dCoxeff_dVb;
12134 Csg = Csg * dVgsteff_dVg + QovCox * dCoxeff_dVg;
12139 T3 = 0.5 * CoxWLcen / (T2 * T2);
12140 T4 = T1 * (2.0 * T0 * T0 / 3.0 + T1 * (T1 - 4.0
12141 * T0 / 3.0)) - 2.0 * T0 * T0 * T0 / 15.0;
12143 QovCox = qsrc / Coxeff;
12144 T8 = 4.0 / 3.0 * T1 * (T1 - T0) + 0.4 * T0 * T0;
12145 T5 = -2.0 * qsrc / T2 - T3 * (T1 * (3.0 * T1 - 8.0
12146 * T0 / 3.0) + 2.0 * T0 * T0 / 3.0);
12147 T6 = AbulkCV * (qsrc / T2 + T3 * T8);
12148 T7 = T6 * VdseffCV / AbulkCV;
12151 Csd = Csg * dVgsteff_dVd + T6 * dVdseffCV_dVd
12152 + QovCox * dCoxeff_dVd;
12153 Csb = Csg * dVgsteff_dVb + T6 * dVdseffCV_dVb
12154 + T7 * dAbulkCV_dVb + QovCox * dCoxeff_dVb;
12155 Csg = Csg * dVgsteff_dVg + QovCox * dCoxeff_dVg;
12170 Qe1 = Ce1b = Ce1e = Ce1T = dQe1_dT = 0;
12177 Qe1 = CboxWL * (Vesfb -
Vbs);
12178 Ce1b = dQe1_dVb = -CboxWL;
12179 Ce1e = dQe1_dVe = CboxWL;
12181 Ce1T = dQe1_dT = -CboxWL * dvfbb_dT;
12183 Ce1T = dQe1_dT = 0.0;
12189 qbody = qbulk - Qac0 - Qsub0 - Qe1;
12193 Cbg = Cbg1 - dQac0_dVg - dQsub0_dVg;
12194 Cbd = Cbd1 - dQsub0_dVd;
12195 Cbb = Cbb1 - dQac0_dVb - dQsub0_dVb - Ce1b / dVbseff_dVb;
12197 CbT = Cbg1 * dVgsteff_dT - dQac0_dT
12198 - dQsub0_dT - dQe1_dT;
12204 Cgb = Cgb1 - Cbb - Ce1b / dVbseff_dVb;
12206 CgT = Cgg1 * dVgsteff_dT + dQac0_dT + dQsub0_dT;
12210 Cgb *= dVbseff_dVb;
12211 Cbb *= dVbseff_dVb;
12212 Csb *= dVbseff_dVb;
12214 CsT = Csg * dVgsteff_dT;
12219 cgsb = -(Cgg + Cgd + Cgb);
12224 cbsb = -(Cbg + Cbd + Cbb)
12233 cdgb = -(Cgg + Cbg + Csg);
12234 cddb = -(Cgd + Cbd + Csd);
12236 cdT = -(CgT+CbT+CsT) - Ce1T;
12237 cdsb = (Cgg + Cgd + Cgb + Cbg + Cbd + Cbb
12238 + Csg + Csd + Csb) + Ce1b;
12257 qjs_local = qjd_local = 0.0;
12258 gcjdds = gcjdbs = gcjdT = 0.0;
12259 gcjsbs = gcjsT = 0.0;
12265 PhiBSWG += dPhiBSWG_dT * (Temp -
model_.
tnom);
12278 DioMax = 0.9 * (PhiBSWG);
12280 arg = 1.0 - (
Vbs > DioMax ? DioMax :
Vbs) / PhiBSWG;
12283 darg_dT = (1 - arg) / PhiBSWG * dPhiBSWG_dT;
12285 if (MJSWG == 0.5) {
12286 dT3_dVb = 1.0 / sqrt(arg);
12288 if (
selfheat) ddT3_dVb_dT = -0.5 * dT3_dVb / arg * darg_dT;
12291 dT3_dVb = exp(-MJSWG * log(arg));
12293 if (
selfheat) ddT3_dVb_dT = -MJSWG * dT3_dVb / arg * darg_dT;
12295 T3 = (1.0 - arg * dT3_dVb) * PhiBSWG / (1.0 - MJSWG);
12298 dT3_dT = (1.0 - arg * dT3_dVb) * dPhiBSWG_dT / (1.0 - MJSWG)
12299 - (arg * ddT3_dVb_dT + darg_dT * dT3_dVb) * PhiBSWG
12303 T3 += dT3_dVb * (
Vbs - DioMax);
12305 qjs_local = cjsbs * T3 +
model_.
tt * Ibsdif;
12306 gcjsbs = cjsbs * dT3_dVb +
model_.
tt * dIbsdif_dVb;
12309 gcjsT =
model_.
tt * dIbsdif_dT + dcjsbs_dT * T3
12315 arg = 1.0 - (
Vbd > DioMax ? DioMax :
Vbd) / PhiBSWG;
12318 darg_dT = (1 - arg) / PhiBSWG * dPhiBSWG_dT;
12320 if (MJSWG == 0.5) {
12321 dT3_dVb = 1.0 / sqrt(arg);
12323 if (
selfheat) ddT3_dVb_dT = -0.5 * dT3_dVb / arg * darg_dT;
12326 dT3_dVb = exp(-MJSWG * log(arg));
12328 if (
selfheat) ddT3_dVb_dT = -MJSWG * dT3_dVb / arg * darg_dT;
12330 T3 = (1.0 - arg * dT3_dVb) * PhiBSWG / (1.0 - MJSWG);
12333 dT3_dT = (1.0 - arg * dT3_dVb) * dPhiBSWG_dT / (1.0 - MJSWG)
12334 - (arg * ddT3_dVb_dT + darg_dT * dT3_dVb) * PhiBSWG
12338 T3 += dT3_dVb * (
Vbd - DioMax);
12340 dT3_dVd = -dT3_dVb;
12342 qjd_local = cjdbs * T3 +
model_.
tt * Ibddif;
12343 gcjdbs = cjdbs * dT3_dVb +
model_.
tt * dIbddif_dVb;
12344 gcjdds = cjdbs * dT3_dVd +
model_.
tt * dIbddif_dVd;
12347 gcjdT =
model_.
tt * dIbddif_dT + dcjdbs_dT * T3
12355 qbody += (qjs_local + qjd_local);
12361 cdsb += gcjdds + gcjdbs;
12364 cbT += (gcjdT + gcjsT);
12365 cbsb -= (gcjdds + gcjdbs + gcjsbs);
12378 if (T10 < paramPtr->vsdfb)
12382 else if (T10 < paramPtr->sdt1)
12388 else if (T10 < paramPtr->vsdth)
12400 if (T10 < paramPtr->vsdth)
12404 else if (T10 < paramPtr->sdt1)
12410 else if (T10 < paramPtr->vsdfb)
12425 if (T11 < paramPtr->vsdfb)
12429 else if (T11 < paramPtr->sdt1)
12435 else if (T11 < paramPtr->vsdth)
12447 if (T11 < paramPtr->vsdth)
12451 else if (T11 < paramPtr->sdt1)
12457 else if (T11 < paramPtr->vsdfb)
12491 qbf = -Qsub0 - Qac0;
12893 double limit,
int *check)
12902 vnew = vold + limit;
12906 vnew = vold - limit;
12937 bool bsuccess =
true;
12940 double T0, T1, T2, T3, T4;
12960 T1 = sqrt(T0 * T0 + 4.0 * DELTA_1);
12961 T2 = 0.5 * (T0 - T1);
12967 cgdo_local =
paramPtr->
cgdo + T3 - T3 * (1.0 - 1.0 / T4)
12968 * (0.5 - 0.5 * T0 / T1);
12979 T1 = sqrt(T0 * T0 + 4.0 * DELTA_1);
12980 T2 = 0.5 * (T0 - T1);
12986 cgso_local =
paramPtr->
cgso + T3 - T3 * (1.0 - 1.0 / T4)
12987 * (0.5 - 0.5 * T0 / T1);
13004 gcgmdb = -cgdo_local * ag0;
13005 gcgmsb = -cgso_local * ag0;
13045 +
cdgb + cgso_local) * ag0;
13110 gcgmdb = -cgdo_local * ag0;
13111 gcgmsb = -cgso_local * ag0;
13253 bool bsuccess =
true;
13337 double Coef_body=0.0;
13338 double Coef_extBody=0.0;
13339 double Coef_gate=0.0;
13340 double Coef_gatePrime=0.0;
13341 double Coef_gateMid=0.0;
13342 double Coef_drainPrime=0.0;
13343 double Coef_sourcePrime=0.0;
13344 double Coef_substrate=0.0;
13345 double Coef_temp=0.0;
13368 Coef_temp -= (
Qeqqth) * numberParallel;
13410 double Coef_body_Jdxp = 0.0;
13411 double Coef_extBody_Jdxp = 0.0;
13412 double Coef_gate_Jdxp = 0.0;
13413 double Coef_gatePrime_Jdxp = 0.0;
13414 double Coef_gateMid_Jdxp = 0.0;
13415 double Coef_drainPrime_Jdxp = 0.0;
13416 double Coef_sourcePrime_Jdxp = 0.0;
13417 double Coef_substrate_Jdxp = 0.0;
13418 double Coef_temp_Jdxp = 0.0;
13428 Coef_gatePrime_Jdxp -=
13431 Coef_drainPrime_Jdxp +=
13442 Coef_gateMid_Jdxp -=
13448 Coef_temp_Jdxp -= (
Qeqqth_Jdxp ) * numberParallel;
13453 dQdxdVpPtr[
li_Body ] += Coef_body_Jdxp;
13457 dQdxdVpPtr[
li_ExtBody ] += Coef_extBody_Jdxp;
13459 dQdxdVpPtr[
li_Gate ] += Coef_gate_Jdxp;
13461 dQdxdVpPtr[
li_GateMid ] += Coef_gateMid_Jdxp;
13492 #ifdef Xyce_DEBUG_DEVICE
13495 Xyce::dout() << subsection_divider << std::endl;
13496 Xyce::dout() <<
" Instance::loadDAEFVector" << std::endl;
13497 Xyce::dout() <<
" name = " <<
getName() <<std::endl;
13498 Xyce::dout().width(28); Xyce::dout().precision(20); Xyce::dout().setf(std::ios::scientific);
13499 Xyce::dout() <<
" " << std::endl;
13503 double Coef_body=0.0;
13504 double Coef_extBody=0.0;
13505 double Coef_gate=0.0;
13506 double Coef_gatePrime=0.0;
13507 double Coef_gateMid=0.0;
13508 double Coef_drain=0.0;
13509 double Coef_drainPrime=0.0;
13510 double Coef_source=0.0;
13511 double Coef_sourcePrime=0.0;
13512 double Coef_substrate=0.0;
13513 double Coef_temp=0.0;
13541 Coef_sourcePrime += (
cdreq
13723 double Coef_body_Jdxp = 0.0;
13724 double Coef_extBody_Jdxp = 0.0;
13725 double Coef_gate_Jdxp = 0.0;
13726 double Coef_gatePrime_Jdxp = 0.0;
13727 double Coef_gateMid_Jdxp = 0.0;
13728 double Coef_drain_Jdxp = 0.0;
13729 double Coef_drainPrime_Jdxp = 0.0;
13730 double Coef_source_Jdxp = 0.0;
13731 double Coef_sourcePrime_Jdxp = 0.0;
13732 double Coef_substrate_Jdxp = 0.0;
13733 double Coef_temp_Jdxp = 0.0;
13747 Coef_gatePrime_Jdxp -=
13751 Coef_drainPrime_Jdxp +=
13771 Coef_gateMid_Jdxp -=
13782 Coef_temp_Jdxp -= (
ceqth_Jdxp ) * numberParallel;
13804 dFdxdVpPtr[
li_Body ] += Coef_body_Jdxp;
13808 dFdxdVpPtr[
li_ExtBody ] += Coef_extBody_Jdxp;
13810 dFdxdVpPtr[
li_Gate ] += Coef_gate_Jdxp;
13812 dFdxdVpPtr[
li_GateMid ] += Coef_gateMid_Jdxp;
13813 dFdxdVpPtr[
li_Drain ] += Coef_drain_Jdxp;
13815 dFdxdVpPtr[
li_Source ] += Coef_source_Jdxp;
13857 double T0, T1, T2, T3, T4;
13865 T1 = sqrt(T0 * T0 + 4.0 * DELTA_1);
13866 T2 = 0.5 * (T0 - T1);
13872 cgdo_local =
paramPtr->
cgdo + T3 - T3 * (1.0 - 1.0 / T4)
13873 * (0.5 - 0.5 * T0 / T1);
13884 T1 = sqrt(T0 * T0 + 4.0 * DELTA_1);
13885 T2 = 0.5 * (T0 - T1);
13891 cgso_local =
paramPtr->
cgso + T3 - T3 * (1.0 - 1.0 / T4)
13892 * (0.5 - 0.5 * T0 / T1);
13950 +
cdgb + cgso_local);
14162 bool bsuccess =
true;
14163 double vgb_orig, vgmb_orig, veb_orig;
14338 += (+
CAPcgbb)*numberParallel;
14345 += (+
CAPcbeb)*numberParallel;
14347 += (+
CAPcbgb)*numberParallel;
14349 += (+
CAPcbdb)*numberParallel;
14394 -= (-
CAPcsdb )*numberParallel;
14401 += (
CAPcdT)*numberParallel;
14403 += (
CAPcsT)*numberParallel;
14407 += (
CAPcgT)*numberParallel;
14409 += (
CAPcTt)*numberParallel;
14414 += (
CAPcbT)*numberParallel;
14718 bool bsuccess =
true;
15021 bool bsuccess =
true;
15075 UserError(*
this) <<
"(W0 + Weff) = 0 causing divided-by-zero.\n";
15085 UserError(*
this) <<
"(B1 + Weff) = 0 causing divided-by-zero.\n";
15115 if (drainPerimeter < paramPtr->weff)
15124 if (sourcePerimeter < paramPtr->weff)
15220 UserWarning(*
this) <<
"(W0 + Weff) may be too small.";
15245 UserWarning(*
this) <<
"(B1 + Weff) may be too small.";
15256 UserWarning(*
this) <<
"A2 = " <<
paramPtr->
a2 <<
" is larger than 1. A2 is set to 1 and A1 is set to 0.";
15270 UserWarning(*
this) <<
"Rds at current temperature = " <<
paramPtr->
rds0 <<
" is less than 0.001 ohm. Set to zero.";
15641 UserWarning(*
this) <<
"capMod < 2 is not supported by BSIM3SOI.";
15659 bool bsuccess =
true;
15706 if (!
given(
"DSUB"))
15710 if (!
given(
"XDIF"))
15716 if (!
given(
"DLCIG"))
15725 * exp(21.5565981 -
Eg0 / (2.0 *
Vtm0));
15727 csi = 1.03594e-10 /
tsi;
15742 std::vector<Instance*>::iterator iter;
15746 for (iter=first; iter!=last; ++iter)
15748 (*iter)->processParams();
15766 :
DeviceModel(MB, configuration.getModelParameters(), factory_block),
15799 bodyJctGateSideGradingCoeff (0.0),
16087 npeakGiven (false),
16088 csdminGiven (false),
16089 vsdthGiven (false),
16090 vsdfbGiven (false),
16091 gamma1Given (false),
16092 gamma2Given (false),
16374 sheetResistance (0.0),
16375 GatesidewallJctPotential (0.0),
16376 unitLengthGateSidewallJctCap (0.0),
16397 oxideTrapDensityA (0.0),
16398 oxideTrapDensityB (0.0),
16399 oxideTrapDensityC (0.0),
16405 igbModGiven (false),
16415 else if (
getType() ==
"PMOS") {
16432 #ifdef Xyce_B3SOI_USE_DEFL
16439 if (!
given(
"TNOM"))
16441 if (!
given(
"TOXM"))
16443 if (!
given(
"TOXQM"))
16450 uc = (
mobMod == 3) ? -0.0465 : -0.0465e-9;
16452 uc1 = (
mobMod == 3) ? -0.056 : -0.056e-9;
16455 if (!
given(
"VOXH"))
16457 if (!
given(
"DELTAVOX"))
16459 if (!
given(
"AIGC"))
16461 if (!
given(
"BIGC"))
16463 if (!
given(
"CIGC"))
16465 if (!
given(
"AIGSD"))
16467 if (!
given(
"BIGSD"))
16469 if (!
given(
"CIGSD"))
16471 if (!
given(
"NOIA"))
16478 if (!
given(
"NOIB"))
16488 cox = 3.453133e-11 /
tox;
16489 if (!
given(
"CGDO"))
16496 if (!
given(
"CGSO"))
16513 UserWarning(*
this) <<
"soiMod has been set to its default value: 0";
16518 UserWarning(*
this) <<
"gateMod has been set to its default value: 0";
16523 UserWarning(*
this) <<
"noiMod has been set to default value: 1";
16528 UserWarning(*
this) <<
"tnoiMod has been set to default value: 0";
16533 UserWarning(*
this) <<
"Given pbswg is less than 0.1. Pbswg is set to 0.1.\n";
16550 std::list<SizeDependParam*>::iterator it_dpL =
16552 std::list<SizeDependParam*>::iterator end_dpL =
16554 for( ; it_dpL != end_dpL; ++it_dpL )
16559 std::vector<Instance*>::iterator iter;
16563 for (iter=first; iter!=last; ++iter)
16580 std::vector<Instance*>::const_iterator iter;
16586 os <<
" name modelName Parameters" << std::endl;
16588 for (i=0, iter=first; iter!=last; ++iter,++i)
16590 os <<
" " << i <<
": " << (*iter)->getName() <<
"\t";
16616 for (std::vector<Instance *>::const_iterator it = instanceContainer.begin(); it != instanceContainer.end(); ++it)
16637 std::list<SizeDependParam*>::iterator it_dpL =
16640 std::list<SizeDependParam*>::iterator end_dpL =
16643 for( ; it_dpL != end_dpL; ++it_dpL )
16665 bool bsuccess =
true;
16675 bsuccess = bsuccess && btmp;
16752 double Coef_f_body=0.0;
16753 double Coef_f_extBody=0.0;
16754 double Coef_f_gate=0.0;
16755 double Coef_f_gatePrime=0.0;
16756 double Coef_f_gateMid=0.0;
16757 double Coef_f_drain=0.0;
16758 double Coef_f_drainPrime=0.0;
16759 double Coef_f_source=0.0;
16760 double Coef_f_sourcePrime=0.0;
16761 double Coef_f_substrate=0.0;
16762 double Coef_f_temp=0.0;
16790 Coef_f_sourcePrime += (mi.
cdreq
16850 fVec[mi.
li_Body ] -= Coef_f_body;
16856 fVec[mi.
li_Gate ] -= Coef_f_gate;
16859 fVec[mi.
li_Drain ] -= Coef_f_drain;
16894 storeLeadF[mi.
li_store_dev_is] = -Coef_f_source - Coef_f_sourcePrime;
16987 double Coef_f_body_Jdxp = 0.0;
16988 double Coef_f_extBody_Jdxp = 0.0;
16989 double Coef_f_gate_Jdxp = 0.0;
16990 double Coef_f_gatePrime_Jdxp = 0.0;
16991 double Coef_f_gateMid_Jdxp = 0.0;
16992 double Coef_f_drain_Jdxp = 0.0;
16993 double Coef_f_drainPrime_Jdxp = 0.0;
16994 double Coef_f_source_Jdxp = 0.0;
16995 double Coef_f_sourcePrime_Jdxp = 0.0;
16996 double Coef_f_substrate_Jdxp = 0.0;
16997 double Coef_f_temp_Jdxp = 0.0;
17006 Coef_f_body_Jdxp -=
17011 Coef_f_gatePrime_Jdxp -=
17015 Coef_f_drainPrime_Jdxp +=
17030 Coef_f_gate_Jdxp -=
17035 Coef_f_gateMid_Jdxp -=
17068 dFdxdVp[mi.
li_Body ] += Coef_f_body_Jdxp;
17072 dFdxdVp[mi.
li_ExtBody ] += Coef_f_extBody_Jdxp;
17074 dFdxdVp[mi.
li_Gate ] += Coef_f_gate_Jdxp;
17076 dFdxdVp[mi.
li_GateMid ] += Coef_f_gateMid_Jdxp;
17077 dFdxdVp[mi.
li_Drain ] += Coef_f_drain_Jdxp;
17079 dFdxdVp[mi.
li_Source ] += Coef_f_source_Jdxp;
17092 double Coef_q_body=0.0;
17093 double Coef_q_extBody=0.0;
17094 double Coef_q_gate=0.0;
17095 double Coef_q_gatePrime=0.0;
17096 double Coef_q_gateMid=0.0;
17097 double Coef_q_drainPrime=0.0;
17098 double Coef_q_sourcePrime=0.0;
17099 double Coef_q_substrate=0.0;
17100 double Coef_q_temp=0.0;
17131 qVec[mi.
li_Body ] -= Coef_q_body;
17137 qVec[mi.
li_Gate ] -= Coef_q_gate;
17187 double Coef_q_body_Jdxp = 0.0;
17188 double Coef_q_extBody_Jdxp = 0.0;
17189 double Coef_q_gate_Jdxp = 0.0;
17190 double Coef_q_gatePrime_Jdxp = 0.0;
17191 double Coef_q_gateMid_Jdxp = 0.0;
17192 double Coef_q_drainPrime_Jdxp = 0.0;
17193 double Coef_q_sourcePrime_Jdxp = 0.0;
17194 double Coef_q_substrate_Jdxp = 0.0;
17195 double Coef_q_temp_Jdxp = 0.0;
17201 Coef_q_body_Jdxp -=
17205 Coef_q_gatePrime_Jdxp -=
17208 Coef_q_drainPrime_Jdxp +=
17219 Coef_q_gateMid_Jdxp -=
17230 dQdxdVp[mi.
li_Body ] += Coef_q_body_Jdxp;
17234 dQdxdVp[mi.
li_ExtBody ] += Coef_q_extBody_Jdxp;
17236 dQdxdVp[mi.
li_Gate ] += Coef_q_gate_Jdxp;
17238 dQdxdVp[mi.
li_GateMid ] += Coef_q_gateMid_Jdxp;
17253 #ifndef Xyce_NONPOINTER_MATRIX_LOAD
17265 #pragma omp parallel for
17775 int sizeInstances = instanceContainer_.size();
17778 #pragma omp parallel for
17780 for (
int i=0; i<sizeInstances; ++i)
17782 Instance & mi = *(instanceContainer_.at(i));
18288 .registerDevice(
"m", 10)
18289 .registerDevice(
"m", 57)
18290 .registerModelType(
"pmos", 10)
18291 .registerModelType(
"nmos", 10)
18292 .registerModelType(
"pmos", 57)
18293 .registerModelType(
"nmos", 57);