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;
5784 const std::vector<int> & staLIDVecRef )
5788 #ifdef Xyce_DEBUG_DEVICE
5792 Xyce::dout() << std::endl;
5793 Xyce::dout() << section_divider << std::endl;
5794 Xyce::dout() <<
" In Instance::registerStateLIDs\n\n";
5795 Xyce::dout() <<
" name = " <<
getName() << std::endl;
5796 Xyce::dout() <<
" Number of State LIDs: " <<
numStateVars << std::endl;
5812 #ifdef Xyce_DEBUG_DEVICE
5815 Xyce::dout() <<
" Local State indices:" << std::endl;
5816 Xyce::dout() << std::endl;
5818 Xyce::dout() <<
" li_state_qb = " <<
li_state_qb << std::endl;
5819 Xyce::dout() <<
" li_state_qg = " <<
li_state_qg << std::endl;
5820 Xyce::dout() <<
" li_state_qd = " <<
li_state_qd << std::endl;
5821 Xyce::dout() <<
" li_state_qe = " <<
li_state_qe << std::endl;
5822 Xyce::dout() <<
" li_state_qgmid = " <<
li_state_qgmid << std::endl;
5823 Xyce::dout() <<
" li_state_qth = " <<
li_state_qth << std::endl;
5824 Xyce::dout() << std::endl;
5825 Xyce::dout() << section_divider << std::endl;
5840 const std::vector<int> & stoLIDVecRef )
5905 const std::vector< std::vector<int> > & jacLIDVec )
5908 std::vector<int> map;
5909 std::vector< std::vector<int> > map2;
5913 int lastDrainIndex = 0;
5914 int lastGateIndex = 0;
5915 int lastBodyIndex = 0;
5916 int lastSourceIndex = 0;
5917 int lastSubstrateIndex = 0;
5918 int lastExtBodyIndex = 0;
5919 int lastRowUsed = 0;
6011 lastSourceIndex = 1;
6012 lastSubstrateIndex = 6;
6013 lastExtBodyIndex = 1;
6083 lastSourceIndex = 1;
6084 lastSubstrateIndex = 5;
6085 lastExtBodyIndex = 1;
6149 lastSourceIndex = 1;
6150 lastSubstrateIndex = 5;
6151 lastExtBodyIndex = 0;
6205 lastSourceIndex = 1;
6206 lastSubstrateIndex = 4;
6207 lastExtBodyIndex = 0;
6289 lastSourceIndex = 1;
6290 lastSubstrateIndex = 6;
6291 lastExtBodyIndex = 1;
6374 lastSourceIndex = 1;
6375 lastSubstrateIndex = 6;
6376 lastExtBodyIndex = 1;
6381 std::string msg =
"Instance::registerJacLIDs:";
6382 msg +=
"jacID out of supported range";
6383 N_ERH_ErrorMgr::report(N_ERH_ErrorMgr::DEV_FATAL, msg);
6392 icVDSEquVdOffset = jacLIDVec[map[lastRowUsed+extraVars]][map2[lastRowUsed+extraVars][0]];
6393 icVDSEquVsOffset = jacLIDVec[map[lastRowUsed+extraVars]][map2[lastRowUsed+extraVars][1]];
6394 icVDSEquIdsOffset = jacLIDVec[map[lastRowUsed+extraVars]][map2[lastRowUsed+extraVars][2]];
6401 icVGSEquVgOffset = jacLIDVec[map[lastRowUsed+extraVars]][map2[lastRowUsed+extraVars][0]];
6402 icVGSEquVsOffset = jacLIDVec[map[lastRowUsed+extraVars]][map2[lastRowUsed+extraVars][1]];
6403 icVGSEquIgsOffset = jacLIDVec[map[lastRowUsed+extraVars]][map2[lastRowUsed+extraVars][2]];
6410 icVBSEquVbOffset = jacLIDVec[map[lastRowUsed+extraVars]][map2[lastRowUsed+extraVars][0]];
6411 icVBSEquVsOffset = jacLIDVec[map[lastRowUsed+extraVars]][map2[lastRowUsed+extraVars][1]];
6412 icVBSEquIbsOffset = jacLIDVec[map[lastRowUsed+extraVars]][map2[lastRowUsed+extraVars][2]];
6419 icVESEquVeOffset = jacLIDVec[map[lastRowUsed+extraVars]][map2[lastRowUsed+extraVars][0]];
6420 icVESEquVsOffset = jacLIDVec[map[lastRowUsed+extraVars]][map2[lastRowUsed+extraVars][1]];
6421 icVESEquIesOffset = jacLIDVec[map[lastRowUsed+extraVars]][map2[lastRowUsed+extraVars][2]];
6428 icVPSEquVpOffset = jacLIDVec[map[lastRowUsed+extraVars]][map2[lastRowUsed+extraVars][0]];
6429 icVPSEquVsOffset = jacLIDVec[map[lastRowUsed+extraVars]][map2[lastRowUsed+extraVars][1]];
6430 icVPSEquIpsOffset = jacLIDVec[map[lastRowUsed+extraVars]][map2[lastRowUsed+extraVars][2]];
6445 #ifndef Xyce_NONPOINTER_MATRIX_LOAD
6745 double tmp, tmp1, tmp2, T0, T1, T2, T3, T4, T5, Ldrn, Wdrn;
6746 double TempRatio, Inv_L, Inv_W, Inv_LW, Tnom;
6747 double SDphi, SDgamma;
6748 double tmp3, T7, Eg;
6750 #ifdef Xyce_DEBUG_DEVICE
6753 Xyce::dout() << std::endl << subsection_divider << std::endl;
6754 Xyce::dout() <<
"Instance::updateTemperature\n";
6755 Xyce::dout() <<
"name = " <<
getName() << std::endl;
6760 if (temp_tmp != -999.0)
temp = temp_tmp;
6773 TempRatio =
temp/Tnom;
6776 Eg = 1.16 - 7.02e-4 * temp * temp / (temp + 1108.0);
6778 * exp(21.5565981 - Eg / (2.0 *
vtm));
6782 #ifdef REUSE_PARAMPTR
6787 std::list<SizeDependParam*>::iterator it_dpL =
6789 std::list<SizeDependParam*>::iterator end_dpL =
6794 for( ; it_dpL != end_dpL; ++it_dpL ) {
6795 if( (*it_dpL)->Length ==
l && (*it_dpL)->Width ==
w &&
6796 (*it_dpL)->Rth0 ==
rth0 && (*it_dpL)->Cth0 ==
cth0) {
6811 if (
paramPtr == static_cast<SizeDependParam *> (NULL))
6854 UserError0(*
this) <<
"Effective channel length <= 0";
6861 UserError0(*
this) <<
"Effective channel width <= 0";
6870 UserError0(*
this) <<
"Effective channel length for C-V <= 0";
6877 UserError0(*
this) <<
"Effective channel width for C-V <= 0";
6886 UserError0(*
this) <<
"Effective channel length for C-V (body) <= 0";
6892 UserError0(*
this) <<
"Effective channel length for C-V (backgate) <= 0";
7442 T0 = (TempRatio - 1.0);
7482 UserError0(*
this) <<
"Problem detected during B3SOIV3 parameter check";
7548 SDgamma * sqrt(SDphi);
7551 SDgamma * sqrt(SDphi);
7613 UserWarning(*
this) <<
"k1 should be specified with k2.";
7619 UserWarning(*
this) <<
"k2 should be specified with k1.";
7624 UserWarning(*
this) <<
"xt is ignored because k1 or k2 is given.";
7628 UserWarning(*
this) <<
"vbx is ignored because k1 or k2 is given.";
7632 UserWarning(*
this) <<
"vbm is ignored because k1 or k2 is given.";
7636 UserWarning(*
this) <<
"gamma1 ignored because k1 or k2 is given.";
7640 UserWarning(*
this) <<
"gamma2 ignored because k1 or k2 is given.";
7715 T2 = (T0 + 2.0 * T0 * T0);
7718 #ifdef REUSE_PARAMPTR
7805 T2 = T1 * (1.0 + 2.0 * T1);
7809 T2 = T1 * (1.0 + 2.0 * T1);
7817 T3 = T1 * (1.0 + 2.0 * T1);
7821 T3 = T1 * (1.0 + 2.0 * T1);
7832 * (TempRatio - 1.0);
7857 UserWarning(*
this) <<
"The gate conductance reset to 1.0e3 mho.";
7878 bool bsuccess =
true;
7880 double VgstNVt, ExpVgst;
7884 double Vfbeff, dVfbeff_dVd, dVfbeff_dVg, dVfbeff_dVrg, dVfbeff_dVb;
7885 double dVfbeff_dT, V3, V4;
7886 double Vgs_eff, Vfb, dVfb_dVb, dVfb_dVd, dVfb_dT;
7891 double Phis, dPhis_dVb, sqrtPhis, dsqrtPhis_dVb, Vth, dVth_dVb, dVth_dVd;
7892 double sqrtPhisExt, dsqrtPhisExt_dVb;
7896 double n, dn_dVb, dn_dVd, noff, dnoff_dVd, dnoff_dVb;
7897 double ExpArg, V0, CoxWLcen, QovCox, LINK;
7898 double CoxWLb, CoxWLcenb;
7901 double Cox, Tox, Tcen, dTcen_dVg, dTcen_dVd, dTcen_dVb;
7902 double Ccen, Coxeff, dCoxeff_dVg, dCoxeff_dVd, dCoxeff_dVb;
7903 double dTcen_dT, dCoxeff_dT, dCoxWLcenb_dT;
7904 double Denomi ,dDenomi_dVg ,dDenomi_dVd ,dDenomi_dVb ,dDenomi_dT;
7905 double Ce1b ,Ce1e, Ce1T;
7906 double CbT, CsT, CgT;
7908 double Giie, dRatio_dVe;
7909 double Vdsatii0, dVdsatii0_dT;
7910 double VgsStep, dVgsStep_dT;
7912 double Vdiff, dVdiff_dVg, dVdiff_dVb, dVdiff_dVd, dVdiff_dVe, dVdiff_dT;
7913 double Ratio, dRatio_dVg, dRatio_dVb, dRatio_dVd, dRatio_dT;
7914 double Gbpbs, Gbpps;
7916 double qjs_local, gcjsbs, gcjsT;
7917 double qjd_local, gcjdbs, gcjdds, gcjdT;
7918 double cjsbs, cjdbs, dcjdbs_dT, dcjsbs_dT;
7919 double PhiBSWG, dPhiBSWG_dT;
7920 double darg_dT, ddT3_dVb_dT;
7924 double OxideRatio, Vaux, dVaux_dVg, dVaux_dVd, dVaux_dVb;
7925 double Igb, dIgb_dVg, dIgb_dVd, dIgb_dVb, dIgb_dVe, dIgb_dT;
7928 double Ibs1 ,dIbs1_dVb ,dIbs1_dT;
7929 double Ibs2 ,dIbs2_dVb ,dIbs2_dT;
7930 double Ibs3 ,dIbs3_dVb ,dIbs3_dVd, dIbs3_dT;
7931 double Ibs4 ,dIbs4_dVb ,dIbs4_dT;
7932 double Ibd1 ,dIbd1_dVb ,dIbd1_dVd ,dIbd1_dT;
7933 double Ibd2 ,dIbd2_dVb ,dIbd2_dVd ,dIbd2_dT;
7934 double Ibd3 ,dIbd3_dVb ,dIbd3_dVd ,dIbd3_dT;
7935 double Ibd4 ,dIbd4_dVb ,dIbd4_dVd ,dIbd4_dT;
7936 double Igc, dIgc_dVg, dIgc_dVd, dIgc_dVb;
7937 double Igs_local, dIgs_dVg, dIgs_dVs, Igd_local, dIgd_dVg, dIgd_dVd;
7938 double Igcs_local, dIgcs_dVg, dIgcs_dVd, dIgcs_dVb;
7939 double Igcd_local, dIgcd_dVg, dIgcd_dVd, dIgcd_dVb;
7940 double Igb1, dIgb1_dVg, dIgb1_dVd, dIgb1_dVb, dIgb1_dT, dIgb1_dVe;
7941 double Igb2, dIgb2_dVg, dIgb2_dVd, dIgb2_dVb, dIgb2_dT;
7943 double vgs_eff, dvgs_eff_dvg, vgd_eff, dvgd_eff_dvg;
7944 double dT0_dVox, Voxeff, dVoxeff_dVox, dVox_dT, dVaux_dT;
7946 double Vgb, dVgb_dVg, dVgb_dVb, Vox, dVox_dVg, dVox_dVd, dVox_dVb;
7947 double dT1_dVe, dT5_dVe, dVox_dVe, dVoxdepinv_dVe, dVaux_dVe;
7948 double Voxacc, dVoxacc_dVg, dVoxacc_dVd, dVoxacc_dVb;
7949 double Voxdepinv, dVoxdepinv_dVg, dVoxdepinv_dVb, dVoxdepinv_dVd;
7950 double dVoxdepinv_dT, VxNVt, ExpVxNVt;
7952 double Gjsd=0.0, Gjsb=0.0, GjsT=0.0, Gjdd=0.0, Gjdb=0.0, GjdT=0.0;
7953 double Ien, dIen_dT, Iendif, dIendif_dT;
7954 double Ibsdif, dIbsdif_dVb, dIbsdif_dT;
7955 double Ibddif, dIbddif_dVb, dIbddif_dVd, dIbddif_dT;
7956 double Ehlis, dEhlis_dVb, dEhlis_dT;
7957 double EhlisFactor, dEhlisFactor_dVb, dEhlisFactor_dT;
7958 double Ehlid, dEhlid_dVb, dEhlid_dVd, dEhlid_dT;
7959 double EhlidFactor, dEhlidFactor_dVb, dEhlidFactor_dVd, dEhlidFactor_dT;
7960 double E2ndFactor, dE2ndFactor_dVb, dE2ndFactor_dVd, dE2ndFactor_dT;
7962 double ExpVbsNVtm, dExpVbsNVtm_dVb, dExpVbsNVtm_dT;
7963 double ExpVbdNVtm, dExpVbdNVtm_dVb, dExpVbdNVtm_dVd, dExpVbdNVtm_dT;
7965 double ueff_local, dueff_dVg, dueff_dVd, dueff_dVb, dueff_dT;
7970 double EsatL, dEsatL_dVg, dEsatL_dVd, dEsatL_dVb, dEsatL_dT;
7972 double dVdsat_dVg, dVdsat_dVb, dVdsat_dVd, dVdsat_dT, Vasat;
7973 double dVasat_dVg, dVasat_dVb, dVasat_dVd, dVasat_dT;
7974 double Va, dVa_dVd, dVa_dVg, dVa_dVb, dVa_dT;
7975 double WTsi, NVtm1, NVtm2;
7978 double WsTsi, WdTsi;
7979 double NVtmf, NVtmr, dNVtmf_dT, dNVtmr_dT;
7981 double Ibp, Iii, Gcd, Gcb, GcT;
7982 double Giid=0.0, Giig=0.0, Giib=0.0, GiiT=0.0;
7984 double Vbseff, dVbseff_dVb;
7987 double Idgidl, Gdgidld, Gdgidlg, Isgidl, Gsgidlg;
7989 double K1, Cbox, CboxWL, Vesfb;
7990 double T0, dT0_dVg, dT0_dVd, dT0_dVb, dT0_dVe;
7991 double T1, dT1_dVg, dT1_dVd, dT1_dVb;
7992 double T2, dT2_dVg, dT2_dVd, dT2_dVb, dT2_dVe;
7993 double T3, dT3_dVg, dT3_dVd, dT3_dVb, dT3_dT;
7994 double T4, dT4_dVd, dT4_dVb, dT4_dT;
7995 double T5, dT5_dVg, dT5_dVd, dT5_dVb, dT5_dT;
7996 double T6, dT6_dVg, dT6_dVd, dT6_dVb, dT6_dT;
8000 double T10, dT10_dVb, dT10_dVd;
8002 double dT10_dT, dT11_dT, DioMax;
8005 double dT11_dVb, dT13_dVb, dT14_dVb;
8007 double tmp, Abulk_local, dAbulk_dVb, Abulk0, dAbulk0_dVb;
8009 double VACLM, dVACLM_dVg, dVACLM_dVd, dVACLM_dVb, dVACLM_dT;
8010 double VADIBL, dVADIBL_dVg, dVADIBL_dVd, dVADIBL_dVb, dVADIBL_dT;
8012 double Xdep, dXdep_dVb, lt1, dlt1_dVb, ltw, dltw_dVb;
8013 double Delt_vth, dDelt_vth_dVb;
8015 double Theta0, dTheta0_dVb;
8016 double T3zb, lt1zb, ltwzb, Theta0zb;
8017 double Delt_vthzb, dDelt_vthzb_dT;
8018 double DeltVthwzb, dDeltVthwzb_dT;
8019 double DeltVthtempzb, dDeltVthtempzb_dT;
8020 double Vthzb, dVthzb_dT, Vfbzb, dVfbzb_dT;
8023 double Temp, TempRatio, dTempRatio_dT, tmp1, tmp2, tmp3, tmp4;
8027 double ni_local, Eg, vbi, dvbi_dT, vfbb, dvfbb_dT, sqrtPhi, Xdep0;
8028 double Ahli, dAhli_dT, jbjt, jdif, jrec, djbjt_dT, djdif_dT, djrec_dT;
8029 double jtun, djtun_dT, u0temp, du0temp_dT, vsattemp, dvsattemp_dT;
8030 double rds0, drds0_dT, ua, ub, uc, dua_dT, dub_dT, duc_dT;
8031 double dni_dT, dT7_dT, dT0_dT, dT0_dT7, dT1_dT, dT1_dT7;
8032 double dT2_dT, dT2_dT7;
8034 double Vbs0, dVbs0_dVg, dVbs0_dVd, dVbs0_dVe, dVbs0_dT;
8035 double Vbs0mos, dVbs0mos_dVe, dVbs0mos_dT;
8036 double Vbsmos, dVbsmos_dVg, dVbsmos_dVd, dVbsmos_dVb, dVbsmos_dVe, dVbsmos_dT;
8038 double wdios, wdiod, wdiosCV, wdiodCV;
8040 double Vbp, dVbp_dVb, dVtm_dT;
8041 double Vbsh, dVbsh_dVb;
8042 double dDelt_vth_dT;
8043 double DeltVthw, dDeltVthw_dVb, dDeltVthw_dT, DeltVthtemp, dDeltVthtemp_dT;
8044 double VthFD, dVthFD_dVd, dVthFD_dVb, dVthFD_dVe, dVthFD_dT;
8045 double VtgsFD, ExpVtgsFD, VgstFD, ExpVgstFD;
8046 double VtgseffFD, dVtgseffFD_dVd, dVtgseffFD_dVg, dVtgseffFD_dVe;
8047 double dVtgseffFD_dT;
8048 double Vbsitf, dVbsitf_dVg, dVbsitf_dVd, dVbsitf_dVb, dVbsitf_dVe, dVbsitf_dT;
8049 double PhiFD, dPhiFD_dVg, dPhiFD_dVd, dPhiFD_dVe, dPhiFD_dT;
8050 double PhiON, dPhiON_dVg, dPhiON_dVd, dPhiON_dVe, dPhiON_dT;
8051 double dVbsh_dVg, dVbsh_dVd, dVbsh_dVe, dVbsh_dT;
8052 double VgsteffFD, dVgsteffFD_dVd, dVgsteffFD_dVg, dVgsteffFD_dVe;
8053 double dVgsteffFD_dT;
8054 double dVgsteff_dVe, dVbseff_dVg, dVbseff_dVd, dVbseff_dVe, dVbseff_dT;
8055 double Vbs0t, dVbs0t_dVg, dVbs0t_dVd, dVbs0t_dVe, dVbs0t_dT;
8056 double Vgsteff_local, dVgsteff_dVg, dVgsteff_dVd, dVgsteff_dVb, dVgsteff_dT;
8057 double Vdseff_local, dVdseff_dVg, dVdseff_dVd, dVdseff_dVb, dVdseff_dT;
8058 double dVgst_dVd, dVth_dT, dVgst2Vtm_dT;
8060 double DIBL_Sft, dDIBL_Sft_dVd, dDIBL_Sft_dVb;
8062 double Lambda, dLambda_dVg;
8066 double VdseffCV, dVdseffCV_dVg, dVdseffCV_dVd, dVdseffCV_dVb;
8070 double beta, dbeta_dVg, dbeta_dVd, dbeta_dVb, dbeta_dT;
8071 double gche, dgche_dVg, dgche_dVd, dgche_dVb, dgche_dT;
8072 double fgche1, dfgche1_dVg, dfgche1_dVd, dfgche1_dVb, dfgche1_dT;
8073 double fgche2, dfgche2_dVg, dfgche2_dVd, dfgche2_dVb, dfgche2_dT;
8074 double Idl, dIdl_dVg, dIdl_dVd, dIdl_dVb, dIdl_dT;
8075 double Gm0, Gds0, Gmb0, GmT0;
8081 double Rds, dRds_dVg, dRds_dVb, dRds_dT, WVCox, WVCoxRds;
8082 double Vgst2Vtm, VdsatCV;
8086 double Leff, Weff, dWeff_dVg, dWeff_dVb;
8087 double AbulkCV, dAbulkCV_dVb;
8089 double Qe1 , dQe1_dVb, dQe1_dVe, dQe1_dT;
8091 double Csg(0.0), Csd(0.0), Csb(0.0), Cbg(0.0), Cbd(0.0), Cbb(0.0);
8092 double Cgb(0.0), Cgg(0.0), Cgd(0.0);
8093 double Cgg1(0.0), Cgb1(0.0), Cgd1(0.0), Cbg1(0.0), Cbb1(0.0), Cbd1(0.0);
8094 double Csg1(0.0), Csd1(0.0), Csb1(0.0);
8097 double dQac0_dVg, dQac0_dVb, dQac0_dVd, dQac0_dVrg, dQac0_dT;
8098 double dQsub0_dVg, dQsub0_dVd, dQsub0_dVb, dQsub0_dVrg, dQsub0_dT;
8102 double vg_old, vd_old, vp_old, ve_old, vgp_old, vgm_old, vs_old, delTemp_old;
8103 double vbd_old, vbs_old, vds_old;
8132 #ifdef Xyce_DEBUG_DEVICE
8135 Xyce::dout() << subsection_divider << std::endl;
8136 Xyce::dout() <<
" In updateIntermediateVars\n";
8137 Xyce::dout() <<
" name = " <<
getName();
8139 Xyce::dout() <<
" dtype is " <<
model_.
dtype << std::endl;
8140 Xyce::dout().width(21); Xyce::dout().precision(13); Xyce::dout().setf(std::ios::scientific);
8141 Xyce::dout() <<
" " << std::endl;
8203 #ifdef Xyce_DEBUG_DEVICE
8206 Xyce::dout().precision(18);
8207 Xyce::dout() << std::endl;
8208 Xyce::dout() <<
getName() <<
" Blim: Vd = " <<
Vd << std::endl;
8209 Xyce::dout() <<
getName() <<
" Blim: Vg = " <<
Vg << std::endl;
8210 Xyce::dout() <<
getName() <<
" Blim: Vs = " <<
Vs << std::endl;
8211 Xyce::dout() <<
getName() <<
" Blim: Ve = " <<
Ve << std::endl;
8212 Xyce::dout() <<
getName() <<
" Blim: Vb = " <<
Vb << std::endl;
8213 Xyce::dout() <<
getName() <<
" Blim: Vp = " <<
Vp << std::endl;
8214 Xyce::dout() <<
getName() <<
" Blim:delTemp = " <<
delTemp << std::endl;
8215 Xyce::dout() <<
getName() <<
" Blim: Vsp = " <<
Vsp << std::endl;
8216 Xyce::dout() <<
getName() <<
" Blim: Vdp = " <<
Vdp << std::endl;
8217 Xyce::dout() <<
getName() <<
" Blim: Vgp = " <<
Vgp << std::endl;
8218 Xyce::dout() <<
getName() <<
" Blim: Vgm = " <<
Vgm << std::endl;
8219 Xyce::dout() << std::endl;
8236 #ifdef Xyce_DEBUG_DEVICE
8239 Xyce::dout().precision(18);
8240 Xyce::dout() << std::endl;
8241 Xyce::dout() <<
getName() <<
" Blim: vbs = " <<
vbs << std::endl;
8242 Xyce::dout() <<
getName() <<
" Blim: vbd = " <<
vbd << std::endl;
8243 Xyce::dout() <<
getName() <<
" Blim: vps = " <<
vps << std::endl;
8244 Xyce::dout() <<
getName() <<
" Blim: vpd = " <<
vpd << std::endl;
8245 Xyce::dout() <<
getName() <<
" Blim: vgs = " <<
vgs << std::endl;
8246 Xyce::dout() <<
getName() <<
" Blim: vds = " << vds << std::endl;
8247 Xyce::dout() <<
getName() <<
" Blim: ves = " <<
ves << std::endl;
8248 Xyce::dout() <<
getName() <<
" Blim: ved = " <<
ved << std::endl;
8249 Xyce::dout() <<
getName() <<
" Blim: vgd = " <<
vgd << std::endl;
8250 Xyce::dout() <<
getName() <<
" Blim: vges = " <<
vges<< std::endl;
8251 Xyce::dout() <<
getName() <<
" Blim: vgms = " <<
vgms<< std::endl;
8275 if ((*flagSolVectorPtr)[
li_Drain] == 0 || (*flagSolVectorPtr)[
li_Gate] == 0 ||
8475 #ifdef Xyce_DEBUG_DEVICE
8478 Xyce::dout() << std::endl;
8479 Xyce::dout().precision(18);
8480 Xyce::dout() << std::endl;
8481 Xyce::dout() <<
getName() <<
" Alim: Vd = " <<
Vd << std::endl;
8482 Xyce::dout() <<
getName() <<
" Alim: Vg = " <<
Vg << std::endl;
8483 Xyce::dout() <<
getName() <<
" Alim: Vs = " <<
Vs << std::endl;
8484 Xyce::dout() <<
getName() <<
" Alim: Ve = " <<
Ve << std::endl;
8485 Xyce::dout() <<
getName() <<
" Alim: Vb = " <<
Vb << std::endl;
8486 Xyce::dout() <<
getName() <<
" Alim: Vp = " <<
Vp << std::endl;
8487 Xyce::dout() <<
getName() <<
" Alim:delTemp = " <<
delTemp << std::endl;
8488 Xyce::dout() <<
getName() <<
" Alim: Vsp = " <<
Vsp << std::endl;
8489 Xyce::dout() <<
getName() <<
" Alim: Vdp = " <<
Vdp << std::endl;
8490 Xyce::dout() <<
getName() <<
" Alim: Vgp = " <<
Vgp << std::endl;
8491 Xyce::dout() <<
getName() <<
" Alim: Vgm = " <<
Vgm << std::endl;
8493 Xyce::dout() <<
getName() <<
" Alim: vbs = " <<
vbs << std::endl;
8494 Xyce::dout() <<
getName() <<
" Alim: vps = " <<
vps << std::endl;
8495 Xyce::dout() <<
getName() <<
" Alim: vgs = " <<
vgs << std::endl;
8496 Xyce::dout() <<
getName() <<
" Alim: ves = " <<
ves << std::endl;
8497 Xyce::dout() <<
getName() <<
" Alim: vds = " << vds << std::endl;
8498 Xyce::dout() <<
getName() <<
" Alim: vges = " <<
vges << std::endl;
8499 Xyce::dout() <<
getName() <<
" Alim: vgms = " <<
vgms << std::endl;
8501 Xyce::dout() <<
getName() <<
" Alim: vbd = " <<
vbd << std::endl;
8503 Xyce::dout() <<
getName() <<
" Alim: T0 = " <<
vbd << std::endl;
8504 Xyce::dout() << std::endl;
8505 Xyce::dout() << std::endl;
8516 Xyce::dout() << std::endl;
8539 TempRatio = Temp * dTempRatio_dT;
8547 Eg = 1.16 - 7.02e-4 * T5 / T0;
8548 T1 = ((7.02e-4 * T5) - T0 * (14.04e-4 * Temp)) / T0 / T0;
8554 T3 = 1.45e10 * Temp * T5 * T2;
8555 T4 = exp(21.5565981 - Eg / (2.0 * Vtm));
8557 dni_dT = 2.175e10 * T2 * T5 * T4 + T3 * T4 *
8558 (-Vtm * T1 + Eg *
CONSTKoverQ) / (2.0 * Vtm * Vtm);
8562 dvbi_dT =
CONSTKoverQ * T0 + Vtm * (-2.0 * dni_dT / ni_local);
8575 (
CONSTKoverQ * T0 - Vtm * 2.0 * dni_dT / ni_local);
8580 sqrtPhi = sqrt(phi_local);
8588 T3 = TempRatio - 1.0;
8595 CEXP(T7, T0, dT0_dT7);
8596 dT0_dT = dT0_dT7 * dT7_dT;
8607 CEXP(T7, T1, dT1_dT7);
8608 dT1_dT = dT1_dT7 * dT7_dT;
8613 CEXP(T7, T2, dT2_dT7);
8614 dT2_dT = dT2_dT7 * dT7_dT;
8629 CEXP(T7, T0, dT0_dT7);
8630 dT0_dT = dT0_dT7 * dT7_dT;
8673 dni_dT = dvbi_dT = dvfbb_dT = djbjt_dT = djdif_dT = 0.0;
8674 djrec_dT = djtun_dT = du0temp_dT = dvsattemp_dT = 0.0;
8675 drds0_dT = dua_dT = dub_dT = duc_dT = 0.0;
8758 #ifdef Xyce_DEBUG_DEVICE
8761 Xyce::dout() <<
"HOMOTOPY INFO: gainscale = "
8763 Xyce::dout() <<
"HOMOTOPY INFO: before vds = " <<
Vds << std::endl;
8764 Xyce::dout() <<
"HOMOTOPY INFO: before vgst = " <<
Vgs << std::endl;
8789 #ifdef Xyce_DEBUG_DEVICE
8792 Xyce::dout() <<
"HOMOTOPY INFO: after vds = " <<
Vds << std::endl;
8793 Xyce::dout() <<
"HOMOTOPY INFO: after vgst = " <<
Vgs << std::endl;
8808 T4 = sqrt(1.0 + 2.0 * (
Vgs - T0) / T1);
8809 T2 = T1 * (T4 - 1.0);
8810 T3 = 0.5 * T2 * T2 / T1;
8811 T7 = 1.12 - T3 - 0.05;
8812 T6 = sqrt(T7 * T7 + 0.224);
8813 T5 = 1.12 - 0.5 * (T7 + T6);
8815 dVgs_eff_dVg = 1.0 - (0.5 - 0.5 / T4) * (1.0 + T7 / T6);
8833 V0 = vbi - phi_local;
8846 else dVbsmos_dT = 0.0;
8856 T2 = T1 * (vbi - phi_local);
8860 dVbs0t_dT = T1 * dvbi_dT;
8866 T5 =
model_.
k2b * (exp(0.5*T3) + 2*exp(T3));
8870 Vbs0 = T4 * Vbs0t + T2;
8873 dVbs0_dT = T4 * dVbs0t_dT - T1 * dvfbb_dT;
8879 T1 = Vbs0t - Vbs0 - 0.005;
8880 T2 = sqrt(T1 * T1 + (2.5e-5));
8881 T3 = 0.5 * (T1 + T2);
8883 Vbs0mos = Vbs0 - 0.5 * T3 * T4;
8884 T5 = 0.5 * T4 * (1 + T1 / T2);
8885 dVbs0mos_dVe = dVbs0_dVe * (1 + T5);
8887 dVbs0mos_dT = dVbs0_dT * (1 + T5) - T5 * dVbs0t_dT;
8893 T1 = phi_local - 0.02;
8894 T2 = T1 - Vbs0mos - 0.005;
8895 T3 = sqrt(T2 * T2 + 4.0 * 0.005);
8896 Vbs0mos = T1 - 0.5 * (T2 + T3);
8897 T4 = 0.5 * (1 + T2 / T3);
8898 dVbs0mos_dVe = T4 * dVbs0mos_dVe;
8900 dVbs0mos_dT = T4 * dVbs0mos_dT;
8901 else dVbs0mos_dT = 0.0;
8905 Phis = phi_local - Vbs0mos;
8907 sqrtPhis = sqrt(Phis);
8908 dsqrtPhis_dVb = -0.5 / sqrtPhis;
8909 Xdep = Xdep0 * sqrtPhis / sqrtPhi;
8910 dXdep_dVb = (Xdep0 / sqrtPhi) * dsqrtPhis_dVb;
8919 { T4 = 1.0 / (3.0 + 8.0 * T0);
8920 T1 = (1.0 + 3.0 * T0) * T4;
8924 dlt1_dVb =
model_.
factor1 * (0.5 / T3 * T1 * dXdep_dVb + T3 * T2);
8932 { T4 = 1.0 / (3.0 + 8.0 * T0);
8933 T1 = (1.0 + 3.0 * T0) * T4;
8937 dltw_dVb=
model_.
factor1*(0.5 / T3 * T1 * dXdep_dVb + T3 * T2);
8942 Theta0 = T1 * (1.0 + 2.0 * T1);
8943 dT1_dVb = -T0 / lt1 * T1 * dlt1_dVb;
8944 dTheta0_dVb = (1.0 + 4.0 * T1) * dT1_dVb;
8948 Theta0 = T1 * (1.0 + 2.0 * T1);
8956 else dDelt_vth_dT = 0.0;
8961 T2 = T1 * (1.0 + 2.0 * T1);
8962 dT1_dVb = -T0 / ltw * T1 * dltw_dVb;
8963 dT2_dVb = (1.0 + 4.0 * T1) * dT1_dVb;
8967 T2 = T1 * (1.0 + 2.0 * T1);
8974 if (
selfheat) dDeltVthw_dT = T0 * dvbi_dT;
8975 else dDeltVthw_dT = 0.0;
8985 dDeltVthtemp_dT = 0.0;
8992 { T9 = 1.0 / (3.0 - 2.0e4 * T3);
8993 T3 = (2.0e-4 - T3) * T9;
9008 * Vbs0mos) * tmp2 + DeltVthtemp - DIBL_Sft;
9013 - dDelt_vth_dVb - dDeltVthw_dVb
9014 + T6 - dDIBL_Sft_dVb;
9015 dVthFD_dVe = dVthFD_dVb * dVbs0mos_dVe;
9016 dVthFD_dVd = -dDIBL_Sft_dVd;
9018 dVthFD_dT = dDeltVthtemp_dT - dDelt_vth_dT - dDeltVthw_dT
9019 + dVthFD_dVb * dVbs0mos_dT;
9020 else dVthFD_dT = 0.0;
9024 VtgsFD = VthFD - Vgs_eff;
9027 VtgseffFD = T10 * log(1.0 + ExpVtgsFD);
9028 T0 /= (1.0 + ExpVtgsFD);
9029 dVtgseffFD_dVd = T0 * dVthFD_dVd;
9031 dVtgseffFD_dVe = T0 * dVthFD_dVe;
9033 dVtgseffFD_dT = T0 * (dVthFD_dT - (VtgsFD -
model_.
vofffd)
9034 / Temp) + VtgseffFD/Temp;
9035 else dVtgseffFD_dT = 0.0;
9039 VgstFD = Vgs_eff - VthFD;
9041 VgsteffFD = T10 * log(1.0 + ExpVgstFD);
9042 T0 /= (1.0 + ExpVgstFD);
9043 dVgsteffFD_dVd = -T0 * dVthFD_dVd;
9045 dVgsteffFD_dVe = -T0 * dVthFD_dVe;
9047 dVgsteffFD_dT = T0 * (-dVthFD_dT - (VgstFD -
model_.
vofffd)
9048 / Temp) + VgsteffFD/Temp;
9049 else dVgsteffFD_dT = 0.0;
9057 dT2_dVg = dVgsteffFD_dVg;
9058 dT2_dVd = dVgsteffFD_dVd;
9059 dT2_dVe = dVgsteffFD_dVe;
9060 if (
selfheat) dT2_dT = dVgsteffFD_dT;
9063 T0 = 1+ VgsteffFD * T2 / T1;
9064 dT0_dVg = (VgsteffFD * dT2_dVg + T2 * dVgsteffFD_dVg) / T1;
9065 dT0_dVd = (VgsteffFD * dT2_dVd + T2 * dVgsteffFD_dVd) / T1;
9066 dT0_dVe = (VgsteffFD * dT2_dVe + T2 * dVgsteffFD_dVe) / T1;
9068 dT0_dT = (VgsteffFD * (dT2_dT - T2/T1 * dT1_dT) + T2
9069 * dVgsteffFD_dT) / T1;
9073 PhiON = phi_local + Vtm* log(T0) ;
9074 dPhiON_dVg = Vtm* dT0_dVg/T0 ;
9075 dPhiON_dVd = Vtm* dT0_dVd/T0 ;
9076 dPhiON_dVe = Vtm* dT0_dVe/T0 ;
9078 dPhiON_dT = Vtm* dT0_dT/T0 + (PhiON-phi_local)/Temp ;
9079 else dPhiON_dT = 0.0;
9085 PhiFD = PhiON - T0 * VtgseffFD;
9086 dPhiFD_dVg = dPhiON_dVg - T0 * dVtgseffFD_dVg;
9087 dPhiFD_dVd = dPhiON_dVd - T0 * dVtgseffFD_dVd;
9088 dPhiFD_dVe = dPhiON_dVe - T0 * dVtgseffFD_dVe;
9090 dPhiFD_dT = dPhiON_dT - T0 * dVtgseffFD_dT;
9097 T2 = T1 * (vbi - phi_local);
9100 dVbs0t_dVg = dPhiFD_dVg;
9101 dVbs0t_dVd = dPhiFD_dVd;
9102 dVbs0t_dVe = dPhiFD_dVe;
9104 dVbs0t_dT = dPhiFD_dT + T1 * dvbi_dT;
9110 T5 =
model_.
k2b * (exp(0.5*T3) + 2*exp(T3));
9114 Vbs0 = T0 * Vbs0t + T2;
9115 dVbs0_dVg = T0 * dVbs0t_dVg;
9116 dVbs0_dVd = T0 * dVbs0t_dVd;
9117 dVbs0_dVe = T0 * dVbs0t_dVe + T1;
9119 dVbs0_dT = T0 * dVbs0t_dT - T1 * dvfbb_dT;
9129 dVbsitf_dVg = dVbs0_dVg;
9130 dVbsitf_dVd = dVbs0_dVd;
9131 dVbsitf_dVe = dVbs0_dVe;
9133 if (
selfheat) dVbsitf_dT = dVbs0_dT;
9134 else dVbsitf_dT = 0;
9139 T2 = sqrt(T1*T1 + 0.0001);
9140 T3 = 0.5 * (1 + T1/T2);
9141 Vbsitf = (Vbs0 +
OFF_Vbsitf) + 0.5 * (T1 + T2);
9142 dVbsitf_dVg = (1 - T3) * dVbs0_dVg;
9143 dVbsitf_dVd = (1 - T3) * dVbs0_dVd;
9144 dVbsitf_dVe = (1 - T3) * dVbs0_dVe;
9146 if (
selfheat) dVbsitf_dT = (1 - T3) * dVbs0_dT;
9147 else dVbsitf_dT = 0.0;
9151 T1 = Vbs0t - Vbsitf - 0.005;
9152 T2 = sqrt(T1 * T1 + (2.5e-5));
9153 T3 = 0.5 * (T1 + T2);
9155 Vbsmos = Vbsitf - 0.5 * T3 * T4;
9156 T5 = 0.5 * T4 * (1 + T1 / T2);
9157 dVbsmos_dVg = dVbsitf_dVg * (1 + T5) - T5 * dVbs0t_dVg;
9158 dVbsmos_dVd = dVbsitf_dVd * (1 + T5) - T5 * dVbs0t_dVd;
9159 dVbsmos_dVb = dVbsitf_dVb * (1 + T5);
9160 dVbsmos_dVe = dVbsitf_dVe * (1 + T5) - T5 * dVbs0t_dVe;
9162 dVbsmos_dT = dVbsitf_dT * (1 + T5) - T5 * dVbs0t_dT;
9175 T0 = Vbsmos + 5 - 0.001;
9176 T1 = sqrt(T0 * T0 - 0.004 * (-5));
9177 T2 = (-5) + 0.5 * (T0 + T1);
9178 dT2_dVb = (0.5 * (1.0 + T0 / T1)) * dVbsmos_dVb;
9179 dT2_dVg = (0.5 * (1.0 + T0 / T1)) * dVbsmos_dVg;
9180 dT2_dVd = (0.5 * (1.0 + T0 / T1)) * dVbsmos_dVd;
9181 dT2_dVe = (0.5 * (1.0 + T0 / T1)) * dVbsmos_dVe;
9182 if (
selfheat) dT2_dT = (0.5 * (1.0 + T0 / T1)) * dVbsmos_dT;
9187 T1 = T0 - T2 - 0.002;
9188 T3 = sqrt(T1 * T1 + 0.008 * T0);
9189 Vbsh = T0 - 0.5 * (T1 + T3);
9190 dVbsh_dVb = 0.5 * (1.0 + T1 / T3) * dT2_dVb;
9191 dVbsh_dVg = 0.5 * (1.0 + T1 / T3) * dT2_dVg;
9192 dVbsh_dVd = 0.5 * (1.0 + T1 / T3) * dT2_dVd;
9193 dVbsh_dVe = 0.5 * (1.0 + T1 / T3) * dT2_dVe;
9194 if (
selfheat) dVbsh_dT = 0.5 * (1.0 + T1 / T3) * dT2_dT;
9195 else dVbsh_dT = 0.0;
9198 T0 = 0.95 * phi_local;
9199 T1 = T0 - Vbsh - 0.002;
9200 T2 = sqrt(T1 * T1 + 0.008 * T0);
9201 Vbseff = T0 - 0.5 * (T1 + T2);
9202 dVbseff_dVb = 0.5 * (1.0 + T1 / T2) * dVbsh_dVb;
9203 dVbseff_dVg = 0.5 * (1.0 + T1 / T2) * dVbsh_dVg;
9204 dVbseff_dVd = 0.5 * (1.0 + T1 / T2) * dVbsh_dVd;
9205 dVbseff_dVe = 0.5 * (1.0 + T1 / T2) * dVbsh_dVe;
9206 if (
selfheat) dVbseff_dT = 0.5 * (1.0 + T1 / T2) * dVbsh_dT;
9207 else dVbseff_dT = 0.0;
9213 if (dVbseff_dVb < 1e-20) {
9214 dVbseff_dVb = 1e-20;
9218 dVbsh_dVb /= dVbseff_dVb;
9220 Phis = phi_local - Vbseff;
9222 sqrtPhis = sqrt(Phis);
9223 dsqrtPhis_dVb = -0.5 / sqrtPhis;
9225 Xdep = Xdep0 * sqrtPhis / sqrtPhi;
9226 dXdep_dVb = (Xdep0 / sqrtPhi) * dsqrtPhis_dVb;
9238 { T4 = 1.0 / (3.0 + 8.0 * T0);
9239 T1 = (1.0 + 3.0 * T0) * T4;
9243 dlt1_dVb =
model_.
factor1 * (0.5 / T3 * T1 * dXdep_dVb + T3 * T2);
9252 { T4 = 1.0 / (3.0 + 8.0 * T0);
9253 T1 = (1.0 + 3.0 * T0) * T4;
9257 dltw_dVb=
model_.
factor1*(0.5 / T3 * T1 * dXdep_dVb + T3 * T2);
9262 Theta0 = T1 * (1.0 + 2.0 * T1);
9263 dT1_dVb = -T0 / lt1 * T1 * dlt1_dVb;
9264 dTheta0_dVb = (1.0 + 4.0 * T1) * dT1_dVb;
9268 Theta0 = T1 * (1.0 + 2.0 * T1);
9276 else dDelt_vth_dT = 0.0;
9281 T2 = T1 * (1.0 + 2.0 * T1);
9282 dT1_dVb = -T0 / ltw * T1 * dltw_dVb;
9283 dT2_dVb = (1.0 + 4.0 * T1) * dT1_dVb;
9287 T2 = T1 * (1.0 + 2.0 * T1);
9294 if (
selfheat) dDeltVthw_dT = T0 * dvbi_dT;
9295 else dDeltVthw_dT = 0.0;
9305 dDeltVthtemp_dT = 0.0;
9312 { T9 = 1.0 / (3.0 - 2.0e4 * T3);
9313 T3 = (2.0e-4 - T3) * T9;
9325 T9 = 2.2361 / sqrtPhi;
9326 sqrtPhisExt = sqrtPhis - T9 * (Vbsh - Vbseff);
9327 dsqrtPhisExt_dVb = dsqrtPhis_dVb - T9 * (dVbsh_dVb - 1);
9332 * Vbseff) * tmp2 + DeltVthtemp - DIBL_Sft;
9338 - dDelt_vth_dVb - dDeltVthw_dVb
9339 + T6 - dDIBL_Sft_dVb;
9342 dVth_dVd = -dDIBL_Sft_dVd;
9344 dVth_dT = dDeltVthtemp_dT - dDelt_vth_dT - dDeltVthw_dT;
9356 Theta0zb = T1 * (1.0 + 2.0 * T1);
9360 Theta0zb = T1 * (1.0 + 2.0 * T1);
9368 T2 = T1 * (1.0 + 2.0 * T1);
9372 T2 = T1 * (1.0 + 2.0 * T1);
9375 DeltVthwzb = T0 * V0;
9376 dDeltVthwzb_dT = T0 * dvbi_dT;
9385 - Delt_vthzb - DeltVthwzb +
paramPtr->
k3 * tmp2
9387 dVthzb_dT = dDeltVthtempzb_dT - dDelt_vthzb_dT - dDeltVthwzb_dT;
9395 dT2_dVb = - T2 / Xdep * dXdep_dVb;
9403 dT4_dVb = (dT2_dVb + Theta0 * dT3_dVb + dTheta0_dVb * T3)
9405 dT4_dVd = Theta0 * dT3_dVd /
model_.
cox;
9414 { T0 = 1.0 / (3.0 + 8.0 * T4);
9415 n = (1.0 + 3.0 * T4) * T0;
9417 dn_dVb = T0 * dT4_dVb;
9418 dn_dVd = T0 * dT4_dVd;
9423 Vgst = Vgs_eff - Vth;
9425 dVgst_dVd = -dVth_dVd;
9428 T10 = 2.0 * n * Vtm;
9429 VgstNVt = Vgst / T10;
9435 { Vgsteff_local = Vgst;
9439 dVgsteff_dVd = -dVth_dVd + T0 * dVbseff_dVd;
9440 dVgsteff_dVb = T0 * dVbseff_dVb;
9441 dVgsteff_dVe = T0 * dVbseff_dVe;
9443 dVgsteff_dT = -dVth_dT + T0 * dVbseff_dT;
9451 T3 = Vgsteff_local / (n * Vtm) ;
9453 T1 = -T3 * (dVth_dVb + T0 * Vtm * dn_dVb);
9455 dVgsteff_dVd = -T3 * (dVth_dVd + T0 * Vtm * dn_dVd)+
9457 dVgsteff_dVe = T1 * dVbseff_dVe;
9458 dVgsteff_dVb = T1 * dVbseff_dVb;
9460 dVgsteff_dT = -T3 * (dVth_dT + T0 * dVtm_dT * n)
9461 + Vgsteff_local / Temp+ T1 * dVbseff_dT;
9466 { ExpVgst = exp(VgstNVt);
9467 T1 = T10 * log(1.0 + ExpVgst);
9469 dT1_dVg = ExpVgst / (1.0 + ExpVgst);
9470 dT1_dVb = -dT1_dVg * (dVth_dVb + Vgst / n * dn_dVb)
9472 dT1_dVd = -dT1_dVg * (dVth_dVd + Vgst / n * dn_dVd)
9476 dT1_dT = -dT1_dVg * (dVth_dT + Vgst * T3) + T1 * T3;
9481 T2 = 1.0 - T10 * dT2_dVg;
9482 dT2_dVd = -dT2_dVg * (dVth_dVd - 2.0 * Vtm * ExpArg * dn_dVd)
9483 + (T2 - 1.0) / n * dn_dVd;
9484 dT2_dVb = -dT2_dVg * (dVth_dVb - 2.0 * Vtm * ExpArg * dn_dVb)
9485 + (T2 - 1.0) / n * dn_dVb;
9487 dT2_dT = -dT2_dVg * (dVth_dT - ExpArg * T10 * T3);
9491 Vgsteff_local = T1 / T2;
9494 T4 = (T2 * dT1_dVb - T1 * dT2_dVb) / T3;
9495 dVgsteff_dVb = T4 * dVbseff_dVb;
9496 dVgsteff_dVe = T4 * dVbseff_dVe;
9497 dVgsteff_dVg = (T2 * dT1_dVg - T1 * dT2_dVg) / T3 *
dVgs_eff_dVg
9499 dVgsteff_dVd = (T2 * dT1_dVd - T1 * dT2_dVd) / T3 +
9502 dVgsteff_dT = (T2 * dT1_dT - T1 * dT2_dT) / T3 +
9507 Vgst2Vtm = Vgsteff_local + 2.0 * Vtm;
9509 dVgst2Vtm_dT = dVgsteff_dT + 2.0 * dVtm_dT;
9510 else dVgst2Vtm_dT = 0.0;
9514 T9 = sqrtPhis - sqrtPhi;
9521 { T0 = 1.0 / (6.0e-8 - 2.0 * Weff);
9522 Weff = 2.0e-8 * (4.0e-8 - Weff) * T0;
9530 { Rds = rds0 * (1.0 + T0);
9534 if (
selfheat && (Rds!=0.0)) dRds_dT = (1.0 + T0) * drds0_dT;
9539 { T1 = 1.0 / (17.0 + 20.0 * T0);
9540 Rds = rds0 * (0.8 + T0) * T1;
9545 if (
selfheat && (Rds!=0.0)) dRds_dT = (0.8 + T0) * T1 * drds0_dT;
9552 Abulk0 = Abulk_local = 1.0;
9553 dAbulk0_dVb = dAbulk_dVg = dAbulk_dVb = 0.0;
9558 T11 = 1.0 / (1.0 + T10);
9562 T12 = 1.0 / (0.8 + T10);
9563 T11 = (17.0 + 20.0 * T10) * T12;
9570 T13 = (Vbsh * T11) / T10;
9571 dT13_dVb = (Vbsh * dT11_dVb + T11 * dVbsh_dVb) / T10;
9575 T14 = 1 / sqrt(1-T13);
9576 T10 = 0.5 * T14 / (1-T13);
9577 dT14_dVb = T10 * dT13_dVb;
9580 T11 = 1.0 / (1.0 - 1.043406*T13);
9581 T14 = (6.00167 - 6.26044 * T13) * T11;
9582 T10 = 0.001742 * T11 * T11;
9583 dT14_dVb = T10 * dT13_dVb;
9590 dT1_dVb = T10 * dT14_dVb;
9593 tmp1 = Leff + 2.0 * T9;
9599 dT2_dVb = -T9 * tmp2 / tmp1 / Xdep * dXdep_dVb;
9603 Abulk0 = 1 + T1 * T2;
9604 dAbulk0_dVb = T1 * dT2_dVb + T2 * dT1_dVb;
9607 dAbulk_dVg = -T1 * T8;
9608 Abulk_local = Abulk0 + dAbulk_dVg * Vgsteff_local;
9610 dAbulk_dVb = dAbulk0_dVb
9611 - T8 * Vgsteff_local * (dT1_dVb + 3.0 * T1 * dT2_dVb / tmp2);
9616 T9 = 1.0 / (3.0 - 200.0 * Abulk0);
9617 Abulk0 = (0.02 - Abulk0) * T9;
9618 dAbulk0_dVb *= T9 * T9;
9621 if (Abulk_local < 0.01)
9623 T9 = 1.0 / (3.0 - 200.0 * Abulk_local);
9624 Abulk_local = (0.02 - Abulk_local) * T9;
9625 dAbulk_dVb *= T9 * T9;
9630 Abulk = Abulk_local;
9634 { T0 = Vgsteff_local + Vth + Vth;
9635 T2 = ua + uc * Vbseff;
9637 T5 = T3 * (T2 + ub * T3);
9638 dDenomi_dVg = (T2 + 2.0 * ub * T3) /
model_.
tox;
9639 dDenomi_dVd = dDenomi_dVg * 2 * dVth_dVd;
9640 dDenomi_dVb = dDenomi_dVg * 2 * dVth_dVb + uc * T3 ;
9642 dDenomi_dT = dDenomi_dVg * 2 * dVth_dT
9643 + (dua_dT + Vbseff * duc_dT + dub_dT * T3 ) * T3;
9648 { T5 = Vgsteff_local /
model_.
tox * (ua + uc * Vbseff
9650 dDenomi_dVg = (ua + uc * Vbseff + 2.0 * ub * Vgsteff_local
9653 dDenomi_dVb = Vgsteff_local * uc /
model_.
tox ;
9655 dDenomi_dT = Vgsteff_local /
model_.
tox * (dua_dT + Vbseff
9656 * duc_dT + dub_dT * Vgsteff_local /
model_.
tox);
9661 { T0 = Vgsteff_local + Vth + Vth;
9662 T2 = 1.0 + uc * Vbseff;
9664 T4 = T3 * (ua + ub * T3);
9666 dDenomi_dVg = (ua + 2.0 * ub * T3) * T2 /
model_.
tox;
9667 dDenomi_dVd = dDenomi_dVg * 2.0 * dVth_dVd;
9668 dDenomi_dVb = dDenomi_dVg * 2.0 * dVth_dVb + uc * T4 ;
9670 dDenomi_dT = dDenomi_dVg * 2.0 * dVth_dT + (dua_dT + dub_dT * T3)
9671 * T3 * T2 + T4 * Vbseff * duc_dT;
9677 { Denomi = 1.0 + T5;
9680 { T9 = 1.0 / (7.0 + 10.0 * T5);
9681 Denomi = (0.6 + T5) * T9;
9687 else dDenomi_dT = 0.0;
9690 ueff = ueff_local = u0temp / Denomi;
9691 T9 = -ueff_local / Denomi;
9692 dueff_dVg = T9 * dDenomi_dVg;
9693 dueff_dVd = T9 * dDenomi_dVd;
9694 dueff_dVb = T9 * dDenomi_dVb;
9695 if (
selfheat) dueff_dT = T9 * dDenomi_dT + du0temp_dT / Denomi;
9696 else dueff_dT = 0.0;
9700 WVCoxRds = WVCox * Rds;
9705 Esat = 2.0 * vsattemp / ueff_local;
9706 EsatL = Esat * Leff;
9707 T0 = -EsatL /ueff_local;
9708 dEsatL_dVg = T0 * dueff_dVg;
9709 dEsatL_dVd = T0 * dueff_dVd;
9710 dEsatL_dVb = T0 * dueff_dVb;
9712 dEsatL_dT = T0 * dueff_dT + EsatL / vsattemp * dvsattemp_dT;
9725 T1 = T0 -
paramPtr->
a1 * Vgsteff_local - 0.0001;
9726 T2 = sqrt(T1 * T1 + 0.0004 * T0);
9727 Lambda =
paramPtr->
a2 + T0 - 0.5 * (T1 + T2);
9728 dLambda_dVg = 0.5 *
paramPtr->
a1 * (1.0 + T1 / T2);
9733 Lambda = 0.5 * (T1 + T2);
9734 dLambda_dVg = 0.5 *
paramPtr->
a1 * (1.0 + T1 / T2);
9740 { tmp2 = dRds_dVg / Rds + dWeff_dVg / Weff;
9741 tmp3 = dRds_dVb / Rds + dWeff_dVb / Weff;
9744 { tmp2 = dWeff_dVg / Weff;
9745 tmp3 = dWeff_dVb / Weff;
9747 if ((Rds == 0.0) && (Lambda == 1.0))
9748 { T0 = 1.0 / (Abulk_local * EsatL + Vgst2Vtm);
9752 T3 = EsatL * Vgst2Vtm;
9755 dT0_dVg = -(Abulk_local * dEsatL_dVg + EsatL * dAbulk_dVg + 1.0) * T1;
9756 dT0_dVd = -(Abulk_local * dEsatL_dVd) * T1;
9757 dT0_dVb = -(Abulk_local * dEsatL_dVb + EsatL * dAbulk_dVb) * T1;
9759 dT0_dT = -(Abulk_local * dEsatL_dT + dVgst2Vtm_dT) * T1;
9762 dVdsat_dVg = T3 * dT0_dVg + T2 * dEsatL_dVg + EsatL * T0;
9763 dVdsat_dVd = T3 * dT0_dVd + T2 * dEsatL_dVd;
9764 dVdsat_dVb = T3 * dT0_dVb + T2 * dEsatL_dVb;
9766 dVdsat_dT = T3 * dT0_dT + T2 * dEsatL_dT
9767 + EsatL * T0 * dVgst2Vtm_dT;
9768 else dVdsat_dT = 0.0;
9771 { tmp1 = dLambda_dVg / (Lambda * Lambda);
9772 T9 = Abulk_local * WVCoxRds;
9773 T8 = Abulk_local * T9;
9775 T6 = Vgst2Vtm * WVCoxRds;
9776 T0 = 2.0 * Abulk_local * (T9 - 1.0 + 1.0 / Lambda);
9777 dT0_dVg = 2.0 * (T8 * tmp2 - Abulk_local * tmp1
9778 + (2.0 * T9 + 1.0 / Lambda - 1.0) * dAbulk_dVg);
9782 dT0_dVb = 2.0 * (T8 * (2.0 / Abulk_local * dAbulk_dVb + tmp3)
9783 + (1.0 / Lambda - 1.0) * dAbulk_dVb);
9789 tmp4 = dRds_dT / Rds + dvsattemp_dT / vsattemp;
9791 tmp4 = dvsattemp_dT / vsattemp;
9793 dT0_dT = 2.0 * T8 * tmp4;
9795 }
else tmp4 = dT0_dT = 0.0;
9797 T1 = Vgst2Vtm * (2.0 / Lambda - 1.0) + Abulk_local * EsatL + 3.0 * T7;
9799 dT1_dVg = (2.0 / Lambda - 1.0) - 2.0 * Vgst2Vtm * tmp1
9800 + Abulk_local * dEsatL_dVg + EsatL * dAbulk_dVg + 3.0 * (T9
9801 + T7 * tmp2 + T6 * dAbulk_dVg);
9802 dT1_dVb = Abulk_local * dEsatL_dVb + EsatL * dAbulk_dVb
9803 + 3.0 * (T6 * dAbulk_dVb + T7 * tmp3);
9804 dT1_dVd = Abulk_local * dEsatL_dVd;
9808 tmp4 += dVgst2Vtm_dT / Vgst2Vtm;
9809 dT1_dT = (2.0 / Lambda - 1.0) * dVgst2Vtm_dT + Abulk_local
9810 * dEsatL_dT + 3.0 * T7 * tmp4;
9814 T2 = Vgst2Vtm * (EsatL + 2.0 * T6);
9815 dT2_dVg = EsatL + Vgst2Vtm * dEsatL_dVg
9816 + T6 * (4.0 + 2.0 * Vgst2Vtm * tmp2);
9817 dT2_dVb = Vgst2Vtm * (dEsatL_dVb + 2.0 * T6 * tmp3);
9818 dT2_dVd = Vgst2Vtm * dEsatL_dVd;
9820 dT2_dT = Vgst2Vtm * dEsatL_dT + EsatL * dVgst2Vtm_dT
9821 + 2.0 * T6 * (dVgst2Vtm_dT + Vgst2Vtm * tmp4);
9825 T3 = sqrt(T1 * T1 - 2.0 * T0 * T2);
9826 Vdsat = (T1 - T3) / T0;
9828 dVdsat_dVg = (dT1_dVg - (T1 * dT1_dVg - dT0_dVg * T2
9829 - T0 * dT2_dVg) / T3 - Vdsat * dT0_dVg) / T0;
9830 dVdsat_dVb = (dT1_dVb - (T1 * dT1_dVb - dT0_dVb * T2
9831 - T0 * dT2_dVb) / T3 - Vdsat * dT0_dVb) / T0;
9832 dVdsat_dVd = (dT1_dVd - (T1 * dT1_dVd - T0 * dT2_dVd) / T3) / T0;
9834 dVdsat_dT = (dT1_dT - (T1 * dT1_dT - dT0_dT * T2
9835 - T0 * dT2_dT) / T3 - Vdsat * dT0_dT) / T0;
9836 else dVdsat_dT = 0.0;
9842 dT1_dVg = dVdsat_dVg;
9843 dT1_dVd = dVdsat_dVd - 1.0;
9844 dT1_dVb = dVdsat_dVb;
9850 dT2_dVg = T0 * dT1_dVg + T3 * dVdsat_dVg;
9851 dT2_dVd = T0 * dT1_dVd + T3 * dVdsat_dVd;
9852 dT2_dVb = T0 * dT1_dVb + T3 * dVdsat_dVb;
9854 dT2_dT = T0 * dT1_dT + T3 * dVdsat_dT;
9858 Vdseff_local = Vdsat - 0.5 * (T1 + T2);
9859 dVdseff_dVg = dVdsat_dVg - 0.5 * (dT1_dVg + dT2_dVg);
9860 dVdseff_dVd = dVdsat_dVd - 0.5 * (dT1_dVd + dT2_dVd);
9861 dVdseff_dVb = dVdsat_dVb - 0.5 * (dT1_dVb + dT2_dVb);
9864 dVdseff_dT = dVdsat_dT - 0.5 * (dT1_dT + dT2_dT);
9868 if (Vdseff_local >
Vds)
9872 diffVds =
Vds - Vdseff_local;
9876 tmp4 = 1.0 - 0.5 * Abulk_local * Vdsat / Vgst2Vtm;
9877 T9 = WVCoxRds * Vgsteff_local;
9879 T0 = EsatL + Vdsat + 2.0 * T9 * tmp4;
9881 T7 = 2.0 * WVCoxRds * tmp4;
9882 dT0_dVg = dEsatL_dVg + dVdsat_dVg + T7 * (1.0 + tmp2 * Vgsteff_local)
9883 - T8 * (Abulk_local * dVdsat_dVg - Abulk_local * Vdsat / Vgst2Vtm
9884 + Vdsat * dAbulk_dVg);
9885 dT0_dVb = dEsatL_dVb + dVdsat_dVb + T7 * tmp3 * Vgsteff_local
9886 - T8 * (dAbulk_dVb * Vdsat + Abulk_local * dVdsat_dVb);
9887 dT0_dVd = dEsatL_dVd + dVdsat_dVd - T8 * Abulk_local * dVdsat_dVd;
9892 tmp4 = dRds_dT / Rds + dvsattemp_dT / vsattemp;
9894 tmp4 = dvsattemp_dT / vsattemp;
9895 dT0_dT = dEsatL_dT + dVdsat_dT + T7 * tmp4 * Vgsteff_local - T8 *
9896 (Abulk_local * dVdsat_dT - Abulk_local * Vdsat * dVgst2Vtm_dT
9901 T9 = WVCoxRds * Abulk_local;
9902 T1 = 2.0 / Lambda - 1.0 + T9;
9903 dT1_dVg = -2.0 * tmp1 + WVCoxRds * (Abulk_local * tmp2 + dAbulk_dVg);
9904 dT1_dVb = dAbulk_dVb * WVCoxRds + T9 * tmp3;
9911 dVasat_dVg = (dT0_dVg - Vasat * dT1_dVg) / T1;
9912 dVasat_dVb = (dT0_dVb - Vasat * dT1_dVb) / T1;
9913 dVasat_dVd = dT0_dVd / T1;
9915 dVasat_dT = (dT0_dT - Vasat * dT1_dT) / T1;
9922 dT0_dVb = -T0 / Abulk_local * dAbulk_dVb;
9923 dT0_dVg = -T0 / Abulk_local * dAbulk_dVg;
9925 T2 = Vgsteff_local / EsatL;
9926 T1 = Leff * (Abulk_local + T2);
9927 dT1_dVg = Leff * ((1.0 - T2 * dEsatL_dVg) / EsatL + dAbulk_dVg);
9928 dT1_dVb = Leff * (dAbulk_dVb - T2 * dEsatL_dVb / EsatL);
9929 dT1_dVd = -T2 * dEsatL_dVd / Esat;
9931 dT1_dT = -T2 * dEsatL_dT / Esat;
9936 VACLM = T9 * diffVds;
9937 dVACLM_dVg = T0 * dT1_dVg * diffVds - T9 * dVdseff_dVg
9938 + T1 * diffVds * dT0_dVg;
9939 dVACLM_dVb = (dT0_dVb * T1 + T0 * dT1_dVb) * diffVds
9941 dVACLM_dVd = T0 * dT1_dVd * diffVds + T9 * (1.0 - dVdseff_dVd);
9943 dVACLM_dT = T0 * dT1_dT * diffVds - T9 * dVdseff_dT;
9949 dVACLM_dVd = dVACLM_dVg = dVACLM_dVb = dVACLM_dT = 0.0;
9954 { T8 = Abulk_local * Vdsat;
9957 dT0_dVg = Vgst2Vtm * Abulk_local * dVdsat_dVg + T8
9958 + Vgst2Vtm * Vdsat * dAbulk_dVg;
9959 dT1_dVg = 1.0 + Abulk_local * dVdsat_dVg + Vdsat * dAbulk_dVg;
9960 dT1_dVb = dAbulk_dVb * Vdsat + Abulk_local * dVdsat_dVb;
9961 dT0_dVb = Vgst2Vtm * dT1_dVb;
9962 dT1_dVd = Abulk_local * dVdsat_dVd;
9963 dT0_dVd = Vgst2Vtm * dT1_dVd;
9966 dT0_dT = dVgst2Vtm_dT * T8 + Abulk_local * Vgst2Vtm * dVdsat_dT;
9967 dT1_dT = dVgst2Vtm_dT + Abulk_local * dVdsat_dT;
9969 dT0_dT = dT1_dT = 0.0;
9973 VADIBL = (Vgst2Vtm - T0 / T1) / T2;
9974 dVADIBL_dVg = (1.0 - dT0_dVg / T1 + T0 * dT1_dVg / T9) / T2;
9975 dVADIBL_dVb = (-dT0_dVb / T1 + T0 * dT1_dVb / T9) / T2;
9976 dVADIBL_dVd = (-dT0_dVd / T1 + T0 * dT1_dVd / T9) / T2;
9978 dVADIBL_dT = (dVgst2Vtm_dT - dT0_dT/T1 + T0*dT1_dT/T9) / T2;
9984 { T3 = 1.0 / (1.0 + T7);
9990 else dVADIBL_dT = 0.0;
9994 { T4 = 1.0 / (0.8 + T7);
9995 T3 = (17.0 + 20.0 * T7) * T4;
9997 dVADIBL_dVb = dVADIBL_dVb * T3
10001 else dVADIBL_dT = 0.0;
10007 dVADIBL_dVd = dVADIBL_dVg = dVADIBL_dVb = dVADIBL_dT = 0.0;
10013 T9 = T8 * Vgsteff_local;
10016 dT0_dVg = T8 * (1.0 - Vgsteff_local * dEsatL_dVg / EsatL);
10017 dT0_dVb = -T9 * dEsatL_dVb / EsatL;
10018 dT0_dVd = -T9 * dEsatL_dVd / EsatL;
10020 dT0_dT = -T9 * dEsatL_dT / EsatL;
10025 { T1 = 1.0 / (17.0 + 20.0 * T9);
10026 T0 = (0.8 + T9) * T1;
10028 dT0_dVg = T8 * (1.0 - Vgsteff_local * dEsatL_dVg / EsatL) * T1;
10031 dT0_dVb = -T9 * dEsatL_dVb;
10032 dT0_dVd = -T9 * dEsatL_dVd;
10034 dT0_dT = -T9 * dEsatL_dT;
10039 tmp1 = VACLM * VACLM;
10040 tmp2 = VADIBL * VADIBL;
10041 tmp3 = VACLM + VADIBL;
10043 T1 = VACLM * VADIBL / tmp3;
10045 dT1_dVg = (tmp1 * dVADIBL_dVg + tmp2 * dVACLM_dVg) / tmp3;
10046 dT1_dVd = (tmp1 * dVADIBL_dVd + tmp2 * dVACLM_dVd) / tmp3;
10047 dT1_dVb = (tmp1 * dVADIBL_dVb + tmp2 * dVACLM_dVb) / tmp3;
10049 dT1_dT = (tmp1 * dVADIBL_dT + tmp2 * dVACLM_dT ) / tmp3;
10053 Va = Vasat + T0 * T1;
10054 dVa_dVg = dVasat_dVg + T1 * dT0_dVg + T0 * dT1_dVg;
10055 dVa_dVd = dVasat_dVd + T1 * dT0_dVd + T0 * dT1_dVd;
10056 dVa_dVb = dVasat_dVb + T1 * dT0_dVb + T0 * dT1_dVb;
10058 dVa_dT = dVasat_dT + T1 * dT0_dT + T0 * dT1_dT;
10064 beta = ueff_local * CoxWovL;
10065 dbeta_dVg = CoxWovL * dueff_dVg + beta * dWeff_dVg / Weff ;
10066 dbeta_dVd = CoxWovL * dueff_dVd;
10067 dbeta_dVb = CoxWovL * dueff_dVb + beta * dWeff_dVb / Weff ;
10068 if (
selfheat) dbeta_dT = CoxWovL * dueff_dT;
10069 else dbeta_dT = 0.0;
10071 T0 = 1.0 - 0.5 * Abulk_local * Vdseff_local / Vgst2Vtm;
10072 dT0_dVg = -0.5 * (Abulk_local * dVdseff_dVg
10073 - Abulk_local * Vdseff_local / Vgst2Vtm + Vdseff_local
10074 * dAbulk_dVg) / Vgst2Vtm;
10075 dT0_dVd = -0.5 * Abulk_local * dVdseff_dVd / Vgst2Vtm;
10076 dT0_dVb = -0.5 * (Abulk_local * dVdseff_dVb + dAbulk_dVb *
10077 Vdseff_local) / Vgst2Vtm;
10079 dT0_dT = -0.5 * (Abulk_local * dVdseff_dT
10080 - Abulk_local * Vdseff_local / Vgst2Vtm
10081 * dVgst2Vtm_dT) / Vgst2Vtm;
10085 fgche1 = Vgsteff_local * T0;
10086 dfgche1_dVg = Vgsteff_local * dT0_dVg + T0;
10087 dfgche1_dVd = Vgsteff_local * dT0_dVd;
10088 dfgche1_dVb = Vgsteff_local * dT0_dVb;
10089 if (
selfheat) dfgche1_dT = Vgsteff_local * dT0_dT;
10090 else dfgche1_dT = 0.0;
10092 T9 = Vdseff_local / EsatL;
10094 dfgche2_dVg = (dVdseff_dVg - T9 * dEsatL_dVg) / EsatL;
10095 dfgche2_dVd = (dVdseff_dVd - T9 * dEsatL_dVd) / EsatL;
10096 dfgche2_dVb = (dVdseff_dVb - T9 * dEsatL_dVb) / EsatL;
10098 dfgche2_dT = (dVdseff_dT - T9 * dEsatL_dT) / EsatL;
10102 gche = beta * fgche1 / fgche2;
10104 dgche_dVg = (beta * dfgche1_dVg + fgche1 * dbeta_dVg
10105 - gche * dfgche2_dVg) / fgche2;
10106 dgche_dVd = (beta * dfgche1_dVd + fgche1 * dbeta_dVd
10107 - gche * dfgche2_dVd) / fgche2;
10108 dgche_dVb = (beta * dfgche1_dVb + fgche1 * dbeta_dVb
10109 - gche * dfgche2_dVb) / fgche2;
10111 dgche_dT = (beta * dfgche1_dT + fgche1 * dbeta_dT
10112 - gche * dfgche2_dT) / fgche2;
10116 T0 = 1.0 + gche * Rds;
10117 T9 = Vdseff_local / T0;
10123 dIdl_dVg = (gche * dVdseff_dVg + T9 * dgche_dVg) / T0
10124 - Idl * gche / T0 * dRds_dVg ;
10125 dIdl_dVd = (gche * dVdseff_dVd + T9 * dgche_dVd) / T0;
10126 dIdl_dVb = (gche * dVdseff_dVb + T9 * dgche_dVb
10127 - Idl * dRds_dVb * gche) / T0;
10129 dIdl_dT = (gche * dVdseff_dT + T9 * dgche_dT
10130 - Idl * dRds_dT * gche) / T0;
10138 Gm0 = T0 * dIdl_dVg - Idl * ( dVdseff_dVg + T9 * dVa_dVg) / Va;
10139 Gmb0 = T0 * dIdl_dVb - Idl * ( dVdseff_dVb + T9 * dVa_dVb) / Va;
10140 Gds0 = T0 * dIdl_dVd + Idl * (1.0 - dVdseff_dVd - T9 * dVa_dVd) / Va;
10143 tmp1 = Gds0 + Gm0 * dVgsteff_dVd;
10144 tmp2 = Gmb0 + Gm0 * dVgsteff_dVb;
10149 GmT0 = T0 * dIdl_dT - Idl * (dVdseff_dT + T9 * dVa_dT) / Va;
10155 Gm = (Gm0 * dVgsteff_dVg+ Gmb0 * dVbseff_dVg) /
nseg;
10156 Gmb = (Gm0 * dVgsteff_dVb + Gmb0 * dVbseff_dVb) /
nseg;
10157 Gds = (Gm0 * dVgsteff_dVd+ Gmb0 * dVbseff_dVd + Gds0) /
nseg;
10158 Gme = (Gm0 * dVgsteff_dVe + Gmb0 * dVbseff_dVe) /
nseg;
10160 GmT = (Gm0 * dVgsteff_dT+ Gmb0 * dVbseff_dT + GmT0) /
nseg;
10173 { Idgidl = Gdgidld = Gdgidlg = 0.0;
10182 T3 = Idgidl / T1 * (T2 + 1);
10183 Gdgidld = T3 * dT1_dVd;
10184 Gdgidlg = T3 * dT1_dVg;
10189 Gdgidld = T3 * dT1_dVd;
10190 Gdgidlg = T3 * dT1_dVg;
10199 { Isgidl = Gsgidlg = 0;
10208 T3 = Isgidl / T1 * (T2 + 1);
10209 Gsgidlg = T3 * dT1_dVg;
10214 Gsgidlg = T3 * dT1_dVg;
10229 dT0_dVb = 1.0 / NVtm1;
10231 dT0_dT = -
Vbs / NVtm1 / NVtm1 * dNVtm1_dT;
10234 CEXP(T0, ExpVbsNVtm, T1);
10235 dExpVbsNVtm_dVb = T1 * dT0_dVb;
10237 dExpVbsNVtm_dT = T1 * dT0_dT;
10239 dExpVbsNVtm_dT = 0;
10242 dT0_dVb = 1.0 / NVtm1;
10243 dT0_dVd = -dT0_dVb;
10245 dT0_dT = -
Vbd / NVtm1 / NVtm1 * dNVtm1_dT;
10248 CEXP(T0, ExpVbdNVtm, T1);
10249 dExpVbdNVtm_dVb = T1 * dT0_dVb;
10250 dExpVbdNVtm_dVd = -dExpVbdNVtm_dVb;
10252 dExpVbdNVtm_dT = T1 * dT0_dT;
10254 dExpVbdNVtm_dT = 0;
10258 Ibs1 = dIbs1_dVb = dIbs1_dT = Ibd1 = dIbd1_dVb
10259 = dIbd1_dVd = dIbd1_dT = 0;
10264 dT0_dT = WsTsi * djdif_dT;
10267 Ibs1 = T0 * (ExpVbsNVtm - 1);
10268 dIbs1_dVb = T0 * dExpVbsNVtm_dVb;
10270 dIbs1_dT = T0 * dExpVbsNVtm_dT + (ExpVbsNVtm - 1) * dT0_dT;
10276 dT0_dT = WdTsi * djdif_dT;
10279 Ibd1 = T0 * (ExpVbdNVtm - 1);
10280 dIbd1_dVb = T0 * dExpVbdNVtm_dVb;
10281 dIbd1_dVd = -dIbd1_dVb;
10283 dIbd1_dT = T0 * dExpVbdNVtm_dT + (ExpVbdNVtm -1) * dT0_dT;
10300 dNVtmf_dT = dNVtmr_dT = 0;
10303 Ibs2 = dIbs2_dVb = dIbs2_dT = 0;
10304 Ibd2 = dIbd2_dVb = dIbd2_dVd = dIbd2_dT = 0;
10311 dT10_dVb = T4 * T2;
10313 dT10_dT = - T4 * T2 *
Vbs / NVtmf * dNVtmf_dT ;
10314 else dT10_dT = 0.0;
10324 dT11_dVb = dT11_dT = 0;
10331 dT0_dT = -T0 / NVtmr * dNVtmr_dT;
10336 dT11_dVb = -T2 * dT0_dVb;
10338 dT11_dT = -T2 * dT0_dT;
10342 Ibs2 = T3 * (T10 + T11);
10343 dIbs2_dVb = T3 * (dT10_dVb + dT11_dVb);
10345 dIbs2_dT = T3 * (dT10_dT + dT11_dT) + WsTsi * (T10 + T11)
10353 dT10_dVb = T4 * T2;
10356 dT10_dT = - T4 * T2 *
Vbd / NVtmf * dNVtmf_dT ;
10370 dT11_dVb = dT11_dT = 0;
10377 dT0_dT = -T0 / NVtmr * dNVtmr_dT;
10382 dT11_dVb = -T2 * dT0_dVb;
10384 dT11_dT = -T2 * dT0_dT;
10389 Ibd2 = T3 * (T10 + T11);
10390 dIbd2_dVb = T3 * (dT10_dVb + dT11_dVb);
10392 dIbd2_dVd = -dIbd2_dVb;
10394 dIbd2_dT = T3 * (dT10_dT + dT11_dT) + WdTsi * (T10 + T11)
10404 Ibs3 = dIbs3_dVb = dIbs3_dVd = dIbs3_dT = 0.0;
10405 Ibd3 = dIbd3_dVb = dIbd3_dVd = dIbd3_dT = 0.0;
10406 Ibsdif = dIbsdif_dVb = dIbsdif_dT = 0;
10407 Ibddif = dIbddif_dVb = dIbddif_dVd = dIbddif_dT = 0;
10408 ic = Ic = Gcd = Gcb = GcT = 0.0;
10418 if ((Ehlis = Ahli * (ExpVbsNVtm - 1)) < 1e-5) {
10419 Ehlis = dEhlis_dVb = dEhlis_dT = 0;
10421 dEhlisFactor_dVb = dEhlisFactor_dT = 0;
10424 dEhlis_dVb = Ahli * dExpVbsNVtm_dVb;
10426 dEhlis_dT = Ahli * dExpVbsNVtm_dT + (ExpVbsNVtm - 1) * dAhli_dT;
10429 EhlisFactor = 1.0 / sqrt(1 + Ehlis);
10430 T0 = -0.5 * EhlisFactor / (1 + Ehlis);
10431 dEhlisFactor_dVb = T0 * dEhlis_dVb;
10433 dEhlisFactor_dT = T0 * dEhlis_dT;
10435 dEhlisFactor_dT = 0;
10439 if ((Ehlid = Ahli * (ExpVbdNVtm - 1)) < 1e-5) {
10440 Ehlid = dEhlid_dVb = dEhlid_dVd = dEhlid_dT = 0;
10442 dEhlidFactor_dVb = dEhlidFactor_dVd = dEhlidFactor_dT = 0;
10445 dEhlid_dVb = Ahli * dExpVbdNVtm_dVb;
10446 dEhlid_dVd = -dEhlid_dVb;
10448 dEhlid_dT = Ahli * dExpVbdNVtm_dT + (ExpVbdNVtm - 1) * dAhli_dT;
10451 EhlidFactor = 1.0 / sqrt(1 + Ehlid);
10452 T0 = -0.5 * EhlidFactor / (1 + Ehlid);
10453 dEhlidFactor_dVb = T0 * dEhlid_dVb;
10454 dEhlidFactor_dVd = -dEhlidFactor_dVb;
10456 dEhlidFactor_dT = T0 * dEhlid_dT;
10458 dEhlidFactor_dT = 0;
10466 dT1_dT = T0 * dIen_dT;
10470 Ibs3 = T1 * (ExpVbsNVtm - 1) * EhlisFactor;
10471 dIbs3_dVb = T1 * (dExpVbsNVtm_dVb * EhlisFactor
10472 + (ExpVbsNVtm - 1) * dEhlisFactor_dVb);
10475 dIbs3_dT = dT1_dT * (ExpVbsNVtm - 1) * EhlisFactor
10476 + T1 * (dExpVbsNVtm_dT * EhlisFactor
10477 + (ExpVbsNVtm - 1) * dEhlisFactor_dT);
10481 Ibd3 = T1 * (ExpVbdNVtm - 1) * EhlidFactor;
10482 dIbd3_dVb = T1 * (dExpVbdNVtm_dVb * EhlidFactor
10483 + (ExpVbdNVtm - 1) * dEhlidFactor_dVb);
10484 dIbd3_dVd = -dIbd3_dVb;
10486 dIbd3_dT = dT1_dT * (ExpVbdNVtm - 1) * EhlidFactor
10487 + T1 * (dExpVbdNVtm_dT * EhlidFactor
10488 + (ExpVbdNVtm - 1) * dEhlidFactor_dT);
10500 Ibsdif = Iendif * (ExpVbsNVtm - 1) * EhlisFactor;
10501 dIbsdif_dVb = Iendif * (dExpVbsNVtm_dVb * EhlisFactor
10502 + (ExpVbsNVtm - 1) * dEhlisFactor_dVb);
10504 dIbsdif_dT = dIendif_dT * (ExpVbsNVtm - 1) * EhlisFactor
10505 + Iendif * (dExpVbsNVtm_dT * EhlisFactor
10506 + (ExpVbsNVtm - 1) * dEhlisFactor_dT);
10510 Ibddif = Iendif * (ExpVbdNVtm - 1) * EhlidFactor;
10511 dIbddif_dVb = Iendif * (dExpVbdNVtm_dVb * EhlidFactor
10512 + (ExpVbdNVtm - 1) * dEhlidFactor_dVb);
10513 dIbddif_dVd = -dIbddif_dVb;
10515 dIbddif_dT = dIendif_dT * (ExpVbdNVtm - 1) * EhlidFactor
10516 + Iendif * (dExpVbdNVtm_dT * EhlidFactor
10517 + (ExpVbdNVtm - 1) * dEhlidFactor_dT);
10523 ic = Ic = Gcd = Gcb = GcT = 0.0;
10531 T1 = Ehlis + Ehlid;
10532 dT1_dVb = dEhlis_dVb + dEhlid_dVb;
10533 dT1_dVd = dEhlid_dVd;
10535 dT1_dT = dEhlis_dT + dEhlid_dT;
10539 T3 = sqrt(T0 * T0 + 4 * T1);
10540 dT3_dVb = 0.5 / T3 * (2 * T0 * dT0_dVb + 4 * dT1_dVb);
10541 dT3_dVd = 0.5 / T3 * (2 * T0 * dT0_dVd + 4 * dT1_dVd);
10543 dT3_dT = 2 * dT1_dT / T3;
10547 T2 = (T0 + T3) / 2.0;
10548 dT2_dVb = (dT0_dVb + dT3_dVb) / 2.0;
10549 dT2_dVd = (dT0_dVd + dT3_dVd) / 2.0;
10551 dT2_dT = dT3_dT /2.0;
10558 dE2ndFactor_dVb = dE2ndFactor_dVd = dE2ndFactor_dT = 0;
10562 E2ndFactor = 1.0 / T2;
10563 dE2ndFactor_dVb = -E2ndFactor / T2 * dT2_dVb;
10564 dE2ndFactor_dVd = -E2ndFactor / T2 * dT2_dVd;
10566 dE2ndFactor_dT = -E2ndFactor / T2 * dT2_dT;
10568 dE2ndFactor_dT = 0;
10577 = T0 * (ExpVbsNVtm - ExpVbdNVtm) * E2ndFactor;
10578 Gcb = T0 * ((dExpVbsNVtm_dVb - dExpVbdNVtm_dVb) * E2ndFactor
10579 + (ExpVbsNVtm - ExpVbdNVtm) * dE2ndFactor_dVb);
10580 Gcd = T0 * (-dExpVbdNVtm_dVd * E2ndFactor
10581 + (ExpVbsNVtm - ExpVbdNVtm) * dE2ndFactor_dVd);
10583 GcT = T0 * (dExpVbsNVtm_dT - dExpVbdNVtm_dT) * E2ndFactor
10584 + dT0_dT * (ExpVbsNVtm - ExpVbdNVtm) * E2ndFactor
10585 + T0 * (ExpVbsNVtm - ExpVbdNVtm) * dE2ndFactor_dT;
10594 { Ibs4 = Ibd4 = dIbs4_dVb = dIbs4_dT = dIbd4_dVb
10595 = dIbd4_dVd = dIbd4_dT = 0;
10605 Ibs4 = T3 * (1- T1);
10607 dIbs4_dVb = dIbs4_dT = 0;
10616 Ibs4 = T3 * (1- T1);
10617 dIbs4_dVb = -T3 * T2 * dT0_dVb;
10619 dIbs4_dT = (1 - T1) * WsTsi * djtun_dT;
10631 Ibd4 = T3 * (1- T1);
10633 dIbd4_dVb = dIbd4_dT = 0;
10644 Ibd4 = T3 * (1- T1);
10645 dIbd4_dVb = -T3 * T2 * dT0_dVb;
10647 dIbd4_dVd = -dIbd4_dVb;
10650 dIbd4_dT = (1 - T1) * WdTsi * djtun_dT;
10655 itun = - Ibd3 - Ibd4;
10656 ibs = Ibs = Ibs1 + Ibs2 + Ibs3 + Ibs4;
10657 ibd = Ibd = Ibd1 + Ibd2 + Ibd3 + Ibd4;
10659 Gjsb = dIbs1_dVb + dIbs2_dVb + dIbs3_dVb + dIbs4_dVb;
10662 GjsT = dIbs1_dT + dIbs2_dT + dIbs3_dT + dIbs4_dT;
10666 Gjdb = dIbd1_dVb + dIbd2_dVb + dIbd3_dVb + dIbd4_dVb;
10668 Gjdd = dIbd1_dVd + dIbd2_dVd + dIbd3_dVd + dIbd4_dVd;
10670 GjdT = dIbd1_dT + dIbd2_dT + dIbd3_dT + dIbd4_dT;
10677 igidl= Idgidl = Gdgidld = Gdgidlg = 0.0;
10678 Isgidl = Gsgidlg = 0;
10683 ic = Ic = Gcd = Gcb = GcT = 0.0;
10696 Vgb = Vgs_eff -
Vbs;
10704 T3 = Vfb - Vgs_eff + Vbs -
DELTA_3;
10710 T0 = sqrt(T3 * T3 - 4.0 * DELTA_3 * Vfb);
10711 dT0_dVg = 1.0/(2.0 * T0) * 2.0*T3 * dT3_dVg;
10712 dT0_dVb = 0.5*(1.0/T0) * 2.0*T3 * dT3_dVb;
10715 T0 = sqrt(T3 * T3 + 4.0 * DELTA_3 * Vfb);
10716 dT0_dVg = 1.0/(2.0 * T0) * 2.0*T3 * dT3_dVg;
10717 dT0_dVb = 0.5*(1.0/T0) * 2.0*T3 * dT3_dVb;
10720 Vfbeff = Vfb - 0.5 * (T3 + T0);
10721 dVfbeff_dVg = -0.5 * (dT3_dVg + dT0_dVg);
10722 dVfbeff_dVb = -0.5 * (dT3_dVb + dT0_dVb);
10724 Voxacc = Vfb - Vfbeff;
10725 dVoxacc_dVg = -dVfbeff_dVg;
10727 dVoxacc_dVb = -dVfbeff_dVb;
10729 Voxacc = dVoxacc_dVg = dVoxacc_dVb = 0.0;
10731 T0 = Vgs_eff - Vgsteff_local - Vfbeff - Vbseff;
10734 dT0_dVd = -dVgsteff_dVd - dVbseff_dVd;
10735 dT0_dVb = -dVgsteff_dVb - dVfbeff_dVb - dVbseff_dVb;
10736 dT0_dVe = -dVgsteff_dVe - dVbseff_dVe;
10739 dT0_dT = -dVgsteff_dT - dVbseff_dT;
10742 Voxdepinv = dVoxdepinv_dVg
10763 dT1_dVg = T2 * dT0_dVg;
10764 dT1_dVd = T2 * dT0_dVd;
10765 dT1_dVb = T2 * dT0_dVb;
10766 dT1_dVe = T2 * dT0_dVe;
10768 dT1_dT = T2 * dT0_dT;
10771 Voxdepinv = Vgs_eff - (T1*T1 +
Vbs) - Vfb;
10773 dVoxdepinv_dVd = -(2.0*T1*dT1_dVd);
10774 dVoxdepinv_dVb = -(2.0*T1*dT1_dVb + 1);
10775 dVoxdepinv_dVe = -(2.0*T1*dT1_dVe);
10777 dVoxdepinv_dT = -(2.0*T1*dT1_dT);
10794 { Vaux = T0 * log(1.0 +
MIN_EXPL);
10795 dVaux_dVg = dVaux_dVd = dVaux_dVb = 0.0;
10798 { ExpVxNVt = exp(VxNVt);
10799 Vaux = T0 * log(1.0 + ExpVxNVt);
10800 dVaux_dVg = ExpVxNVt / (1.0 + ExpVxNVt);
10801 dVaux_dVd = -dVaux_dVg * 0.0;
10802 dVaux_dVb = -dVaux_dVg * 0.0;
10806 T2 = Vgs_eff * Vaux;
10808 dT2_dVd = Vgs_eff * dVaux_dVd;
10809 dT2_dVb = Vgs_eff * dVaux_dVb;
10816 - T4 * Voxdepinv * Voxdepinv);
10820 dT6_dVg = dT6_dVd = dT6_dVb = 0.0;
10824 dT6_dVg = dT6_dVd = dT6_dVb = 0.0;
10828 dT6_dVg = T6 * T12 * (T3 - 2.0 * T4 * Voxdepinv);
10829 dT6_dVd = dT6_dVg * dVoxdepinv_dVd;
10830 dT6_dVb = dT6_dVg * dVoxdepinv_dVb;
10831 dT6_dVg *= dVoxdepinv_dVg;
10834 Igc = T11 * T2 * T6;
10835 dIgc_dVg = T11 * (T2 * dT6_dVg + T6 * dT2_dVg);
10836 dIgc_dVd = T11 * (T2 * dT6_dVd + T6 * dT2_dVd);
10837 dIgc_dVb = T11 * (T2 * dT6_dVb + T6 * dT2_dVb);
10840 T8 = T7 * T7 + 2.0e-4;
10856 T1 = T9 - 1.0 + 1.0e-4;
10857 T10 = (T1 - T7) / T8;
10859 - (T1 - T7) * dT8_dVd) / T0;
10860 Igcs_local = Igc * T10;
10861 dIgcs_dVg = dIgc_dVg * T10;
10862 dIgcs_dVd = dIgc_dVd * T10 + Igc * dT10_dVd;
10863 dIgcs_dVb = dIgc_dVb * T10;
10865 T1 = T9 - 1.0 - 1.0e-4;
10866 T10 = (T7 * T9 - T1) / T8;
10868 * dT9_dVd - T10 * dT8_dVd) / T8;
10869 Igcd_local = Igc * T10;
10870 dIgcd_dVg = dIgc_dVg * T10;
10871 dIgcd_dVd = dIgc_dVd * T10 + Igc * dT10_dVd;
10872 dIgcd_dVb = dIgc_dVb * T10;
10877 gIgcsb = dIgcs_dVb * dVbseff_dVb;
10881 gIgcdb = dIgcd_dVb * dVbseff_dVb;
10885 vgs_eff = sqrt(T0 * T0 + 1.0e-4);
10886 dvgs_eff_dvg = T0 / vgs_eff;
10888 T2 =
vgs * vgs_eff;
10889 dT2_dVg =
vgs * dvgs_eff_dvg + vgs_eff;
10896 vgs_eff * vgs_eff);
10907 dT6_dVg = T6 * T12 * (T3 - 2.0 * T4 * vgs_eff)
10910 Igs_local = T11 * T2 * T6;
10911 dIgs_dVg = T11 * (T2 * dT6_dVg + T6 * dT2_dVg);
10912 dIgs_dVs = -dIgs_dVg;
10916 vgd_eff = sqrt(T0 * T0 + 1.0e-4);
10917 dvgd_eff_dvg = T0 / vgd_eff;
10919 T2 =
vgd * vgd_eff;
10920 dT2_dVg =
vgd * dvgd_eff_dvg + vgd_eff;
10922 - T4 * vgd_eff * vgd_eff);
10933 dT6_dVg = T6 * T12 * (T3 - 2.0 * T4 * vgd_eff)
10936 Igd_local = T11 * T2 * T6;
10937 dIgd_dVg = T11 * (T2 * dT6_dVg + T6 * dT2_dVg);
10938 dIgd_dVd = -dIgd_dVg;
10969 Voxeff = T0 - 0.5 * (T1 + T3);
10970 dVoxeff_dVox = 0.5 * (1.0 + T1 / T3);
10973 dVox_dVg = dVoxdepinv_dVg * dVoxeff_dVox;
10974 dVox_dVd = dVoxdepinv_dVd * dVoxeff_dVox;
10975 dVox_dVb = dVoxdepinv_dVb * dVoxeff_dVox;
10976 dVox_dVe = dVoxdepinv_dVe * dVoxeff_dVox;
10977 dVox_dT = dVoxdepinv_dT * dVoxeff_dVox;
10986 dT1_dT = T2 * dT0_dT;
10989 dVaux_dVg = T2 / (1 + T1) * dVox_dVg;
10990 dVaux_dVd = T2 / (1 + T1) * dVox_dVd;
10991 dVaux_dVb = T2 / (1 + T1) * dVox_dVb;
10992 dVaux_dVe = T2 / (1 + T1) * dVox_dVe;
10994 dVaux_dT = T2 / (1 + T1) * dVox_dT;
11003 dT0_dVox = dT0_dT = 0.0;
11008 dT0_dVox = dT0_dT = 0.0;
11012 T1 = Leff * Weff * 3.7622e-7 * OxideRatio /
nseg;
11018 T6 = T2*(T3 - T4 * Vox) / T0;
11019 if (
selfheat) dT6_dT = -T2 * T4 * dVox_dT / T0 - T6/T0 * dT0_dT;
11022 dT5_dVg = -T7 * dVox_dVg * T2 / T0 * (T4 + (T3 - T4 * Vox)
11024 dT5_dVd = -T7 * dVox_dVd * T2 / T0 * (T4 + (T3 - T4 * Vox)
11026 dT5_dVb = -T7 * dVox_dVb * T2 / T0 * (T4 + (T3 - T4 * Vox)
11028 dT5_dVe = -T7 * dVox_dVe * T2 / T0 * (T4 + (T3 - T4 * Vox)
11031 dT5_dT = T7 * dT6_dT;
11033 Igb1 = T1 * Vgb * Vaux * T5;
11034 dIgb1_dVg = T1 * (Vgb*Vaux*dT5_dVg + dVgb_dVg*Vaux*T5 +
11036 dIgb1_dVd = T1 * (Vgb*Vaux*dT5_dVd + Vgb*T5*dVaux_dVd);
11037 dIgb1_dVb = T1 * (Vgb*Vaux*dT5_dVb + dVgb_dVb*Vaux*T5 +
11039 dIgb1_dVe = T1 * (Vgb*Vaux*dT5_dVe + Vgb*T5*dVaux_dVe);
11041 dIgb1_dT = T1 * Vgb * (Vaux*dT5_dT + T5*dVaux_dT);
11042 else dIgb1_dT = 0.0;
11050 Voxeff = T0 - 0.5 * (T1 + T3);
11051 dVoxeff_dVox = 0.5 * (1.0 + T1 / T3);
11054 dVox_dVg = dVoxacc_dVg * dVoxeff_dVox;
11055 dVox_dVd = dVoxacc_dVd * dVoxeff_dVox;
11056 dVox_dVb = dVoxacc_dVb * dVoxeff_dVox;
11068 dVaux_dVg = -T2 / (1 + T1);
11070 dVaux_dVb = -dVaux_dVg;
11080 dT0_dVox = dT0_dT =0.0;
11085 dT0_dVox = dT0_dT =0.0;
11089 T1 = Leff * Weff * 4.9758e-7 * OxideRatio /
nseg;
11095 T6 = T2*(T3 - T4 * Vox) / T0;
11096 if (
selfheat) dT6_dT = -T2 * T4 * dVox_dT / T0 - T6/T0 * dT0_dT;
11099 dT5_dVg = -T7 * dVox_dVg * T2 / T0 * (T4 + (T3 - T4 * Vox)
11101 dT5_dVd = -T7 * dVox_dVd * T2 / T0 * (T4 + (T3 - T4 * Vox)
11103 dT5_dVb = -T7 * dVox_dVb * T2 / T0 * (T4 + (T3 - T4 * Vox)
11106 dT5_dT = T7 * dT6_dT;
11108 Igb2 = T1 * Vgb * Vaux * T5;
11109 dIgb2_dVg = T1 * (Vgb*Vaux*dT5_dVg + dVgb_dVg*Vaux*T5 +
11111 dIgb2_dVd = T1 * (Vgb*Vaux*dT5_dVd + Vgb*T5*dVaux_dVd);
11112 dIgb2_dVb = T1 * (Vgb*Vaux*dT5_dVb + dVgb_dVb*Vaux*T5 +
11115 dIgb2_dT = T1 * Vgb * (Vaux*dT5_dT + T5*dVaux_dT);
11116 else dIgb2_dT = 0.0;
11125 dIgb_dVg = dIgb1_dVg;
11126 dIgb_dVd = dIgb1_dVd;
11127 dIgb_dVb = dIgb1_dVb;
11128 dIgb_dVe = dIgb1_dVe;
11129 dIgb_dT = dIgb1_dT;
11134 dIgb_dVg = dIgb2_dVg;
11135 dIgb_dVd = dIgb2_dVd;
11136 dIgb_dVb = dIgb2_dVb;
11138 dIgb_dT = dIgb2_dT;
11156 gigs = -(dIgb_dVg + dIgb_dVd + dIgb_dVb + dIgb_dVe);
11167 Giig = Giib = Giid = GiiT = 0.0;
11192 dT2_dVg = T3 * (
dVgst_dVg - dVth_dVb * dVbseff_dVg) - T4
11194 dT2_dVb = T3 *
dVgst_dVb * dVbseff_dVb - T4 * dVgsteff_dVb;
11195 dT2_dVe = T3 *
dVgst_dVb * dVbseff_dVe - T4 * dVgsteff_dVe;
11196 dT2_dVd = T3 * (dVgst_dVd - dVth_dVb * dVbseff_dVd) - T4
11199 dT2_dT = -(dVth_dT + dVth_dVb * dVbseff_dT) * T3
11207 VgsStep = T1 * T2 * T3;
11209 dVgsStep_dT = T1 * T3 * dT2_dT;
11210 else dVgsStep_dT = 0;
11211 Vdsatii = Vdsatii0 + VgsStep;
11212 Vdiff =
Vds - Vdsatii;
11213 dVdiff_dVg = - T1 * T3 * dT2_dVg;
11214 dVdiff_dVb = - T1 * T3 * dT2_dVb;
11215 dVdiff_dVe = - T1 * T3 * dT2_dVe;
11216 dVdiff_dVd = 1.0 - T1 * (T3 * dT2_dVd + T2 * dT3_dVd);
11218 dVdiff_dT = -(dVdsatii0_dT + dVgsStep_dT);
11219 else dVdiff_dT = 0;
11226 dT0_dVg = dT0_dVd = dT0_dVb = dT0_dT = 0.0;
11232 dT0_dVg = T1 * dVdiff_dVg;
11233 dT0_dVb = T1 * dVdiff_dVb;
11234 dT0_dVd = T1 * dVdiff_dVd;
11235 dT0_dVe = T1 * dVdiff_dVe;
11237 dT0_dT = T1 * dVdiff_dT;
11244 dRatio_dVg = dRatio_dVb = dRatio_dVd = dRatio_dT = 0.0;
11249 dRatio_dVg = dRatio_dVb = dRatio_dVd = dRatio_dT = 0.0;
11254 T1 = Ratio / T0 / T0;
11255 dRatio_dVg = T1 * (T0 * dVdiff_dVg - Vdiff * dT0_dVg);
11256 dRatio_dVb = T1 * (T0 * dVdiff_dVb - Vdiff * dT0_dVb);
11257 dRatio_dVd = T1 * (T0 * dVdiff_dVd - Vdiff * dT0_dVd);
11259 dRatio_dVe = T1 * (T0 * dVdiff_dVe - Vdiff * dT0_dVe);
11262 dRatio_dT = T1 * (T0 * dVdiff_dT - Vdiff * dT0_dT);
11268 if (Ratio > 10.0) {
11270 dRatio_dVg = dRatio_dVb = dRatio_dVd = dRatio_dT = 0.0;
11275 iii = Iii = Ratio * T0;
11276 Giig = Ratio *
Gm + T0 * dRatio_dVg;
11282 Giie = Ratio *
Gme + T0 * dRatio_dVe;
11296 Ibp = Gbpbs = Gbpps = 0.0;
11307 Gbpbs = T0 * dVbp_dVb;
11308 Gbpps = -T0 * dVbp_dVb;
11333 Giig = Giib = Giid = Giie = GiiT = 0.0;
11340 Gbpbs = Gbpps = 0.0;
11349 cd = Ids + Ic - Ibd + Iii + Idgidl;
11350 cb = Ibs + Ibd + Ibp - Iii - Idgidl - Isgidl - Igb;
11362 dT0_dVd = (dbeta_dVd + dbeta_dVg * dVgsteff_dVd) * T9;
11363 dT0_dVb = (dbeta_dVb + dbeta_dVg * dVgsteff_dVb) * T9;
11364 dT0_dVg = dbeta_dVg * T9;
11375 T11 = grgeltd +
gcrg;
11376 gcrg = grgeltd * gcrg / T11;
11377 T12 = T10 / T11 /T11;
11403 gtempd = -Gds * Vds - Ids;
11420 gjdb = Gjdb - Giib;
11421 gjdd = Gjdd - (Giid + Gdgidld);
11422 gjdg = - (Giig + Gdgidlg);
11429 cjd = Ibd - Iii - Idgidl;
11444 cjs = Ibs - Isgidl;
11453 gbbs = Giib - Gjsb - Gjdb - Gbpbs;
11454 gbgs = Giig + Gdgidlg + Gsgidlg;
11455 gbds = Giid + Gdgidld - Gjsd - Gjdd;
11461 gbT = GiiT - GjsT - GjdT;
11475 cbody = Iii + Idgidl + Isgidl - Ibs - Ibd - Ibp + Igb;
11497 T1 = Vgsteff_local * (1.0 - 0.5 * Abulk_local * Vdseff_local / Vgst2Vtm);
11529 ExpVgst *= ExpVgst;
11531 Vgsteff_local = noff * Vtm * log(1.0 + ExpVgst);
11532 T0 = ExpVgst / (1.0 + ExpVgst);
11533 T1 = -T0 * (dVth_dVb + (Vgst-
paramPtr->
delvt) / noff * dnoff_dVb)
11534 + Vgsteff_local / noff * dnoff_dVb;
11535 dVgsteff_dVd = -T0 * (dVth_dVd + dVth_dVb*dVbseff_dVd + Vgst / noff
11536 * dnoff_dVd) + Vgsteff_local / noff * dnoff_dVd;
11537 dVgsteff_dVg = T0 * (
dVgs_eff_dVg - dVth_dVb*dVbseff_dVg);
11538 dVgsteff_dVb = T1 * dVbseff_dVb;
11539 dVgsteff_dVe = T1 * dVbseff_dVe;
11541 dVgsteff_dT = -T0 * (dVth_dT+dVth_dVb*dVbseff_dT
11543 + Vgsteff_local / Temp;
11556 Qac0 = dQac0_dVrg = dQac0_dVd = dQac0_dVb = dQac0_dT = 0.0;
11557 Qsub0 = dQsub0_dVrg = dQsub0_dVg = dQsub0_dVd
11558 = dQsub0_dVb = dQsub0_dT = 0.0;
11565 dVfb_dVd = dVth_dVd;
11570 { T0 = sqrt(V3 * V3 - 4.0 * DELTA_3_SOI * Vfb);
11571 T2 = -DELTA_3_SOI / T0;
11574 { T0 = sqrt(V3 * V3 + 4.0 * DELTA_3_SOI * Vfb);
11575 T2 = DELTA_3_SOI / T0;
11578 T1 = 0.5 * (1.0 + V3 / T0);
11579 Vfbeff = Vfb - 0.5 * (V3 + T0);
11580 dVfbeff_dVd = (1.0 - T1 - T2) * dVfb_dVd;
11581 dVfbeff_dVb = (1.0 - T1 - T2) * dVfb_dVb - T1;
11584 dVfbeff_dT = (1.0 - T1 - T2) * dVfb_dT;
11588 Qac0 = CoxWLb * (Vfbeff - Vfb);
11589 dQac0_dVrg = CoxWLb * dVfbeff_dVrg;
11590 dQac0_dVd = CoxWLb * (dVfbeff_dVd - dVfb_dVd);
11591 dQac0_dVb = CoxWLb * (dVfbeff_dVb - dVfb_dVb);
11593 dQac0_dT = CoxWLb * (dVfbeff_dT - dVfb_dT);
11598 T3 = Vgs_eff - Vfbeff - Vbseff - Vgsteff_local;
11608 { T1 = sqrt(T0 * T0 + T3);
11609 T2 = CoxWLb * T0 / T1;
11612 Qsub0 = CoxWLb * K1 * (T1 - T0);
11613 dQsub0_dVrg = T2 * (dVgs_eff_dVg - dVfbeff_dVrg);
11615 dQsub0_dVd = -T2 * dVfbeff_dVd;
11616 dQsub0_dVb = -T2 * (dVfbeff_dVb + 1);
11618 dQsub0_dT = -T2 * dVfbeff_dT;
11628 VdsatCV = Vgsteff_local / AbulkCV;
11632 V4 = VdsatCV - Vds -
DELTA_4;
11633 T0 = sqrt(V4 * V4 + 4.0 * DELTA_4 * VdsatCV);
11634 VdseffCV = VdsatCV - 0.5 * (V4 + T0);
11635 T1 = 0.5 * (1.0 + V4 / T0);
11637 T3 = (1.0 - T1 - T2) / AbulkCV;
11638 dVdseffCV_dVg = T3;
11639 dVdseffCV_dVd = T1;
11640 dVdseffCV_dVb = -T3 * VdsatCV * dAbulkCV_dVb;
11646 qbulk = Cbg1 = Cbd1 = Cbb1 = 0;
11650 T0 = AbulkCV * VdseffCV;
11651 T1 = 12.0 * (Vgsteff_local - 0.5 * T0 + 1e-20);
11652 T2 = VdseffCV / T1;
11654 T4 = (1.0 - 12.0 * T2 * T2 * AbulkCV);
11655 T5 = (6.0 * T0 * (4.0 * Vgsteff_local- T0) / (T1 * T1) - 0.5);
11656 T6 = 12.0 * T2 * T2 * Vgsteff_local;
11658 T7 = 1.0 - AbulkCV;
11659 qbulk = CoxWLb * T7 * (0.5 * VdseffCV - T3);
11660 T4 = -T7 * (T4 - 1.0);
11662 T6 = -(T7 * T6 + (0.5 * VdseffCV - T3));
11664 Cbg1 = CoxWLb * (T4 + T5 * dVdseffCV_dVg);
11665 Cbd1 = CoxWLb * T5 * dVdseffCV_dVd ;
11666 Cbb1 = CoxWLb * (T5 * dVdseffCV_dVb + T6 * dAbulkCV_dVb);
11672 T0 = AbulkCV * VdseffCV;
11673 T1 = 12.0 * (Vgsteff_local - 0.5 * T0 + 1e-20);
11681 T4 = (1.0 - 12.0 * T2 * T2);
11682 T7 = T2 * (2.0 + 6.0 * T2) - 0.5;
11685 T6 = T7 * VdseffCV;
11688 qinv_local = CoxWL * (Vgsteff_local - 0.5 * T0 + T3);
11690 qinv = -qinv_local;
11692 Cgg1 = CoxWL * (T4 + T5 * dVdseffCV_dVg);
11693 Cgd1 = CoxWL * T5 * dVdseffCV_dVd;
11694 Cgb1 = CoxWL * (T5 * dVdseffCV_dVb + T6 * dAbulkCV_dVb);
11700 qsrc = -CoxWL * (0.5 * Vgsteff_local + 0.25 * T0
11702 T7 = (4.0 * Vgsteff_local - T0) / (T1 * T1);
11703 T4 = -(0.5 + 24.0 * T0 * T0 / (T1 * T1));
11704 T5 = -(0.25 * AbulkCV - 12.0 * AbulkCV * T0 * T7);
11705 T6 = -(0.25 * VdseffCV - 12.0 * T0 * VdseffCV * T7);
11706 Csg1 = CoxWL * (T4 + T5 * dVdseffCV_dVg);
11707 Csd1 = CoxWL * T5 * dVdseffCV_dVd;
11708 Csb1 = CoxWL * (T5 * dVdseffCV_dVb + T6 * dAbulkCV_dVb);
11714 T2 = 0.5 * CoxWL / (T1 * T1);
11715 T3 = Vgsteff_local * (2.0 * T0 * T0 / 3.0 + Vgsteff_local
11716 * (Vgsteff_local - 4.0 * T0 / 3.0))
11717 - 2.0 * T0 * T0 * T0 / 15.0;
11719 T7 = 4.0 / 3.0 * Vgsteff_local * (Vgsteff_local - T0)
11721 T4 = -2.0 * qsrc / T1 - T2 * (Vgsteff_local * (3.0
11722 * Vgsteff_local - 8.0 * T0 / 3.0) + 2.0 * T0 * T0 / 3.0);
11723 T5 = (qsrc / T1 + T2 * T7) * AbulkCV;
11724 T6 = (qsrc / T1 * VdseffCV + T2 * T7 * VdseffCV);
11725 Csg1 = T4 + T5 * dVdseffCV_dVg;
11726 Csd1 = T5 * dVdseffCV_dVd;
11727 Csb1 = T5 * dVdseffCV_dVb + T6 * dAbulkCV_dVb;
11732 Csg1 = - 0.5 * (Cgg1 + Cbg1);
11733 Csb1 = - 0.5 * (Cgb1 + Cbb1);
11734 Csd1 = - 0.5 * (Cgd1 + Cbd1);
11743 Qe1 = dQe1_dVb = dQe1_dVe = dQe1_dT = 0;
11750 Qe1 = CboxWL * (Vesfb -
Vbs);
11751 dQe1_dVb = -CboxWL;
11754 dQe1_dT = -CboxWL * dvfbb_dT;
11761 qgate = qinv_local + Qac0 + Qsub0;
11771 Csg = Csg1 * dVgsteff_dVg;
11772 Csd = Csd1 + Csg1 * dVgsteff_dVd;
11773 Csb = Csg1 * dVgsteff_dVb + Csb1 * dVbseff_dVb;
11775 CsT = Csg1 * dVgsteff_dT;
11779 Cgg = (Cgg1 + dQsub0_dVg) * dVgsteff_dVg
11780 + dQac0_dVrg + dQsub0_dVrg;
11781 Cgd = (Cgg1 + dQsub0_dVg) * dVgsteff_dVd + Cgd1
11782 + dQac0_dVd + dQsub0_dVd;
11783 Cgb = (Cgg1 + dQsub0_dVg) * dVgsteff_dVb
11784 + (Cgb1 + dQsub0_dVb + dQac0_dVb) * dVbseff_dVb;
11786 CgT = (Cgg1 + dQsub0_dVg) * dVgsteff_dT + dQac0_dT + dQsub0_dT;
11790 Cbg = (Cbg1 - dQsub0_dVg) * dVgsteff_dVg - dQac0_dVrg - dQsub0_dVrg;
11791 Cbd = (Cbg1 - dQsub0_dVg) * dVgsteff_dVd + Cbd1 - dQac0_dVd
11793 Cbb = (Cbg1 - dQsub0_dVg) * dVgsteff_dVb - dQe1_dVb
11794 + (Cbb1 - dQsub0_dVb - dQac0_dVb) * dVbseff_dVb;
11796 CbT = (Cbg1 - dQsub0_dVg) * dVgsteff_dT - dQac0_dT - dQsub0_dT
11803 cgsb = - (Cgg + Cgd + Cgb);
11808 cbsb = -(Cbg + Cbd + Cbb) + Ce1e;
11816 cdgb = -(Cgg + Cbg + Csg);
11817 cddb = -(Cgd + Cbd + Csd);
11819 cdT = -(CgT + CbT + CsT) - dQe1_dT;
11820 cdsb = (Cgg + Cgd + Cgb + Cbg + Cbd + Cbb
11821 + Csg + Csd + Csb) + Ce1b;
11827 dVgsteff_dVb /= dVbseff_dVb;
11837 Qac0 = dQac0_dVg = dQac0_dVb = dQac0_dT = 0.0;
11838 Qsub0 = dQsub0_dVg = dQsub0_dVd = dQsub0_dVb = dQsub0_dT = 0.0;
11845 dVfbzb_dT = dVthzb_dT;
11852 V3 = Vfbzb - Vgs_eff + Vbseff -
DELTA_3;
11854 { T0 = sqrt(V3 * V3 - 4.0 * DELTA_3 * Vfbzb);
11855 T2 = -DELTA_3 / T0;
11858 { T0 = sqrt(V3 * V3 + 4.0 * DELTA_3 * Vfbzb);
11862 T1 = 0.5 * (1.0 + V3 / T0);
11863 Vfbeff = Vfbzb - 0.5 * (V3 + T0);
11867 dVfbeff_dT = (1.0 - T1 - T2) * dVfbzb_dT;
11872 T0 = (Vgs_eff - Vbseff - Vfbzb) / Tox;
11873 dT0_dVg = dVgs_eff_dVg / Tox;
11874 dT0_dVb = -1.0 / Tox;
11880 dTcen_dVb = dTcen_dVg * dT0_dVb;
11881 dTcen_dVg *= dT0_dVg;
11889 dTcen_dVg = dTcen_dVb = dTcen_dT = 0.0;
11893 dTcen_dVg = dTcen_dVb = dTcen_dT = 0.0;
11900 T1 = 0.5 * (1.0 + V3 / V4);
11909 T2 = Cox / (Cox + Ccen);
11910 Coxeff = T2 * Ccen;
11912 dCoxeff_dVg = T2 * T2 * T3;
11913 dCoxeff_dVb = dCoxeff_dVg * dTcen_dVb;
11914 dCoxeff_dVg *= dTcen_dVg;
11916 dCoxeff_dT = T3 * dTcen_dT * (T2 - Coxeff / (Cox + Ccen));
11919 CoxWLcenb = CoxWLb * Coxeff / Cox;
11921 dCoxWLcenb_dT = CoxWLb * dCoxeff_dT / Cox;
11925 Qac0 = CoxWLcenb * (Vfbeff - Vfbzb);
11926 QovCox = Qac0 / Coxeff;
11927 dQac0_dVg = CoxWLcenb * dVfbeff_dVg
11928 + QovCox * dCoxeff_dVg;
11929 dQac0_dVb = CoxWLcenb * dVfbeff_dVb
11930 + QovCox * dCoxeff_dVb;
11932 dQac0_dT = CoxWLcenb * (dVfbeff_dT - dVfbzb_dT)
11933 + dCoxWLcenb_dT * (Vfbeff - Vfbzb);
11938 T3 = Vgs_eff - Vfbeff - Vbseff - Vgsteff_local;
11948 { T1 = sqrt(T0 * T0 + T3);
11949 T2 = CoxWLcenb * T0 / T1;
11953 QovCox = Qsub0 / Coxeff;
11954 dQsub0_dVg = T2 * (dVgs_eff_dVg - dVfbeff_dVg - dVgsteff_dVg)
11955 + QovCox * dCoxeff_dVg;
11956 dQsub0_dVd = -T2 * dVgsteff_dVd;
11957 dQsub0_dVb = -T2 * (dVfbeff_dVb + 1 + dVgsteff_dVb)
11958 + QovCox * dCoxeff_dVb;
11960 dQsub0_dT = -T2 * (dVfbeff_dT + dVgsteff_dT)
11978 T1 = 2.0 * T0 + Vgsteff_local;
11980 DeltaPhi = Vtm * log(1.0 + T1 * Vgsteff_local / Denomi);
11981 dDeltaPhi_dVg = 2.0 * Vtm * (T1 -T0) / (Denomi + T1 * Vgsteff_local);
11988 T3 = 4.0 * (Vth - Vfbzb - phi_local);
11989 T2 = sqrt(T3*T3 + 0.0001);
11990 T5 = 0.5 * (1 + T3/T2);
11991 T4 = 0.5 * (T3 + T2);
11994 T0 = (Vgsteff_local + T4) / Tox;
11995 tmp = exp(0.7 * log(T0));
11997 T2 = 0.7 * tmp / (T0 * Tox);
11998 Tcen = 1.9e-9 / T1;
11999 dTcen_dVg = -Tcen * T2 / T1;
12000 dTcen_dVd = dTcen_dVg * (T5 * 4.0 * dVth_dVd + dVgsteff_dVd);
12001 dTcen_dVb = dTcen_dVg * (T5 * 4.0 * dVth_dVb + dVgsteff_dVb);
12002 dTcen_dVg *= dVgsteff_dVg;
12004 dTcen_dT = -Tcen * T2 / T1
12005 * (T5 * 4.0 * (dVth_dT - dVfbzb_dT) + dVgsteff_dT);
12011 T0 = Cox / (Cox + Ccen);
12012 Coxeff = T0 * Ccen;
12014 dCoxeff_dVg = T0 * T0 * T1;
12015 dCoxeff_dVd = dCoxeff_dVg * dTcen_dVd;
12016 dCoxeff_dVb = dCoxeff_dVg * dTcen_dVb;
12017 dCoxeff_dVg *= dTcen_dVg;
12019 dCoxeff_dT = T1 * dTcen_dT * (T0 - Coxeff / (Cox + Ccen));
12020 else dCoxeff_dT = 0;
12021 CoxWLcen = CoxWL * Coxeff / Cox;
12022 CoxWLcenb = CoxWLb * Coxeff / Cox;
12026 VdsatCV = (Vgsteff_local - DeltaPhi) / AbulkCV;
12027 V4 = VdsatCV - Vds -
DELTA_4;
12028 T0 = sqrt(V4 * V4 + 4.0 * DELTA_4 * VdsatCV);
12029 VdseffCV = VdsatCV - 0.5 * (V4 + T0);
12030 T1 = 0.5 * (1.0 + V4 / T0);
12032 T3 = (1.0 - T1 - T2) / AbulkCV;
12034 dVdseffCV_dVg = T4;
12035 dVdseffCV_dVd = T1;
12036 dVdseffCV_dVb = -T3 * VdsatCV * dAbulkCV_dVb;
12038 T0 = AbulkCV * VdseffCV;
12039 T1 = Vgsteff_local - DeltaPhi;
12040 T2 = 12.0 * (T1 - 0.5 * T0 + 1.0e-20);
12042 T4 = 1.0 - 12.0 * T3 * T3;
12043 T5 = AbulkCV * (6.0 * T0 * (4.0 * T1 - T0) / (T2 * T2) - 0.5);
12044 T6 = T5 * VdseffCV / AbulkCV;
12046 qinv_local =
qgate = qinoi = CoxWLcen * (T1 - T0 * (0.5 - T3));
12047 QovCox =
qgate / Coxeff;
12049 + T5 * dVdseffCV_dVg);
12050 Cgd1 = CoxWLcen * T5 * dVdseffCV_dVd + Cgg1
12051 * dVgsteff_dVd + QovCox * dCoxeff_dVd;
12052 Cgb1 = CoxWLcen * (T5 * dVdseffCV_dVb + T6 * dAbulkCV_dVb)
12053 + Cgg1 * dVgsteff_dVb + QovCox * dCoxeff_dVb;
12054 Cgg1 = Cgg1 * dVgsteff_dVg + QovCox * dCoxeff_dVg;
12060 qbulk = Cbg1 = Cbd1 = Cbb1 = Cbg1 = 0;
12064 T7 = 1.0 - AbulkCV;
12066 T9 = 12.0 * T7 * T0 * T0 / (T8 * AbulkCV);
12068 T11 = -T7 * T5 / AbulkCV;
12069 T12 = -(T9 * T1 / AbulkCV + VdseffCV * (0.5 - T0 / T2));
12071 qbulk = CoxWLcenb * T7 * (0.5 * VdseffCV - T0 * VdseffCV / T2);
12072 QovCox =
qbulk / Coxeff;
12073 Cbg1 = CoxWLcenb * (T10 + T11 * dVdseffCV_dVg);
12074 Cbd1 = CoxWLcenb * T11 * dVdseffCV_dVd + Cbg1
12075 * dVgsteff_dVd + QovCox * dCoxeff_dVd;
12076 Cbb1 = CoxWLcenb * (T11 * dVdseffCV_dVb + T12 * dAbulkCV_dVb)
12077 + Cbg1 * dVgsteff_dVb + QovCox * dCoxeff_dVb;
12078 Cbg1 = Cbg1 * dVgsteff_dVg + QovCox * dCoxeff_dVg;
12085 qsrc = -CoxWLcen * (T1 / 2.0 + T0 / 4.0
12086 - 0.5 * T0 * T0 / T2);
12087 QovCox =
qsrc / Coxeff;
12090 T7 = -(0.25 - 12.0 * T0 * (4.0 * T1 - T0) / T3);
12093 T6 = T7 * VdseffCV;
12095 Csg = CoxWLcen * (T4 + T5 * dVdseffCV_dVg);
12096 Csd = CoxWLcen * T5 * dVdseffCV_dVd + Csg * dVgsteff_dVd
12097 + QovCox * dCoxeff_dVd;
12098 Csb = CoxWLcen * (T5 * dVdseffCV_dVb + T6 * dAbulkCV_dVb)
12099 + Csg * dVgsteff_dVb + QovCox * dCoxeff_dVb;
12100 Csg = Csg * dVgsteff_dVg + QovCox * dCoxeff_dVg;
12105 T3 = 0.5 * CoxWLcen / (T2 * T2);
12106 T4 = T1 * (2.0 * T0 * T0 / 3.0 + T1 * (T1 - 4.0
12107 * T0 / 3.0)) - 2.0 * T0 * T0 * T0 / 15.0;
12109 QovCox = qsrc / Coxeff;
12110 T8 = 4.0 / 3.0 * T1 * (T1 - T0) + 0.4 * T0 * T0;
12111 T5 = -2.0 * qsrc / T2 - T3 * (T1 * (3.0 * T1 - 8.0
12112 * T0 / 3.0) + 2.0 * T0 * T0 / 3.0);
12113 T6 = AbulkCV * (qsrc / T2 + T3 * T8);
12114 T7 = T6 * VdseffCV / AbulkCV;
12117 Csd = Csg * dVgsteff_dVd + T6 * dVdseffCV_dVd
12118 + QovCox * dCoxeff_dVd;
12119 Csb = Csg * dVgsteff_dVb + T6 * dVdseffCV_dVb
12120 + T7 * dAbulkCV_dVb + QovCox * dCoxeff_dVb;
12121 Csg = Csg * dVgsteff_dVg + QovCox * dCoxeff_dVg;
12136 Qe1 = Ce1b = Ce1e = Ce1T = dQe1_dT = 0;
12143 Qe1 = CboxWL * (Vesfb -
Vbs);
12144 Ce1b = dQe1_dVb = -CboxWL;
12145 Ce1e = dQe1_dVe = CboxWL;
12147 Ce1T = dQe1_dT = -CboxWL * dvfbb_dT;
12149 Ce1T = dQe1_dT = 0.0;
12155 qbody = qbulk - Qac0 - Qsub0 - Qe1;
12159 Cbg = Cbg1 - dQac0_dVg - dQsub0_dVg;
12160 Cbd = Cbd1 - dQsub0_dVd;
12161 Cbb = Cbb1 - dQac0_dVb - dQsub0_dVb - Ce1b / dVbseff_dVb;
12163 CbT = Cbg1 * dVgsteff_dT - dQac0_dT
12164 - dQsub0_dT - dQe1_dT;
12170 Cgb = Cgb1 - Cbb - Ce1b / dVbseff_dVb;
12172 CgT = Cgg1 * dVgsteff_dT + dQac0_dT + dQsub0_dT;
12176 Cgb *= dVbseff_dVb;
12177 Cbb *= dVbseff_dVb;
12178 Csb *= dVbseff_dVb;
12180 CsT = Csg * dVgsteff_dT;
12185 cgsb = -(Cgg + Cgd + Cgb);
12190 cbsb = -(Cbg + Cbd + Cbb)
12199 cdgb = -(Cgg + Cbg + Csg);
12200 cddb = -(Cgd + Cbd + Csd);
12202 cdT = -(CgT+CbT+CsT) - Ce1T;
12203 cdsb = (Cgg + Cgd + Cgb + Cbg + Cbd + Cbb
12204 + Csg + Csd + Csb) + Ce1b;
12223 qjs_local = qjd_local = 0.0;
12224 gcjdds = gcjdbs = gcjdT = 0.0;
12225 gcjsbs = gcjsT = 0.0;
12231 PhiBSWG += dPhiBSWG_dT * (Temp -
model_.
tnom);
12244 DioMax = 0.9 * (PhiBSWG);
12246 arg = 1.0 - (
Vbs > DioMax ? DioMax :
Vbs) / PhiBSWG;
12249 darg_dT = (1 - arg) / PhiBSWG * dPhiBSWG_dT;
12251 if (MJSWG == 0.5) {
12252 dT3_dVb = 1.0 / sqrt(arg);
12254 if (
selfheat) ddT3_dVb_dT = -0.5 * dT3_dVb / arg * darg_dT;
12257 dT3_dVb = exp(-MJSWG * log(arg));
12259 if (
selfheat) ddT3_dVb_dT = -MJSWG * dT3_dVb / arg * darg_dT;
12261 T3 = (1.0 - arg * dT3_dVb) * PhiBSWG / (1.0 - MJSWG);
12264 dT3_dT = (1.0 - arg * dT3_dVb) * dPhiBSWG_dT / (1.0 - MJSWG)
12265 - (arg * ddT3_dVb_dT + darg_dT * dT3_dVb) * PhiBSWG
12269 T3 += dT3_dVb * (
Vbs - DioMax);
12271 qjs_local = cjsbs * T3 +
model_.
tt * Ibsdif;
12272 gcjsbs = cjsbs * dT3_dVb +
model_.
tt * dIbsdif_dVb;
12275 gcjsT =
model_.
tt * dIbsdif_dT + dcjsbs_dT * T3
12281 arg = 1.0 - (
Vbd > DioMax ? DioMax :
Vbd) / PhiBSWG;
12284 darg_dT = (1 - arg) / PhiBSWG * dPhiBSWG_dT;
12286 if (MJSWG == 0.5) {
12287 dT3_dVb = 1.0 / sqrt(arg);
12289 if (
selfheat) ddT3_dVb_dT = -0.5 * dT3_dVb / arg * darg_dT;
12292 dT3_dVb = exp(-MJSWG * log(arg));
12294 if (
selfheat) ddT3_dVb_dT = -MJSWG * dT3_dVb / arg * darg_dT;
12296 T3 = (1.0 - arg * dT3_dVb) * PhiBSWG / (1.0 - MJSWG);
12299 dT3_dT = (1.0 - arg * dT3_dVb) * dPhiBSWG_dT / (1.0 - MJSWG)
12300 - (arg * ddT3_dVb_dT + darg_dT * dT3_dVb) * PhiBSWG
12304 T3 += dT3_dVb * (
Vbd - DioMax);
12306 dT3_dVd = -dT3_dVb;
12308 qjd_local = cjdbs * T3 +
model_.
tt * Ibddif;
12309 gcjdbs = cjdbs * dT3_dVb +
model_.
tt * dIbddif_dVb;
12310 gcjdds = cjdbs * dT3_dVd +
model_.
tt * dIbddif_dVd;
12313 gcjdT =
model_.
tt * dIbddif_dT + dcjdbs_dT * T3
12321 qbody += (qjs_local + qjd_local);
12327 cdsb += gcjdds + gcjdbs;
12330 cbT += (gcjdT + gcjsT);
12331 cbsb -= (gcjdds + gcjdbs + gcjsbs);
12344 if (T10 < paramPtr->vsdfb)
12348 else if (T10 < paramPtr->sdt1)
12354 else if (T10 < paramPtr->vsdth)
12366 if (T10 < paramPtr->vsdth)
12370 else if (T10 < paramPtr->sdt1)
12376 else if (T10 < paramPtr->vsdfb)
12391 if (T11 < paramPtr->vsdfb)
12395 else if (T11 < paramPtr->sdt1)
12401 else if (T11 < paramPtr->vsdth)
12413 if (T11 < paramPtr->vsdth)
12417 else if (T11 < paramPtr->sdt1)
12423 else if (T11 < paramPtr->vsdfb)
12457 qbf = -Qsub0 - Qac0;
12859 double limit,
int *check)
12868 vnew = vold + limit;
12872 vnew = vold - limit;
12903 bool bsuccess =
true;
12906 double T0, T1, T2, T3, T4;
12926 T1 = sqrt(T0 * T0 + 4.0 * DELTA_1);
12927 T2 = 0.5 * (T0 - T1);
12933 cgdo_local =
paramPtr->
cgdo + T3 - T3 * (1.0 - 1.0 / T4)
12934 * (0.5 - 0.5 * T0 / T1);
12945 T1 = sqrt(T0 * T0 + 4.0 * DELTA_1);
12946 T2 = 0.5 * (T0 - T1);
12952 cgso_local =
paramPtr->
cgso + T3 - T3 * (1.0 - 1.0 / T4)
12953 * (0.5 - 0.5 * T0 / T1);
12970 gcgmdb = -cgdo_local * ag0;
12971 gcgmsb = -cgso_local * ag0;
13011 +
cdgb + cgso_local) * ag0;
13076 gcgmdb = -cgdo_local * ag0;
13077 gcgmsb = -cgso_local * ag0;
13219 bool bsuccess =
true;
13303 double Coef_body=0.0;
13304 double Coef_extBody=0.0;
13305 double Coef_gate=0.0;
13306 double Coef_gatePrime=0.0;
13307 double Coef_gateMid=0.0;
13308 double Coef_drainPrime=0.0;
13309 double Coef_sourcePrime=0.0;
13310 double Coef_substrate=0.0;
13311 double Coef_temp=0.0;
13334 Coef_temp -= (
Qeqqth) * numberParallel;
13376 double Coef_body_Jdxp = 0.0;
13377 double Coef_extBody_Jdxp = 0.0;
13378 double Coef_gate_Jdxp = 0.0;
13379 double Coef_gatePrime_Jdxp = 0.0;
13380 double Coef_gateMid_Jdxp = 0.0;
13381 double Coef_drainPrime_Jdxp = 0.0;
13382 double Coef_sourcePrime_Jdxp = 0.0;
13383 double Coef_substrate_Jdxp = 0.0;
13384 double Coef_temp_Jdxp = 0.0;
13394 Coef_gatePrime_Jdxp -=
13397 Coef_drainPrime_Jdxp +=
13408 Coef_gateMid_Jdxp -=
13414 Coef_temp_Jdxp -= (
Qeqqth_Jdxp ) * numberParallel;
13419 dQdxdVpPtr[
li_Body ] += Coef_body_Jdxp;
13423 dQdxdVpPtr[
li_ExtBody ] += Coef_extBody_Jdxp;
13425 dQdxdVpPtr[
li_Gate ] += Coef_gate_Jdxp;
13427 dQdxdVpPtr[
li_GateMid ] += Coef_gateMid_Jdxp;
13458 #ifdef Xyce_DEBUG_DEVICE
13461 Xyce::dout() << subsection_divider << std::endl;
13462 Xyce::dout() <<
" Instance::loadDAEFVector" << std::endl;
13463 Xyce::dout() <<
" name = " <<
getName() <<std::endl;
13464 Xyce::dout().width(28); Xyce::dout().precision(20); Xyce::dout().setf(std::ios::scientific);
13465 Xyce::dout() <<
" " << std::endl;
13469 double Coef_body=0.0;
13470 double Coef_extBody=0.0;
13471 double Coef_gate=0.0;
13472 double Coef_gatePrime=0.0;
13473 double Coef_gateMid=0.0;
13474 double Coef_drain=0.0;
13475 double Coef_drainPrime=0.0;
13476 double Coef_source=0.0;
13477 double Coef_sourcePrime=0.0;
13478 double Coef_substrate=0.0;
13479 double Coef_temp=0.0;
13507 Coef_sourcePrime += (
cdreq
13689 double Coef_body_Jdxp = 0.0;
13690 double Coef_extBody_Jdxp = 0.0;
13691 double Coef_gate_Jdxp = 0.0;
13692 double Coef_gatePrime_Jdxp = 0.0;
13693 double Coef_gateMid_Jdxp = 0.0;
13694 double Coef_drain_Jdxp = 0.0;
13695 double Coef_drainPrime_Jdxp = 0.0;
13696 double Coef_source_Jdxp = 0.0;
13697 double Coef_sourcePrime_Jdxp = 0.0;
13698 double Coef_substrate_Jdxp = 0.0;
13699 double Coef_temp_Jdxp = 0.0;
13713 Coef_gatePrime_Jdxp -=
13717 Coef_drainPrime_Jdxp +=
13737 Coef_gateMid_Jdxp -=
13748 Coef_temp_Jdxp -= (
ceqth_Jdxp ) * numberParallel;
13770 dFdxdVpPtr[
li_Body ] += Coef_body_Jdxp;
13774 dFdxdVpPtr[
li_ExtBody ] += Coef_extBody_Jdxp;
13776 dFdxdVpPtr[
li_Gate ] += Coef_gate_Jdxp;
13778 dFdxdVpPtr[
li_GateMid ] += Coef_gateMid_Jdxp;
13779 dFdxdVpPtr[
li_Drain ] += Coef_drain_Jdxp;
13781 dFdxdVpPtr[
li_Source ] += Coef_source_Jdxp;
13823 double T0, T1, T2, T3, T4;
13831 T1 = sqrt(T0 * T0 + 4.0 * DELTA_1);
13832 T2 = 0.5 * (T0 - T1);
13838 cgdo_local =
paramPtr->
cgdo + T3 - T3 * (1.0 - 1.0 / T4)
13839 * (0.5 - 0.5 * T0 / T1);
13850 T1 = sqrt(T0 * T0 + 4.0 * DELTA_1);
13851 T2 = 0.5 * (T0 - T1);
13857 cgso_local =
paramPtr->
cgso + T3 - T3 * (1.0 - 1.0 / T4)
13858 * (0.5 - 0.5 * T0 / T1);
13916 +
cdgb + cgso_local);
14128 bool bsuccess =
true;
14129 double vgb_orig, vgmb_orig, veb_orig;
14304 += (+
CAPcgbb)*numberParallel;
14311 += (+
CAPcbeb)*numberParallel;
14313 += (+
CAPcbgb)*numberParallel;
14315 += (+
CAPcbdb)*numberParallel;
14360 -= (-
CAPcsdb )*numberParallel;
14367 += (
CAPcdT)*numberParallel;
14369 += (
CAPcsT)*numberParallel;
14373 += (
CAPcgT)*numberParallel;
14375 += (
CAPcTt)*numberParallel;
14380 += (
CAPcbT)*numberParallel;
14684 bool bsuccess =
true;
14987 bool bsuccess =
true;
15041 UserError(*
this) <<
"(W0 + Weff) = 0 causing divided-by-zero.\n";
15051 UserError(*
this) <<
"(B1 + Weff) = 0 causing divided-by-zero.\n";
15081 if (drainPerimeter < paramPtr->weff)
15090 if (sourcePerimeter < paramPtr->weff)
15186 UserWarning(*
this) <<
"(W0 + Weff) may be too small.";
15211 UserWarning(*
this) <<
"(B1 + Weff) may be too small.";
15222 UserWarning(*
this) <<
"A2 = " <<
paramPtr->
a2 <<
" is larger than 1. A2 is set to 1 and A1 is set to 0.";
15236 UserWarning(*
this) <<
"Rds at current temperature = " <<
paramPtr->
rds0 <<
" is less than 0.001 ohm. Set to zero.";
15607 UserWarning(*
this) <<
"capMod < 2 is not supported by BSIM3SOI.";
15625 bool bsuccess =
true;
15672 if (!
given(
"DSUB"))
15676 if (!
given(
"XDIF"))
15682 if (!
given(
"DLCIG"))
15691 * exp(21.5565981 -
Eg0 / (2.0 *
Vtm0));
15693 csi = 1.03594e-10 /
tsi;
15708 std::vector<Instance*>::iterator iter;
15712 for (iter=first; iter!=last; ++iter)
15714 (*iter)->processParams();
15732 :
DeviceModel(MB, configuration.getModelParameters(), factory_block),
15765 bodyJctGateSideGradingCoeff (0.0),
16053 npeakGiven (false),
16054 csdminGiven (false),
16055 vsdthGiven (false),
16056 vsdfbGiven (false),
16057 gamma1Given (false),
16058 gamma2Given (false),
16340 sheetResistance (0.0),
16341 GatesidewallJctPotential (0.0),
16342 unitLengthGateSidewallJctCap (0.0),
16363 oxideTrapDensityA (0.0),
16364 oxideTrapDensityB (0.0),
16365 oxideTrapDensityC (0.0),
16371 igbModGiven (false),
16381 else if (
getType() ==
"PMOS") {
16398 #ifdef Xyce_B3SOI_USE_DEFL
16405 if (!
given(
"TNOM"))
16407 if (!
given(
"TOXM"))
16409 if (!
given(
"TOXQM"))
16416 uc = (
mobMod == 3) ? -0.0465 : -0.0465e-9;
16418 uc1 = (
mobMod == 3) ? -0.056 : -0.056e-9;
16421 if (!
given(
"VOXH"))
16423 if (!
given(
"DELTAVOX"))
16425 if (!
given(
"AIGC"))
16427 if (!
given(
"BIGC"))
16429 if (!
given(
"CIGC"))
16431 if (!
given(
"AIGSD"))
16433 if (!
given(
"BIGSD"))
16435 if (!
given(
"CIGSD"))
16437 if (!
given(
"NOIA"))
16444 if (!
given(
"NOIB"))
16454 cox = 3.453133e-11 /
tox;
16455 if (!
given(
"CGDO"))
16462 if (!
given(
"CGSO"))
16479 UserWarning(*
this) <<
"soiMod has been set to its default value: 0";
16484 UserWarning(*
this) <<
"gateMod has been set to its default value: 0";
16489 UserWarning(*
this) <<
"noiMod has been set to default value: 1";
16494 UserWarning(*
this) <<
"tnoiMod has been set to default value: 0";
16499 UserWarning(*
this) <<
"Given pbswg is less than 0.1. Pbswg is set to 0.1.\n";
16516 std::list<SizeDependParam*>::iterator it_dpL =
16518 std::list<SizeDependParam*>::iterator end_dpL =
16520 for( ; it_dpL != end_dpL; ++it_dpL )
16525 std::vector<Instance*>::iterator iter;
16529 for (iter=first; iter!=last; ++iter)
16546 std::vector<Instance*>::const_iterator iter;
16552 os <<
" name modelName Parameters" << std::endl;
16554 for (i=0, iter=first; iter!=last; ++iter,++i)
16556 os <<
" " << i <<
": " << (*iter)->getName() <<
"\t";
16582 for (std::vector<Instance *>::const_iterator it = instanceContainer.begin(); it != instanceContainer.end(); ++it)
16603 std::list<SizeDependParam*>::iterator it_dpL =
16606 std::list<SizeDependParam*>::iterator end_dpL =
16609 for( ; it_dpL != end_dpL; ++it_dpL )
16631 bool bsuccess =
true;
16641 bsuccess = bsuccess && btmp;
16707 bool Master::loadDAEVectors (
double * solVec,
double * fVec,
double *qVec,
double * bVec,
double * storeLeadF,
double * storeLeadQ)
16718 double Coef_f_body=0.0;
16719 double Coef_f_extBody=0.0;
16720 double Coef_f_gate=0.0;
16721 double Coef_f_gatePrime=0.0;
16722 double Coef_f_gateMid=0.0;
16723 double Coef_f_drain=0.0;
16724 double Coef_f_drainPrime=0.0;
16725 double Coef_f_source=0.0;
16726 double Coef_f_sourcePrime=0.0;
16727 double Coef_f_substrate=0.0;
16728 double Coef_f_temp=0.0;
16756 Coef_f_sourcePrime += (mi.
cdreq
16816 fVec[mi.
li_Body ] -= Coef_f_body;
16822 fVec[mi.
li_Gate ] -= Coef_f_gate;
16825 fVec[mi.
li_Drain ] -= Coef_f_drain;
16860 storeLeadF[mi.
li_store_dev_is] = -Coef_f_source - Coef_f_sourcePrime;
16953 double Coef_f_body_Jdxp = 0.0;
16954 double Coef_f_extBody_Jdxp = 0.0;
16955 double Coef_f_gate_Jdxp = 0.0;
16956 double Coef_f_gatePrime_Jdxp = 0.0;
16957 double Coef_f_gateMid_Jdxp = 0.0;
16958 double Coef_f_drain_Jdxp = 0.0;
16959 double Coef_f_drainPrime_Jdxp = 0.0;
16960 double Coef_f_source_Jdxp = 0.0;
16961 double Coef_f_sourcePrime_Jdxp = 0.0;
16962 double Coef_f_substrate_Jdxp = 0.0;
16963 double Coef_f_temp_Jdxp = 0.0;
16972 Coef_f_body_Jdxp -=
16977 Coef_f_gatePrime_Jdxp -=
16981 Coef_f_drainPrime_Jdxp +=
16996 Coef_f_gate_Jdxp -=
17001 Coef_f_gateMid_Jdxp -=
17034 dFdxdVp[mi.
li_Body ] += Coef_f_body_Jdxp;
17038 dFdxdVp[mi.
li_ExtBody ] += Coef_f_extBody_Jdxp;
17040 dFdxdVp[mi.
li_Gate ] += Coef_f_gate_Jdxp;
17042 dFdxdVp[mi.
li_GateMid ] += Coef_f_gateMid_Jdxp;
17043 dFdxdVp[mi.
li_Drain ] += Coef_f_drain_Jdxp;
17045 dFdxdVp[mi.
li_Source ] += Coef_f_source_Jdxp;
17058 double Coef_q_body=0.0;
17059 double Coef_q_extBody=0.0;
17060 double Coef_q_gate=0.0;
17061 double Coef_q_gatePrime=0.0;
17062 double Coef_q_gateMid=0.0;
17063 double Coef_q_drainPrime=0.0;
17064 double Coef_q_sourcePrime=0.0;
17065 double Coef_q_substrate=0.0;
17066 double Coef_q_temp=0.0;
17097 qVec[mi.
li_Body ] -= Coef_q_body;
17103 qVec[mi.
li_Gate ] -= Coef_q_gate;
17153 double Coef_q_body_Jdxp = 0.0;
17154 double Coef_q_extBody_Jdxp = 0.0;
17155 double Coef_q_gate_Jdxp = 0.0;
17156 double Coef_q_gatePrime_Jdxp = 0.0;
17157 double Coef_q_gateMid_Jdxp = 0.0;
17158 double Coef_q_drainPrime_Jdxp = 0.0;
17159 double Coef_q_sourcePrime_Jdxp = 0.0;
17160 double Coef_q_substrate_Jdxp = 0.0;
17161 double Coef_q_temp_Jdxp = 0.0;
17167 Coef_q_body_Jdxp -=
17171 Coef_q_gatePrime_Jdxp -=
17174 Coef_q_drainPrime_Jdxp +=
17185 Coef_q_gateMid_Jdxp -=
17196 dQdxdVp[mi.
li_Body ] += Coef_q_body_Jdxp;
17200 dQdxdVp[mi.
li_ExtBody ] += Coef_q_extBody_Jdxp;
17202 dQdxdVp[mi.
li_Gate ] += Coef_q_gate_Jdxp;
17204 dQdxdVp[mi.
li_GateMid ] += Coef_q_gateMid_Jdxp;
17219 #ifndef Xyce_NONPOINTER_MATRIX_LOAD
17231 #pragma omp parallel for
17741 int sizeInstances = instanceContainer_.size();
17744 #pragma omp parallel for
17746 for (
int i=0; i<sizeInstances; ++i)
17748 Instance & mi = *(instanceContainer_.at(i));
18254 .registerDevice(
"m", 10)
18255 .registerDevice(
"m", 57)
18256 .registerModelType(
"pmos", 10)
18257 .registerModelType(
"nmos", 10)
18258 .registerModelType(
"pmos", 57)
18259 .registerModelType(
"nmos", 57);