New Binding Method extended to HFET2 device

This commit is contained in:
Francesco Lannutti 2013-04-01 22:33:35 +02:00
parent 5bbfefd65e
commit 766a329f2e
2 changed files with 233 additions and 267 deletions

View File

@ -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 <stdlib.h>
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 ;
}
}

View File

@ -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 ;