From a93d51a074209a39d2a42eed5e2a461b44e3db6b Mon Sep 17 00:00:00 2001 From: Francesco Lannutti Date: Mon, 27 May 2013 10:23:04 +0200 Subject: [PATCH] Added a conditional compilation switch for the KCL Verification --- configure.ac | 10 +++ src/include/ngspice/cktdefs.h | 4 ++ src/include/ngspice/devdefs.h | 2 + src/maths/ni/niconv.c | 7 +++ src/maths/ni/nireinit.c | 12 +++- src/spicelib/analysis/cktload.c | 4 ++ src/spicelib/analysis/cktsetup.c | 2 + src/spicelib/devices/asrc/Makefile.am | 7 ++- src/spicelib/devices/asrc/asrcinit.c | 4 ++ src/spicelib/devices/bjt/Makefile.am | 4 +- src/spicelib/devices/bjt/bjtinit.c | 3 + src/spicelib/devices/bsim1/Makefile.am | 4 +- src/spicelib/devices/bsim1/bsim1init.c | 3 + src/spicelib/devices/bsim2/Makefile.am | 4 +- src/spicelib/devices/bsim2/b2ld.c | 3 +- src/spicelib/devices/bsim2/bsim2init.c | 3 + src/spicelib/devices/bsim3/Makefile.am | 4 +- src/spicelib/devices/bsim3/b3ld.c | 2 + src/spicelib/devices/bsim3/bsim3init.c | 3 + src/spicelib/devices/bsim3soi_dd/Makefile.am | 4 +- .../devices/bsim3soi_dd/b3soiddinit.c | 4 ++ src/spicelib/devices/bsim3soi_fd/Makefile.am | 4 +- .../devices/bsim3soi_fd/b3soifdinit.c | 4 ++ src/spicelib/devices/bsim3soi_pd/Makefile.am | 4 +- .../devices/bsim3soi_pd/b3soipdinit.c | 4 ++ src/spicelib/devices/bsim3v0/Makefile.am | 4 +- src/spicelib/devices/bsim3v0/bsim3v0init.c | 3 + src/spicelib/devices/bsim3v1/Makefile.am | 4 +- src/spicelib/devices/bsim3v1/bsim3v1init.c | 3 + src/spicelib/devices/bsim3v32/Makefile.am | 4 +- src/spicelib/devices/bsim3v32/bsim3v32init.c | 3 + src/spicelib/devices/bsim4/Makefile.am | 4 +- src/spicelib/devices/bsim4/b4ld.c | 2 + src/spicelib/devices/bsim4/bsim4init.c | 6 +- src/spicelib/devices/bsim4v4/Makefile.am | 4 +- src/spicelib/devices/bsim4v4/bsim4v4init.c | 6 +- src/spicelib/devices/bsim4v5/Makefile.am | 4 +- src/spicelib/devices/bsim4v5/bsim4v5init.c | 6 +- src/spicelib/devices/bsim4v6/Makefile.am | 4 +- src/spicelib/devices/bsim4v6/bsim4v6init.c | 6 +- src/spicelib/devices/bsimsoi/Makefile.am | 4 +- src/spicelib/devices/bsimsoi/b4soiinit.c | 4 ++ src/spicelib/devices/cap/capinit.c | 4 ++ src/spicelib/devices/cap/capload.c | 3 + src/spicelib/devices/cccs/cccsinit.c | 3 + src/spicelib/devices/cccs/cccsload.c | 3 + src/spicelib/devices/ccvs/ccvsinit.c | 3 + src/spicelib/devices/ccvs/ccvsload.c | 3 + src/spicelib/devices/cpl/cplinit.c | 3 + src/spicelib/devices/csw/cswinit.c | 3 + src/spicelib/devices/dio/Makefile.am | 5 +- src/spicelib/devices/dio/dioinit.c | 4 ++ src/spicelib/devices/hfet1/Makefile.am | 4 +- src/spicelib/devices/hfet1/hfetinit.c | 3 + src/spicelib/devices/hfet2/Makefile.am | 4 +- src/spicelib/devices/hfet2/hfet2init.c | 3 + src/spicelib/devices/hisim2/Makefile.am | 56 +++++++++-------- src/spicelib/devices/hisim2/hsm2init.c | 3 + src/spicelib/devices/hisimhv1/Makefile.am | 63 ++++++++++--------- src/spicelib/devices/hisimhv1/hsmhvinit.c | 3 + src/spicelib/devices/ind/indinit.c | 6 ++ src/spicelib/devices/ind/indload.c | 3 + src/spicelib/devices/isrc/isrcinit.c | 4 ++ src/spicelib/devices/isrc/isrcload.c | 2 + src/spicelib/devices/jfet/Makefile.am | 4 +- src/spicelib/devices/jfet/jfetinit.c | 3 + src/spicelib/devices/jfet2/Makefile.am | 5 +- src/spicelib/devices/jfet2/jfet2init.c | 3 + src/spicelib/devices/ltra/ltrainit.c | 3 + src/spicelib/devices/mes/Makefile.am | 4 +- src/spicelib/devices/mes/mesinit.c | 3 + src/spicelib/devices/mesa/Makefile.am | 4 +- src/spicelib/devices/mesa/mesainit.c | 3 + src/spicelib/devices/mos1/Makefile.am | 4 +- src/spicelib/devices/mos1/mos1init.c | 4 ++ src/spicelib/devices/mos1/mos1load.c | 4 +- src/spicelib/devices/mos2/Makefile.am | 5 +- src/spicelib/devices/mos2/mos2init.c | 4 ++ src/spicelib/devices/mos3/Makefile.am | 5 +- src/spicelib/devices/mos3/mos3init.c | 3 + src/spicelib/devices/mos6/Makefile.am | 4 +- src/spicelib/devices/mos6/mos6init.c | 4 ++ src/spicelib/devices/mos6/mos6load.c | 4 +- src/spicelib/devices/mos9/Makefile.am | 4 +- src/spicelib/devices/mos9/mos9init.c | 3 + src/spicelib/devices/res/resinit.c | 3 + src/spicelib/devices/res/resload.c | 2 + src/spicelib/devices/soi3/Makefile.am | 4 +- src/spicelib/devices/soi3/soi3init.c | 3 + src/spicelib/devices/sw/swinit.c | 3 + src/spicelib/devices/tra/trainit.c | 3 + src/spicelib/devices/txl/txlinit.c | 3 + src/spicelib/devices/urc/urcinit.c | 3 + src/spicelib/devices/vbic/Makefile.am | 4 +- src/spicelib/devices/vbic/vbicinit.c | 3 + src/spicelib/devices/vccs/vccsinit.c | 3 + src/spicelib/devices/vccs/vccsload.c | 3 + src/spicelib/devices/vcvs/vcvsinit.c | 3 + src/spicelib/devices/vcvs/vcvsload.c | 3 + src/spicelib/devices/vsrc/vsrcinit.c | 4 ++ src/spicelib/devices/vsrc/vsrcload.c | 2 + 101 files changed, 401 insertions(+), 96 deletions(-) diff --git a/configure.ac b/configure.ac index e1163084f..943e376b7 100644 --- a/configure.ac +++ b/configure.ac @@ -182,6 +182,10 @@ AC_ARG_WITH([tcl], AC_ARG_WITH([ngshared], [AS_HELP_STRING([--with-ngshared], [Compiles ngspice as shared library (dll)])]) +# --enable-kirchhoff: enable KCL +AC_ARG_ENABLE([kirchhoff], + [AS_HELP_STRING([--enable-kirchhoff], [Enables the Kirchhoff Current Law Verification])]) + # readline and editline cannot both be enabled if test "x$with_editline" = xyes; then if test "x$with_readline" = xyes; then @@ -880,6 +884,12 @@ fi AC_SUBST([XGRAPHDIR]) AC_SUBST([NOTXGRAPH]) +if test "x$enable_kirchhoff" = xyes; then + AC_DEFINE([KIRCHHOFF], [], [Define if we want to enable the Kirchhoff Current Law Verification]) + AC_MSG_RESULT([WARNING: Kirchhoff Current Law Verification Enabled (experimental)]) +fi +AM_CONDITIONAL([KIRCHHOFF_WANTED], [test "x$enable_kirchhoff" = xyes]) + AC_CHECK_PROGS([YACC], ['bison -y' byacc yacc]) ################# XSPICE ################################################## diff --git a/src/include/ngspice/cktdefs.h b/src/include/ngspice/cktdefs.h index d2ed108da..32e209d07 100644 --- a/src/include/ngspice/cktdefs.h +++ b/src/include/ngspice/cktdefs.h @@ -110,8 +110,12 @@ struct CKTcircuit { double *CKTrhs; /* current rhs value - being loaded */ double *CKTrhsOld; /* previous rhs value for convergence testing */ + +#ifdef KIRCHHOFF double *CKTfvk ; /* KCL Verification array */ int *CKTnodeIsLinear ; /* Flag to indicate if a node is linear or non-linear */ +#endif + double *CKTrhsSpare; /* spare rhs value for reordering */ double *CKTirhs; /* current rhs value - being loaded (imag) */ diff --git a/src/include/ngspice/devdefs.h b/src/include/ngspice/devdefs.h index 03c668367..874533f97 100644 --- a/src/include/ngspice/devdefs.h +++ b/src/include/ngspice/devdefs.h @@ -112,9 +112,11 @@ typedef struct SPICEdev { int *DEVinstSize; /* size of an instance */ int *DEVmodSize; /* size of a model */ +#ifdef KIRCHHOFF /* Francesco Lannutti */ int (*DEVnodeIsNonLinear)(GENmodel *, CKTcircuit *) ; /* Routine to declare a node as NonLinear */ +#endif } SPICEdev; /* instance of structure for each possible type of device */ diff --git a/src/maths/ni/niconv.c b/src/maths/ni/niconv.c index 517b36e33..b43c68fcf 100644 --- a/src/maths/ni/niconv.c +++ b/src/maths/ni/niconv.c @@ -21,12 +21,16 @@ NIconvTest(CKTcircuit *ckt) int i; /* generic loop variable */ int size; /* size of the matrix */ CKTnode *node; /* current matrix entry */ + +//#ifndef KIRCHHOFF double old; double new; double tol; +//#endif size = SMPmatSize (ckt->CKTmatrix) ; +//#ifndef KIRCHHOFF #ifdef STEPDEBUG for (i=1;i<=size;i++) { new = ckt->CKTrhs [i] ; @@ -55,6 +59,8 @@ NIconvTest(CKTcircuit *ckt) } } +//#else +#ifdef KIRCHHOFF /* KCL Verification */ double maximum = 0 ; @@ -84,6 +90,7 @@ NIconvTest(CKTcircuit *ckt) return 1 ; } } +#endif #ifdef NEWCONV i = CKTconvTest(ckt); diff --git a/src/maths/ni/nireinit.c b/src/maths/ni/nireinit.c index bfb6b4e50..30dce7b1f 100644 --- a/src/maths/ni/nireinit.c +++ b/src/maths/ni/nireinit.c @@ -21,19 +21,27 @@ Author: 1985 Thomas L. Quarles int NIreinit( CKTcircuit *ckt) { - int i, size; + int size; + +#if defined(PREDICTOR) || defined(KIRCHHOFF) + int i; +#endif size = SMPmatSize(ckt->CKTmatrix); CKALLOC(CKTrhs,size+1,double); CKALLOC(CKTrhsOld,size+1,double); - CKALLOC(CKTfvk,size+1,double); CKALLOC(CKTrhsSpare,size+1,double); CKALLOC(CKTirhs,size+1,double); CKALLOC(CKTirhsOld,size+1,double); CKALLOC(CKTirhsSpare,size+1,double); + +#ifdef KIRCHHOFF + CKALLOC(CKTfvk,size+1,double); CKALLOC(CKTnodeIsLinear,size+1,int); for (i = 0 ; i <= size ; i++) ckt->CKTnodeIsLinear [i] = 1 ; +#endif + #ifdef PREDICTOR CKALLOC(CKTpred,size+1,double); for( i=0;i<8;i++) { diff --git a/src/spicelib/analysis/cktload.c b/src/spicelib/analysis/cktload.c index ca5a7cadc..c8ec1a666 100644 --- a/src/spicelib/analysis/cktload.c +++ b/src/spicelib/analysis/cktload.c @@ -52,7 +52,11 @@ CKTload(CKTcircuit *ckt) size = SMPmatSize(ckt->CKTmatrix); for (i = 0; i <= size; i++) { ckt->CKTrhs[i] = 0; + +#ifdef KIRCHHOFF ckt->CKTfvk[i] = 0; +#endif + } SMPclear(ckt->CKTmatrix); #ifdef STEPDEBUG diff --git a/src/spicelib/analysis/cktsetup.c b/src/spicelib/analysis/cktsetup.c index 2e6a05351..4c55ef678 100644 --- a/src/spicelib/analysis/cktsetup.c +++ b/src/spicelib/analysis/cktsetup.c @@ -128,6 +128,7 @@ CKTsetup(CKTcircuit *ckt) /* gtri - end - Setup for adding rshunt option resistors */ #endif +#ifdef KIRCHHOFF /** Marking node as Non-Linear when needed * By default every node is Linear */ @@ -140,6 +141,7 @@ CKTsetup(CKTcircuit *ckt) return (error) ; } } +#endif return(OK); } diff --git a/src/spicelib/devices/asrc/Makefile.am b/src/spicelib/devices/asrc/Makefile.am index 56895b0d7..473ddf39c 100644 --- a/src/spicelib/devices/asrc/Makefile.am +++ b/src/spicelib/devices/asrc/Makefile.am @@ -17,13 +17,16 @@ libasrc_la_SOURCES = \ asrcinit.h \ asrcload.c \ asrcmdel.c \ - asrcnode.c \ asrcpar.c \ asrcpzld.c \ - asrcset.c \ + asrcset.c \ asrctemp.c +if KIRCHHOFF_WANTED +libasrc_la_SOURCES += asrcnode.c +endif + AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) MAINTAINERCLEANFILES = Makefile.in diff --git a/src/spicelib/devices/asrc/asrcinit.c b/src/spicelib/devices/asrc/asrcinit.c index 8d2c20281..088f5df93 100644 --- a/src/spicelib/devices/asrc/asrcinit.c +++ b/src/spicelib/devices/asrc/asrcinit.c @@ -74,7 +74,11 @@ SPICEdev ASRCinfo = { #endif /* DEVinstSize */ &ASRCiSize, /* DEVmodSize */ &ASRCmSize, + +#ifdef KIRCHHOFF /* DEVnodeIsNonLinear */ ASRCnodeIsNonLinear +#endif + }; diff --git a/src/spicelib/devices/bjt/Makefile.am b/src/spicelib/devices/bjt/Makefile.am index dd9f886ab..1babadbb7 100644 --- a/src/spicelib/devices/bjt/Makefile.am +++ b/src/spicelib/devices/bjt/Makefile.am @@ -22,7 +22,6 @@ libbjt_la_SOURCES = \ bjtmask.c \ bjtmdel.c \ bjtmpar.c \ - bjtnode.c \ bjtnoise.c \ bjtparam.c \ bjtpzld.c \ @@ -36,6 +35,9 @@ libbjt_la_SOURCES = \ bjttrunc.c +if KIRCHHOFF_WANTED +libbjt_la_SOURCES += bjtnode.c +endif AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) diff --git a/src/spicelib/devices/bjt/bjtinit.c b/src/spicelib/devices/bjt/bjtinit.c index 47df76b69..f3684ceea 100644 --- a/src/spicelib/devices/bjt/bjtinit.c +++ b/src/spicelib/devices/bjt/bjtinit.c @@ -73,7 +73,10 @@ SPICEdev BJTinfo = { /* description from struct IFdevice */ #endif /* DEVinstSize */ &BJTiSize, /* DEVmodSize */ &BJTmSize, + +#ifdef KIRCHHOFF /* DEVnodeIsNonLinear */ BJTnodeIsNonLinear +#endif }; diff --git a/src/spicelib/devices/bsim1/Makefile.am b/src/spicelib/devices/bsim1/Makefile.am index 64559702d..9face8fa5 100644 --- a/src/spicelib/devices/bsim1/Makefile.am +++ b/src/spicelib/devices/bsim1/Makefile.am @@ -19,7 +19,6 @@ libbsim1_la_SOURCES = \ b1moscap.c \ b1mpar.c \ b1par.c \ - b1node.c \ b1noi.c \ b1pzld.c \ b1set.c \ @@ -32,6 +31,9 @@ libbsim1_la_SOURCES = \ bsim1itf.h +if KIRCHHOFF_WANTED +libbsim1_la_SOURCES += b1node.c +endif AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) diff --git a/src/spicelib/devices/bsim1/bsim1init.c b/src/spicelib/devices/bsim1/bsim1init.c index fe123493c..f66e128de 100644 --- a/src/spicelib/devices/bsim1/bsim1init.c +++ b/src/spicelib/devices/bsim1/bsim1init.c @@ -73,7 +73,10 @@ SPICEdev B1info = { #endif /* DEVinstSize */ &B1iSize, /* DEVmodSize */ &B1mSize, + +#ifdef KIRCHHOFF /* DEVnodeIsNonLinear */ B1nodeIsNonLinear +#endif }; diff --git a/src/spicelib/devices/bsim2/Makefile.am b/src/spicelib/devices/bsim2/Makefile.am index 369eb1ecd..9c776fe1f 100644 --- a/src/spicelib/devices/bsim2/Makefile.am +++ b/src/spicelib/devices/bsim2/Makefile.am @@ -16,7 +16,6 @@ libbsim2_la_SOURCES = \ b2mdel.c \ b2moscap.c \ b2mpar.c \ - b2node.c \ b2noi.c \ b2par.c \ b2pzld.c \ @@ -30,6 +29,9 @@ libbsim2_la_SOURCES = \ bsim2itf.h +if KIRCHHOFF_WANTED +libbsim2_la_SOURCES += b2node.c +endif AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) diff --git a/src/spicelib/devices/bsim2/b2ld.c b/src/spicelib/devices/bsim2/b2ld.c index 75ca9f5b0..17b84d0bd 100644 --- a/src/spicelib/devices/bsim2/b2ld.c +++ b/src/spicelib/devices/bsim2/b2ld.c @@ -721,7 +721,7 @@ line900: *(here->B2SPbPtr) += m * (-gbs-(xnrm-xrev)*gmbs-gcsgb-gcsdb-gcssb); *(here->B2SPdpPtr) += m * (-gds-xrev*(gm+gmbs)+gcsdb); - +#ifdef KIRCHHOFF /* KCL verification - Dynamic Part */ *(ckt->CKTfvk + here->B2gNode) += m * ceqqg_fvk ; *(ckt->CKTfvk + here->B2bNode) += m * (ceqbs_fvk + ceqbd_fvk + ceqqb_fvk) ; @@ -738,6 +738,7 @@ line900: *(ckt->CKTfvk + here->B2sNode) += m * (-here->B2sourceConductance) * *(ckt->CKTrhsOld + here->B2sNodePrime) ; *(ckt->CKTfvk + here->B2dNodePrime) += m * (-here->B2drainConductance) * *(ckt->CKTrhsOld + here->B2dNode) ; *(ckt->CKTfvk + here->B2sNodePrime) += m * (-here->B2sourceConductance) * *(ckt->CKTrhsOld + here->B2sNode) ; +#endif line1000: ; diff --git a/src/spicelib/devices/bsim2/bsim2init.c b/src/spicelib/devices/bsim2/bsim2init.c index e452176a3..a800f50f5 100644 --- a/src/spicelib/devices/bsim2/bsim2init.c +++ b/src/spicelib/devices/bsim2/bsim2init.c @@ -73,7 +73,10 @@ SPICEdev B2info = { #endif /* DEVinstSize */ &B2iSize, /* DEVmodSize */ &B2mSize, + +#ifdef KIRCHHOFF /* DEVnodeIsNonLinear */ B2nodeIsNonLinear +#endif }; diff --git a/src/spicelib/devices/bsim3/Makefile.am b/src/spicelib/devices/bsim3/Makefile.am index 1317c4c76..abcbb3715 100644 --- a/src/spicelib/devices/bsim3/Makefile.am +++ b/src/spicelib/devices/bsim3/Makefile.am @@ -15,7 +15,6 @@ libbsim3_la_SOURCES = \ b3mask.c \ b3mdel.c \ b3mpar.c \ - b3node.c \ b3noi.c \ b3par.c \ b3pzld.c \ @@ -29,6 +28,9 @@ libbsim3_la_SOURCES = \ bsim3itf.h +if KIRCHHOFF_WANTED +libbsim3_la_SOURCES += b3node.c +endif AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) diff --git a/src/spicelib/devices/bsim3/b3ld.c b/src/spicelib/devices/bsim3/b3ld.c index 9ba09c4d1..532658981 100644 --- a/src/spicelib/devices/bsim3/b3ld.c +++ b/src/spicelib/devices/bsim3/b3ld.c @@ -3142,6 +3142,7 @@ line900: *(here->BSIM3QbPtr) += m * (ggtb - gcqbb); } +#ifdef KIRCHHOFF /////////////////////////////////////////////////////////////////////////////////// /* *(ckt->CKTfvk + here->BSIM3gNode) += m * ceqqg ; @@ -3225,6 +3226,7 @@ line900: *(ckt->CKTfvk+here->BSIM3sNodePrime) += m * (gcsgb + sxpart * ggtg + T1 * dsxpart_dVg) * *(ckt->CKTrhsOld+here->BSIM3gNode) ; *(ckt->CKTfvk+here->BSIM3sNodePrime) -= m * (gcsgb + gcsdb + gcssb - sxpart * ggtb - T1 * dsxpart_dVb) * *(ckt->CKTrhsOld+here->BSIM3bNode) ; *(ckt->CKTfvk+here->BSIM3sNodePrime) -= m * (- gcsdb - sxpart * ggtd - T1 * dsxpart_dVd) * *(ckt->CKTrhsOld+here->BSIM3dNodePrime) ; +#endif #endif line1000: ; diff --git a/src/spicelib/devices/bsim3/bsim3init.c b/src/spicelib/devices/bsim3/bsim3init.c index 99efa1d0e..c1c881f57 100644 --- a/src/spicelib/devices/bsim3/bsim3init.c +++ b/src/spicelib/devices/bsim3/bsim3init.c @@ -72,7 +72,10 @@ SPICEdev BSIM3info = { #endif /* DEVinstSize */ &BSIM3iSize, /* DEVmodSize */ &BSIM3mSize, + +#ifdef KIRCHHOFF /* DEVnodeIsNonLinear */ BSIM3nodeIsNonLinear +#endif }; diff --git a/src/spicelib/devices/bsim3soi_dd/Makefile.am b/src/spicelib/devices/bsim3soi_dd/Makefile.am index bcc68edcf..2b3e5e26d 100644 --- a/src/spicelib/devices/bsim3soi_dd/Makefile.am +++ b/src/spicelib/devices/bsim3soi_dd/Makefile.am @@ -15,7 +15,6 @@ libbsim3soidd_la_SOURCES = \ b3soiddmask.c \ b3soiddmdel.c \ b3soiddmpar.c \ - b3soiddnode.c \ b3soiddnoi.c \ b3soiddpar.c \ b3soiddpzld.c \ @@ -29,6 +28,9 @@ libbsim3soidd_la_SOURCES = \ b3soidditf.h +if KIRCHHOFF_WANTED +libbsim3soidd_la_SOURCES += b3soiddnode.c +endif AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) diff --git a/src/spicelib/devices/bsim3soi_dd/b3soiddinit.c b/src/spicelib/devices/bsim3soi_dd/b3soiddinit.c index 9c3788ad0..6d6faa501 100644 --- a/src/spicelib/devices/bsim3soi_dd/b3soiddinit.c +++ b/src/spicelib/devices/bsim3soi_dd/b3soiddinit.c @@ -70,7 +70,11 @@ SPICEdev B3SOIDDinfo = { #endif /* DEVinstSize */ &B3SOIDDiSize, /* DEVmodSize */ &B3SOIDDmSize, + +#ifdef KIRCHHOFF /* DEVnodeIsNonLinear */ B3SOIDDnodeIsNonLinear +#endif + }; SPICEdev * diff --git a/src/spicelib/devices/bsim3soi_fd/Makefile.am b/src/spicelib/devices/bsim3soi_fd/Makefile.am index 16fcf03c0..effeab57b 100644 --- a/src/spicelib/devices/bsim3soi_fd/Makefile.am +++ b/src/spicelib/devices/bsim3soi_fd/Makefile.am @@ -15,7 +15,6 @@ libbsim3soifd_la_SOURCES = \ b3soifdmask.c \ b3soifdmdel.c \ b3soifdmpar.c \ - b3soifdnode.c \ b3soifdnoi.c \ b3soifdpar.c \ b3soifdpzld.c \ @@ -29,6 +28,9 @@ libbsim3soifd_la_SOURCES = \ b3soifditf.h +if KIRCHHOFF_WANTED +libbsim3soifd_la_SOURCES += b3soifdnode.c +endif AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) diff --git a/src/spicelib/devices/bsim3soi_fd/b3soifdinit.c b/src/spicelib/devices/bsim3soi_fd/b3soifdinit.c index 1667c8462..5c3a12d8f 100644 --- a/src/spicelib/devices/bsim3soi_fd/b3soifdinit.c +++ b/src/spicelib/devices/bsim3soi_fd/b3soifdinit.c @@ -71,7 +71,11 @@ SPICEdev B3SOIFDinfo = { #endif /* DEVinstSize*/ &B3SOIFDiSize, /* DEVmodSize*/ &B3SOIFDmSize, + +#ifdef KIRCHHOFF /* DEVnodeIsNonLinear */ B3SOIFDnodeIsNonLinear +#endif + }; diff --git a/src/spicelib/devices/bsim3soi_pd/Makefile.am b/src/spicelib/devices/bsim3soi_pd/Makefile.am index 877b09218..f379baa9f 100644 --- a/src/spicelib/devices/bsim3soi_pd/Makefile.am +++ b/src/spicelib/devices/bsim3soi_pd/Makefile.am @@ -15,7 +15,6 @@ libbsim3soipd_la_SOURCES = \ b3soipdmask.c \ b3soipdmdel.c \ b3soipdmpar.c \ - b3soipdnode.c \ b3soipdnoi.c \ b3soipdpar.c \ b3soipdpzld.c \ @@ -29,6 +28,9 @@ libbsim3soipd_la_SOURCES = \ b3soipditf.h +if KIRCHHOFF_WANTED +libbsim3soipd_la_SOURCES += b3soipdnode.c +endif AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) diff --git a/src/spicelib/devices/bsim3soi_pd/b3soipdinit.c b/src/spicelib/devices/bsim3soi_pd/b3soipdinit.c index 18c8c2918..e82c80a32 100644 --- a/src/spicelib/devices/bsim3soi_pd/b3soipdinit.c +++ b/src/spicelib/devices/bsim3soi_pd/b3soipdinit.c @@ -72,7 +72,11 @@ SPICEdev B3SOIPDinfo = { #endif /* DEVinstSize*/ &B3SOIPDiSize, /* DEVmodSize*/ &B3SOIPDmSize, + +#ifdef KIRCHHOFF /* DEVnodeIsNonLinear */ B3SOIPDnodeIsNonLinear +#endif + }; SPICEdev * diff --git a/src/spicelib/devices/bsim3v0/Makefile.am b/src/spicelib/devices/bsim3v0/Makefile.am index c5d136942..ad72cc5b9 100644 --- a/src/spicelib/devices/bsim3v0/Makefile.am +++ b/src/spicelib/devices/bsim3v0/Makefile.am @@ -14,7 +14,6 @@ libbsim3v0_la_SOURCES = \ b3v0mask.c \ b3v0mdel.c \ b3v0mpar.c \ - b3v0node.c \ b3v0noi.c \ b3v0par.c \ b3v0pzld.c \ @@ -28,6 +27,9 @@ libbsim3v0_la_SOURCES = \ bsim3v0itf.h +if KIRCHHOFF_WANTED +libbsim3v0_la_SOURCES += b3v0node.c +endif AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) diff --git a/src/spicelib/devices/bsim3v0/bsim3v0init.c b/src/spicelib/devices/bsim3v0/bsim3v0init.c index 3b7588b42..ebf584667 100644 --- a/src/spicelib/devices/bsim3v0/bsim3v0init.c +++ b/src/spicelib/devices/bsim3v0/bsim3v0init.c @@ -71,7 +71,10 @@ SPICEdev B3v0info = { #endif /* DEVinstSize */ &BSIM3v0iSize, /* DEVmodSize */ &BSIM3v0mSize, + +#ifdef KIRCHHOFF /* DEVnodeIsNonLinear */ BSIM3v0nodeIsNonLinear +#endif }; diff --git a/src/spicelib/devices/bsim3v1/Makefile.am b/src/spicelib/devices/bsim3v1/Makefile.am index 0a6708b07..afc495345 100644 --- a/src/spicelib/devices/bsim3v1/Makefile.am +++ b/src/spicelib/devices/bsim3v1/Makefile.am @@ -15,7 +15,6 @@ libbsim3v1_la_SOURCES = \ b3v1mask.c \ b3v1mdel.c \ b3v1mpar.c \ - b3v1node.c \ b3v1noi.c \ b3v1par.c \ b3v1pzld.c \ @@ -29,6 +28,9 @@ libbsim3v1_la_SOURCES = \ bsim3v1itf.h +if KIRCHHOFF_WANTED +libbsim3v1_la_SOURCES += b3v1node.c +endif AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) diff --git a/src/spicelib/devices/bsim3v1/bsim3v1init.c b/src/spicelib/devices/bsim3v1/bsim3v1init.c index 19c7ad160..a3399423c 100644 --- a/src/spicelib/devices/bsim3v1/bsim3v1init.c +++ b/src/spicelib/devices/bsim3v1/bsim3v1init.c @@ -71,7 +71,10 @@ SPICEdev BSIM3v1info = { #endif /* DEVinstSize */ &BSIM3v1iSize, /* DEVmodSize */ &BSIM3v1mSize, + +#ifdef KIRCHHOFF /* DEVnodeIsNonLinear */ BSIM3v1nodeIsNonLinear +#endif }; diff --git a/src/spicelib/devices/bsim3v32/Makefile.am b/src/spicelib/devices/bsim3v32/Makefile.am index 9a67b1d40..3c45d5d13 100644 --- a/src/spicelib/devices/bsim3v32/Makefile.am +++ b/src/spicelib/devices/bsim3v32/Makefile.am @@ -15,7 +15,6 @@ libbsim3v32_la_SOURCES = \ b3v32mask.c \ b3v32mdel.c \ b3v32mpar.c \ - b3v32node.c \ b3v32noi.c \ b3v32par.c \ b3v32pzld.c \ @@ -29,6 +28,9 @@ libbsim3v32_la_SOURCES = \ bsim3v32itf.h +if KIRCHHOFF_WANTED +libbsim3v32_la_SOURCES += b3v32node.c +endif AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) diff --git a/src/spicelib/devices/bsim3v32/bsim3v32init.c b/src/spicelib/devices/bsim3v32/bsim3v32init.c index 0bdd10f04..da864dbf2 100644 --- a/src/spicelib/devices/bsim3v32/bsim3v32init.c +++ b/src/spicelib/devices/bsim3v32/bsim3v32init.c @@ -72,7 +72,10 @@ SPICEdev BSIM3v32info = { #endif /* DEVinstSize */ &BSIM3v32iSize, /* DEVmodSize */ &BSIM3v32mSize, + +#ifdef KIRCHHOFF /* DEVnodeIsNonLinear */ BSIM3v32nodeIsNonLinear +#endif }; diff --git a/src/spicelib/devices/bsim4/Makefile.am b/src/spicelib/devices/bsim4/Makefile.am index 862f52ae7..41fa243cc 100644 --- a/src/spicelib/devices/bsim4/Makefile.am +++ b/src/spicelib/devices/bsim4/Makefile.am @@ -16,7 +16,6 @@ libbsim4_la_SOURCES = \ b4mask.c \ b4mdel.c \ b4mpar.c \ - b4node.c \ b4noi.c \ b4par.c \ b4pzld.c \ @@ -30,6 +29,9 @@ libbsim4_la_SOURCES = \ bsim4itf.h +if KIRCHHOFF_WANTED +libbsim4_la_SOURCES += b4node.c +endif AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) diff --git a/src/spicelib/devices/bsim4/b4ld.c b/src/spicelib/devices/bsim4/b4ld.c index 15c33ff55..b4a25d3e7 100644 --- a/src/spicelib/devices/bsim4/b4ld.c +++ b/src/spicelib/devices/bsim4/b4ld.c @@ -5346,6 +5346,7 @@ line900: (*(here->BSIM4GPqPtr) -= m * here->BSIM4gtau); } +#ifdef KIRCHHOFF /////////////////////////////////////////// /* KCL verification - Linear and Dynamic Part */ @@ -5642,6 +5643,7 @@ line900: *(ckt->CKTfvk + here->BSIM4sNodePrime) += m * sxpart * here->BSIM4gtau * *(ckt->CKTrhsOld + here->BSIM4qNode) ; *(ckt->CKTfvk + here->BSIM4gNodePrime) -= m * here->BSIM4gtau * *(ckt->CKTrhsOld + here->BSIM4qNode) ; } +#endif #endif line1000: ; diff --git a/src/spicelib/devices/bsim4/bsim4init.c b/src/spicelib/devices/bsim4/bsim4init.c index b447a927a..2231590da 100644 --- a/src/spicelib/devices/bsim4/bsim4init.c +++ b/src/spicelib/devices/bsim4/bsim4init.c @@ -72,8 +72,12 @@ SPICEdev BSIM4info = { NULL, /* DEVacct */ #endif &BSIM4iSize, /* DEVinstSize */ - &BSIM4mSize, /* DEVmodSize */ + &BSIM4mSize, /* DEVmodSize */ + +#ifdef KIRCHHOFF BSIM4nodeIsNonLinear /* DEVnodeIsNonLinear */ +#endif + }; diff --git a/src/spicelib/devices/bsim4v4/Makefile.am b/src/spicelib/devices/bsim4v4/Makefile.am index c92a2a6e3..4ec2b2f15 100644 --- a/src/spicelib/devices/bsim4v4/Makefile.am +++ b/src/spicelib/devices/bsim4v4/Makefile.am @@ -16,7 +16,6 @@ libbsim4v4_la_SOURCES = \ b4v4mask.c \ b4v4mdel.c \ b4v4mpar.c \ - b4v4node.c \ b4v4noi.c \ b4v4par.c \ b4v4pzld.c \ @@ -30,6 +29,9 @@ libbsim4v4_la_SOURCES = \ bsim4v4itf.h +if KIRCHHOFF_WANTED +libbsim4v4_la_SOURCES += b4v4node.c +endif AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) diff --git a/src/spicelib/devices/bsim4v4/bsim4v4init.c b/src/spicelib/devices/bsim4v4/bsim4v4init.c index e72a4a9e0..142710c4a 100644 --- a/src/spicelib/devices/bsim4v4/bsim4v4init.c +++ b/src/spicelib/devices/bsim4v4/bsim4v4init.c @@ -72,8 +72,12 @@ SPICEdev BSIM4v4info = { NULL, /* DEVacct */ #endif &BSIM4v4iSize, /* DEVinstSize */ - &BSIM4v4mSize, /* DEVmodSize */ + &BSIM4v4mSize, /* DEVmodSize */ + +#ifdef KIRCHHOFF BSIM4v4nodeIsNonLinear /* DEVnodeIsNonLinear */ +#endif + }; diff --git a/src/spicelib/devices/bsim4v5/Makefile.am b/src/spicelib/devices/bsim4v5/Makefile.am index ec5a80d91..570a133e6 100644 --- a/src/spicelib/devices/bsim4v5/Makefile.am +++ b/src/spicelib/devices/bsim4v5/Makefile.am @@ -16,7 +16,6 @@ libbsim4v5_la_SOURCES = \ b4v5mask.c \ b4v5mdel.c \ b4v5mpar.c \ - b4v5node.c \ b4v5noi.c \ b4v5par.c \ b4v5pzld.c \ @@ -30,6 +29,9 @@ libbsim4v5_la_SOURCES = \ bsim4v5itf.h +if KIRCHHOFF_WANTED +libbsim4v5_la_SOURCES += b4v5node.c +endif AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) diff --git a/src/spicelib/devices/bsim4v5/bsim4v5init.c b/src/spicelib/devices/bsim4v5/bsim4v5init.c index 3bc4fb9c9..5b381e1fa 100644 --- a/src/spicelib/devices/bsim4v5/bsim4v5init.c +++ b/src/spicelib/devices/bsim4v5/bsim4v5init.c @@ -72,8 +72,12 @@ SPICEdev BSIM4v5info = { NULL, /* DEVacct */ #endif &BSIM4v5iSize, /* DEVinstSize */ - &BSIM4v5mSize, /* DEVmodSize */ + &BSIM4v5mSize, /* DEVmodSize */ + +#ifdef KIRCHHOFF BSIM4v5nodeIsNonLinear /* DEVnodeIsNonLinear */ +#endif + }; diff --git a/src/spicelib/devices/bsim4v6/Makefile.am b/src/spicelib/devices/bsim4v6/Makefile.am index 4e4b9644a..d9ef4bf3b 100644 --- a/src/spicelib/devices/bsim4v6/Makefile.am +++ b/src/spicelib/devices/bsim4v6/Makefile.am @@ -16,7 +16,6 @@ libbsim4v6_la_SOURCES = \ b4v6mask.c \ b4v6mdel.c \ b4v6mpar.c \ - b4v6node.c \ b4v6noi.c \ b4v6par.c \ b4v6pzld.c \ @@ -30,6 +29,9 @@ libbsim4v6_la_SOURCES = \ bsim4v6itf.h +if KIRCHHOFF_WANTED +libbsim4v6_la_SOURCES += b4v6node.c +endif AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) diff --git a/src/spicelib/devices/bsim4v6/bsim4v6init.c b/src/spicelib/devices/bsim4v6/bsim4v6init.c index 519d0ff1d..71709ce36 100644 --- a/src/spicelib/devices/bsim4v6/bsim4v6init.c +++ b/src/spicelib/devices/bsim4v6/bsim4v6init.c @@ -72,8 +72,12 @@ SPICEdev BSIM4v6info = { NULL, /* DEVacct */ #endif &BSIM4v6iSize, /* DEVinstSize */ - &BSIM4v6mSize, /* DEVmodSize */ + &BSIM4v6mSize, /* DEVmodSize */ + +#ifdef KIRCHHOFF BSIM4v6nodeIsNonLinear /* DEVnodeIsNonLinear */ +#endif + }; diff --git a/src/spicelib/devices/bsimsoi/Makefile.am b/src/spicelib/devices/bsimsoi/Makefile.am index ece831287..55fc07680 100644 --- a/src/spicelib/devices/bsimsoi/Makefile.am +++ b/src/spicelib/devices/bsimsoi/Makefile.am @@ -15,7 +15,6 @@ libbsim4soi_la_SOURCES = \ b4soimask.c \ b4soimdel.c \ b4soimpar.c \ - b4soinode.c \ b4soinoi.c \ b4soipar.c \ b4soipzld.c \ @@ -29,6 +28,9 @@ libbsim4soi_la_SOURCES = \ b4soiitf.h +if KIRCHHOFF_WANTED +libbsim4soi_la_SOURCES += b4soinode.c +endif AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) diff --git a/src/spicelib/devices/bsimsoi/b4soiinit.c b/src/spicelib/devices/bsimsoi/b4soiinit.c index 25835aa24..e6eac027e 100644 --- a/src/spicelib/devices/bsimsoi/b4soiinit.c +++ b/src/spicelib/devices/bsimsoi/b4soiinit.c @@ -71,7 +71,11 @@ SPICEdev B4SOIinfo = { #endif /* DEVinstSize */ &B4SOIiSize, /* DEVmodSize */ &B4SOImSize, + +#ifdef KIRCHHOFF /* DEVnodeIsNonLinear */ B4SOInodeIsNonLinear +#endif + }; SPICEdev * diff --git a/src/spicelib/devices/cap/capinit.c b/src/spicelib/devices/cap/capinit.c index fe5f37122..f3cc19208 100644 --- a/src/spicelib/devices/cap/capinit.c +++ b/src/spicelib/devices/cap/capinit.c @@ -72,7 +72,11 @@ SPICEdev CAPinfo = { #endif /* DEVinstSize */ &CAPiSize, /* DEVmodSize */ &CAPmSize, + +#ifdef KIRCHHOFF /* DEVnodeIsNonLinear */ NULL +#endif + }; diff --git a/src/spicelib/devices/cap/capload.c b/src/spicelib/devices/cap/capload.c index 2f5277647..13e166e30 100644 --- a/src/spicelib/devices/cap/capload.c +++ b/src/spicelib/devices/cap/capload.c @@ -78,8 +78,11 @@ CAPload(GENmodel *inModel, CKTcircuit *ckt) *(ckt->CKTrhs+here->CAPposNode) -= m * ceq; *(ckt->CKTrhs+here->CAPnegNode) += m * ceq; +#ifdef KIRCHHOFF *(ckt->CKTfvk+here->CAPposNode) += m * *(ckt->CKTstate0+here->CAPqcap+1) ; *(ckt->CKTfvk+here->CAPnegNode) -= m * *(ckt->CKTstate0+here->CAPqcap+1) ; +#endif + } else *(ckt->CKTstate0+here->CAPqcap) = here->CAPcapac * vcap; } diff --git a/src/spicelib/devices/cccs/cccsinit.c b/src/spicelib/devices/cccs/cccsinit.c index 15fb3f063..a36c67843 100644 --- a/src/spicelib/devices/cccs/cccsinit.c +++ b/src/spicelib/devices/cccs/cccsinit.c @@ -72,7 +72,10 @@ SPICEdev CCCSinfo = { #endif /* DEVinstSize */ &CCCSiSize, /* DEVmodSize */ &CCCSmSize, + +#ifdef KIRCHHOFF /* DEVnodeIsNonLinear */ NULL +#endif }; diff --git a/src/spicelib/devices/cccs/cccsload.c b/src/spicelib/devices/cccs/cccsload.c index e019ee816..39bfec9d0 100644 --- a/src/spicelib/devices/cccs/cccsload.c +++ b/src/spicelib/devices/cccs/cccsload.c @@ -35,8 +35,11 @@ CCCSload(GENmodel *inModel, CKTcircuit *ckt) *(here->CCCSposContBrptr) += here->CCCScoeff ; *(here->CCCSnegContBrptr) -= here->CCCScoeff ; +#ifdef KIRCHHOFF *(ckt->CKTfvk+here->CCCSposNode) += here->CCCScoeff * *(ckt->CKTrhsOld+here->CCCScontBranch) ; *(ckt->CKTfvk+here->CCCSnegNode) -= here->CCCScoeff * *(ckt->CKTrhsOld+here->CCCScontBranch) ; +#endif + } } return(OK); diff --git a/src/spicelib/devices/ccvs/ccvsinit.c b/src/spicelib/devices/ccvs/ccvsinit.c index a52895f19..3f1330863 100644 --- a/src/spicelib/devices/ccvs/ccvsinit.c +++ b/src/spicelib/devices/ccvs/ccvsinit.c @@ -73,7 +73,10 @@ SPICEdev CCVSinfo = { #endif /* DEVinstSize */ &CCVSiSize, /* DEVmodSize */ &CCVSmSize, + +#ifdef KIRCHHOFF /* DEVnodeIsNonLinear */ NULL +#endif }; diff --git a/src/spicelib/devices/ccvs/ccvsload.c b/src/spicelib/devices/ccvs/ccvsload.c index ec36ea789..53d2b280e 100644 --- a/src/spicelib/devices/ccvs/ccvsload.c +++ b/src/spicelib/devices/ccvs/ccvsload.c @@ -38,8 +38,11 @@ CCVSload(GENmodel *inModel, CKTcircuit *ckt) *(here->CCVSibrNegptr) -= 1.0 ; *(here->CCVSibrContBrptr) -= here->CCVScoeff ; +#ifdef KIRCHHOFF *(ckt->CKTfvk+here->CCVSposNode) += *(ckt->CKTrhsOld+here->CCVSbranch) ; *(ckt->CKTfvk+here->CCVSnegNode) -= *(ckt->CKTrhsOld+here->CCVSbranch) ; +#endif + } } return(OK); diff --git a/src/spicelib/devices/cpl/cplinit.c b/src/spicelib/devices/cpl/cplinit.c index 51575227d..576972a45 100644 --- a/src/spicelib/devices/cpl/cplinit.c +++ b/src/spicelib/devices/cpl/cplinit.c @@ -73,7 +73,10 @@ SPICEdev CPLinfo = { #endif /* DEVinstSize */ &CPLiSize, /* DEVmodSize */ &CPLmSize, + +#ifdef KIRCHHOFF /* DEVnodeIsLinear */ NULL +#endif }; diff --git a/src/spicelib/devices/csw/cswinit.c b/src/spicelib/devices/csw/cswinit.c index a536ef7a1..89d61bc48 100644 --- a/src/spicelib/devices/csw/cswinit.c +++ b/src/spicelib/devices/csw/cswinit.c @@ -75,7 +75,10 @@ SPICEdev CSWinfo = { #endif /* DEVinstSize */ &CSWiSize, /* DEVmodSize */ &CSWmSize, + +#ifdef KIRCHHOFF /* DEVnodeIsLinear */ NULL +#endif }; diff --git a/src/spicelib/devices/dio/Makefile.am b/src/spicelib/devices/dio/Makefile.am index 9b9f9cba5..285d1c27e 100644 --- a/src/spicelib/devices/dio/Makefile.am +++ b/src/spicelib/devices/dio/Makefile.am @@ -21,7 +21,6 @@ libdio_la_SOURCES = \ diomask.c \ diomdel.c \ diompar.c \ - dionode.c \ dionoise.c \ dioparam.c \ diopzld.c \ @@ -35,6 +34,10 @@ libdio_la_SOURCES = \ diotrunc.c +if KIRCHHOFF_WANTED +libdio_la_SOURCES += dionode.c +endif + AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) MAINTAINERCLEANFILES = Makefile.in diff --git a/src/spicelib/devices/dio/dioinit.c b/src/spicelib/devices/dio/dioinit.c index 68075152f..3caea6415 100644 --- a/src/spicelib/devices/dio/dioinit.c +++ b/src/spicelib/devices/dio/dioinit.c @@ -74,7 +74,11 @@ SPICEdev DIOinfo = { #endif /* DEVinstSize */ &DIOiSize, /* DEVmodSize */ &DIOmSize, + +#ifdef KIRCHHOFF /* DEVnodeIsNonLinear */ DIOnodeIsNonLinear +#endif + }; diff --git a/src/spicelib/devices/hfet1/Makefile.am b/src/spicelib/devices/hfet1/Makefile.am index d2d1a21b7..a8a6e347d 100644 --- a/src/spicelib/devices/hfet1/Makefile.am +++ b/src/spicelib/devices/hfet1/Makefile.am @@ -18,7 +18,6 @@ libhfet_la_SOURCES = \ hfetmask.c \ hfetmdel.c \ hfetmpar.c \ - hfetnode.c \ hfetparam.c \ hfetpzl.c \ hfetsetup.c \ @@ -26,6 +25,9 @@ libhfet_la_SOURCES = \ hfettrunc.c +if KIRCHHOFF_WANTED +libhfet_la_SOURCES += hfetnode.c +endif AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) diff --git a/src/spicelib/devices/hfet1/hfetinit.c b/src/spicelib/devices/hfet1/hfetinit.c index 8cff12d4e..2a348e688 100644 --- a/src/spicelib/devices/hfet1/hfetinit.c +++ b/src/spicelib/devices/hfet1/hfetinit.c @@ -73,7 +73,10 @@ SPICEdev HFETAinfo = { #endif /* DEVinstSize */ &HFETAiSize, /* DEVmodSize */ &HFETAmSize, + +#ifdef KIRCHHOFF /* DEVnodeIsNonLinear */ HFETAnodeIsNonLinear +#endif }; diff --git a/src/spicelib/devices/hfet2/Makefile.am b/src/spicelib/devices/hfet2/Makefile.am index b0a8c5b0f..d8e3cf67d 100644 --- a/src/spicelib/devices/hfet2/Makefile.am +++ b/src/spicelib/devices/hfet2/Makefile.am @@ -18,7 +18,6 @@ libhfet2_la_SOURCES = \ hfet2mask.c \ hfet2mdel.c \ hfet2mpar.c \ - hfet2node.c \ hfet2param.c \ hfet2pzl.c \ hfet2setup.c \ @@ -26,6 +25,9 @@ libhfet2_la_SOURCES = \ hfet2trunc.c +if KIRCHHOFF_WANTED +libhfet2_la_SOURCES += hfet2node.c +endif AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) diff --git a/src/spicelib/devices/hfet2/hfet2init.c b/src/spicelib/devices/hfet2/hfet2init.c index f66633a86..97a1b5a4e 100644 --- a/src/spicelib/devices/hfet2/hfet2init.c +++ b/src/spicelib/devices/hfet2/hfet2init.c @@ -73,7 +73,10 @@ SPICEdev HFET2info = { #endif /* DEVinstSize */ &HFET2iSize, /* DEVmodSize */ &HFET2mSize, + +#ifdef KIRCHHOFF /* DEVnodeIsNonLinear */ HFET2nodeIsNonLinear +#endif }; diff --git a/src/spicelib/devices/hisim2/Makefile.am b/src/spicelib/devices/hisim2/Makefile.am index ef0c313be..b23039c22 100644 --- a/src/spicelib/devices/hisim2/Makefile.am +++ b/src/spicelib/devices/hisim2/Makefile.am @@ -4,34 +4,38 @@ EXTRA_DIST = noinst_LTLIBRARIES = libhisim2.la -libhisim2_la_SOURCES = hisim2.h \ - hsm2.c \ - hsm2acld.c \ - hsm2ask.c \ - hsm2cvtest.c \ - hsm2def.h \ - hsm2del.c \ - hsm2dest.c \ - hsm2eval.c \ - hsm2evalenv.h \ - hsm2ext.h \ - hsm2getic.c \ - hsm2init.c \ - hsm2init.h \ - hsm2itf.h \ - hsm2ld.c \ - hsm2mask.c \ - hsm2mdel.c \ - hsm2mpar.c \ - hsm2node.c \ - hsm2noi.c \ - hsm2par.c \ - hsm2pzld.c \ - hsm2set.c \ - hsm2temp.c \ - hsm2trunc.c +libhisim2_la_SOURCES = \ + hisim2.h \ + hsm2.c \ + hsm2acld.c \ + hsm2ask.c \ + hsm2cvtest.c \ + hsm2def.h \ + hsm2del.c \ + hsm2dest.c \ + hsm2eval.c \ + hsm2evalenv.h \ + hsm2ext.h \ + hsm2getic.c \ + hsm2init.c \ + hsm2init.h \ + hsm2itf.h \ + hsm2ld.c \ + hsm2mask.c \ + hsm2mdel.c \ + hsm2mpar.c \ + hsm2noi.c \ + hsm2par.c \ + hsm2pzld.c \ + hsm2set.c \ + hsm2temp.c \ + hsm2trunc.c +if KIRCHHOFF_WANTED +libhisim2_la_SOURCES += hsm2node.c +endif + AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) diff --git a/src/spicelib/devices/hisim2/hsm2init.c b/src/spicelib/devices/hisim2/hsm2init.c index 337ef7ebf..dbbb0aff7 100644 --- a/src/spicelib/devices/hisim2/hsm2init.c +++ b/src/spicelib/devices/hisim2/hsm2init.c @@ -71,7 +71,10 @@ SPICEdev HSM2info = { #endif /* DEVinstSize */ &HSM2iSize, /* DEVmodSize */ &HSM2mSize, + +#ifdef KIRCHHOFF /* DEVnodeIsNonLinear */ HSM2nodeIsNonLinear +#endif }; diff --git a/src/spicelib/devices/hisimhv1/Makefile.am b/src/spicelib/devices/hisimhv1/Makefile.am index 3f6d13019..360260808 100644 --- a/src/spicelib/devices/hisimhv1/Makefile.am +++ b/src/spicelib/devices/hisimhv1/Makefile.am @@ -2,35 +2,40 @@ noinst_LTLIBRARIES = libhisimhv1.la -libhisimhv1_la_SOURCES = hisimhv.h \ - hsmhv.c \ - hsmhvacld.c \ - hsmhvask.c \ - hsmhvcvtest.c \ - hsmhvdef.h \ - hsmhvdel.c \ - hsmhvdest.c \ - hsmhveval.c \ - hsmhveval_qover.h \ - hsmhvevalenv.h \ - hsmhvext.h \ - hsmhvgetic.c \ - hsmhvinit.c \ - hsmhvinit.h \ - hsmhvitf.h \ - hsmhvld.c \ - hsmhvld_info_eval.h \ - hsmhvmask.c \ - hsmhvmdel.c \ - hsmhvmpar.c \ - hsmhvnode.c \ - hsmhvnoi.c \ - hsmhvpar.c \ - hsmhvpzld.c \ - hsmhvset.c \ - hsmhvtemp.c \ - hsmhvtemp_eval.h \ - hsmhvtrunc.c +libhisimhv1_la_SOURCES = \ + hisimhv.h \ + hsmhv.c \ + hsmhvacld.c \ + hsmhvask.c \ + hsmhvcvtest.c \ + hsmhvdef.h \ + hsmhvdel.c \ + hsmhvdest.c \ + hsmhveval.c \ + hsmhveval_qover.h \ + hsmhvevalenv.h \ + hsmhvext.h \ + hsmhvgetic.c \ + hsmhvinit.c \ + hsmhvinit.h \ + hsmhvitf.h \ + hsmhvld.c \ + hsmhvld_info_eval.h \ + hsmhvmask.c \ + hsmhvmdel.c \ + hsmhvmpar.c \ + hsmhvnoi.c \ + hsmhvpar.c \ + hsmhvpzld.c \ + hsmhvset.c \ + hsmhvtemp.c \ + hsmhvtemp_eval.h \ + hsmhvtrunc.c + + +if KIRCHHOFF_WANTED +libhisimhv1_la_SOURCES += hsmhvnode.c +endif AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) diff --git a/src/spicelib/devices/hisimhv1/hsmhvinit.c b/src/spicelib/devices/hisimhv1/hsmhvinit.c index d11f72b6a..e025c6aa2 100644 --- a/src/spicelib/devices/hisimhv1/hsmhvinit.c +++ b/src/spicelib/devices/hisimhv1/hsmhvinit.c @@ -71,7 +71,10 @@ SPICEdev HSMHVinfo = { #endif /* DEVinstSize */ &HSMHViSize, /* DEVmodSize */ &HSMHVmSize, + +#ifdef KIRCHHOFF /* DEVnodeIsNonLinear */ HSMHVnodeIsNonLinear +#endif }; diff --git a/src/spicelib/devices/ind/indinit.c b/src/spicelib/devices/ind/indinit.c index 8e50bacad..fb8cfa296 100644 --- a/src/spicelib/devices/ind/indinit.c +++ b/src/spicelib/devices/ind/indinit.c @@ -72,7 +72,10 @@ SPICEdev INDinfo = { #endif /* DEVinstSize */ &INDiSize, /* DEVmodSize */ &INDmSize, + +#ifdef KIRCHHOFF /* DEVnodeIsNonLinear */ NULL +#endif }; @@ -142,7 +145,10 @@ SPICEdev MUTinfo = { #endif /* DEVinstSize */ &MUTiSize, /* DEVmodSize */ &MUTmSize, + +#ifdef KIRCHHOFF /* DEVnodeIsNonLinear */ NULL +#endif }; diff --git a/src/spicelib/devices/ind/indload.c b/src/spicelib/devices/ind/indload.c index 878e68463..7eed3a9dc 100644 --- a/src/spicelib/devices/ind/indload.c +++ b/src/spicelib/devices/ind/indload.c @@ -122,8 +122,11 @@ INDload(GENmodel *inModel, CKTcircuit *ckt) *(here->INDibrNegptr) -= 1; *(here->INDibrIbrptr) -= req; +#ifdef KIRCHHOFF *(ckt->CKTfvk+here->INDposNode) += *(ckt->CKTrhsOld+here->INDbrEq) ; *(ckt->CKTfvk+here->INDnegNode) -= *(ckt->CKTrhsOld+here->INDbrEq) ; +#endif + } } return(OK); diff --git a/src/spicelib/devices/isrc/isrcinit.c b/src/spicelib/devices/isrc/isrcinit.c index 3cfb594b3..c8260709a 100644 --- a/src/spicelib/devices/isrc/isrcinit.c +++ b/src/spicelib/devices/isrc/isrcinit.c @@ -73,7 +73,11 @@ SPICEdev ISRCinfo = { #endif /* DEVinstSize */ &ISRCiSize, /* DEVmodSize */ &ISRCmSize, + +#ifdef KIRCHHOFF /* DEVnodeIsNonLinear */ NULL +#endif + }; diff --git a/src/spicelib/devices/isrc/isrcload.c b/src/spicelib/devices/isrc/isrcload.c index 5c1f2e257..a2c15b65c 100644 --- a/src/spicelib/devices/isrc/isrcload.c +++ b/src/spicelib/devices/isrc/isrcload.c @@ -386,8 +386,10 @@ loadDone: *(ckt->CKTrhs + (here->ISRCposNode)) += m * value; *(ckt->CKTrhs + (here->ISRCnegNode)) -= m * value; +#ifdef KIRCHHOFF *(ckt->CKTfvk + (here->ISRCposNode)) -= value; *(ckt->CKTfvk + (here->ISRCnegNode)) += value; +#endif /* gtri - end - wbk - modify to process srcFact, etc. for all sources */ diff --git a/src/spicelib/devices/jfet/Makefile.am b/src/spicelib/devices/jfet/Makefile.am index 638e5d4ba..d714f92aa 100644 --- a/src/spicelib/devices/jfet/Makefile.am +++ b/src/spicelib/devices/jfet/Makefile.am @@ -20,7 +20,6 @@ libjfet_la_SOURCES = \ jfetmask.c \ jfetmdel.c \ jfetmpar.c \ - jfetnode.c \ jfetnoi.c \ jfetpar.c \ jfetpzld.c \ @@ -29,6 +28,9 @@ libjfet_la_SOURCES = \ jfettrun.c +if KIRCHHOFF_WANTED +libjfet_la_SOURCES += jfetnode.c +endif AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) diff --git a/src/spicelib/devices/jfet/jfetinit.c b/src/spicelib/devices/jfet/jfetinit.c index 04edab98c..ad58f7a3b 100644 --- a/src/spicelib/devices/jfet/jfetinit.c +++ b/src/spicelib/devices/jfet/jfetinit.c @@ -73,7 +73,10 @@ SPICEdev JFETinfo = { #endif /* DEVinstSize */ &JFETiSize, /* DEVmodSize */ &JFETmSize, + +#ifdef KIRCHHOFF /* DEVnodeIsNonLinear */ JFETnodeIsNonLinear +#endif }; diff --git a/src/spicelib/devices/jfet2/Makefile.am b/src/spicelib/devices/jfet2/Makefile.am index 2a4199507..2bcfbdfeb 100644 --- a/src/spicelib/devices/jfet2/Makefile.am +++ b/src/spicelib/devices/jfet2/Makefile.am @@ -18,7 +18,6 @@ libjfet2_la_SOURCES = \ jfet2mask.c \ jfet2mdel.c \ jfet2mpar.c \ - jfet2node.c \ jfet2noi.c \ jfet2par.c \ jfet2parm.h \ @@ -29,7 +28,9 @@ libjfet2_la_SOURCES = \ psmodel.h - +if KIRCHHOFF_WANTED +libjfet2_la_SOURCES += jfet2node.c +endif AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) diff --git a/src/spicelib/devices/jfet2/jfet2init.c b/src/spicelib/devices/jfet2/jfet2init.c index d152fbab2..7b90d19f6 100644 --- a/src/spicelib/devices/jfet2/jfet2init.c +++ b/src/spicelib/devices/jfet2/jfet2init.c @@ -73,7 +73,10 @@ SPICEdev JFET2info = { #endif /* DEVinstSize */ &JFET2iSize, /* DEVmodSize */ &JFET2mSize, + +#ifdef KIRCHHOFF /* DEVnodeIsNonLinear */ JFET2nodeIsNonLinear +#endif }; diff --git a/src/spicelib/devices/ltra/ltrainit.c b/src/spicelib/devices/ltra/ltrainit.c index 2bb17cc78..c68a4eac0 100644 --- a/src/spicelib/devices/ltra/ltrainit.c +++ b/src/spicelib/devices/ltra/ltrainit.c @@ -73,7 +73,10 @@ SPICEdev LTRAinfo = { #endif /* DEVinstSize */ <RAiSize, /* DEVmodSize */ <RAmSize, + +#ifdef KIRCHHOFF /* DEVnodeIsNonLinear */ NULL +#endif }; diff --git a/src/spicelib/devices/mes/Makefile.am b/src/spicelib/devices/mes/Makefile.am index 26abe963c..e55ad0a08 100644 --- a/src/spicelib/devices/mes/Makefile.am +++ b/src/spicelib/devices/mes/Makefile.am @@ -20,7 +20,6 @@ libmes_la_SOURCES = \ mesmask.c \ mesmdel.c \ mesmpar.c \ - mesnode.c \ mesnoise.c \ mesparam.c \ mespzld.c \ @@ -29,6 +28,9 @@ libmes_la_SOURCES = \ mestrunc.c +if KIRCHHOFF_WANTED +libmes_la_SOURCES += mesnode.c +endif AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) diff --git a/src/spicelib/devices/mes/mesinit.c b/src/spicelib/devices/mes/mesinit.c index d39f2c89a..4bac1ef51 100644 --- a/src/spicelib/devices/mes/mesinit.c +++ b/src/spicelib/devices/mes/mesinit.c @@ -73,7 +73,10 @@ SPICEdev MESinfo = { #endif /* DEVinstSize */ &MESiSize, /* DEVmodSize */ &MESmSize, + +#ifdef KIRCHHOFF /* DEVnodeIsNonLinear */ MESnodeIsNonLinear +#endif }; diff --git a/src/spicelib/devices/mesa/Makefile.am b/src/spicelib/devices/mesa/Makefile.am index 119d4b60b..3ff59e79a 100644 --- a/src/spicelib/devices/mesa/Makefile.am +++ b/src/spicelib/devices/mesa/Makefile.am @@ -18,7 +18,6 @@ libmesa_la_SOURCES = \ mesamask.c \ mesamdel.c \ mesamparam.c \ - mesanode.c \ mesaparam.c \ mesapzl.c \ mesasetup.c \ @@ -26,6 +25,9 @@ libmesa_la_SOURCES = \ mesatrunc.c +if KIRCHHOFF_WANTED +libmesa_la_SOURCES += mesanode.c +endif AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) diff --git a/src/spicelib/devices/mesa/mesainit.c b/src/spicelib/devices/mesa/mesainit.c index 2c9f42578..0c2a69ea8 100644 --- a/src/spicelib/devices/mesa/mesainit.c +++ b/src/spicelib/devices/mesa/mesainit.c @@ -73,7 +73,10 @@ SPICEdev MESAinfo = { #endif /* DEVinstSize */ &MESAiSize, /* DEVmodSize */ &MESAmSize, + +#ifdef KIRCHHOFF /* DEVnodeIsNonLinear */ MESAnodeIsNonLinear +#endif }; diff --git a/src/spicelib/devices/mos1/Makefile.am b/src/spicelib/devices/mos1/Makefile.am index 7b0f728c7..42b2b7ce8 100644 --- a/src/spicelib/devices/mos1/Makefile.am +++ b/src/spicelib/devices/mos1/Makefile.am @@ -21,7 +21,6 @@ libmos1_la_SOURCES = \ mos1mask.c \ mos1mdel.c \ mos1mpar.c \ - mos1node.c \ mos1noi.c \ mos1par.c \ mos1pzld.c \ @@ -35,6 +34,9 @@ libmos1_la_SOURCES = \ mos1trun.c +if KIRCHHOFF_WANTED +libmos1_la_SOURCES += mos1node.c +endif AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) diff --git a/src/spicelib/devices/mos1/mos1init.c b/src/spicelib/devices/mos1/mos1init.c index c66987378..008871d06 100644 --- a/src/spicelib/devices/mos1/mos1init.c +++ b/src/spicelib/devices/mos1/mos1init.c @@ -73,7 +73,11 @@ SPICEdev MOS1info = { #endif /* DEVinstSize */ &MOS1iSize, /* DEVmodSize */ &MOS1mSize, + +#ifdef KIRCHHOFF /* DEVnodeIsNonLinear */ MOS1nodeIsNonLinear +#endif + }; diff --git a/src/spicelib/devices/mos1/mos1load.c b/src/spicelib/devices/mos1/mos1load.c index a4f949e87..fbec07e76 100644 --- a/src/spicelib/devices/mos1/mos1load.c +++ b/src/spicelib/devices/mos1/mos1load.c @@ -945,7 +945,7 @@ next1: if(vbs <= -3*vt) { *(here->MOS1SPdpPtr) += (-here->MOS1gds-xrev* (here->MOS1gm+here->MOS1gmbs)); - +#ifdef KIRCHHOFF /* KCL verification - Linear-Dynamic Part */ *(ckt->CKTfvk+here->MOS1gNode) += model->MOS1type * (ceqgs_fvk + ceqgb_fvk + ceqgd_fvk) ; *(ckt->CKTfvk+here->MOS1bNode) += ceqbs_fvk + ceqbd_fvk - model->MOS1type * ceqgb_fvk ; @@ -962,6 +962,8 @@ next1: if(vbs <= -3*vt) { *(ckt->CKTfvk+here->MOS1sNode) -= here->MOS1sourceConductance * *(ckt->CKTrhsOld+here->MOS1sNodePrime) ; *(ckt->CKTfvk+here->MOS1dNodePrime) -= here->MOS1drainConductance * *(ckt->CKTrhsOld+here->MOS1dNode) ; *(ckt->CKTfvk+here->MOS1sNodePrime) -= here->MOS1sourceConductance * *(ckt->CKTrhsOld+here->MOS1sNode) ; +#endif + } } return(OK); diff --git a/src/spicelib/devices/mos2/Makefile.am b/src/spicelib/devices/mos2/Makefile.am index 8f9cb0bd1..dd24b0bd5 100644 --- a/src/spicelib/devices/mos2/Makefile.am +++ b/src/spicelib/devices/mos2/Makefile.am @@ -21,7 +21,6 @@ libmos2_la_SOURCES = \ mos2mask.c \ mos2mdel.c \ mos2mpar.c \ - mos2node.c \ mos2noi.c \ mos2par.c \ mos2pzld.c \ @@ -35,6 +34,10 @@ libmos2_la_SOURCES = \ mos2trun.c +if KIRCHHOFF_WANTED +libmos2_la_SOURCES += mos2node.c +endif + AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) MAINTAINERCLEANFILES = Makefile.in diff --git a/src/spicelib/devices/mos2/mos2init.c b/src/spicelib/devices/mos2/mos2init.c index 647128be3..3b5bc7a6b 100644 --- a/src/spicelib/devices/mos2/mos2init.c +++ b/src/spicelib/devices/mos2/mos2init.c @@ -73,7 +73,11 @@ SPICEdev MOS2info = { #endif /* DEVinstSize */ &MOS2iSize, /* DEVmodSize */ &MOS2mSize, + +#ifdef KIRCHHOFF /* DEVnodeIsNonLinear */ MOS2nodeIsNonLinear +#endif + }; diff --git a/src/spicelib/devices/mos3/Makefile.am b/src/spicelib/devices/mos3/Makefile.am index fe0f1eac6..7c288e47f 100644 --- a/src/spicelib/devices/mos3/Makefile.am +++ b/src/spicelib/devices/mos3/Makefile.am @@ -21,7 +21,6 @@ libmos3_la_SOURCES = \ mos3mask.c \ mos3mdel.c \ mos3mpar.c \ - mos3node.c \ mos3noi.c \ mos3par.c \ mos3pzld.c \ @@ -35,6 +34,10 @@ libmos3_la_SOURCES = \ mos3trun.c +if KIRCHHOFF_WANTED +libmos3_la_SOURCES += mos3node.c +endif + AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) MAINTAINERCLEANFILES = Makefile.in diff --git a/src/spicelib/devices/mos3/mos3init.c b/src/spicelib/devices/mos3/mos3init.c index 93f81face..1e194265f 100644 --- a/src/spicelib/devices/mos3/mos3init.c +++ b/src/spicelib/devices/mos3/mos3init.c @@ -73,7 +73,10 @@ SPICEdev MOS3info = { #endif /* DEVinstSize */ &MOS3iSize, /* DEVmodSize */ &MOS3mSize, + +#ifdef KIRCHHOFF /* DEVnodeIsNonLinear */ MOS3nodeIsNonLinear +#endif }; diff --git a/src/spicelib/devices/mos6/Makefile.am b/src/spicelib/devices/mos6/Makefile.am index 876c8c5c5..c0b6c51a8 100644 --- a/src/spicelib/devices/mos6/Makefile.am +++ b/src/spicelib/devices/mos6/Makefile.am @@ -16,13 +16,15 @@ libmos6_la_SOURCES = \ mos6load.c \ mos6mask.c \ mos6mpar.c \ - mos6node.c \ mos6par.c \ mos6set.c \ mos6temp.c \ mos6trun.c +if KIRCHHOFF_WANTED +libmos6_la_SOURCES += mos6node.c +endif AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) diff --git a/src/spicelib/devices/mos6/mos6init.c b/src/spicelib/devices/mos6/mos6init.c index 8cde3a3de..a22c42ee8 100644 --- a/src/spicelib/devices/mos6/mos6init.c +++ b/src/spicelib/devices/mos6/mos6init.c @@ -73,7 +73,11 @@ SPICEdev MOS6info = { #endif /* DEVinstSize */ &MOS6iSize, /* DEVmodSize */ &MOS6mSize, + +#ifdef KIRCHHOFF /* DEVnodeIsNonLinear */ MOS6nodeIsNonLinear +#endif + }; diff --git a/src/spicelib/devices/mos6/mos6load.c b/src/spicelib/devices/mos6/mos6load.c index ebbab1115..d07e6c56e 100644 --- a/src/spicelib/devices/mos6/mos6load.c +++ b/src/spicelib/devices/mos6/mos6load.c @@ -961,7 +961,7 @@ bypass: *(here->MOS6SPdpPtr) += m * (-here->MOS6gds-xrev* (here->MOS6gm+here->MOS6gmbs)); - +#ifdef KIRCHHOFF /* KCL verification - Dynamic Part */ *(ckt->CKTfvk+here->MOS6gNode) += model->MOS6type * (ceqgs_fvk + ceqgb_fvk + ceqgd_fvk) ; *(ckt->CKTfvk+here->MOS6bNode) += ceqbs_fvk + ceqbd_fvk - model->MOS6type * ceqgb_fvk ; @@ -978,6 +978,8 @@ bypass: *(ckt->CKTfvk+here->MOS6sNode) -= here->MOS6sourceConductance * *(ckt->CKTrhsOld+here->MOS6sNodePrime) ; *(ckt->CKTfvk+here->MOS6dNodePrime) -= here->MOS6drainConductance * *(ckt->CKTrhsOld+here->MOS6dNode) ; *(ckt->CKTfvk+here->MOS6sNodePrime) -= here->MOS6sourceConductance * *(ckt->CKTrhsOld+here->MOS6sNode) ; +#endif + } } return(OK); diff --git a/src/spicelib/devices/mos9/Makefile.am b/src/spicelib/devices/mos9/Makefile.am index 6c557b4ce..93337596f 100644 --- a/src/spicelib/devices/mos9/Makefile.am +++ b/src/spicelib/devices/mos9/Makefile.am @@ -21,7 +21,6 @@ libmos9_la_SOURCES = \ mos9mask.c \ mos9mdel.c \ mos9mpar.c \ - mos9node.c \ mos9noi.c \ mos9par.c \ mos9pzld.c \ @@ -35,6 +34,9 @@ libmos9_la_SOURCES = \ mos9trun.c +if KIRCHHOFF_WANTED +libmos9_la_SOURCES += mos9node.c +endif AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) diff --git a/src/spicelib/devices/mos9/mos9init.c b/src/spicelib/devices/mos9/mos9init.c index cf1d9b7c8..46edf84d5 100644 --- a/src/spicelib/devices/mos9/mos9init.c +++ b/src/spicelib/devices/mos9/mos9init.c @@ -73,7 +73,10 @@ SPICEdev MOS9info = { #endif /* DEVinstSize */ &MOS9iSize, /* DEVmodSize */ &MOS9mSize, + +#ifdef KIRCHHOFF /* DEVnodeIsNonLinear */ MOS9nodeIsNonLinear +#endif }; diff --git a/src/spicelib/devices/res/resinit.c b/src/spicelib/devices/res/resinit.c index 1b92472e1..49150c08c 100644 --- a/src/spicelib/devices/res/resinit.c +++ b/src/spicelib/devices/res/resinit.c @@ -73,7 +73,10 @@ SPICEdev RESinfo = { #endif /* DEVinstSize */ &RESiSize, /* DEVmodSize */ &RESmSize, + +#ifdef KIRCHHOFF /* DEVnodeIsNonLinear */ NULL +#endif }; diff --git a/src/spicelib/devices/res/resload.c b/src/spicelib/devices/res/resload.c index 725edc253..07d3673e3 100644 --- a/src/spicelib/devices/res/resload.c +++ b/src/spicelib/devices/res/resload.c @@ -35,8 +35,10 @@ RESload(GENmodel *inModel, CKTcircuit *ckt) *(here->RESposNegptr) -= m * here->RESconduct; *(here->RESnegPosptr) -= m * here->RESconduct; +#ifdef KIRCHHOFF *(ckt->CKTfvk+here->RESposNode) += here->REScurrent ; *(ckt->CKTfvk+here->RESnegNode) -= here->REScurrent ; +#endif } } diff --git a/src/spicelib/devices/soi3/Makefile.am b/src/spicelib/devices/soi3/Makefile.am index 4d7060ded..c12cbd813 100644 --- a/src/spicelib/devices/soi3/Makefile.am +++ b/src/spicelib/devices/soi3/Makefile.am @@ -20,7 +20,6 @@ libsoi3_la_SOURCES = \ soi3mask.c \ soi3mdel.c \ soi3mpar.c \ - soi3node.c \ soi3nois.c \ soi3par.c \ soi3set.c \ @@ -28,6 +27,9 @@ libsoi3_la_SOURCES = \ soi3trun.c +if KIRCHHOFF_WANTED +libsoi3_la_SOURCES += soi3node.c +endif AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) diff --git a/src/spicelib/devices/soi3/soi3init.c b/src/spicelib/devices/soi3/soi3init.c index 29e3589e1..c6cda673c 100644 --- a/src/spicelib/devices/soi3/soi3init.c +++ b/src/spicelib/devices/soi3/soi3init.c @@ -73,7 +73,10 @@ SPICEdev SOI3info = { #endif /* DEVinstSize */ &SOI3iSize, /* DEVmodSize */ &SOI3mSize, + +#ifdef KIRCHHOFF /* DEVnodeIsNonLinear */ SOI3nodeIsNonLinear +#endif }; diff --git a/src/spicelib/devices/sw/swinit.c b/src/spicelib/devices/sw/swinit.c index cf8049300..fa570a222 100644 --- a/src/spicelib/devices/sw/swinit.c +++ b/src/spicelib/devices/sw/swinit.c @@ -74,7 +74,10 @@ SPICEdev SWinfo = { #endif /* CIDER */ /* DEVinstSize */ &SWiSize, /* DEVmodSize */ &SWmSize, + +#ifdef KIRCHHOFF /* DEVnodeIsNonLinear */ NULL +#endif }; diff --git a/src/spicelib/devices/tra/trainit.c b/src/spicelib/devices/tra/trainit.c index 38601b2ed..b94626ca0 100644 --- a/src/spicelib/devices/tra/trainit.c +++ b/src/spicelib/devices/tra/trainit.c @@ -73,7 +73,10 @@ SPICEdev TRAinfo = { #endif /* DEVinstSize */ &TRAiSize, /* DEVmodSize */ &TRAmSize, + +#ifdef KIRCHHOFF /* DEVnodeIsNonLinear */ NULL +#endif }; diff --git a/src/spicelib/devices/txl/txlinit.c b/src/spicelib/devices/txl/txlinit.c index 2437ed414..0c13db6f2 100644 --- a/src/spicelib/devices/txl/txlinit.c +++ b/src/spicelib/devices/txl/txlinit.c @@ -78,7 +78,10 @@ SPICEdev TXLinfo = { #endif /* DEVinstSize */ &TXLiSize, /* DEVmodSize */ &TXLmSize, + +#ifdef KIRCHHOFF /* DEVnodeIsNonLinear */ NULL +#endif }; diff --git a/src/spicelib/devices/urc/urcinit.c b/src/spicelib/devices/urc/urcinit.c index d415f9774..2a7b20f70 100644 --- a/src/spicelib/devices/urc/urcinit.c +++ b/src/spicelib/devices/urc/urcinit.c @@ -73,7 +73,10 @@ SPICEdev URCinfo = { #endif /* DEVinstSize */ &URCiSize, /* DEVmodSize */ &URCmSize, + +#ifdef KIRCHHOFF /* DEVnodeIsNonLinear */ NULL +#endif }; diff --git a/src/spicelib/devices/vbic/Makefile.am b/src/spicelib/devices/vbic/Makefile.am index ccbb722c0..71d628d30 100644 --- a/src/spicelib/devices/vbic/Makefile.am +++ b/src/spicelib/devices/vbic/Makefile.am @@ -19,7 +19,6 @@ libvbic_la_SOURCES = \ vbicmask.c \ vbicmdel.c \ vbicmpar.c \ - vbicnode.c \ vbicnoise.c \ vbicparam.c \ vbicpzld.c \ @@ -28,6 +27,9 @@ libvbic_la_SOURCES = \ vbictrunc.c +if KIRCHHOFF_WANTED +libvbic_la_SOURCES += vbicnode.c +endif AM_CPPFLAGS = @AM_CPPFLAGS@ -I$(top_srcdir)/src/include AM_CFLAGS = $(STATIC) diff --git a/src/spicelib/devices/vbic/vbicinit.c b/src/spicelib/devices/vbic/vbicinit.c index 6cb4f1796..172df0536 100644 --- a/src/spicelib/devices/vbic/vbicinit.c +++ b/src/spicelib/devices/vbic/vbicinit.c @@ -78,7 +78,10 @@ SPICEdev VBICinfo = { #endif &VBICiSize, /* DEVinstSize */ &VBICmSize, /* DEVmodSize */ + +#ifdef KIRCHHOFF VBICnodeIsNonLinear /* DEVnodeIsNonLinear */ +#endif }; diff --git a/src/spicelib/devices/vccs/vccsinit.c b/src/spicelib/devices/vccs/vccsinit.c index 4c7c02dca..d6ec790ee 100644 --- a/src/spicelib/devices/vccs/vccsinit.c +++ b/src/spicelib/devices/vccs/vccsinit.c @@ -73,7 +73,10 @@ SPICEdev VCCSinfo = { #endif /* DEVinstSize */ &VCCSiSize, /* DEVmodSize */ &VCCSmSize, + +#ifdef KIRCHHOFF /* DEVnodeIsNonLinear */ NULL +#endif }; diff --git a/src/spicelib/devices/vccs/vccsload.c b/src/spicelib/devices/vccs/vccsload.c index 6c45fd96c..6be9fce00 100644 --- a/src/spicelib/devices/vccs/vccsload.c +++ b/src/spicelib/devices/vccs/vccsload.c @@ -36,10 +36,13 @@ VCCSload(GENmodel *inModel, CKTcircuit *ckt) *(here->VCCSnegContPosptr) -= here->VCCScoeff ; *(here->VCCSnegContNegptr) += here->VCCScoeff ; +#ifdef KIRCHHOFF *(ckt->CKTfvk+here->VCCSposNode) += here->VCCScoeff * *(ckt->CKTrhsOld+here->VCCScontPosNode) ; *(ckt->CKTfvk+here->VCCSposNode) -= here->VCCScoeff * *(ckt->CKTrhsOld+here->VCCScontNegNode) ; *(ckt->CKTfvk+here->VCCSnegNode) -= here->VCCScoeff * *(ckt->CKTrhsOld+here->VCCScontPosNode) ; *(ckt->CKTfvk+here->VCCSnegNode) += here->VCCScoeff * *(ckt->CKTrhsOld+here->VCCScontNegNode) ; +#endif + } } return(OK); diff --git a/src/spicelib/devices/vcvs/vcvsinit.c b/src/spicelib/devices/vcvs/vcvsinit.c index 8b87288e4..7c6d311b3 100644 --- a/src/spicelib/devices/vcvs/vcvsinit.c +++ b/src/spicelib/devices/vcvs/vcvsinit.c @@ -73,7 +73,10 @@ SPICEdev VCVSinfo = { #endif /* DEVinstSize */ &VCVSiSize, /* DEVmodSize */ &VCVSmSize, + +#ifdef KIRCHHOFF /* DEVnodeIsNonLinear */ NULL +#endif }; diff --git a/src/spicelib/devices/vcvs/vcvsload.c b/src/spicelib/devices/vcvs/vcvsload.c index da5a1ec1b..b2e345912 100644 --- a/src/spicelib/devices/vcvs/vcvsload.c +++ b/src/spicelib/devices/vcvs/vcvsload.c @@ -38,8 +38,11 @@ VCVSload(GENmodel *inModel, CKTcircuit *ckt) *(here->VCVSibrContPosptr) -= here->VCVScoeff ; *(here->VCVSibrContNegptr) += here->VCVScoeff ; +#ifdef KIRCHHOFF *(ckt->CKTfvk+here->VCVSposNode) += *(ckt->CKTrhsOld+here->VCVSbranch) ; *(ckt->CKTfvk+here->VCVSnegNode) -= *(ckt->CKTrhsOld+here->VCVSbranch) ; +#endif + } } return(OK); diff --git a/src/spicelib/devices/vsrc/vsrcinit.c b/src/spicelib/devices/vsrc/vsrcinit.c index 6e6f02e88..a2e973efb 100644 --- a/src/spicelib/devices/vsrc/vsrcinit.c +++ b/src/spicelib/devices/vsrc/vsrcinit.c @@ -73,7 +73,11 @@ SPICEdev VSRCinfo = { #endif /* DEVinstSize */ &VSRCiSize, /* DEVmodSize */ &VSRCmSize, + +#ifdef KIRCHHOFF /* DEVnodeIsNonLinear */ NULL +#endif + }; diff --git a/src/spicelib/devices/vsrc/vsrcload.c b/src/spicelib/devices/vsrc/vsrcload.c index a3b7b6869..c71f11c00 100644 --- a/src/spicelib/devices/vsrc/vsrcload.c +++ b/src/spicelib/devices/vsrc/vsrcload.c @@ -45,8 +45,10 @@ VSRCload(GENmodel *inModel, CKTcircuit *ckt) *(here->VSRCibrPosptr) += 1.0 ; *(here->VSRCibrNegptr) -= 1.0 ; +#ifdef KIRCHHOFF *(ckt->CKTfvk+here->VSRCposNode) += *(ckt->CKTrhsOld+here->VSRCbranch) ; *(ckt->CKTfvk+here->VSRCnegNode) -= *(ckt->CKTrhsOld+here->VSRCbranch) ; +#endif if( (ckt->CKTmode & (MODEDCOP | MODEDCTRANCURVE)) && here->VSRCdcGiven ) {