diff --git a/src/include/ngspice/cktdefs.h b/src/include/ngspice/cktdefs.h index 3366b0c8c..e0bb8e310 100644 --- a/src/include/ngspice/cktdefs.h +++ b/src/include/ngspice/cktdefs.h @@ -116,12 +116,12 @@ struct CKTcircuit { double *CKTrhs; /* current rhs value - being loaded */ double *CKTrhsOld; /* previous rhs value for convergence testing */ + double **CKTdiag ; #ifdef KIRCHHOFF double *CKTfvk ; /* KCL Verification array */ int *CKTnodeIsLinear ; /* Flag to indicate if a node is linear or non-linear */ CKTmkCurKCLnode **CKTmkCurKCLarray ; /* Array of KCL Currents */ - double **CKTdiag ; #endif double *CKTrhsSpare; /* spare rhs value for reordering */ @@ -295,6 +295,7 @@ struct CKTcircuit { contains only linear elements */ unsigned int CKTnoopac:1; /* flag to indicate that OP will not be evaluated during AC simulation */ + unsigned int CKTuseDeviceGmin : 1 ; }; diff --git a/src/include/ngspice/optdefs.h b/src/include/ngspice/optdefs.h index 3c968e455..0277e67ea 100644 --- a/src/include/ngspice/optdefs.h +++ b/src/include/ngspice/optdefs.h @@ -120,6 +120,8 @@ typedef struct { #define OPT_NOOPAC 68 +#define OPT_USEDEVICEGMIN 69 + #ifdef XSPICE /* gtri - begin - wbk - add new options */ #define OPT_ENH_NOOPALTER 100 diff --git a/src/include/ngspice/tskdefs.h b/src/include/ngspice/tskdefs.h index 2c39c02ec..31da6977b 100644 --- a/src/include/ngspice/tskdefs.h +++ b/src/include/ngspice/tskdefs.h @@ -66,6 +66,7 @@ struct TSKtask { double TSKabsDv; /* abs limit for iter-iter voltage change */ double TSKrelDv; /* rel limit for iter-iter voltage change */ unsigned int TSKnoopac:1; /* flag for no OP calculation before AC */ + unsigned int TSKuseDeviceGmin : 1 ; }; #endif diff --git a/src/maths/ni/niconv.c b/src/maths/ni/niconv.c index 983b2533d..d3bde53a2 100644 --- a/src/maths/ni/niconv.c +++ b/src/maths/ni/niconv.c @@ -120,8 +120,14 @@ NIconvTest (CKTcircuit *ckt) ptr = ptr->next ; } - if (maximum < fabs (ckt->CKTdiagGmin * ckt->CKTrhsOld [i])) - maximum = fabs (ckt->CKTdiagGmin * ckt->CKTrhsOld [i]) ; + if (ckt->CKTuseDeviceGmin) + { + if (maximum < fabs (ckt->CKTgmin * ckt->CKTrhsOld [i])) + maximum = fabs (ckt->CKTgmin * ckt->CKTrhsOld [i]) ; + } else { + if (maximum < fabs (ckt->CKTdiagGmin * ckt->CKTrhsOld [i])) + maximum = fabs (ckt->CKTdiagGmin * ckt->CKTrhsOld [i]) ; + } #ifdef STEPDEBUG @@ -130,12 +136,23 @@ NIconvTest (CKTcircuit *ckt) #endif /* Check Convergence */ - if (fabs (ckt->CKTfvk [i] + ckt->CKTdiagGmin * ckt->CKTrhsOld [i]) > (ckt->CKTreltol * maximum + ckt->CKTabstol)) + if (ckt->CKTuseDeviceGmin) { - ckt->CKTtroubleNode = i ; - ckt->CKTtroubleElt = NULL ; + if (fabs (ckt->CKTfvk [i] + ckt->CKTgmin * ckt->CKTrhsOld [i]) > (ckt->CKTreltol * maximum + ckt->CKTabstol)) + { + ckt->CKTtroubleNode = i ; + ckt->CKTtroubleElt = NULL ; - return 1 ; + return 1 ; + } + } else { + if (fabs (ckt->CKTfvk [i] + ckt->CKTdiagGmin * ckt->CKTrhsOld [i]) > (ckt->CKTreltol * maximum + ckt->CKTabstol)) + { + ckt->CKTtroubleNode = i ; + ckt->CKTtroubleElt = NULL ; + + return 1 ; + } } } } diff --git a/src/maths/ni/nireinit.c b/src/maths/ni/nireinit.c index 0b2d73dae..99824f9ae 100644 --- a/src/maths/ni/nireinit.c +++ b/src/maths/ni/nireinit.c @@ -21,11 +21,7 @@ Author: 1985 Thomas L. Quarles int NIreinit( CKTcircuit *ckt) { - int size; - -#if defined(PREDICTOR) || defined(KIRCHHOFF) - int i; -#endif + int i, size ; size = SMPmatSize(ckt->CKTmatrix); CKALLOC(CKTrhs,size+1,double); @@ -34,6 +30,9 @@ NIreinit( CKTcircuit *ckt) CKALLOC(CKTirhs,size+1,double); CKALLOC(CKTirhsOld,size+1,double); CKALLOC(CKTirhsSpare,size+1,double); + CKALLOC(CKTdiag,size+1,double*); + for (i = 0 ; i <= size ; i++) + ckt->CKTdiag [i] = NULL ; #ifdef KIRCHHOFF CKALLOC(CKTfvk,size+1,double); @@ -43,9 +42,6 @@ NIreinit( CKTcircuit *ckt) CKALLOC(CKTmkCurKCLarray,size+1,CKTmkCurKCLnode*); for (i = 0 ; i <= size ; i++) ckt->CKTmkCurKCLarray [i] = NULL ; - CKALLOC(CKTdiag,size+1,double*); - for (i = 0 ; i <= size ; i++) - ckt->CKTdiag [i] = NULL ; #endif #ifdef PREDICTOR diff --git a/src/spicelib/analysis/cktdojob.c b/src/spicelib/analysis/cktdojob.c index 8b995bb40..fceef77f8 100644 --- a/src/spicelib/analysis/cktdojob.c +++ b/src/spicelib/analysis/cktdojob.c @@ -103,6 +103,7 @@ CKTdoJob(CKTcircuit *ckt, int reset, TSKtask *task) ckt->CKTtroubleNode = 0; ckt->CKTtroubleElt = NULL; ckt->CKTnoopac = task->TSKnoopac && ckt->CKTisLinear; + ckt->CKTuseDeviceGmin = task->TSKuseDeviceGmin ; #ifdef NEWTRUNC ckt->CKTlteReltol = task->TSKlteReltol; ckt->CKTlteAbstol = task->TSKlteAbstol; diff --git a/src/spicelib/analysis/cktload.c b/src/spicelib/analysis/cktload.c index 656c04561..078dff42a 100644 --- a/src/spicelib/analysis/cktload.c +++ b/src/spicelib/analysis/cktload.c @@ -79,16 +79,19 @@ CKTload(CKTcircuit *ckt) } } -#ifdef KIRCHHOFF /* GMIN Stepping */ for (i = 1 ; i <= size ; i++) { if (ckt->CKTdiag [i] != NULL) { - *(ckt->CKTdiag [i]) += ckt->CKTdiagGmin ; + if (ckt->CKTuseDeviceGmin) + { + *(ckt->CKTdiag [i]) += ckt->CKTgmin ; + } else { + *(ckt->CKTdiag [i]) += ckt->CKTdiagGmin ; + } } } -#endif #ifdef XSPICE /* gtri - add - wbk - 11/26/90 - reset the MIF init flags */ @@ -199,19 +202,22 @@ ZeroNoncurRow(SMPmatrix *matrix, CKTnode *nodes, int rownum) return currents; } +#ifdef KIRCHHOFF int CKTloadKCL (CKTcircuit *ckt) { -/* for (i = 0 ; i < DEVmaxnum ; i++) + int error, i ; + + for (i = 0 ; i < DEVmaxnum ; i++) { - if (DEVices[i] && DEVices[i]->DEVload && ckt->CKThead[i]) + if (DEVices[i] && DEVices[i]->DEVloadKCL && ckt->CKThead[i]) { - error = DEVices[i]->DEVload (ckt->CKThead[i], ckt) ; + error = DEVices[i]->DEVloadKCL (ckt->CKThead[i], ckt) ; if (error) return (error) ; } - }*/ - DEVices[10]->DEVloadKCL (ckt->CKThead[10], ckt) ; + } return (OK) ; } +#endif diff --git a/src/spicelib/analysis/cktop.c b/src/spicelib/analysis/cktop.c index ea8cb0491..270976505 100644 --- a/src/spicelib/analysis/cktop.c +++ b/src/spicelib/analysis/cktop.c @@ -155,11 +155,21 @@ dynamic_gmin (CKTcircuit * ckt, long int firstmode, factor = ckt->CKTgminFactor; OldGmin = 1e-2; gtarget = MAX (ckt->CKTgmin, ckt->CKTgshunt); - ckt->CKTdiagGmin = OldGmin / factor; + if (ckt->CKTuseDeviceGmin) + { + ckt->CKTgmin = OldGmin / factor ; + } else { + ckt->CKTdiagGmin = OldGmin / factor ; + } success = failed = 0; while ((!success) && (!failed)) { - fprintf (stderr, "Trying gmin = %12.4E ", ckt->CKTdiagGmin); + if (ckt->CKTuseDeviceGmin) + { + fprintf (stderr, "Trying gmin = %12.4E ", ckt->CKTgmin) ; + } else { + fprintf (stderr, "Trying gmin = %12.4E ", ckt->CKTdiagGmin) ; + } ckt->CKTnoncon = 1; iters = ckt->CKTstat->STATnumIter; @@ -171,35 +181,70 @@ dynamic_gmin (CKTcircuit * ckt, long int firstmode, SPfrontEnd->IFerror (ERR_INFO, "One successful gmin step", NULL); - if (ckt->CKTdiagGmin <= gtarget) { - success = 1; - } else { - i = 0; - for (n = ckt->CKTnodes; n; n = n->next) { - OldRhsOld[i] = ckt->CKTrhsOld[n->number]; - i++; - } - - for (i = 0; i < ckt->CKTnumStates; i++) { - OldCKTstate0[i] = ckt->CKTstate0[i]; - } - - if (iters <= (ckt->CKTdcTrcvMaxIter / 4)) { - factor *= sqrt (factor); - if (factor > ckt->CKTgminFactor) - factor = ckt->CKTgminFactor; - } - - if (iters > (3 * ckt->CKTdcTrcvMaxIter / 4)) - factor = sqrt (factor); - - OldGmin = ckt->CKTdiagGmin; - - if ((ckt->CKTdiagGmin) < (factor * gtarget)) { - factor = ckt->CKTdiagGmin / gtarget; - ckt->CKTdiagGmin = gtarget; + if (ckt->CKTuseDeviceGmin) + { + if (ckt->CKTgmin <= gtarget) { + success = 1; } else { - ckt->CKTdiagGmin /= factor; + i = 0; + for (n = ckt->CKTnodes; n; n = n->next) { + OldRhsOld[i] = ckt->CKTrhsOld[n->number]; + i++; + } + + for (i = 0; i < ckt->CKTnumStates; i++) { + OldCKTstate0[i] = ckt->CKTstate0[i]; + } + + if (iters <= (ckt->CKTdcTrcvMaxIter / 4)) { + factor *= sqrt (factor); + if (factor > ckt->CKTgminFactor) + factor = ckt->CKTgminFactor; + } + + if (iters > (3 * ckt->CKTdcTrcvMaxIter / 4)) + factor = sqrt (factor); + + OldGmin = ckt->CKTgmin; + + if ((ckt->CKTgmin) < (factor * gtarget)) { + factor = ckt->CKTgmin / gtarget; + ckt->CKTgmin = gtarget; + } else { + ckt->CKTgmin /= factor; + } + } + } else { + if (ckt->CKTdiagGmin <= gtarget) { + success = 1; + } else { + i = 0; + for (n = ckt->CKTnodes; n; n = n->next) { + OldRhsOld[i] = ckt->CKTrhsOld[n->number]; + i++; + } + + for (i = 0; i < ckt->CKTnumStates; i++) { + OldCKTstate0[i] = ckt->CKTstate0[i]; + } + + if (iters <= (ckt->CKTdcTrcvMaxIter / 4)) { + factor *= sqrt (factor); + if (factor > ckt->CKTgminFactor) + factor = ckt->CKTgminFactor; + } + + if (iters > (3 * ckt->CKTdcTrcvMaxIter / 4)) + factor = sqrt (factor); + + OldGmin = ckt->CKTdiagGmin; + + if ((ckt->CKTdiagGmin) < (factor * gtarget)) { + factor = ckt->CKTdiagGmin / gtarget; + ckt->CKTdiagGmin = gtarget; + } else { + ckt->CKTdiagGmin /= factor; + } } } } else { @@ -213,7 +258,12 @@ dynamic_gmin (CKTcircuit * ckt, long int firstmode, "Further gmin increment", NULL); factor = sqrt (sqrt (factor)); - ckt->CKTdiagGmin = OldGmin / factor; + if (ckt->CKTuseDeviceGmin) + { + ckt->CKTgmin = OldGmin / factor ; + } else { + ckt->CKTdiagGmin = OldGmin / factor ; + } i = 0; for (n = ckt->CKTnodes; n; n = n->next) { diff --git a/src/spicelib/analysis/cktsetup.c b/src/spicelib/analysis/cktsetup.c index 36409186b..92cb88aeb 100644 --- a/src/spicelib/analysis/cktsetup.c +++ b/src/spicelib/analysis/cktsetup.c @@ -79,6 +79,14 @@ CKTsetup(CKTcircuit *ckt) if(error) return(error); } } + + if (ckt->CKTuseDeviceGmin) + { + fprintf (stderr, "Using Device Gmin Stepping...\n") ; + } else { + fprintf (stderr, "Using Diag Gmin Stepping...\n") ; + } + for(i=0;i<=MAX(2,ckt->CKTmaxOrder)+1;i++) { /* dctran needs 3 states as minimum */ CKALLOC(ckt->CKTstates[i],ckt->CKTnumStates,double); } @@ -128,7 +136,6 @@ CKTsetup(CKTcircuit *ckt) /* gtri - end - Setup for adding rshunt option resistors */ #endif -#ifdef KIRCHHOFF CKTnode *node ; node = ckt->CKTnodes ; @@ -142,6 +149,7 @@ CKTsetup(CKTcircuit *ckt) } } +#ifdef KIRCHHOFF /** Marking node as Non-Linear when needed * By default every node is Linear */ diff --git a/src/spicelib/analysis/cktsopt.c b/src/spicelib/analysis/cktsopt.c index 22249abcd..418c6decc 100644 --- a/src/spicelib/analysis/cktsopt.c +++ b/src/spicelib/analysis/cktsopt.c @@ -161,6 +161,10 @@ CKTsetOpt(CKTcircuit *ckt, JOB *anal, int opt, IFvalue *val) case OPT_NOOPAC: task->TSKnoopac = (val->iValue != 0); break; + case OPT_USEDEVICEGMIN: + task->TSKuseDeviceGmin = (val->iValue != 0) ; + break ; + /* gtri - begin - wbk - add new options */ #ifdef XSPICE case OPT_EVT_MAX_OP_ALTER: @@ -313,7 +317,8 @@ static IFparm OPTtbl[] = { { "reldv", OPT_RELDV, IF_SET|IF_REAL, "Maximum relative iter-iter node voltage change" }, { "noopac", OPT_NOOPAC, IF_SET|IF_FLAG, - "No op calculation in ac if circuit is linear" } + "No op calculation in ac if circuit is linear" }, + { "use_device_gmin", OPT_USEDEVICEGMIN, IF_SET|IF_FLAG, "Use Device Gmin Stepping, instead of Diag Gmin Stepping" } }; int OPTcount = NUMELEMS(OPTtbl); diff --git a/src/spicelib/devices/asrc/asrcinit.c b/src/spicelib/devices/asrc/asrcinit.c index 088f5df93..ed5e3ebbc 100644 --- a/src/spicelib/devices/asrc/asrcinit.c +++ b/src/spicelib/devices/asrc/asrcinit.c @@ -76,7 +76,8 @@ SPICEdev ASRCinfo = { /* DEVmodSize */ &ASRCmSize, #ifdef KIRCHHOFF - /* DEVnodeIsNonLinear */ ASRCnodeIsNonLinear + /* DEVnodeIsNonLinear */ ASRCnodeIsNonLinear, + /* DEVloadKCL */ NULL #endif }; diff --git a/src/spicelib/devices/bjt/bjtinit.c b/src/spicelib/devices/bjt/bjtinit.c index f3684ceea..f5bd2e608 100644 --- a/src/spicelib/devices/bjt/bjtinit.c +++ b/src/spicelib/devices/bjt/bjtinit.c @@ -75,7 +75,8 @@ SPICEdev BJTinfo = { /* description from struct IFdevice */ /* DEVmodSize */ &BJTmSize, #ifdef KIRCHHOFF - /* DEVnodeIsNonLinear */ BJTnodeIsNonLinear + /* DEVnodeIsNonLinear */ BJTnodeIsNonLinear, + /* DEVloadKCL */ NULL #endif }; diff --git a/src/spicelib/devices/bsim1/bsim1init.c b/src/spicelib/devices/bsim1/bsim1init.c index f66e128de..017f24796 100644 --- a/src/spicelib/devices/bsim1/bsim1init.c +++ b/src/spicelib/devices/bsim1/bsim1init.c @@ -75,7 +75,8 @@ SPICEdev B1info = { /* DEVmodSize */ &B1mSize, #ifdef KIRCHHOFF - /* DEVnodeIsNonLinear */ B1nodeIsNonLinear + /* DEVnodeIsNonLinear */ B1nodeIsNonLinear, + /* DEVloadKCL */ NULL #endif }; diff --git a/src/spicelib/devices/bsim2/bsim2init.c b/src/spicelib/devices/bsim2/bsim2init.c index a800f50f5..2ce73d965 100644 --- a/src/spicelib/devices/bsim2/bsim2init.c +++ b/src/spicelib/devices/bsim2/bsim2init.c @@ -75,7 +75,8 @@ SPICEdev B2info = { /* DEVmodSize */ &B2mSize, #ifdef KIRCHHOFF - /* DEVnodeIsNonLinear */ B2nodeIsNonLinear + /* DEVnodeIsNonLinear */ B2nodeIsNonLinear, + /* DEVloadKCL */ NULL #endif }; diff --git a/src/spicelib/devices/bsim3/bsim3init.c b/src/spicelib/devices/bsim3/bsim3init.c index c1c881f57..310c6a114 100644 --- a/src/spicelib/devices/bsim3/bsim3init.c +++ b/src/spicelib/devices/bsim3/bsim3init.c @@ -74,7 +74,8 @@ SPICEdev BSIM3info = { /* DEVmodSize */ &BSIM3mSize, #ifdef KIRCHHOFF - /* DEVnodeIsNonLinear */ BSIM3nodeIsNonLinear + /* DEVnodeIsNonLinear */ BSIM3nodeIsNonLinear, + /* DEVloadKCL */ NULL #endif }; diff --git a/src/spicelib/devices/bsim3soi_dd/b3soiddinit.c b/src/spicelib/devices/bsim3soi_dd/b3soiddinit.c index 6d6faa501..ae72581b1 100644 --- a/src/spicelib/devices/bsim3soi_dd/b3soiddinit.c +++ b/src/spicelib/devices/bsim3soi_dd/b3soiddinit.c @@ -72,7 +72,8 @@ SPICEdev B3SOIDDinfo = { /* DEVmodSize */ &B3SOIDDmSize, #ifdef KIRCHHOFF - /* DEVnodeIsNonLinear */ B3SOIDDnodeIsNonLinear + /* DEVnodeIsNonLinear */ B3SOIDDnodeIsNonLinear, + /* DEVloadKCL */ NULL #endif }; diff --git a/src/spicelib/devices/bsim3soi_fd/b3soifdinit.c b/src/spicelib/devices/bsim3soi_fd/b3soifdinit.c index 5c3a12d8f..e70a506ee 100644 --- a/src/spicelib/devices/bsim3soi_fd/b3soifdinit.c +++ b/src/spicelib/devices/bsim3soi_fd/b3soifdinit.c @@ -73,7 +73,8 @@ SPICEdev B3SOIFDinfo = { /* DEVmodSize*/ &B3SOIFDmSize, #ifdef KIRCHHOFF - /* DEVnodeIsNonLinear */ B3SOIFDnodeIsNonLinear + /* DEVnodeIsNonLinear */ B3SOIFDnodeIsNonLinear, + /* DEVloadKCL */ NULL #endif }; diff --git a/src/spicelib/devices/bsim3soi_pd/b3soipdinit.c b/src/spicelib/devices/bsim3soi_pd/b3soipdinit.c index e82c80a32..1ef2f5354 100644 --- a/src/spicelib/devices/bsim3soi_pd/b3soipdinit.c +++ b/src/spicelib/devices/bsim3soi_pd/b3soipdinit.c @@ -74,7 +74,8 @@ SPICEdev B3SOIPDinfo = { /* DEVmodSize*/ &B3SOIPDmSize, #ifdef KIRCHHOFF - /* DEVnodeIsNonLinear */ B3SOIPDnodeIsNonLinear + /* DEVnodeIsNonLinear */ B3SOIPDnodeIsNonLinear, + /* DEVloadKCL */ NULL #endif }; diff --git a/src/spicelib/devices/bsim3v0/bsim3v0init.c b/src/spicelib/devices/bsim3v0/bsim3v0init.c index ebf584667..0d2d1b4cd 100644 --- a/src/spicelib/devices/bsim3v0/bsim3v0init.c +++ b/src/spicelib/devices/bsim3v0/bsim3v0init.c @@ -73,7 +73,8 @@ SPICEdev B3v0info = { /* DEVmodSize */ &BSIM3v0mSize, #ifdef KIRCHHOFF - /* DEVnodeIsNonLinear */ BSIM3v0nodeIsNonLinear + /* DEVnodeIsNonLinear */ BSIM3v0nodeIsNonLinear, + /* DEVloadKCL */ NULL #endif }; diff --git a/src/spicelib/devices/bsim3v1/bsim3v1init.c b/src/spicelib/devices/bsim3v1/bsim3v1init.c index a3399423c..86d5b948a 100644 --- a/src/spicelib/devices/bsim3v1/bsim3v1init.c +++ b/src/spicelib/devices/bsim3v1/bsim3v1init.c @@ -73,7 +73,8 @@ SPICEdev BSIM3v1info = { /* DEVmodSize */ &BSIM3v1mSize, #ifdef KIRCHHOFF - /* DEVnodeIsNonLinear */ BSIM3v1nodeIsNonLinear + /* DEVnodeIsNonLinear */ BSIM3v1nodeIsNonLinear, + /* DEVloadKCL */ NULL #endif }; diff --git a/src/spicelib/devices/bsim3v32/bsim3v32init.c b/src/spicelib/devices/bsim3v32/bsim3v32init.c index da864dbf2..d9df84c93 100644 --- a/src/spicelib/devices/bsim3v32/bsim3v32init.c +++ b/src/spicelib/devices/bsim3v32/bsim3v32init.c @@ -74,7 +74,8 @@ SPICEdev BSIM3v32info = { /* DEVmodSize */ &BSIM3v32mSize, #ifdef KIRCHHOFF - /* DEVnodeIsNonLinear */ BSIM3v32nodeIsNonLinear + /* DEVnodeIsNonLinear */ BSIM3v32nodeIsNonLinear, + /* DEVloadKCL */ NULL #endif }; diff --git a/src/spicelib/devices/bsim4v4/bsim4v4init.c b/src/spicelib/devices/bsim4v4/bsim4v4init.c index 142710c4a..afe29351b 100644 --- a/src/spicelib/devices/bsim4v4/bsim4v4init.c +++ b/src/spicelib/devices/bsim4v4/bsim4v4init.c @@ -75,7 +75,8 @@ SPICEdev BSIM4v4info = { &BSIM4v4mSize, /* DEVmodSize */ #ifdef KIRCHHOFF - BSIM4v4nodeIsNonLinear /* DEVnodeIsNonLinear */ + BSIM4v4nodeIsNonLinear, /* DEVnodeIsNonLinear */ + NULL /* DEVloadKCL */ #endif }; diff --git a/src/spicelib/devices/bsim4v5/bsim4v5init.c b/src/spicelib/devices/bsim4v5/bsim4v5init.c index 5b381e1fa..540c497ea 100644 --- a/src/spicelib/devices/bsim4v5/bsim4v5init.c +++ b/src/spicelib/devices/bsim4v5/bsim4v5init.c @@ -75,7 +75,8 @@ SPICEdev BSIM4v5info = { &BSIM4v5mSize, /* DEVmodSize */ #ifdef KIRCHHOFF - BSIM4v5nodeIsNonLinear /* DEVnodeIsNonLinear */ + BSIM4v5nodeIsNonLinear, /* DEVnodeIsNonLinear */ + NULL /* DEVloadKCL */ #endif }; diff --git a/src/spicelib/devices/bsim4v6/bsim4v6init.c b/src/spicelib/devices/bsim4v6/bsim4v6init.c index 71709ce36..1c1ebe27d 100644 --- a/src/spicelib/devices/bsim4v6/bsim4v6init.c +++ b/src/spicelib/devices/bsim4v6/bsim4v6init.c @@ -75,7 +75,8 @@ SPICEdev BSIM4v6info = { &BSIM4v6mSize, /* DEVmodSize */ #ifdef KIRCHHOFF - BSIM4v6nodeIsNonLinear /* DEVnodeIsNonLinear */ + BSIM4v6nodeIsNonLinear, /* DEVnodeIsNonLinear */ + NULL /* DEVloadKCL */ #endif }; diff --git a/src/spicelib/devices/bsimsoi/b4soiinit.c b/src/spicelib/devices/bsimsoi/b4soiinit.c index e6eac027e..7f32395b8 100644 --- a/src/spicelib/devices/bsimsoi/b4soiinit.c +++ b/src/spicelib/devices/bsimsoi/b4soiinit.c @@ -73,7 +73,8 @@ SPICEdev B4SOIinfo = { /* DEVmodSize */ &B4SOImSize, #ifdef KIRCHHOFF - /* DEVnodeIsNonLinear */ B4SOInodeIsNonLinear + /* DEVnodeIsNonLinear */ B4SOInodeIsNonLinear, + /* DEVloadKCL */ NULL #endif }; diff --git a/src/spicelib/devices/cap/capinit.c b/src/spicelib/devices/cap/capinit.c index fc11998a4..a07ac011c 100644 --- a/src/spicelib/devices/cap/capinit.c +++ b/src/spicelib/devices/cap/capinit.c @@ -74,7 +74,8 @@ SPICEdev CAPinfo = { /* DEVmodSize */ &CAPmSize, #ifdef KIRCHHOFF - /* DEVnodeIsNonLinear */ CAPnodeIsNonLinear + /* DEVnodeIsNonLinear */ CAPnodeIsNonLinear, + /* DEVloadKCL */ NULL #endif }; diff --git a/src/spicelib/devices/cccs/cccsinit.c b/src/spicelib/devices/cccs/cccsinit.c index a36c67843..431134bf4 100644 --- a/src/spicelib/devices/cccs/cccsinit.c +++ b/src/spicelib/devices/cccs/cccsinit.c @@ -74,7 +74,8 @@ SPICEdev CCCSinfo = { /* DEVmodSize */ &CCCSmSize, #ifdef KIRCHHOFF - /* DEVnodeIsNonLinear */ NULL + /* DEVnodeIsNonLinear */ NULL, + /* DEVloadKCL */ NULL #endif }; diff --git a/src/spicelib/devices/ccvs/ccvsinit.c b/src/spicelib/devices/ccvs/ccvsinit.c index 3f1330863..119a38469 100644 --- a/src/spicelib/devices/ccvs/ccvsinit.c +++ b/src/spicelib/devices/ccvs/ccvsinit.c @@ -75,7 +75,8 @@ SPICEdev CCVSinfo = { /* DEVmodSize */ &CCVSmSize, #ifdef KIRCHHOFF - /* DEVnodeIsNonLinear */ NULL + /* DEVnodeIsNonLinear */ NULL, + /* DEVloadKCL */ NULL #endif }; diff --git a/src/spicelib/devices/cpl/cplinit.c b/src/spicelib/devices/cpl/cplinit.c index be0bd922c..2c2f1572d 100644 --- a/src/spicelib/devices/cpl/cplinit.c +++ b/src/spicelib/devices/cpl/cplinit.c @@ -75,7 +75,8 @@ SPICEdev CPLinfo = { /* DEVmodSize */ &CPLmSize, #ifdef KIRCHHOFF -/* DEVnodeIsNonLinear */ NULL +/* DEVnodeIsNonLinear */ NULL, +/* DEVloadKCL */ NULL #endif }; diff --git a/src/spicelib/devices/csw/cswinit.c b/src/spicelib/devices/csw/cswinit.c index b2fbe4dc4..922d396a6 100644 --- a/src/spicelib/devices/csw/cswinit.c +++ b/src/spicelib/devices/csw/cswinit.c @@ -77,7 +77,8 @@ SPICEdev CSWinfo = { /* DEVmodSize */ &CSWmSize, #ifdef KIRCHHOFF - /* DEVnodeIsNonLinear */ NULL + /* DEVnodeIsNonLinear */ NULL, + /* DEVloadKCL */ NULL #endif }; diff --git a/src/spicelib/devices/dio/dioinit.c b/src/spicelib/devices/dio/dioinit.c index 3caea6415..f0a6923e4 100644 --- a/src/spicelib/devices/dio/dioinit.c +++ b/src/spicelib/devices/dio/dioinit.c @@ -76,7 +76,8 @@ SPICEdev DIOinfo = { /* DEVmodSize */ &DIOmSize, #ifdef KIRCHHOFF - /* DEVnodeIsNonLinear */ DIOnodeIsNonLinear + /* DEVnodeIsNonLinear */ DIOnodeIsNonLinear, + /* DEVloadKCL */ NULL #endif }; diff --git a/src/spicelib/devices/hfet1/hfetinit.c b/src/spicelib/devices/hfet1/hfetinit.c index 2a348e688..ce421db34 100644 --- a/src/spicelib/devices/hfet1/hfetinit.c +++ b/src/spicelib/devices/hfet1/hfetinit.c @@ -75,7 +75,8 @@ SPICEdev HFETAinfo = { /* DEVmodSize */ &HFETAmSize, #ifdef KIRCHHOFF - /* DEVnodeIsNonLinear */ HFETAnodeIsNonLinear + /* DEVnodeIsNonLinear */ HFETAnodeIsNonLinear, + /* DEVloadKCL */ NULL #endif }; diff --git a/src/spicelib/devices/hfet2/hfet2init.c b/src/spicelib/devices/hfet2/hfet2init.c index 97a1b5a4e..87036a78a 100644 --- a/src/spicelib/devices/hfet2/hfet2init.c +++ b/src/spicelib/devices/hfet2/hfet2init.c @@ -75,7 +75,8 @@ SPICEdev HFET2info = { /* DEVmodSize */ &HFET2mSize, #ifdef KIRCHHOFF - /* DEVnodeIsNonLinear */ HFET2nodeIsNonLinear + /* DEVnodeIsNonLinear */ HFET2nodeIsNonLinear, + /* DEVloadKCL */ NULL #endif }; diff --git a/src/spicelib/devices/hisim2/hsm2init.c b/src/spicelib/devices/hisim2/hsm2init.c index dbbb0aff7..141627de3 100644 --- a/src/spicelib/devices/hisim2/hsm2init.c +++ b/src/spicelib/devices/hisim2/hsm2init.c @@ -73,7 +73,8 @@ SPICEdev HSM2info = { /* DEVmodSize */ &HSM2mSize, #ifdef KIRCHHOFF - /* DEVnodeIsNonLinear */ HSM2nodeIsNonLinear + /* DEVnodeIsNonLinear */ HSM2nodeIsNonLinear, + /* DEVloadKCL */ NULL #endif }; diff --git a/src/spicelib/devices/hisimhv1/hsmhvinit.c b/src/spicelib/devices/hisimhv1/hsmhvinit.c index e025c6aa2..e76d6d78d 100644 --- a/src/spicelib/devices/hisimhv1/hsmhvinit.c +++ b/src/spicelib/devices/hisimhv1/hsmhvinit.c @@ -73,7 +73,8 @@ SPICEdev HSMHVinfo = { /* DEVmodSize */ &HSMHVmSize, #ifdef KIRCHHOFF - /* DEVnodeIsNonLinear */ HSMHVnodeIsNonLinear + /* DEVnodeIsNonLinear */ HSMHVnodeIsNonLinear, + /* DEVloadKCL */ NULL #endif }; diff --git a/src/spicelib/devices/ind/indinit.c b/src/spicelib/devices/ind/indinit.c index 0513f2750..8f4134d3b 100644 --- a/src/spicelib/devices/ind/indinit.c +++ b/src/spicelib/devices/ind/indinit.c @@ -74,7 +74,8 @@ SPICEdev INDinfo = { /* DEVmodSize */ &INDmSize, #ifdef KIRCHHOFF - /* DEVnodeIsNonLinear */ INDnodeIsNonLinear + /* DEVnodeIsNonLinear */ INDnodeIsNonLinear, + /* DEVloadKCL */ NULL #endif }; @@ -147,7 +148,8 @@ SPICEdev MUTinfo = { /* DEVmodSize */ &MUTmSize, #ifdef KIRCHHOFF - /* DEVnodeIsNonLinear */ NULL + /* DEVnodeIsNonLinear */ NULL, + /* DEVloadKCL */ NULL #endif }; diff --git a/src/spicelib/devices/isrc/isrcinit.c b/src/spicelib/devices/isrc/isrcinit.c index c8260709a..39f9457c8 100644 --- a/src/spicelib/devices/isrc/isrcinit.c +++ b/src/spicelib/devices/isrc/isrcinit.c @@ -75,7 +75,8 @@ SPICEdev ISRCinfo = { /* DEVmodSize */ &ISRCmSize, #ifdef KIRCHHOFF - /* DEVnodeIsNonLinear */ NULL + /* DEVnodeIsNonLinear */ NULL, + /* DEVloadKCL */ NULL #endif }; diff --git a/src/spicelib/devices/jfet/jfetinit.c b/src/spicelib/devices/jfet/jfetinit.c index ad58f7a3b..59bd1d3f2 100644 --- a/src/spicelib/devices/jfet/jfetinit.c +++ b/src/spicelib/devices/jfet/jfetinit.c @@ -75,7 +75,8 @@ SPICEdev JFETinfo = { /* DEVmodSize */ &JFETmSize, #ifdef KIRCHHOFF - /* DEVnodeIsNonLinear */ JFETnodeIsNonLinear + /* DEVnodeIsNonLinear */ JFETnodeIsNonLinear, + /* DEVloadKCL */ NULL #endif }; diff --git a/src/spicelib/devices/jfet2/jfet2init.c b/src/spicelib/devices/jfet2/jfet2init.c index 7b90d19f6..adcd5c40d 100644 --- a/src/spicelib/devices/jfet2/jfet2init.c +++ b/src/spicelib/devices/jfet2/jfet2init.c @@ -75,7 +75,8 @@ SPICEdev JFET2info = { /* DEVmodSize */ &JFET2mSize, #ifdef KIRCHHOFF - /* DEVnodeIsNonLinear */ JFET2nodeIsNonLinear + /* DEVnodeIsNonLinear */ JFET2nodeIsNonLinear, + /* DEVloadKCL */ NULL #endif }; diff --git a/src/spicelib/devices/ltra/ltrainit.c b/src/spicelib/devices/ltra/ltrainit.c index c68a4eac0..6a9f34d53 100644 --- a/src/spicelib/devices/ltra/ltrainit.c +++ b/src/spicelib/devices/ltra/ltrainit.c @@ -75,7 +75,8 @@ SPICEdev LTRAinfo = { /* DEVmodSize */ <RAmSize, #ifdef KIRCHHOFF - /* DEVnodeIsNonLinear */ NULL + /* DEVnodeIsNonLinear */ NULL, + /* DEVloadKCL */ NULL #endif }; diff --git a/src/spicelib/devices/mes/mesinit.c b/src/spicelib/devices/mes/mesinit.c index 4bac1ef51..68c270d33 100644 --- a/src/spicelib/devices/mes/mesinit.c +++ b/src/spicelib/devices/mes/mesinit.c @@ -75,7 +75,8 @@ SPICEdev MESinfo = { /* DEVmodSize */ &MESmSize, #ifdef KIRCHHOFF - /* DEVnodeIsNonLinear */ MESnodeIsNonLinear + /* DEVnodeIsNonLinear */ MESnodeIsNonLinear, + /* DEVloadKCL */ NULL #endif }; diff --git a/src/spicelib/devices/mesa/mesainit.c b/src/spicelib/devices/mesa/mesainit.c index 0c2a69ea8..8febc5545 100644 --- a/src/spicelib/devices/mesa/mesainit.c +++ b/src/spicelib/devices/mesa/mesainit.c @@ -75,7 +75,8 @@ SPICEdev MESAinfo = { /* DEVmodSize */ &MESAmSize, #ifdef KIRCHHOFF - /* DEVnodeIsNonLinear */ MESAnodeIsNonLinear + /* DEVnodeIsNonLinear */ MESAnodeIsNonLinear, + /* DEVloadKCL */ NULL #endif }; diff --git a/src/spicelib/devices/mos1/mos1init.c b/src/spicelib/devices/mos1/mos1init.c index 008871d06..a2d28cbaa 100644 --- a/src/spicelib/devices/mos1/mos1init.c +++ b/src/spicelib/devices/mos1/mos1init.c @@ -75,7 +75,8 @@ SPICEdev MOS1info = { /* DEVmodSize */ &MOS1mSize, #ifdef KIRCHHOFF - /* DEVnodeIsNonLinear */ MOS1nodeIsNonLinear + /* DEVnodeIsNonLinear */ MOS1nodeIsNonLinear, + /* DEVloadKCL */ NULL #endif }; diff --git a/src/spicelib/devices/mos2/mos2init.c b/src/spicelib/devices/mos2/mos2init.c index 3b5bc7a6b..26064a4a0 100644 --- a/src/spicelib/devices/mos2/mos2init.c +++ b/src/spicelib/devices/mos2/mos2init.c @@ -75,7 +75,8 @@ SPICEdev MOS2info = { /* DEVmodSize */ &MOS2mSize, #ifdef KIRCHHOFF - /* DEVnodeIsNonLinear */ MOS2nodeIsNonLinear + /* DEVnodeIsNonLinear */ MOS2nodeIsNonLinear, + /* DEVloadKCL */ NULL #endif }; diff --git a/src/spicelib/devices/mos3/mos3init.c b/src/spicelib/devices/mos3/mos3init.c index 1e194265f..9b1cecfae 100644 --- a/src/spicelib/devices/mos3/mos3init.c +++ b/src/spicelib/devices/mos3/mos3init.c @@ -75,7 +75,8 @@ SPICEdev MOS3info = { /* DEVmodSize */ &MOS3mSize, #ifdef KIRCHHOFF - /* DEVnodeIsNonLinear */ MOS3nodeIsNonLinear + /* DEVnodeIsNonLinear */ MOS3nodeIsNonLinear, + /* DEVloadKCL */ NULL #endif }; diff --git a/src/spicelib/devices/mos6/mos6init.c b/src/spicelib/devices/mos6/mos6init.c index a22c42ee8..6220c754f 100644 --- a/src/spicelib/devices/mos6/mos6init.c +++ b/src/spicelib/devices/mos6/mos6init.c @@ -75,7 +75,8 @@ SPICEdev MOS6info = { /* DEVmodSize */ &MOS6mSize, #ifdef KIRCHHOFF - /* DEVnodeIsNonLinear */ MOS6nodeIsNonLinear + /* DEVnodeIsNonLinear */ MOS6nodeIsNonLinear, + /* DEVloadKCL */ NULL #endif }; diff --git a/src/spicelib/devices/mos9/mos9init.c b/src/spicelib/devices/mos9/mos9init.c index 46edf84d5..4a6e5562b 100644 --- a/src/spicelib/devices/mos9/mos9init.c +++ b/src/spicelib/devices/mos9/mos9init.c @@ -75,7 +75,8 @@ SPICEdev MOS9info = { /* DEVmodSize */ &MOS9mSize, #ifdef KIRCHHOFF - /* DEVnodeIsNonLinear */ MOS9nodeIsNonLinear + /* DEVnodeIsNonLinear */ MOS9nodeIsNonLinear, + /* DEVloadKCL */ NULL #endif }; diff --git a/src/spicelib/devices/res/resinit.c b/src/spicelib/devices/res/resinit.c index 42859077d..7d25840fb 100644 --- a/src/spicelib/devices/res/resinit.c +++ b/src/spicelib/devices/res/resinit.c @@ -75,7 +75,8 @@ SPICEdev RESinfo = { /* DEVmodSize */ &RESmSize, #ifdef KIRCHHOFF - /* DEVnodeIsNonLinear */ RESnodeIsNonLinear + /* DEVnodeIsNonLinear */ RESnodeIsNonLinear, + /* DEVloadKCL */ NULL #endif }; diff --git a/src/spicelib/devices/soi3/soi3init.c b/src/spicelib/devices/soi3/soi3init.c index c6cda673c..4f7a453b6 100644 --- a/src/spicelib/devices/soi3/soi3init.c +++ b/src/spicelib/devices/soi3/soi3init.c @@ -75,7 +75,8 @@ SPICEdev SOI3info = { /* DEVmodSize */ &SOI3mSize, #ifdef KIRCHHOFF - /* DEVnodeIsNonLinear */ SOI3nodeIsNonLinear + /* DEVnodeIsNonLinear */ SOI3nodeIsNonLinear, + /* DEVloadKCL */ NULL #endif }; diff --git a/src/spicelib/devices/sw/swinit.c b/src/spicelib/devices/sw/swinit.c index fa570a222..1f5bbe535 100644 --- a/src/spicelib/devices/sw/swinit.c +++ b/src/spicelib/devices/sw/swinit.c @@ -76,7 +76,8 @@ SPICEdev SWinfo = { /* DEVmodSize */ &SWmSize, #ifdef KIRCHHOFF - /* DEVnodeIsNonLinear */ NULL + /* DEVnodeIsNonLinear */ NULL, + /* DEVloadKCL */ NULL #endif }; diff --git a/src/spicelib/devices/tra/trainit.c b/src/spicelib/devices/tra/trainit.c index b94626ca0..3f8d7fe35 100644 --- a/src/spicelib/devices/tra/trainit.c +++ b/src/spicelib/devices/tra/trainit.c @@ -75,7 +75,8 @@ SPICEdev TRAinfo = { /* DEVmodSize */ &TRAmSize, #ifdef KIRCHHOFF - /* DEVnodeIsNonLinear */ NULL + /* DEVnodeIsNonLinear */ NULL, + /* DEVloadKCL */ NULL #endif }; diff --git a/src/spicelib/devices/txl/txlinit.c b/src/spicelib/devices/txl/txlinit.c index 0c13db6f2..1dcd8c540 100644 --- a/src/spicelib/devices/txl/txlinit.c +++ b/src/spicelib/devices/txl/txlinit.c @@ -80,7 +80,8 @@ SPICEdev TXLinfo = { /* DEVmodSize */ &TXLmSize, #ifdef KIRCHHOFF - /* DEVnodeIsNonLinear */ NULL + /* DEVnodeIsNonLinear */ NULL, + /* DEVloadKCL */ NULL #endif }; diff --git a/src/spicelib/devices/urc/urcinit.c b/src/spicelib/devices/urc/urcinit.c index 2a7b20f70..70b16a07c 100644 --- a/src/spicelib/devices/urc/urcinit.c +++ b/src/spicelib/devices/urc/urcinit.c @@ -75,7 +75,8 @@ SPICEdev URCinfo = { /* DEVmodSize */ &URCmSize, #ifdef KIRCHHOFF - /* DEVnodeIsNonLinear */ NULL + /* DEVnodeIsNonLinear */ NULL, + /* DEVloadKCL */ NULL #endif }; diff --git a/src/spicelib/devices/vbic/vbicinit.c b/src/spicelib/devices/vbic/vbicinit.c index 172df0536..a697d541c 100644 --- a/src/spicelib/devices/vbic/vbicinit.c +++ b/src/spicelib/devices/vbic/vbicinit.c @@ -80,7 +80,8 @@ SPICEdev VBICinfo = { &VBICmSize, /* DEVmodSize */ #ifdef KIRCHHOFF - VBICnodeIsNonLinear /* DEVnodeIsNonLinear */ + VBICnodeIsNonLinear, /* DEVnodeIsNonLinear */ + NULL /* DEVloadKCL */ #endif }; diff --git a/src/spicelib/devices/vccs/vccsinit.c b/src/spicelib/devices/vccs/vccsinit.c index d6ec790ee..39fab70ac 100644 --- a/src/spicelib/devices/vccs/vccsinit.c +++ b/src/spicelib/devices/vccs/vccsinit.c @@ -75,7 +75,8 @@ SPICEdev VCCSinfo = { /* DEVmodSize */ &VCCSmSize, #ifdef KIRCHHOFF - /* DEVnodeIsNonLinear */ NULL + /* DEVnodeIsNonLinear */ NULL, + /* DEVloadKCL */ NULL #endif }; diff --git a/src/spicelib/devices/vcvs/vcvsinit.c b/src/spicelib/devices/vcvs/vcvsinit.c index 7c6d311b3..1aaed0e31 100644 --- a/src/spicelib/devices/vcvs/vcvsinit.c +++ b/src/spicelib/devices/vcvs/vcvsinit.c @@ -75,7 +75,8 @@ SPICEdev VCVSinfo = { /* DEVmodSize */ &VCVSmSize, #ifdef KIRCHHOFF - /* DEVnodeIsNonLinear */ NULL + /* DEVnodeIsNonLinear */ NULL, + /* DEVloadKCL */ NULL #endif }; diff --git a/src/spicelib/devices/vsrc/vsrcinit.c b/src/spicelib/devices/vsrc/vsrcinit.c index 7e75c7b4d..19bd7eff0 100644 --- a/src/spicelib/devices/vsrc/vsrcinit.c +++ b/src/spicelib/devices/vsrc/vsrcinit.c @@ -75,7 +75,8 @@ SPICEdev VSRCinfo = { /* DEVmodSize */ &VSRCmSize, #ifdef KIRCHHOFF - /* DEVnodeIsNonLinear */ VSRCnodeIsNonLinear + /* DEVnodeIsNonLinear */ VSRCnodeIsNonLinear, + /* DEVloadKCL */ NULL #endif };