From f7effb32347ee0a636d6f3f865b985baeaf57d2f Mon Sep 17 00:00:00 2001 From: Francesco Lannutti Date: Mon, 1 Apr 2013 22:44:22 +0200 Subject: [PATCH] New Binding Method extended to JFET2 device --- src/spicelib/devices/jfet2/jfet2bindCSC.c | 463 +++++++++++----------- src/spicelib/devices/jfet2/jfet2defs.h | 18 + src/spicelib/devices/jfet2/jfet2set.c | 18 +- 3 files changed, 250 insertions(+), 249 deletions(-) diff --git a/src/spicelib/devices/jfet2/jfet2bindCSC.c b/src/spicelib/devices/jfet2/jfet2bindCSC.c index 7fe798800..7d5eab516 100644 --- a/src/spicelib/devices/jfet2/jfet2bindCSC.c +++ b/src/spicelib/devices/jfet2/jfet2bindCSC.c @@ -1,5 +1,5 @@ /********** -Author: 2012 Francesco Lannutti +Author: 2013 Francesco Lannutti **********/ #include "ngspice/ngspice.h" @@ -7,220 +7,226 @@ Author: 2012 Francesco Lannutti #include "jfet2defs.h" #include "ngspice/sperror.h" +#include + +static int -JFET2bindCSC(GENmodel *inModel, CKTcircuit *ckt) +BindCompare (const void *a, const void *b) { - JFET2model *model = (JFET2model *)inModel; - int i ; + BindElement *A, *B ; + A = (BindElement *)a ; + B = (BindElement *)b ; - /* loop through all the jfet2 models */ - for( ; model != NULL; model = model->JFET2nextModel ) { - JFET2instance *here; - - /* loop through all the instances of the model */ - for (here = model->JFET2instances; here != NULL ; - here = here->JFET2nextInstance) { - - i = 0 ; - if ((here->JFET2drainNode != 0) && (here->JFET2drainPrimeNode != 0)) { - while (here->JFET2drainDrainPrimePtr != ckt->CKTmatrix->CKTbind_Sparse [i]) i ++ ; - here->JFET2drainDrainPrimePtr = ckt->CKTmatrix->CKTbind_CSC [i] ; - } - - i = 0 ; - if ((here->JFET2gateNode != 0) && (here->JFET2drainPrimeNode != 0)) { - while (here->JFET2gateDrainPrimePtr != ckt->CKTmatrix->CKTbind_Sparse [i]) i ++ ; - here->JFET2gateDrainPrimePtr = ckt->CKTmatrix->CKTbind_CSC [i] ; - } - - i = 0 ; - if ((here->JFET2gateNode != 0) && (here->JFET2sourcePrimeNode != 0)) { - while (here->JFET2gateSourcePrimePtr != ckt->CKTmatrix->CKTbind_Sparse [i]) i ++ ; - here->JFET2gateSourcePrimePtr = ckt->CKTmatrix->CKTbind_CSC [i] ; - } - - i = 0 ; - if ((here->JFET2sourceNode != 0) && (here->JFET2sourcePrimeNode != 0)) { - while (here->JFET2sourceSourcePrimePtr != ckt->CKTmatrix->CKTbind_Sparse [i]) i ++ ; - here->JFET2sourceSourcePrimePtr = ckt->CKTmatrix->CKTbind_CSC [i] ; - } - - i = 0 ; - if ((here->JFET2drainPrimeNode != 0) && (here->JFET2drainNode != 0)) { - while (here->JFET2drainPrimeDrainPtr != ckt->CKTmatrix->CKTbind_Sparse [i]) i ++ ; - here->JFET2drainPrimeDrainPtr = ckt->CKTmatrix->CKTbind_CSC [i] ; - } - - i = 0 ; - if ((here->JFET2drainPrimeNode != 0) && (here->JFET2gateNode != 0)) { - while (here->JFET2drainPrimeGatePtr != ckt->CKTmatrix->CKTbind_Sparse [i]) i ++ ; - here->JFET2drainPrimeGatePtr = ckt->CKTmatrix->CKTbind_CSC [i] ; - } - - i = 0 ; - if ((here->JFET2drainPrimeNode != 0) && (here->JFET2sourcePrimeNode != 0)) { - while (here->JFET2drainPrimeSourcePrimePtr != ckt->CKTmatrix->CKTbind_Sparse [i]) i ++ ; - here->JFET2drainPrimeSourcePrimePtr = ckt->CKTmatrix->CKTbind_CSC [i] ; - } - - i = 0 ; - if ((here->JFET2sourcePrimeNode != 0) && (here->JFET2gateNode != 0)) { - while (here->JFET2sourcePrimeGatePtr != ckt->CKTmatrix->CKTbind_Sparse [i]) i ++ ; - here->JFET2sourcePrimeGatePtr = ckt->CKTmatrix->CKTbind_CSC [i] ; - } - - i = 0 ; - if ((here->JFET2sourcePrimeNode != 0) && (here->JFET2sourceNode != 0)) { - while (here->JFET2sourcePrimeSourcePtr != ckt->CKTmatrix->CKTbind_Sparse [i]) i ++ ; - here->JFET2sourcePrimeSourcePtr = ckt->CKTmatrix->CKTbind_CSC [i] ; - } - - i = 0 ; - if ((here->JFET2sourcePrimeNode != 0) && (here->JFET2drainPrimeNode != 0)) { - while (here->JFET2sourcePrimeDrainPrimePtr != ckt->CKTmatrix->CKTbind_Sparse [i]) i ++ ; - here->JFET2sourcePrimeDrainPrimePtr = ckt->CKTmatrix->CKTbind_CSC [i] ; - } - - i = 0 ; - if ((here->JFET2drainNode != 0) && (here->JFET2drainNode != 0)) { - while (here->JFET2drainDrainPtr != ckt->CKTmatrix->CKTbind_Sparse [i]) i ++ ; - here->JFET2drainDrainPtr = ckt->CKTmatrix->CKTbind_CSC [i] ; - } - - i = 0 ; - if ((here->JFET2gateNode != 0) && (here->JFET2gateNode != 0)) { - while (here->JFET2gateGatePtr != ckt->CKTmatrix->CKTbind_Sparse [i]) i ++ ; - here->JFET2gateGatePtr = ckt->CKTmatrix->CKTbind_CSC [i] ; - } - - i = 0 ; - if ((here->JFET2sourceNode != 0) && (here->JFET2sourceNode != 0)) { - while (here->JFET2sourceSourcePtr != ckt->CKTmatrix->CKTbind_Sparse [i]) i ++ ; - here->JFET2sourceSourcePtr = ckt->CKTmatrix->CKTbind_CSC [i] ; - } - - i = 0 ; - if ((here->JFET2drainPrimeNode != 0) && (here->JFET2drainPrimeNode != 0)) { - while (here->JFET2drainPrimeDrainPrimePtr != ckt->CKTmatrix->CKTbind_Sparse [i]) i ++ ; - here->JFET2drainPrimeDrainPrimePtr = ckt->CKTmatrix->CKTbind_CSC [i] ; - } - - i = 0 ; - if ((here->JFET2sourcePrimeNode != 0) && (here->JFET2sourcePrimeNode != 0)) { - while (here->JFET2sourcePrimeSourcePrimePtr != ckt->CKTmatrix->CKTbind_Sparse [i]) i ++ ; - here->JFET2sourcePrimeSourcePrimePtr = ckt->CKTmatrix->CKTbind_CSC [i] ; - } - } - } - return(OK); + return ((int)(A->Sparse - B->Sparse)) ; } int -JFET2bindCSCComplex(GENmodel *inModel, CKTcircuit *ckt) +JFET2bindCSC (GENmodel *inModel, CKTcircuit *ckt) { - JFET2model *model = (JFET2model *)inModel; - int i ; + JFET2model *model = (JFET2model *)inModel ; + JFET2instance *here ; + double *i ; + BindElement *matched, *BindStruct ; + size_t nz ; - /* loop through all the jfet2 models */ - for( ; model != NULL; model = model->JFET2nextModel ) { - JFET2instance *here; + BindStruct = ckt->CKTmatrix->CKTbindStruct ; + nz = (size_t)ckt->CKTmatrix->CKTklunz ; + /* loop through all the JFET2 models */ + for ( ; model != NULL ; model = model->JFET2nextModel) + { /* loop through all the instances of the model */ - for (here = model->JFET2instances; here != NULL ; - here = here->JFET2nextInstance) { + for (here = model->JFET2instances ; here != NULL ; here = here->JFET2nextInstance) + { + if ((here->JFET2drainNode != 0) && (here->JFET2drainPrimeNode != 0)) + { + i = here->JFET2drainDrainPrimePtr ; + matched = (BindElement *) bsearch (&i, BindStruct, nz, sizeof(BindElement), BindCompare) ; + here->JFET2drainDrainPrimeStructPtr = matched ; + here->JFET2drainDrainPrimePtr = matched->CSC ; + } - i = 0 ; - if ((here->JFET2drainNode != 0) && (here->JFET2drainPrimeNode != 0)) { - while (here->JFET2drainDrainPrimePtr != ckt->CKTmatrix->CKTbind_CSC [i]) i ++ ; - here->JFET2drainDrainPrimePtr = ckt->CKTmatrix->CKTbind_CSC_Complex [i] ; - } + if ((here->JFET2gateNode != 0) && (here->JFET2drainPrimeNode != 0)) + { + i = here->JFET2gateDrainPrimePtr ; + matched = (BindElement *) bsearch (&i, BindStruct, nz, sizeof(BindElement), BindCompare) ; + here->JFET2gateDrainPrimeStructPtr = matched ; + here->JFET2gateDrainPrimePtr = matched->CSC ; + } - i = 0 ; - if ((here->JFET2gateNode != 0) && (here->JFET2drainPrimeNode != 0)) { - while (here->JFET2gateDrainPrimePtr != ckt->CKTmatrix->CKTbind_CSC [i]) i ++ ; - here->JFET2gateDrainPrimePtr = ckt->CKTmatrix->CKTbind_CSC_Complex [i] ; - } + if ((here->JFET2gateNode != 0) && (here->JFET2sourcePrimeNode != 0)) + { + i = here->JFET2gateSourcePrimePtr ; + matched = (BindElement *) bsearch (&i, BindStruct, nz, sizeof(BindElement), BindCompare) ; + here->JFET2gateSourcePrimeStructPtr = matched ; + here->JFET2gateSourcePrimePtr = matched->CSC ; + } - i = 0 ; - if ((here->JFET2gateNode != 0) && (here->JFET2sourcePrimeNode != 0)) { - while (here->JFET2gateSourcePrimePtr != ckt->CKTmatrix->CKTbind_CSC [i]) i ++ ; - here->JFET2gateSourcePrimePtr = ckt->CKTmatrix->CKTbind_CSC_Complex [i] ; - } + if ((here->JFET2sourceNode != 0) && (here->JFET2sourcePrimeNode != 0)) + { + i = here->JFET2sourceSourcePrimePtr ; + matched = (BindElement *) bsearch (&i, BindStruct, nz, sizeof(BindElement), BindCompare) ; + here->JFET2sourceSourcePrimeStructPtr = matched ; + here->JFET2sourceSourcePrimePtr = matched->CSC ; + } - i = 0 ; - if ((here->JFET2sourceNode != 0) && (here->JFET2sourcePrimeNode != 0)) { - while (here->JFET2sourceSourcePrimePtr != ckt->CKTmatrix->CKTbind_CSC [i]) i ++ ; - here->JFET2sourceSourcePrimePtr = ckt->CKTmatrix->CKTbind_CSC_Complex [i] ; - } + if ((here->JFET2drainPrimeNode != 0) && (here->JFET2drainNode != 0)) + { + i = here->JFET2drainPrimeDrainPtr ; + matched = (BindElement *) bsearch (&i, BindStruct, nz, sizeof(BindElement), BindCompare) ; + here->JFET2drainPrimeDrainStructPtr = matched ; + here->JFET2drainPrimeDrainPtr = matched->CSC ; + } - i = 0 ; - if ((here->JFET2drainPrimeNode != 0) && (here->JFET2drainNode != 0)) { - while (here->JFET2drainPrimeDrainPtr != ckt->CKTmatrix->CKTbind_CSC [i]) i ++ ; - here->JFET2drainPrimeDrainPtr = ckt->CKTmatrix->CKTbind_CSC_Complex [i] ; - } + if ((here->JFET2drainPrimeNode != 0) && (here->JFET2gateNode != 0)) + { + i = here->JFET2drainPrimeGatePtr ; + matched = (BindElement *) bsearch (&i, BindStruct, nz, sizeof(BindElement), BindCompare) ; + here->JFET2drainPrimeGateStructPtr = matched ; + here->JFET2drainPrimeGatePtr = matched->CSC ; + } - i = 0 ; - if ((here->JFET2drainPrimeNode != 0) && (here->JFET2gateNode != 0)) { - while (here->JFET2drainPrimeGatePtr != ckt->CKTmatrix->CKTbind_CSC [i]) i ++ ; - here->JFET2drainPrimeGatePtr = ckt->CKTmatrix->CKTbind_CSC_Complex [i] ; - } + if ((here->JFET2drainPrimeNode != 0) && (here->JFET2sourcePrimeNode != 0)) + { + i = here->JFET2drainPrimeSourcePrimePtr ; + matched = (BindElement *) bsearch (&i, BindStruct, nz, sizeof(BindElement), BindCompare) ; + here->JFET2drainPrimeSourcePrimeStructPtr = matched ; + here->JFET2drainPrimeSourcePrimePtr = matched->CSC ; + } - i = 0 ; - if ((here->JFET2drainPrimeNode != 0) && (here->JFET2sourcePrimeNode != 0)) { - while (here->JFET2drainPrimeSourcePrimePtr != ckt->CKTmatrix->CKTbind_CSC [i]) i ++ ; - here->JFET2drainPrimeSourcePrimePtr = ckt->CKTmatrix->CKTbind_CSC_Complex [i] ; - } + if ((here->JFET2sourcePrimeNode != 0) && (here->JFET2gateNode != 0)) + { + i = here->JFET2sourcePrimeGatePtr ; + matched = (BindElement *) bsearch (&i, BindStruct, nz, sizeof(BindElement), BindCompare) ; + here->JFET2sourcePrimeGateStructPtr = matched ; + here->JFET2sourcePrimeGatePtr = matched->CSC ; + } - i = 0 ; - if ((here->JFET2sourcePrimeNode != 0) && (here->JFET2gateNode != 0)) { - while (here->JFET2sourcePrimeGatePtr != ckt->CKTmatrix->CKTbind_CSC [i]) i ++ ; - here->JFET2sourcePrimeGatePtr = ckt->CKTmatrix->CKTbind_CSC_Complex [i] ; - } + if ((here->JFET2sourcePrimeNode != 0) && (here->JFET2sourceNode != 0)) + { + i = here->JFET2sourcePrimeSourcePtr ; + matched = (BindElement *) bsearch (&i, BindStruct, nz, sizeof(BindElement), BindCompare) ; + here->JFET2sourcePrimeSourceStructPtr = matched ; + here->JFET2sourcePrimeSourcePtr = matched->CSC ; + } - i = 0 ; - if ((here->JFET2sourcePrimeNode != 0) && (here->JFET2sourceNode != 0)) { - while (here->JFET2sourcePrimeSourcePtr != ckt->CKTmatrix->CKTbind_CSC [i]) i ++ ; - here->JFET2sourcePrimeSourcePtr = ckt->CKTmatrix->CKTbind_CSC_Complex [i] ; - } + if ((here->JFET2sourcePrimeNode != 0) && (here->JFET2drainPrimeNode != 0)) + { + i = here->JFET2sourcePrimeDrainPrimePtr ; + matched = (BindElement *) bsearch (&i, BindStruct, nz, sizeof(BindElement), BindCompare) ; + here->JFET2sourcePrimeDrainPrimeStructPtr = matched ; + here->JFET2sourcePrimeDrainPrimePtr = matched->CSC ; + } - i = 0 ; - if ((here->JFET2sourcePrimeNode != 0) && (here->JFET2drainPrimeNode != 0)) { - while (here->JFET2sourcePrimeDrainPrimePtr != ckt->CKTmatrix->CKTbind_CSC [i]) i ++ ; - here->JFET2sourcePrimeDrainPrimePtr = ckt->CKTmatrix->CKTbind_CSC_Complex [i] ; - } + if ((here->JFET2drainNode != 0) && (here->JFET2drainNode != 0)) + { + i = here->JFET2drainDrainPtr ; + matched = (BindElement *) bsearch (&i, BindStruct, nz, sizeof(BindElement), BindCompare) ; + here->JFET2drainDrainStructPtr = matched ; + here->JFET2drainDrainPtr = matched->CSC ; + } - i = 0 ; - if ((here->JFET2drainNode != 0) && (here->JFET2drainNode != 0)) { - while (here->JFET2drainDrainPtr != ckt->CKTmatrix->CKTbind_CSC [i]) i ++ ; - here->JFET2drainDrainPtr = ckt->CKTmatrix->CKTbind_CSC_Complex [i] ; - } + if ((here->JFET2gateNode != 0) && (here->JFET2gateNode != 0)) + { + i = here->JFET2gateGatePtr ; + matched = (BindElement *) bsearch (&i, BindStruct, nz, sizeof(BindElement), BindCompare) ; + here->JFET2gateGateStructPtr = matched ; + here->JFET2gateGatePtr = matched->CSC ; + } - i = 0 ; - if ((here->JFET2gateNode != 0) && (here->JFET2gateNode != 0)) { - while (here->JFET2gateGatePtr != ckt->CKTmatrix->CKTbind_CSC [i]) i ++ ; - here->JFET2gateGatePtr = ckt->CKTmatrix->CKTbind_CSC_Complex [i] ; - } + if ((here->JFET2sourceNode != 0) && (here->JFET2sourceNode != 0)) + { + i = here->JFET2sourceSourcePtr ; + matched = (BindElement *) bsearch (&i, BindStruct, nz, sizeof(BindElement), BindCompare) ; + here->JFET2sourceSourceStructPtr = matched ; + here->JFET2sourceSourcePtr = matched->CSC ; + } - i = 0 ; - if ((here->JFET2sourceNode != 0) && (here->JFET2sourceNode != 0)) { - while (here->JFET2sourceSourcePtr != ckt->CKTmatrix->CKTbind_CSC [i]) i ++ ; - here->JFET2sourceSourcePtr = ckt->CKTmatrix->CKTbind_CSC_Complex [i] ; - } + if ((here->JFET2drainPrimeNode != 0) && (here->JFET2drainPrimeNode != 0)) + { + i = here->JFET2drainPrimeDrainPrimePtr ; + matched = (BindElement *) bsearch (&i, BindStruct, nz, sizeof(BindElement), BindCompare) ; + here->JFET2drainPrimeDrainPrimeStructPtr = matched ; + here->JFET2drainPrimeDrainPrimePtr = matched->CSC ; + } - i = 0 ; - if ((here->JFET2drainPrimeNode != 0) && (here->JFET2drainPrimeNode != 0)) { - while (here->JFET2drainPrimeDrainPrimePtr != ckt->CKTmatrix->CKTbind_CSC [i]) i ++ ; - here->JFET2drainPrimeDrainPrimePtr = ckt->CKTmatrix->CKTbind_CSC_Complex [i] ; - } + if ((here->JFET2sourcePrimeNode != 0) && (here->JFET2sourcePrimeNode != 0)) + { + i = here->JFET2sourcePrimeSourcePrimePtr ; + matched = (BindElement *) bsearch (&i, BindStruct, nz, sizeof(BindElement), BindCompare) ; + here->JFET2sourcePrimeSourcePrimeStructPtr = matched ; + here->JFET2sourcePrimeSourcePrimePtr = matched->CSC ; + } - i = 0 ; - if ((here->JFET2sourcePrimeNode != 0) && (here->JFET2sourcePrimeNode != 0)) { - while (here->JFET2sourcePrimeSourcePrimePtr != ckt->CKTmatrix->CKTbind_CSC [i]) i ++ ; - here->JFET2sourcePrimeSourcePrimePtr = ckt->CKTmatrix->CKTbind_CSC_Complex [i] ; - } - } + } } - return(OK); + + return (OK) ; +} + +int +JFET2bindCSCComplex (GENmodel *inModel, CKTcircuit *ckt) +{ + JFET2model *model = (JFET2model *)inModel ; + JFET2instance *here ; + + NG_IGNORE (ckt) ; + + /* loop through all the JFET2 models */ + for ( ; model != NULL ; model = model->JFET2nextModel) + { + /* loop through all the instances of the model */ + for (here = model->JFET2instances ; here != NULL ; here = here->JFET2nextInstance) + { + if ((here->JFET2drainNode != 0) && (here->JFET2drainPrimeNode != 0)) + here->JFET2drainDrainPrimePtr = here->JFET2drainDrainPrimeStructPtr->CSC_Complex ; + + if ((here->JFET2gateNode != 0) && (here->JFET2drainPrimeNode != 0)) + here->JFET2gateDrainPrimePtr = here->JFET2gateDrainPrimeStructPtr->CSC_Complex ; + + if ((here->JFET2gateNode != 0) && (here->JFET2sourcePrimeNode != 0)) + here->JFET2gateSourcePrimePtr = here->JFET2gateSourcePrimeStructPtr->CSC_Complex ; + + if ((here->JFET2sourceNode != 0) && (here->JFET2sourcePrimeNode != 0)) + here->JFET2sourceSourcePrimePtr = here->JFET2sourceSourcePrimeStructPtr->CSC_Complex ; + + if ((here->JFET2drainPrimeNode != 0) && (here->JFET2drainNode != 0)) + here->JFET2drainPrimeDrainPtr = here->JFET2drainPrimeDrainStructPtr->CSC_Complex ; + + if ((here->JFET2drainPrimeNode != 0) && (here->JFET2gateNode != 0)) + here->JFET2drainPrimeGatePtr = here->JFET2drainPrimeGateStructPtr->CSC_Complex ; + + if ((here->JFET2drainPrimeNode != 0) && (here->JFET2sourcePrimeNode != 0)) + here->JFET2drainPrimeSourcePrimePtr = here->JFET2drainPrimeSourcePrimeStructPtr->CSC_Complex ; + + if ((here->JFET2sourcePrimeNode != 0) && (here->JFET2gateNode != 0)) + here->JFET2sourcePrimeGatePtr = here->JFET2sourcePrimeGateStructPtr->CSC_Complex ; + + if ((here->JFET2sourcePrimeNode != 0) && (here->JFET2sourceNode != 0)) + here->JFET2sourcePrimeSourcePtr = here->JFET2sourcePrimeSourceStructPtr->CSC_Complex ; + + if ((here->JFET2sourcePrimeNode != 0) && (here->JFET2drainPrimeNode != 0)) + here->JFET2sourcePrimeDrainPrimePtr = here->JFET2sourcePrimeDrainPrimeStructPtr->CSC_Complex ; + + if ((here->JFET2drainNode != 0) && (here->JFET2drainNode != 0)) + here->JFET2drainDrainPtr = here->JFET2drainDrainStructPtr->CSC_Complex ; + + if ((here->JFET2gateNode != 0) && (here->JFET2gateNode != 0)) + here->JFET2gateGatePtr = here->JFET2gateGateStructPtr->CSC_Complex ; + + if ((here->JFET2sourceNode != 0) && (here->JFET2sourceNode != 0)) + here->JFET2sourceSourcePtr = here->JFET2sourceSourceStructPtr->CSC_Complex ; + + if ((here->JFET2drainPrimeNode != 0) && (here->JFET2drainPrimeNode != 0)) + here->JFET2drainPrimeDrainPrimePtr = here->JFET2drainPrimeDrainPrimeStructPtr->CSC_Complex ; + + if ((here->JFET2sourcePrimeNode != 0) && (here->JFET2sourcePrimeNode != 0)) + here->JFET2sourcePrimeSourcePrimePtr = here->JFET2sourcePrimeSourcePrimeStructPtr->CSC_Complex ; + + } + } + + return (OK) ; } int @@ -228,79 +234,62 @@ JFET2bindCSCComplexToReal (GENmodel *inModel, CKTcircuit *ckt) { JFET2model *model = (JFET2model *)inModel ; JFET2instance *here ; - int i ; - /* loop through all the Jfet2 models */ + NG_IGNORE (ckt) ; + + /* loop through all the JFET2 models */ for ( ; model != NULL ; model = model->JFET2nextModel) { /* loop through all the instances of the model */ for (here = model->JFET2instances ; here != NULL ; here = here->JFET2nextInstance) { - i = 0 ; if ((here->JFET2drainNode != 0) && (here->JFET2drainPrimeNode != 0)) - { - while (here->JFET2drainDrainPrimePtr != ckt->CKTmatrix->CKTbind_CSC_Complex [i]) i ++ ; - here->JFET2drainDrainPrimePtr = ckt->CKTmatrix->CKTbind_CSC [i] ; - } + here->JFET2drainDrainPrimePtr = here->JFET2drainDrainPrimeStructPtr->CSC ; - i = 0 ; if ((here->JFET2gateNode != 0) && (here->JFET2drainPrimeNode != 0)) - { - while (here->JFET2gateDrainPrimePtr != ckt->CKTmatrix->CKTbind_CSC_Complex [i]) i ++ ; - here->JFET2gateDrainPrimePtr = ckt->CKTmatrix->CKTbind_CSC [i] ; - } + here->JFET2gateDrainPrimePtr = here->JFET2gateDrainPrimeStructPtr->CSC ; - i = 0 ; if ((here->JFET2gateNode != 0) && (here->JFET2sourcePrimeNode != 0)) - { - while (here->JFET2gateSourcePrimePtr != ckt->CKTmatrix->CKTbind_CSC_Complex [i]) i ++ ; - here->JFET2gateSourcePrimePtr = ckt->CKTmatrix->CKTbind_CSC [i] ; - } + here->JFET2gateSourcePrimePtr = here->JFET2gateSourcePrimeStructPtr->CSC ; + + if ((here->JFET2sourceNode != 0) && (here->JFET2sourcePrimeNode != 0)) + here->JFET2sourceSourcePrimePtr = here->JFET2sourceSourcePrimeStructPtr->CSC ; - i = 0 ; if ((here->JFET2drainPrimeNode != 0) && (here->JFET2drainNode != 0)) - { - while (here->JFET2drainPrimeDrainPtr != ckt->CKTmatrix->CKTbind_CSC_Complex [i]) i ++ ; - here->JFET2drainPrimeDrainPtr = ckt->CKTmatrix->CKTbind_CSC [i] ; - } + here->JFET2drainPrimeDrainPtr = here->JFET2drainPrimeDrainStructPtr->CSC ; - i = 0 ; if ((here->JFET2drainPrimeNode != 0) && (here->JFET2gateNode != 0)) - { - while (here->JFET2drainPrimeGatePtr != ckt->CKTmatrix->CKTbind_CSC_Complex [i]) i ++ ; - here->JFET2drainPrimeGatePtr = ckt->CKTmatrix->CKTbind_CSC [i] ; - } + here->JFET2drainPrimeGatePtr = here->JFET2drainPrimeGateStructPtr->CSC ; + + if ((here->JFET2drainPrimeNode != 0) && (here->JFET2sourcePrimeNode != 0)) + here->JFET2drainPrimeSourcePrimePtr = here->JFET2drainPrimeSourcePrimeStructPtr->CSC ; - i = 0 ; if ((here->JFET2sourcePrimeNode != 0) && (here->JFET2gateNode != 0)) - { - while (here->JFET2sourcePrimeGatePtr != ckt->CKTmatrix->CKTbind_CSC_Complex [i]) i ++ ; - here->JFET2sourcePrimeGatePtr = ckt->CKTmatrix->CKTbind_CSC [i] ; - } + here->JFET2sourcePrimeGatePtr = here->JFET2sourcePrimeGateStructPtr->CSC ; + + if ((here->JFET2sourcePrimeNode != 0) && (here->JFET2sourceNode != 0)) + here->JFET2sourcePrimeSourcePtr = here->JFET2sourcePrimeSourceStructPtr->CSC ; + + if ((here->JFET2sourcePrimeNode != 0) && (here->JFET2drainPrimeNode != 0)) + here->JFET2sourcePrimeDrainPrimePtr = here->JFET2sourcePrimeDrainPrimeStructPtr->CSC ; - i = 0 ; if ((here->JFET2drainNode != 0) && (here->JFET2drainNode != 0)) - { - while (here->JFET2drainDrainPtr != ckt->CKTmatrix->CKTbind_CSC_Complex [i]) i ++ ; - here->JFET2drainDrainPtr = ckt->CKTmatrix->CKTbind_CSC [i] ; - } + here->JFET2drainDrainPtr = here->JFET2drainDrainStructPtr->CSC ; - i = 0 ; if ((here->JFET2gateNode != 0) && (here->JFET2gateNode != 0)) - { - while (here->JFET2gateGatePtr != ckt->CKTmatrix->CKTbind_CSC_Complex [i]) i ++ ; - here->JFET2gateGatePtr = ckt->CKTmatrix->CKTbind_CSC [i] ; - } + here->JFET2gateGatePtr = here->JFET2gateGateStructPtr->CSC ; - i = 0 ; if ((here->JFET2sourceNode != 0) && (here->JFET2sourceNode != 0)) - { - while (here->JFET2sourceSourcePtr != ckt->CKTmatrix->CKTbind_CSC_Complex [i]) i ++ ; - here->JFET2sourceSourcePtr = ckt->CKTmatrix->CKTbind_CSC [i] ; - } + here->JFET2sourceSourcePtr = here->JFET2sourceSourceStructPtr->CSC ; + + if ((here->JFET2drainPrimeNode != 0) && (here->JFET2drainPrimeNode != 0)) + here->JFET2drainPrimeDrainPrimePtr = here->JFET2drainPrimeDrainPrimeStructPtr->CSC ; + + if ((here->JFET2sourcePrimeNode != 0) && (here->JFET2sourcePrimeNode != 0)) + here->JFET2sourcePrimeSourcePrimePtr = here->JFET2sourcePrimeSourcePrimeStructPtr->CSC ; } } return (OK) ; -} \ No newline at end of file +} diff --git a/src/spicelib/devices/jfet2/jfet2defs.h b/src/spicelib/devices/jfet2/jfet2defs.h index a50e02574..715d203cf 100644 --- a/src/spicelib/devices/jfet2/jfet2defs.h +++ b/src/spicelib/devices/jfet2/jfet2defs.h @@ -155,6 +155,24 @@ typedef struct sJFET2instance { double JFET2d3; /* Dual Power-law parameter */ double JFET2alpha; /* capacitance model transition parameter */ +#ifdef KLU + BindElement *JFET2drainDrainPrimeStructPtr ; + BindElement *JFET2gateDrainPrimeStructPtr ; + BindElement *JFET2gateSourcePrimeStructPtr ; + BindElement *JFET2sourceSourcePrimeStructPtr ; + BindElement *JFET2drainPrimeDrainStructPtr ; + BindElement *JFET2drainPrimeGateStructPtr ; + BindElement *JFET2drainPrimeSourcePrimeStructPtr ; + BindElement *JFET2sourcePrimeGateStructPtr ; + BindElement *JFET2sourcePrimeSourceStructPtr ; + BindElement *JFET2sourcePrimeDrainPrimeStructPtr ; + BindElement *JFET2drainDrainStructPtr ; + BindElement *JFET2gateGateStructPtr ; + BindElement *JFET2sourceSourceStructPtr ; + BindElement *JFET2drainPrimeDrainPrimeStructPtr ; + BindElement *JFET2sourcePrimeSourcePrimeStructPtr ; +#endif + } JFET2instance ; #define JFET2vgs JFET2state diff --git a/src/spicelib/devices/jfet2/jfet2set.c b/src/spicelib/devices/jfet2/jfet2set.c index a7b27793a..af6964496 100644 --- a/src/spicelib/devices/jfet2/jfet2set.c +++ b/src/spicelib/devices/jfet2/jfet2set.c @@ -106,24 +106,18 @@ if((here->ptr = SMPmakeElt(matrix, here->first, here->second)) == NULL){\ TSTALLOC(JFET2drainDrainPrimePtr,JFET2drainNode,JFET2drainPrimeNode) TSTALLOC(JFET2gateDrainPrimePtr,JFET2gateNode,JFET2drainPrimeNode) TSTALLOC(JFET2gateSourcePrimePtr,JFET2gateNode,JFET2sourcePrimeNode) - TSTALLOC(JFET2sourceSourcePrimePtr,JFET2sourceNode, - JFET2sourcePrimeNode) + TSTALLOC(JFET2sourceSourcePrimePtr,JFET2sourceNode,JFET2sourcePrimeNode) TSTALLOC(JFET2drainPrimeDrainPtr,JFET2drainPrimeNode,JFET2drainNode) TSTALLOC(JFET2drainPrimeGatePtr,JFET2drainPrimeNode,JFET2gateNode) - TSTALLOC(JFET2drainPrimeSourcePrimePtr,JFET2drainPrimeNode, - JFET2sourcePrimeNode) + TSTALLOC(JFET2drainPrimeSourcePrimePtr,JFET2drainPrimeNode,JFET2sourcePrimeNode) TSTALLOC(JFET2sourcePrimeGatePtr,JFET2sourcePrimeNode,JFET2gateNode) - TSTALLOC(JFET2sourcePrimeSourcePtr,JFET2sourcePrimeNode, - JFET2sourceNode) - TSTALLOC(JFET2sourcePrimeDrainPrimePtr,JFET2sourcePrimeNode, - JFET2drainPrimeNode) + TSTALLOC(JFET2sourcePrimeSourcePtr,JFET2sourcePrimeNode,JFET2sourceNode) + TSTALLOC(JFET2sourcePrimeDrainPrimePtr,JFET2sourcePrimeNode,JFET2drainPrimeNode) TSTALLOC(JFET2drainDrainPtr,JFET2drainNode,JFET2drainNode) TSTALLOC(JFET2gateGatePtr,JFET2gateNode,JFET2gateNode) TSTALLOC(JFET2sourceSourcePtr,JFET2sourceNode,JFET2sourceNode) - TSTALLOC(JFET2drainPrimeDrainPrimePtr,JFET2drainPrimeNode, - JFET2drainPrimeNode) - TSTALLOC(JFET2sourcePrimeSourcePrimePtr,JFET2sourcePrimeNode, - JFET2sourcePrimeNode) + TSTALLOC(JFET2drainPrimeDrainPrimePtr,JFET2drainPrimeNode,JFET2drainPrimeNode) + TSTALLOC(JFET2sourcePrimeSourcePrimePtr,JFET2sourcePrimeNode,JFET2sourcePrimeNode) } } return(OK);