New Binding Method extended to JFET2 device

This commit is contained in:
Francesco Lannutti 2013-04-01 22:44:22 +02:00
parent 5c7c978689
commit f7effb3234
3 changed files with 250 additions and 249 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 "jfet2defs.h"
#include "ngspice/sperror.h"
#include <stdlib.h>
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) ;
}
}

View File

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

View File

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