From 766a329f2e5e768cb63bce5ba16fdf1046429147 Mon Sep 17 00:00:00 2001 From: Francesco Lannutti Date: Mon, 1 Apr 2013 22:33:35 +0200 Subject: [PATCH] New Binding Method extended to HFET2 device --- src/spicelib/devices/hfet2/hfet2bindCSC.c | 480 ++++++++++------------ src/spicelib/devices/hfet2/hfet2defs.h | 20 +- 2 files changed, 233 insertions(+), 267 deletions(-) diff --git a/src/spicelib/devices/hfet2/hfet2bindCSC.c b/src/spicelib/devices/hfet2/hfet2bindCSC.c index 0c4f184bb..31a3cda29 100644 --- a/src/spicelib/devices/hfet2/hfet2bindCSC.c +++ b/src/spicelib/devices/hfet2/hfet2bindCSC.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 "hfet2defs.h" #include "ngspice/sperror.h" +#include + +static int -HFET2bindCSC(GENmodel *inModel, CKTcircuit *ckt) +BindCompare (const void *a, const void *b) { - HFET2model *model = (HFET2model *)inModel; - int i ; + BindElement *A, *B ; + A = (BindElement *)a ; + B = (BindElement *)b ; - /* loop through all the hfet2 models */ - for( ; model != NULL; model = model->HFET2nextModel ) { - HFET2instance *here; - - /* loop through all the instances of the model */ - for (here = model->HFET2instances; here != NULL ; - here = here->HFET2nextInstance) { - - i = 0 ; - if ((here->HFET2drainNode != 0) && (here->HFET2drainPrimeNode != 0)) { - while (here->HFET2drainDrainPrimePtr != ckt->CKTmatrix->CKTbind_Sparse [i]) i ++ ; - here->HFET2drainDrainPrimePtr = ckt->CKTmatrix->CKTbind_CSC [i] ; - } - - i = 0 ; - if ((here->HFET2gateNode != 0) && (here->HFET2drainPrimeNode != 0)) { - while (here->HFET2gateDrainPrimePtr != ckt->CKTmatrix->CKTbind_Sparse [i]) i ++ ; - here->HFET2gateDrainPrimePtr = ckt->CKTmatrix->CKTbind_CSC [i] ; - } - - i = 0 ; - if ((here->HFET2gateNode != 0) && (here->HFET2sourcePrimeNode != 0)) { - while (here->HFET2gateSourcePrimePtr != ckt->CKTmatrix->CKTbind_Sparse [i]) i ++ ; - here->HFET2gateSourcePrimePtr = ckt->CKTmatrix->CKTbind_CSC [i] ; - } - - i = 0 ; - if ((here->HFET2sourceNode != 0) && (here->HFET2sourcePrimeNode != 0)) { - while (here->HFET2sourceSourcePrimePtr != ckt->CKTmatrix->CKTbind_Sparse [i]) i ++ ; - here->HFET2sourceSourcePrimePtr = ckt->CKTmatrix->CKTbind_CSC [i] ; - } - - i = 0 ; - if ((here->HFET2drainPrimeNode != 0) && (here->HFET2drainNode != 0)) { - while (here->HFET2drainPrimeDrainPtr != ckt->CKTmatrix->CKTbind_Sparse [i]) i ++ ; - here->HFET2drainPrimeDrainPtr = ckt->CKTmatrix->CKTbind_CSC [i] ; - } - - i = 0 ; - if ((here->HFET2drainPrimeNode != 0) && (here->HFET2gateNode != 0)) { - while (here->HFET2drainPrimeGatePtr != ckt->CKTmatrix->CKTbind_Sparse [i]) i ++ ; - here->HFET2drainPrimeGatePtr = ckt->CKTmatrix->CKTbind_CSC [i] ; - } - - i = 0 ; - if ((here->HFET2drainPrimeNode != 0) && (here->HFET2sourcePrimeNode != 0)) { - while (here->HFET2drainPriHFET2ourcePrimePtr != ckt->CKTmatrix->CKTbind_Sparse [i]) i ++ ; - here->HFET2drainPriHFET2ourcePrimePtr = ckt->CKTmatrix->CKTbind_CSC [i] ; - } - - i = 0 ; - if ((here->HFET2sourcePrimeNode != 0) && (here->HFET2gateNode != 0)) { - while (here->HFET2sourcePrimeGatePtr != ckt->CKTmatrix->CKTbind_Sparse [i]) i ++ ; - here->HFET2sourcePrimeGatePtr = ckt->CKTmatrix->CKTbind_CSC [i] ; - } - - i = 0 ; - if ((here->HFET2sourcePrimeNode != 0) && (here->HFET2sourceNode != 0)) { - while (here->HFET2sourcePriHFET2ourcePtr != ckt->CKTmatrix->CKTbind_Sparse [i]) i ++ ; - here->HFET2sourcePriHFET2ourcePtr = ckt->CKTmatrix->CKTbind_CSC [i] ; - } - - i = 0 ; - if ((here->HFET2sourcePrimeNode != 0) && (here->HFET2drainPrimeNode != 0)) { - while (here->HFET2sourcePrimeDrainPrimePtr != ckt->CKTmatrix->CKTbind_Sparse [i]) i ++ ; - here->HFET2sourcePrimeDrainPrimePtr = ckt->CKTmatrix->CKTbind_CSC [i] ; - } - - i = 0 ; - if ((here->HFET2drainNode != 0) && (here->HFET2drainNode != 0)) { - while (here->HFET2drainDrainPtr != ckt->CKTmatrix->CKTbind_Sparse [i]) i ++ ; - here->HFET2drainDrainPtr = ckt->CKTmatrix->CKTbind_CSC [i] ; - } - - i = 0 ; - if ((here->HFET2gateNode != 0) && (here->HFET2gateNode != 0)) { - while (here->HFET2gateGatePtr != ckt->CKTmatrix->CKTbind_Sparse [i]) i ++ ; - here->HFET2gateGatePtr = ckt->CKTmatrix->CKTbind_CSC [i] ; - } - - i = 0 ; - if ((here->HFET2sourceNode != 0) && (here->HFET2sourceNode != 0)) { - while (here->HFET2sourceSourcePtr != ckt->CKTmatrix->CKTbind_Sparse [i]) i ++ ; - here->HFET2sourceSourcePtr = ckt->CKTmatrix->CKTbind_CSC [i] ; - } - - i = 0 ; - if ((here->HFET2drainPrimeNode != 0) && (here->HFET2drainPrimeNode != 0)) { - while (here->HFET2drainPrimeDrainPrimePtr != ckt->CKTmatrix->CKTbind_Sparse [i]) i ++ ; - here->HFET2drainPrimeDrainPrimePtr = ckt->CKTmatrix->CKTbind_CSC [i] ; - } - - i = 0 ; - if ((here->HFET2sourcePrimeNode != 0) && (here->HFET2sourcePrimeNode != 0)) { - while (here->HFET2sourcePriHFET2ourcePrimePtr != ckt->CKTmatrix->CKTbind_Sparse [i]) i ++ ; - here->HFET2sourcePriHFET2ourcePrimePtr = ckt->CKTmatrix->CKTbind_CSC [i] ; - } - } - } - return(OK); + return ((int)(A->Sparse - B->Sparse)) ; } int -HFET2bindCSCComplex(GENmodel *inModel, CKTcircuit *ckt) +HFET2bindCSC (GENmodel *inModel, CKTcircuit *ckt) { - HFET2model *model = (HFET2model *)inModel; - int i ; + HFET2model *model = (HFET2model *)inModel ; + HFET2instance *here ; + double *i ; + BindElement *matched, *BindStruct ; + size_t nz ; - /* loop through all the hfet2 models */ - for( ; model != NULL; model = model->HFET2nextModel ) { - HFET2instance *here; + BindStruct = ckt->CKTmatrix->CKTbindStruct ; + nz = (size_t)ckt->CKTmatrix->CKTklunz ; + /* loop through all the HFET2 models */ + for ( ; model != NULL ; model = model->HFET2nextModel) + { /* loop through all the instances of the model */ - for (here = model->HFET2instances; here != NULL ; - here = here->HFET2nextInstance) { + for (here = model->HFET2instances ; here != NULL ; here = here->HFET2nextInstance) + { + if ((here->HFET2drainNode != 0) && (here->HFET2drainPrimeNode != 0)) + { + i = here->HFET2drainDrainPrimePtr ; + matched = (BindElement *) bsearch (&i, BindStruct, nz, sizeof(BindElement), BindCompare) ; + here->HFET2drainDrainPrimeStructPtr = matched ; + here->HFET2drainDrainPrimePtr = matched->CSC ; + } - i = 0 ; - if ((here->HFET2drainNode != 0) && (here->HFET2drainPrimeNode != 0)) { - while (here->HFET2drainDrainPrimePtr != ckt->CKTmatrix->CKTbind_CSC [i]) i ++ ; - here->HFET2drainDrainPrimePtr = ckt->CKTmatrix->CKTbind_CSC_Complex [i] ; - } + if ((here->HFET2gateNode != 0) && (here->HFET2drainPrimeNode != 0)) + { + i = here->HFET2gateDrainPrimePtr ; + matched = (BindElement *) bsearch (&i, BindStruct, nz, sizeof(BindElement), BindCompare) ; + here->HFET2gateDrainPrimeStructPtr = matched ; + here->HFET2gateDrainPrimePtr = matched->CSC ; + } - i = 0 ; - if ((here->HFET2gateNode != 0) && (here->HFET2drainPrimeNode != 0)) { - while (here->HFET2gateDrainPrimePtr != ckt->CKTmatrix->CKTbind_CSC [i]) i ++ ; - here->HFET2gateDrainPrimePtr = ckt->CKTmatrix->CKTbind_CSC_Complex [i] ; - } + if ((here->HFET2gateNode != 0) && (here->HFET2sourcePrimeNode != 0)) + { + i = here->HFET2gateSourcePrimePtr ; + matched = (BindElement *) bsearch (&i, BindStruct, nz, sizeof(BindElement), BindCompare) ; + here->HFET2gateSourcePrimeStructPtr = matched ; + here->HFET2gateSourcePrimePtr = matched->CSC ; + } - i = 0 ; - if ((here->HFET2gateNode != 0) && (here->HFET2sourcePrimeNode != 0)) { - while (here->HFET2gateSourcePrimePtr != ckt->CKTmatrix->CKTbind_CSC [i]) i ++ ; - here->HFET2gateSourcePrimePtr = ckt->CKTmatrix->CKTbind_CSC_Complex [i] ; - } + if ((here->HFET2sourceNode != 0) && (here->HFET2sourcePrimeNode != 0)) + { + i = here->HFET2sourceSourcePrimePtr ; + matched = (BindElement *) bsearch (&i, BindStruct, nz, sizeof(BindElement), BindCompare) ; + here->HFET2sourceSourcePrimeStructPtr = matched ; + here->HFET2sourceSourcePrimePtr = matched->CSC ; + } - i = 0 ; - if ((here->HFET2sourceNode != 0) && (here->HFET2sourcePrimeNode != 0)) { - while (here->HFET2sourceSourcePrimePtr != ckt->CKTmatrix->CKTbind_CSC [i]) i ++ ; - here->HFET2sourceSourcePrimePtr = ckt->CKTmatrix->CKTbind_CSC_Complex [i] ; - } + if ((here->HFET2drainPrimeNode != 0) && (here->HFET2drainNode != 0)) + { + i = here->HFET2drainPrimeDrainPtr ; + matched = (BindElement *) bsearch (&i, BindStruct, nz, sizeof(BindElement), BindCompare) ; + here->HFET2drainPrimeDrainStructPtr = matched ; + here->HFET2drainPrimeDrainPtr = matched->CSC ; + } - i = 0 ; - if ((here->HFET2drainPrimeNode != 0) && (here->HFET2drainNode != 0)) { - while (here->HFET2drainPrimeDrainPtr != ckt->CKTmatrix->CKTbind_CSC [i]) i ++ ; - here->HFET2drainPrimeDrainPtr = ckt->CKTmatrix->CKTbind_CSC_Complex [i] ; - } + if ((here->HFET2drainPrimeNode != 0) && (here->HFET2gateNode != 0)) + { + i = here->HFET2drainPrimeGatePtr ; + matched = (BindElement *) bsearch (&i, BindStruct, nz, sizeof(BindElement), BindCompare) ; + here->HFET2drainPrimeGateStructPtr = matched ; + here->HFET2drainPrimeGatePtr = matched->CSC ; + } - i = 0 ; - if ((here->HFET2drainPrimeNode != 0) && (here->HFET2gateNode != 0)) { - while (here->HFET2drainPrimeGatePtr != ckt->CKTmatrix->CKTbind_CSC [i]) i ++ ; - here->HFET2drainPrimeGatePtr = ckt->CKTmatrix->CKTbind_CSC_Complex [i] ; - } + if ((here->HFET2drainPrimeNode != 0) && (here->HFET2sourcePrimeNode != 0)) + { + i = here->HFET2drainPriHFET2ourcePrimePtr ; + matched = (BindElement *) bsearch (&i, BindStruct, nz, sizeof(BindElement), BindCompare) ; + here->HFET2drainPriHFET2ourcePrimeStructPtr = matched ; + here->HFET2drainPriHFET2ourcePrimePtr = matched->CSC ; + } - i = 0 ; - if ((here->HFET2drainPrimeNode != 0) && (here->HFET2sourcePrimeNode != 0)) { - while (here->HFET2drainPriHFET2ourcePrimePtr != ckt->CKTmatrix->CKTbind_CSC [i]) i ++ ; - here->HFET2drainPriHFET2ourcePrimePtr = ckt->CKTmatrix->CKTbind_CSC_Complex [i] ; - } + if ((here->HFET2sourcePrimeNode != 0) && (here->HFET2gateNode != 0)) + { + i = here->HFET2sourcePrimeGatePtr ; + matched = (BindElement *) bsearch (&i, BindStruct, nz, sizeof(BindElement), BindCompare) ; + here->HFET2sourcePrimeGateStructPtr = matched ; + here->HFET2sourcePrimeGatePtr = matched->CSC ; + } - i = 0 ; - if ((here->HFET2sourcePrimeNode != 0) && (here->HFET2gateNode != 0)) { - while (here->HFET2sourcePrimeGatePtr != ckt->CKTmatrix->CKTbind_CSC [i]) i ++ ; - here->HFET2sourcePrimeGatePtr = ckt->CKTmatrix->CKTbind_CSC_Complex [i] ; - } + if ((here->HFET2sourcePrimeNode != 0) && (here->HFET2sourceNode != 0)) + { + i = here->HFET2sourcePriHFET2ourcePtr ; + matched = (BindElement *) bsearch (&i, BindStruct, nz, sizeof(BindElement), BindCompare) ; + here->HFET2sourcePriHFET2ourceStructPtr = matched ; + here->HFET2sourcePriHFET2ourcePtr = matched->CSC ; + } - i = 0 ; - if ((here->HFET2sourcePrimeNode != 0) && (here->HFET2sourceNode != 0)) { - while (here->HFET2sourcePriHFET2ourcePtr != ckt->CKTmatrix->CKTbind_CSC [i]) i ++ ; - here->HFET2sourcePriHFET2ourcePtr = ckt->CKTmatrix->CKTbind_CSC_Complex [i] ; - } + if ((here->HFET2sourcePrimeNode != 0) && (here->HFET2drainPrimeNode != 0)) + { + i = here->HFET2sourcePrimeDrainPrimePtr ; + matched = (BindElement *) bsearch (&i, BindStruct, nz, sizeof(BindElement), BindCompare) ; + here->HFET2sourcePrimeDrainPrimeStructPtr = matched ; + here->HFET2sourcePrimeDrainPrimePtr = matched->CSC ; + } - i = 0 ; - if ((here->HFET2sourcePrimeNode != 0) && (here->HFET2drainPrimeNode != 0)) { - while (here->HFET2sourcePrimeDrainPrimePtr != ckt->CKTmatrix->CKTbind_CSC [i]) i ++ ; - here->HFET2sourcePrimeDrainPrimePtr = ckt->CKTmatrix->CKTbind_CSC_Complex [i] ; - } + if ((here->HFET2drainNode != 0) && (here->HFET2drainNode != 0)) + { + i = here->HFET2drainDrainPtr ; + matched = (BindElement *) bsearch (&i, BindStruct, nz, sizeof(BindElement), BindCompare) ; + here->HFET2drainDrainStructPtr = matched ; + here->HFET2drainDrainPtr = matched->CSC ; + } - i = 0 ; - if ((here->HFET2drainNode != 0) && (here->HFET2drainNode != 0)) { - while (here->HFET2drainDrainPtr != ckt->CKTmatrix->CKTbind_CSC [i]) i ++ ; - here->HFET2drainDrainPtr = ckt->CKTmatrix->CKTbind_CSC_Complex [i] ; - } + if ((here->HFET2gateNode != 0) && (here->HFET2gateNode != 0)) + { + i = here->HFET2gateGatePtr ; + matched = (BindElement *) bsearch (&i, BindStruct, nz, sizeof(BindElement), BindCompare) ; + here->HFET2gateGateStructPtr = matched ; + here->HFET2gateGatePtr = matched->CSC ; + } - i = 0 ; - if ((here->HFET2gateNode != 0) && (here->HFET2gateNode != 0)) { - while (here->HFET2gateGatePtr != ckt->CKTmatrix->CKTbind_CSC [i]) i ++ ; - here->HFET2gateGatePtr = ckt->CKTmatrix->CKTbind_CSC_Complex [i] ; - } + if ((here->HFET2sourceNode != 0) && (here->HFET2sourceNode != 0)) + { + i = here->HFET2sourceSourcePtr ; + matched = (BindElement *) bsearch (&i, BindStruct, nz, sizeof(BindElement), BindCompare) ; + here->HFET2sourceSourceStructPtr = matched ; + here->HFET2sourceSourcePtr = matched->CSC ; + } - i = 0 ; - if ((here->HFET2sourceNode != 0) && (here->HFET2sourceNode != 0)) { - while (here->HFET2sourceSourcePtr != ckt->CKTmatrix->CKTbind_CSC [i]) i ++ ; - here->HFET2sourceSourcePtr = ckt->CKTmatrix->CKTbind_CSC_Complex [i] ; - } + if ((here->HFET2drainPrimeNode != 0) && (here->HFET2drainPrimeNode != 0)) + { + i = here->HFET2drainPrimeDrainPrimePtr ; + matched = (BindElement *) bsearch (&i, BindStruct, nz, sizeof(BindElement), BindCompare) ; + here->HFET2drainPrimeDrainPrimeStructPtr = matched ; + here->HFET2drainPrimeDrainPrimePtr = matched->CSC ; + } - i = 0 ; - if ((here->HFET2drainPrimeNode != 0) && (here->HFET2drainPrimeNode != 0)) { - while (here->HFET2drainPrimeDrainPrimePtr != ckt->CKTmatrix->CKTbind_CSC [i]) i ++ ; - here->HFET2drainPrimeDrainPrimePtr = ckt->CKTmatrix->CKTbind_CSC_Complex [i] ; - } + if ((here->HFET2sourcePrimeNode != 0) && (here->HFET2sourcePrimeNode != 0)) + { + i = here->HFET2sourcePriHFET2ourcePrimePtr ; + matched = (BindElement *) bsearch (&i, BindStruct, nz, sizeof(BindElement), BindCompare) ; + here->HFET2sourcePriHFET2ourcePrimeStructPtr = matched ; + here->HFET2sourcePriHFET2ourcePrimePtr = matched->CSC ; + } - i = 0 ; - if ((here->HFET2sourcePrimeNode != 0) && (here->HFET2sourcePrimeNode != 0)) { - while (here->HFET2sourcePriHFET2ourcePrimePtr != ckt->CKTmatrix->CKTbind_CSC [i]) i ++ ; - here->HFET2sourcePriHFET2ourcePrimePtr = ckt->CKTmatrix->CKTbind_CSC_Complex [i] ; - } - } + } } - return(OK); + + return (OK) ; +} + +int +HFET2bindCSCComplex (GENmodel *inModel, CKTcircuit *ckt) +{ + HFET2model *model = (HFET2model *)inModel ; + HFET2instance *here ; + + NG_IGNORE (ckt) ; + + /* loop through all the HFET2 models */ + for ( ; model != NULL ; model = model->HFET2nextModel) + { + /* loop through all the instances of the model */ + for (here = model->HFET2instances ; here != NULL ; here = here->HFET2nextInstance) + { + if ((here->HFET2drainNode != 0) && (here->HFET2drainPrimeNode != 0)) + here->HFET2drainDrainPrimePtr = here->HFET2drainDrainPrimeStructPtr->CSC_Complex ; + + if ((here->HFET2gateNode != 0) && (here->HFET2drainPrimeNode != 0)) + here->HFET2gateDrainPrimePtr = here->HFET2gateDrainPrimeStructPtr->CSC_Complex ; + + if ((here->HFET2gateNode != 0) && (here->HFET2sourcePrimeNode != 0)) + here->HFET2gateSourcePrimePtr = here->HFET2gateSourcePrimeStructPtr->CSC_Complex ; + + if ((here->HFET2sourceNode != 0) && (here->HFET2sourcePrimeNode != 0)) + here->HFET2sourceSourcePrimePtr = here->HFET2sourceSourcePrimeStructPtr->CSC_Complex ; + + if ((here->HFET2drainPrimeNode != 0) && (here->HFET2drainNode != 0)) + here->HFET2drainPrimeDrainPtr = here->HFET2drainPrimeDrainStructPtr->CSC_Complex ; + + if ((here->HFET2drainPrimeNode != 0) && (here->HFET2gateNode != 0)) + here->HFET2drainPrimeGatePtr = here->HFET2drainPrimeGateStructPtr->CSC_Complex ; + + if ((here->HFET2drainPrimeNode != 0) && (here->HFET2sourcePrimeNode != 0)) + here->HFET2drainPriHFET2ourcePrimePtr = here->HFET2drainPriHFET2ourcePrimeStructPtr->CSC_Complex ; + + if ((here->HFET2sourcePrimeNode != 0) && (here->HFET2gateNode != 0)) + here->HFET2sourcePrimeGatePtr = here->HFET2sourcePrimeGateStructPtr->CSC_Complex ; + + if ((here->HFET2sourcePrimeNode != 0) && (here->HFET2sourceNode != 0)) + here->HFET2sourcePriHFET2ourcePtr = here->HFET2sourcePriHFET2ourceStructPtr->CSC_Complex ; + + if ((here->HFET2sourcePrimeNode != 0) && (here->HFET2drainPrimeNode != 0)) + here->HFET2sourcePrimeDrainPrimePtr = here->HFET2sourcePrimeDrainPrimeStructPtr->CSC_Complex ; + + if ((here->HFET2drainNode != 0) && (here->HFET2drainNode != 0)) + here->HFET2drainDrainPtr = here->HFET2drainDrainStructPtr->CSC_Complex ; + + if ((here->HFET2gateNode != 0) && (here->HFET2gateNode != 0)) + here->HFET2gateGatePtr = here->HFET2gateGateStructPtr->CSC_Complex ; + + if ((here->HFET2sourceNode != 0) && (here->HFET2sourceNode != 0)) + here->HFET2sourceSourcePtr = here->HFET2sourceSourceStructPtr->CSC_Complex ; + + if ((here->HFET2drainPrimeNode != 0) && (here->HFET2drainPrimeNode != 0)) + here->HFET2drainPrimeDrainPrimePtr = here->HFET2drainPrimeDrainPrimeStructPtr->CSC_Complex ; + + if ((here->HFET2sourcePrimeNode != 0) && (here->HFET2sourcePrimeNode != 0)) + here->HFET2sourcePriHFET2ourcePrimePtr = here->HFET2sourcePriHFET2ourcePrimeStructPtr->CSC_Complex ; + + } + } + + return (OK) ; } int @@ -228,118 +234,60 @@ HFET2bindCSCComplexToReal (GENmodel *inModel, CKTcircuit *ckt) { HFET2model *model = (HFET2model *)inModel ; HFET2instance *here ; - int i ; - /* loop through all the HfetB models */ + NG_IGNORE (ckt) ; + + /* loop through all the HFET2 models */ for ( ; model != NULL ; model = model->HFET2nextModel) { /* loop through all the instances of the model */ for (here = model->HFET2instances ; here != NULL ; here = here->HFET2nextInstance) { - i = 0 ; if ((here->HFET2drainNode != 0) && (here->HFET2drainPrimeNode != 0)) - { - while (here->HFET2drainDrainPrimePtr != ckt->CKTmatrix->CKTbind_CSC_Complex [i]) i ++ ; - here->HFET2drainDrainPrimePtr = ckt->CKTmatrix->CKTbind_CSC [i] ; - } + here->HFET2drainDrainPrimePtr = here->HFET2drainDrainPrimeStructPtr->CSC ; - i = 0 ; if ((here->HFET2gateNode != 0) && (here->HFET2drainPrimeNode != 0)) - { - while (here->HFET2gateDrainPrimePtr != ckt->CKTmatrix->CKTbind_CSC_Complex [i]) i ++ ; - here->HFET2gateDrainPrimePtr = ckt->CKTmatrix->CKTbind_CSC [i] ; - } + here->HFET2gateDrainPrimePtr = here->HFET2gateDrainPrimeStructPtr->CSC ; - i = 0 ; if ((here->HFET2gateNode != 0) && (here->HFET2sourcePrimeNode != 0)) - { - while (here->HFET2gateSourcePrimePtr != ckt->CKTmatrix->CKTbind_CSC_Complex [i]) i ++ ; - here->HFET2gateSourcePrimePtr = ckt->CKTmatrix->CKTbind_CSC [i] ; - } + here->HFET2gateSourcePrimePtr = here->HFET2gateSourcePrimeStructPtr->CSC ; - i = 0 ; if ((here->HFET2sourceNode != 0) && (here->HFET2sourcePrimeNode != 0)) - { - while (here->HFET2sourceSourcePrimePtr != ckt->CKTmatrix->CKTbind_CSC_Complex [i]) i ++ ; - here->HFET2sourceSourcePrimePtr = ckt->CKTmatrix->CKTbind_CSC [i] ; - } + here->HFET2sourceSourcePrimePtr = here->HFET2sourceSourcePrimeStructPtr->CSC ; - i = 0 ; if ((here->HFET2drainPrimeNode != 0) && (here->HFET2drainNode != 0)) - { - while (here->HFET2drainPrimeDrainPtr != ckt->CKTmatrix->CKTbind_CSC_Complex [i]) i ++ ; - here->HFET2drainPrimeDrainPtr = ckt->CKTmatrix->CKTbind_CSC [i] ; - } + here->HFET2drainPrimeDrainPtr = here->HFET2drainPrimeDrainStructPtr->CSC ; - i = 0 ; if ((here->HFET2drainPrimeNode != 0) && (here->HFET2gateNode != 0)) - { - while (here->HFET2drainPrimeGatePtr != ckt->CKTmatrix->CKTbind_CSC_Complex [i]) i ++ ; - here->HFET2drainPrimeGatePtr = ckt->CKTmatrix->CKTbind_CSC [i] ; - } + here->HFET2drainPrimeGatePtr = here->HFET2drainPrimeGateStructPtr->CSC ; - i = 0 ; if ((here->HFET2drainPrimeNode != 0) && (here->HFET2sourcePrimeNode != 0)) - { - while (here->HFET2drainPriHFET2ourcePrimePtr != ckt->CKTmatrix->CKTbind_CSC_Complex [i]) i ++ ; - here->HFET2drainPriHFET2ourcePrimePtr = ckt->CKTmatrix->CKTbind_CSC [i] ; - } + here->HFET2drainPriHFET2ourcePrimePtr = here->HFET2drainPriHFET2ourcePrimeStructPtr->CSC ; - i = 0 ; if ((here->HFET2sourcePrimeNode != 0) && (here->HFET2gateNode != 0)) - { - while (here->HFET2sourcePrimeGatePtr != ckt->CKTmatrix->CKTbind_CSC_Complex [i]) i ++ ; - here->HFET2sourcePrimeGatePtr = ckt->CKTmatrix->CKTbind_CSC [i] ; - } + here->HFET2sourcePrimeGatePtr = here->HFET2sourcePrimeGateStructPtr->CSC ; - i = 0 ; if ((here->HFET2sourcePrimeNode != 0) && (here->HFET2sourceNode != 0)) - { - while (here->HFET2sourcePriHFET2ourcePrimePtr != ckt->CKTmatrix->CKTbind_CSC_Complex [i]) i ++ ; - here->HFET2sourcePriHFET2ourcePrimePtr = ckt->CKTmatrix->CKTbind_CSC [i] ; - } + here->HFET2sourcePriHFET2ourcePtr = here->HFET2sourcePriHFET2ourceStructPtr->CSC ; - i = 0 ; if ((here->HFET2sourcePrimeNode != 0) && (here->HFET2drainPrimeNode != 0)) - { - while (here->HFET2sourcePrimeDrainPrimePtr != ckt->CKTmatrix->CKTbind_CSC_Complex [i]) i ++ ; - here->HFET2sourcePrimeDrainPrimePtr = ckt->CKTmatrix->CKTbind_CSC [i] ; - } + here->HFET2sourcePrimeDrainPrimePtr = here->HFET2sourcePrimeDrainPrimeStructPtr->CSC ; - i = 0 ; if ((here->HFET2drainNode != 0) && (here->HFET2drainNode != 0)) - { - while (here->HFET2drainDrainPtr != ckt->CKTmatrix->CKTbind_CSC_Complex [i]) i ++ ; - here->HFET2drainDrainPtr = ckt->CKTmatrix->CKTbind_CSC [i] ; - } + here->HFET2drainDrainPtr = here->HFET2drainDrainStructPtr->CSC ; - i = 0 ; if ((here->HFET2gateNode != 0) && (here->HFET2gateNode != 0)) - { - while (here->HFET2gateGatePtr != ckt->CKTmatrix->CKTbind_CSC_Complex [i]) i ++ ; - here->HFET2gateGatePtr = ckt->CKTmatrix->CKTbind_CSC [i] ; - } + here->HFET2gateGatePtr = here->HFET2gateGateStructPtr->CSC ; - i = 0 ; if ((here->HFET2sourceNode != 0) && (here->HFET2sourceNode != 0)) - { - while (here->HFET2sourceSourcePtr != ckt->CKTmatrix->CKTbind_CSC_Complex [i]) i ++ ; - here->HFET2sourceSourcePtr = ckt->CKTmatrix->CKTbind_CSC [i] ; - } + here->HFET2sourceSourcePtr = here->HFET2sourceSourceStructPtr->CSC ; - i = 0 ; if ((here->HFET2drainPrimeNode != 0) && (here->HFET2drainPrimeNode != 0)) - { - while (here->HFET2drainPrimeDrainPrimePtr != ckt->CKTmatrix->CKTbind_CSC_Complex [i]) i ++ ; - here->HFET2drainPrimeDrainPrimePtr = ckt->CKTmatrix->CKTbind_CSC [i] ; - } + here->HFET2drainPrimeDrainPrimePtr = here->HFET2drainPrimeDrainPrimeStructPtr->CSC ; - i = 0 ; if ((here->HFET2sourcePrimeNode != 0) && (here->HFET2sourcePrimeNode != 0)) - { - while (here->HFET2sourcePriHFET2ourcePrimePtr != ckt->CKTmatrix->CKTbind_CSC_Complex [i]) i ++ ; - here->HFET2sourcePriHFET2ourcePrimePtr = ckt->CKTmatrix->CKTbind_CSC [i] ; - } + here->HFET2sourcePriHFET2ourcePrimePtr = here->HFET2sourcePriHFET2ourcePrimeStructPtr->CSC ; + } } diff --git a/src/spicelib/devices/hfet2/hfet2defs.h b/src/spicelib/devices/hfet2/hfet2defs.h index 01aba6175..d4df1a5cb 100644 --- a/src/spicelib/devices/hfet2/hfet2defs.h +++ b/src/spicelib/devices/hfet2/hfet2defs.h @@ -80,7 +80,25 @@ typedef struct sHFET2instance { double HFET2vcrit; double HFET2ggrlw; double HFET2jslw; - + +#ifdef KLU + BindElement *HFET2drainDrainPrimeStructPtr ; + BindElement *HFET2gateDrainPrimeStructPtr ; + BindElement *HFET2gateSourcePrimeStructPtr ; + BindElement *HFET2sourceSourcePrimeStructPtr ; + BindElement *HFET2drainPrimeDrainStructPtr ; + BindElement *HFET2drainPrimeGateStructPtr ; + BindElement *HFET2drainPriHFET2ourcePrimeStructPtr ; + BindElement *HFET2sourcePrimeGateStructPtr ; + BindElement *HFET2sourcePriHFET2ourceStructPtr ; + BindElement *HFET2sourcePrimeDrainPrimeStructPtr ; + BindElement *HFET2drainDrainStructPtr ; + BindElement *HFET2gateGateStructPtr ; + BindElement *HFET2sourceSourceStructPtr ; + BindElement *HFET2drainPrimeDrainPrimeStructPtr ; + BindElement *HFET2sourcePriHFET2ourcePrimeStructPtr ; +#endif + } HFET2instance ;