New Binding Method extended to LTRA device

This commit is contained in:
Francesco Lannutti 2013-04-01 22:45:14 +02:00
parent f7effb3234
commit 6d7c50a4b8
2 changed files with 314 additions and 367 deletions

View File

@ -1,5 +1,5 @@
/**********
Author: 2012 Francesco Lannutti
Author: 2013 Francesco Lannutti
**********/
#include "ngspice/ngspice.h"
@ -7,280 +7,281 @@ Author: 2012 Francesco Lannutti
#include "ltradefs.h"
#include "ngspice/sperror.h"
#include <stdlib.h>
static
int
LTRAbindCSC(GENmodel *inModel, CKTcircuit *ckt)
BindCompare (const void *a, const void *b)
{
LTRAmodel *model = (LTRAmodel *)inModel;
int i ;
BindElement *A, *B ;
A = (BindElement *)a ;
B = (BindElement *)b ;
/* loop through all the ltra models */
for( ; model != NULL; model = model->LTRAnextModel ) {
LTRAinstance *here;
/* loop through all the instances of the model */
for (here = model->LTRAinstances; here != NULL ;
here = here->LTRAnextInstance) {
i = 0 ;
if ((here-> LTRAbrEq1 != 0) && (here-> LTRAposNode1 != 0)) {
while (here->LTRAibr1Pos1Ptr != ckt->CKTmatrix->CKTbind_Sparse [i]) i ++ ;
here->LTRAibr1Pos1Ptr = ckt->CKTmatrix->CKTbind_CSC [i] ;
}
i = 0 ;
if ((here-> LTRAbrEq1 != 0) && (here-> LTRAnegNode1 != 0)) {
while (here->LTRAibr1Neg1Ptr != ckt->CKTmatrix->CKTbind_Sparse [i]) i ++ ;
here->LTRAibr1Neg1Ptr = ckt->CKTmatrix->CKTbind_CSC [i] ;
}
i = 0 ;
if ((here-> LTRAbrEq1 != 0) && (here-> LTRAposNode2 != 0)) {
while (here->LTRAibr1Pos2Ptr != ckt->CKTmatrix->CKTbind_Sparse [i]) i ++ ;
here->LTRAibr1Pos2Ptr = ckt->CKTmatrix->CKTbind_CSC [i] ;
}
i = 0 ;
if ((here-> LTRAbrEq1 != 0) && (here-> LTRAnegNode2 != 0)) {
while (here->LTRAibr1Neg2Ptr != ckt->CKTmatrix->CKTbind_Sparse [i]) i ++ ;
here->LTRAibr1Neg2Ptr = ckt->CKTmatrix->CKTbind_CSC [i] ;
}
i = 0 ;
if ((here-> LTRAbrEq1 != 0) && (here-> LTRAbrEq1 != 0)) {
while (here->LTRAibr1Ibr1Ptr != ckt->CKTmatrix->CKTbind_Sparse [i]) i ++ ;
here->LTRAibr1Ibr1Ptr = ckt->CKTmatrix->CKTbind_CSC [i] ;
}
i = 0 ;
if ((here-> LTRAbrEq1 != 0) && (here-> LTRAbrEq2 != 0)) {
while (here->LTRAibr1Ibr2Ptr != ckt->CKTmatrix->CKTbind_Sparse [i]) i ++ ;
here->LTRAibr1Ibr2Ptr = ckt->CKTmatrix->CKTbind_CSC [i] ;
}
i = 0 ;
if ((here-> LTRAbrEq2 != 0) && (here-> LTRAposNode1 != 0)) {
while (here->LTRAibr2Pos1Ptr != ckt->CKTmatrix->CKTbind_Sparse [i]) i ++ ;
here->LTRAibr2Pos1Ptr = ckt->CKTmatrix->CKTbind_CSC [i] ;
}
i = 0 ;
if ((here-> LTRAbrEq2 != 0) && (here-> LTRAnegNode1 != 0)) {
while (here->LTRAibr2Neg1Ptr != ckt->CKTmatrix->CKTbind_Sparse [i]) i ++ ;
here->LTRAibr2Neg1Ptr = ckt->CKTmatrix->CKTbind_CSC [i] ;
}
i = 0 ;
if ((here-> LTRAbrEq2 != 0) && (here-> LTRAposNode2 != 0)) {
while (here->LTRAibr2Pos2Ptr != ckt->CKTmatrix->CKTbind_Sparse [i]) i ++ ;
here->LTRAibr2Pos2Ptr = ckt->CKTmatrix->CKTbind_CSC [i] ;
}
i = 0 ;
if ((here-> LTRAbrEq2 != 0) && (here-> LTRAnegNode2 != 0)) {
while (here->LTRAibr2Neg2Ptr != ckt->CKTmatrix->CKTbind_Sparse [i]) i ++ ;
here->LTRAibr2Neg2Ptr = ckt->CKTmatrix->CKTbind_CSC [i] ;
}
i = 0 ;
if ((here-> LTRAbrEq2 != 0) && (here-> LTRAbrEq1 != 0)) {
while (here->LTRAibr2Ibr1Ptr != ckt->CKTmatrix->CKTbind_Sparse [i]) i ++ ;
here->LTRAibr2Ibr1Ptr = ckt->CKTmatrix->CKTbind_CSC [i] ;
}
i = 0 ;
if ((here-> LTRAbrEq2 != 0) && (here-> LTRAbrEq2 != 0)) {
while (here->LTRAibr2Ibr2Ptr != ckt->CKTmatrix->CKTbind_Sparse [i]) i ++ ;
here->LTRAibr2Ibr2Ptr = ckt->CKTmatrix->CKTbind_CSC [i] ;
}
i = 0 ;
if ((here-> LTRAposNode1 != 0) && (here-> LTRAbrEq1 != 0)) {
while (here->LTRApos1Ibr1Ptr != ckt->CKTmatrix->CKTbind_Sparse [i]) i ++ ;
here->LTRApos1Ibr1Ptr = ckt->CKTmatrix->CKTbind_CSC [i] ;
}
i = 0 ;
if ((here-> LTRAnegNode1 != 0) && (here-> LTRAbrEq1 != 0)) {
while (here->LTRAneg1Ibr1Ptr != ckt->CKTmatrix->CKTbind_Sparse [i]) i ++ ;
here->LTRAneg1Ibr1Ptr = ckt->CKTmatrix->CKTbind_CSC [i] ;
}
i = 0 ;
if ((here-> LTRAposNode2 != 0) && (here-> LTRAbrEq2 != 0)) {
while (here->LTRApos2Ibr2Ptr != ckt->CKTmatrix->CKTbind_Sparse [i]) i ++ ;
here->LTRApos2Ibr2Ptr = ckt->CKTmatrix->CKTbind_CSC [i] ;
}
i = 0 ;
if ((here-> LTRAnegNode2 != 0) && (here-> LTRAbrEq2 != 0)) {
while (here->LTRAneg2Ibr2Ptr != ckt->CKTmatrix->CKTbind_Sparse [i]) i ++ ;
here->LTRAneg2Ibr2Ptr = ckt->CKTmatrix->CKTbind_CSC [i] ;
}
i = 0 ;
if ((here-> LTRAposNode1 != 0) && (here-> LTRAposNode1 != 0)) {
while (here->LTRApos1Pos1Ptr != ckt->CKTmatrix->CKTbind_Sparse [i]) i ++ ;
here->LTRApos1Pos1Ptr = ckt->CKTmatrix->CKTbind_CSC [i] ;
}
i = 0 ;
if ((here-> LTRAnegNode1 != 0) && (here-> LTRAnegNode1 != 0)) {
while (here->LTRAneg1Neg1Ptr != ckt->CKTmatrix->CKTbind_Sparse [i]) i ++ ;
here->LTRAneg1Neg1Ptr = ckt->CKTmatrix->CKTbind_CSC [i] ;
}
i = 0 ;
if ((here-> LTRAposNode2 != 0) && (here-> LTRAposNode2 != 0)) {
while (here->LTRApos2Pos2Ptr != ckt->CKTmatrix->CKTbind_Sparse [i]) i ++ ;
here->LTRApos2Pos2Ptr = ckt->CKTmatrix->CKTbind_CSC [i] ;
}
i = 0 ;
if ((here-> LTRAnegNode2 != 0) && (here-> LTRAnegNode2 != 0)) {
while (here->LTRAneg2Neg2Ptr != ckt->CKTmatrix->CKTbind_Sparse [i]) i ++ ;
here->LTRAneg2Neg2Ptr = ckt->CKTmatrix->CKTbind_CSC [i] ;
}
}
}
return(OK);
return ((int)(A->Sparse - B->Sparse)) ;
}
int
LTRAbindCSCComplex(GENmodel *inModel, CKTcircuit *ckt)
LTRAbindCSC (GENmodel *inModel, CKTcircuit *ckt)
{
LTRAmodel *model = (LTRAmodel *)inModel;
int i ;
LTRAmodel *model = (LTRAmodel *)inModel ;
LTRAinstance *here ;
double *i ;
BindElement *matched, *BindStruct ;
size_t nz ;
/* loop through all the ltra models */
for( ; model != NULL; model = model->LTRAnextModel ) {
LTRAinstance *here;
BindStruct = ckt->CKTmatrix->CKTbindStruct ;
nz = (size_t)ckt->CKTmatrix->CKTklunz ;
/* loop through all the LTRA models */
for ( ; model != NULL ; model = model->LTRAnextModel)
{
/* loop through all the instances of the model */
for (here = model->LTRAinstances; here != NULL ;
here = here->LTRAnextInstance) {
for (here = model->LTRAinstances ; here != NULL ; here = here->LTRAnextInstance)
{
if ((here-> LTRAbrEq1 != 0) && (here-> LTRAposNode1 != 0))
{
i = here->LTRAibr1Pos1Ptr ;
matched = (BindElement *) bsearch (&i, BindStruct, nz, sizeof(BindElement), BindCompare) ;
here->LTRAibr1Pos1StructPtr = matched ;
here->LTRAibr1Pos1Ptr = matched->CSC ;
}
i = 0 ;
if ((here-> LTRAbrEq1 != 0) && (here-> LTRAposNode1 != 0)) {
while (here->LTRAibr1Pos1Ptr != ckt->CKTmatrix->CKTbind_CSC [i]) i ++ ;
here->LTRAibr1Pos1Ptr = ckt->CKTmatrix->CKTbind_CSC_Complex [i] ;
}
if ((here-> LTRAbrEq1 != 0) && (here-> LTRAnegNode1 != 0))
{
i = here->LTRAibr1Neg1Ptr ;
matched = (BindElement *) bsearch (&i, BindStruct, nz, sizeof(BindElement), BindCompare) ;
here->LTRAibr1Neg1StructPtr = matched ;
here->LTRAibr1Neg1Ptr = matched->CSC ;
}
i = 0 ;
if ((here-> LTRAbrEq1 != 0) && (here-> LTRAnegNode1 != 0)) {
while (here->LTRAibr1Neg1Ptr != ckt->CKTmatrix->CKTbind_CSC [i]) i ++ ;
here->LTRAibr1Neg1Ptr = ckt->CKTmatrix->CKTbind_CSC_Complex [i] ;
}
if ((here-> LTRAbrEq1 != 0) && (here-> LTRAposNode2 != 0))
{
i = here->LTRAibr1Pos2Ptr ;
matched = (BindElement *) bsearch (&i, BindStruct, nz, sizeof(BindElement), BindCompare) ;
here->LTRAibr1Pos2StructPtr = matched ;
here->LTRAibr1Pos2Ptr = matched->CSC ;
}
i = 0 ;
if ((here-> LTRAbrEq1 != 0) && (here-> LTRAposNode2 != 0)) {
while (here->LTRAibr1Pos2Ptr != ckt->CKTmatrix->CKTbind_CSC [i]) i ++ ;
here->LTRAibr1Pos2Ptr = ckt->CKTmatrix->CKTbind_CSC_Complex [i] ;
}
if ((here-> LTRAbrEq1 != 0) && (here-> LTRAnegNode2 != 0))
{
i = here->LTRAibr1Neg2Ptr ;
matched = (BindElement *) bsearch (&i, BindStruct, nz, sizeof(BindElement), BindCompare) ;
here->LTRAibr1Neg2StructPtr = matched ;
here->LTRAibr1Neg2Ptr = matched->CSC ;
}
i = 0 ;
if ((here-> LTRAbrEq1 != 0) && (here-> LTRAnegNode2 != 0)) {
while (here->LTRAibr1Neg2Ptr != ckt->CKTmatrix->CKTbind_CSC [i]) i ++ ;
here->LTRAibr1Neg2Ptr = ckt->CKTmatrix->CKTbind_CSC_Complex [i] ;
}
if ((here-> LTRAbrEq1 != 0) && (here-> LTRAbrEq1 != 0))
{
i = here->LTRAibr1Ibr1Ptr ;
matched = (BindElement *) bsearch (&i, BindStruct, nz, sizeof(BindElement), BindCompare) ;
here->LTRAibr1Ibr1StructPtr = matched ;
here->LTRAibr1Ibr1Ptr = matched->CSC ;
}
i = 0 ;
if ((here-> LTRAbrEq1 != 0) && (here-> LTRAbrEq1 != 0)) {
while (here->LTRAibr1Ibr1Ptr != ckt->CKTmatrix->CKTbind_CSC [i]) i ++ ;
here->LTRAibr1Ibr1Ptr = ckt->CKTmatrix->CKTbind_CSC_Complex [i] ;
}
if ((here-> LTRAbrEq1 != 0) && (here-> LTRAbrEq2 != 0))
{
i = here->LTRAibr1Ibr2Ptr ;
matched = (BindElement *) bsearch (&i, BindStruct, nz, sizeof(BindElement), BindCompare) ;
here->LTRAibr1Ibr2StructPtr = matched ;
here->LTRAibr1Ibr2Ptr = matched->CSC ;
}
i = 0 ;
if ((here-> LTRAbrEq1 != 0) && (here-> LTRAbrEq2 != 0)) {
while (here->LTRAibr1Ibr2Ptr != ckt->CKTmatrix->CKTbind_CSC [i]) i ++ ;
here->LTRAibr1Ibr2Ptr = ckt->CKTmatrix->CKTbind_CSC_Complex [i] ;
}
if ((here-> LTRAbrEq2 != 0) && (here-> LTRAposNode1 != 0))
{
i = here->LTRAibr2Pos1Ptr ;
matched = (BindElement *) bsearch (&i, BindStruct, nz, sizeof(BindElement), BindCompare) ;
here->LTRAibr2Pos1StructPtr = matched ;
here->LTRAibr2Pos1Ptr = matched->CSC ;
}
i = 0 ;
if ((here-> LTRAbrEq2 != 0) && (here-> LTRAposNode1 != 0)) {
while (here->LTRAibr2Pos1Ptr != ckt->CKTmatrix->CKTbind_CSC [i]) i ++ ;
here->LTRAibr2Pos1Ptr = ckt->CKTmatrix->CKTbind_CSC_Complex [i] ;
}
if ((here-> LTRAbrEq2 != 0) && (here-> LTRAnegNode1 != 0))
{
i = here->LTRAibr2Neg1Ptr ;
matched = (BindElement *) bsearch (&i, BindStruct, nz, sizeof(BindElement), BindCompare) ;
here->LTRAibr2Neg1StructPtr = matched ;
here->LTRAibr2Neg1Ptr = matched->CSC ;
}
i = 0 ;
if ((here-> LTRAbrEq2 != 0) && (here-> LTRAnegNode1 != 0)) {
while (here->LTRAibr2Neg1Ptr != ckt->CKTmatrix->CKTbind_CSC [i]) i ++ ;
here->LTRAibr2Neg1Ptr = ckt->CKTmatrix->CKTbind_CSC_Complex [i] ;
}
if ((here-> LTRAbrEq2 != 0) && (here-> LTRAposNode2 != 0))
{
i = here->LTRAibr2Pos2Ptr ;
matched = (BindElement *) bsearch (&i, BindStruct, nz, sizeof(BindElement), BindCompare) ;
here->LTRAibr2Pos2StructPtr = matched ;
here->LTRAibr2Pos2Ptr = matched->CSC ;
}
i = 0 ;
if ((here-> LTRAbrEq2 != 0) && (here-> LTRAposNode2 != 0)) {
while (here->LTRAibr2Pos2Ptr != ckt->CKTmatrix->CKTbind_CSC [i]) i ++ ;
here->LTRAibr2Pos2Ptr = ckt->CKTmatrix->CKTbind_CSC_Complex [i] ;
}
if ((here-> LTRAbrEq2 != 0) && (here-> LTRAnegNode2 != 0))
{
i = here->LTRAibr2Neg2Ptr ;
matched = (BindElement *) bsearch (&i, BindStruct, nz, sizeof(BindElement), BindCompare) ;
here->LTRAibr2Neg2StructPtr = matched ;
here->LTRAibr2Neg2Ptr = matched->CSC ;
}
i = 0 ;
if ((here-> LTRAbrEq2 != 0) && (here-> LTRAnegNode2 != 0)) {
while (here->LTRAibr2Neg2Ptr != ckt->CKTmatrix->CKTbind_CSC [i]) i ++ ;
here->LTRAibr2Neg2Ptr = ckt->CKTmatrix->CKTbind_CSC_Complex [i] ;
}
if ((here-> LTRAbrEq2 != 0) && (here-> LTRAbrEq1 != 0))
{
i = here->LTRAibr2Ibr1Ptr ;
matched = (BindElement *) bsearch (&i, BindStruct, nz, sizeof(BindElement), BindCompare) ;
here->LTRAibr2Ibr1StructPtr = matched ;
here->LTRAibr2Ibr1Ptr = matched->CSC ;
}
i = 0 ;
if ((here-> LTRAbrEq2 != 0) && (here-> LTRAbrEq1 != 0)) {
while (here->LTRAibr2Ibr1Ptr != ckt->CKTmatrix->CKTbind_CSC [i]) i ++ ;
here->LTRAibr2Ibr1Ptr = ckt->CKTmatrix->CKTbind_CSC_Complex [i] ;
}
if ((here-> LTRAbrEq2 != 0) && (here-> LTRAbrEq2 != 0))
{
i = here->LTRAibr2Ibr2Ptr ;
matched = (BindElement *) bsearch (&i, BindStruct, nz, sizeof(BindElement), BindCompare) ;
here->LTRAibr2Ibr2StructPtr = matched ;
here->LTRAibr2Ibr2Ptr = matched->CSC ;
}
i = 0 ;
if ((here-> LTRAbrEq2 != 0) && (here-> LTRAbrEq2 != 0)) {
while (here->LTRAibr2Ibr2Ptr != ckt->CKTmatrix->CKTbind_CSC [i]) i ++ ;
here->LTRAibr2Ibr2Ptr = ckt->CKTmatrix->CKTbind_CSC_Complex [i] ;
}
if ((here-> LTRAposNode1 != 0) && (here-> LTRAbrEq1 != 0))
{
i = here->LTRApos1Ibr1Ptr ;
matched = (BindElement *) bsearch (&i, BindStruct, nz, sizeof(BindElement), BindCompare) ;
here->LTRApos1Ibr1StructPtr = matched ;
here->LTRApos1Ibr1Ptr = matched->CSC ;
}
i = 0 ;
if ((here-> LTRAposNode1 != 0) && (here-> LTRAbrEq1 != 0)) {
while (here->LTRApos1Ibr1Ptr != ckt->CKTmatrix->CKTbind_CSC [i]) i ++ ;
here->LTRApos1Ibr1Ptr = ckt->CKTmatrix->CKTbind_CSC_Complex [i] ;
}
if ((here-> LTRAnegNode1 != 0) && (here-> LTRAbrEq1 != 0))
{
i = here->LTRAneg1Ibr1Ptr ;
matched = (BindElement *) bsearch (&i, BindStruct, nz, sizeof(BindElement), BindCompare) ;
here->LTRAneg1Ibr1StructPtr = matched ;
here->LTRAneg1Ibr1Ptr = matched->CSC ;
}
i = 0 ;
if ((here-> LTRAnegNode1 != 0) && (here-> LTRAbrEq1 != 0)) {
while (here->LTRAneg1Ibr1Ptr != ckt->CKTmatrix->CKTbind_CSC [i]) i ++ ;
here->LTRAneg1Ibr1Ptr = ckt->CKTmatrix->CKTbind_CSC_Complex [i] ;
}
if ((here-> LTRAposNode2 != 0) && (here-> LTRAbrEq2 != 0))
{
i = here->LTRApos2Ibr2Ptr ;
matched = (BindElement *) bsearch (&i, BindStruct, nz, sizeof(BindElement), BindCompare) ;
here->LTRApos2Ibr2StructPtr = matched ;
here->LTRApos2Ibr2Ptr = matched->CSC ;
}
i = 0 ;
if ((here-> LTRAposNode2 != 0) && (here-> LTRAbrEq2 != 0)) {
while (here->LTRApos2Ibr2Ptr != ckt->CKTmatrix->CKTbind_CSC [i]) i ++ ;
here->LTRApos2Ibr2Ptr = ckt->CKTmatrix->CKTbind_CSC_Complex [i] ;
}
if ((here-> LTRAnegNode2 != 0) && (here-> LTRAbrEq2 != 0))
{
i = here->LTRAneg2Ibr2Ptr ;
matched = (BindElement *) bsearch (&i, BindStruct, nz, sizeof(BindElement), BindCompare) ;
here->LTRAneg2Ibr2StructPtr = matched ;
here->LTRAneg2Ibr2Ptr = matched->CSC ;
}
i = 0 ;
if ((here-> LTRAnegNode2 != 0) && (here-> LTRAbrEq2 != 0)) {
while (here->LTRAneg2Ibr2Ptr != ckt->CKTmatrix->CKTbind_CSC [i]) i ++ ;
here->LTRAneg2Ibr2Ptr = ckt->CKTmatrix->CKTbind_CSC_Complex [i] ;
}
if ((here-> LTRAposNode1 != 0) && (here-> LTRAposNode1 != 0))
{
i = here->LTRApos1Pos1Ptr ;
matched = (BindElement *) bsearch (&i, BindStruct, nz, sizeof(BindElement), BindCompare) ;
here->LTRApos1Pos1StructPtr = matched ;
here->LTRApos1Pos1Ptr = matched->CSC ;
}
i = 0 ;
if ((here-> LTRAposNode1 != 0) && (here-> LTRAposNode1 != 0)) {
while (here->LTRApos1Pos1Ptr != ckt->CKTmatrix->CKTbind_CSC [i]) i ++ ;
here->LTRApos1Pos1Ptr = ckt->CKTmatrix->CKTbind_CSC_Complex [i] ;
}
if ((here-> LTRAnegNode1 != 0) && (here-> LTRAnegNode1 != 0))
{
i = here->LTRAneg1Neg1Ptr ;
matched = (BindElement *) bsearch (&i, BindStruct, nz, sizeof(BindElement), BindCompare) ;
here->LTRAneg1Neg1StructPtr = matched ;
here->LTRAneg1Neg1Ptr = matched->CSC ;
}
i = 0 ;
if ((here-> LTRAnegNode1 != 0) && (here-> LTRAnegNode1 != 0)) {
while (here->LTRAneg1Neg1Ptr != ckt->CKTmatrix->CKTbind_CSC [i]) i ++ ;
here->LTRAneg1Neg1Ptr = ckt->CKTmatrix->CKTbind_CSC_Complex [i] ;
}
if ((here-> LTRAposNode2 != 0) && (here-> LTRAposNode2 != 0))
{
i = here->LTRApos2Pos2Ptr ;
matched = (BindElement *) bsearch (&i, BindStruct, nz, sizeof(BindElement), BindCompare) ;
here->LTRApos2Pos2StructPtr = matched ;
here->LTRApos2Pos2Ptr = matched->CSC ;
}
i = 0 ;
if ((here-> LTRAposNode2 != 0) && (here-> LTRAposNode2 != 0)) {
while (here->LTRApos2Pos2Ptr != ckt->CKTmatrix->CKTbind_CSC [i]) i ++ ;
here->LTRApos2Pos2Ptr = ckt->CKTmatrix->CKTbind_CSC_Complex [i] ;
}
if ((here-> LTRAnegNode2 != 0) && (here-> LTRAnegNode2 != 0))
{
i = here->LTRAneg2Neg2Ptr ;
matched = (BindElement *) bsearch (&i, BindStruct, nz, sizeof(BindElement), BindCompare) ;
here->LTRAneg2Neg2StructPtr = matched ;
here->LTRAneg2Neg2Ptr = matched->CSC ;
}
i = 0 ;
if ((here-> LTRAnegNode2 != 0) && (here-> LTRAnegNode2 != 0)) {
while (here->LTRAneg2Neg2Ptr != ckt->CKTmatrix->CKTbind_CSC [i]) i ++ ;
here->LTRAneg2Neg2Ptr = ckt->CKTmatrix->CKTbind_CSC_Complex [i] ;
}
}
}
}
return(OK);
return (OK) ;
}
int
LTRAbindCSCComplex (GENmodel *inModel, CKTcircuit *ckt)
{
LTRAmodel *model = (LTRAmodel *)inModel ;
LTRAinstance *here ;
NG_IGNORE (ckt) ;
/* loop through all the LTRA models */
for ( ; model != NULL ; model = model->LTRAnextModel)
{
/* loop through all the instances of the model */
for (here = model->LTRAinstances ; here != NULL ; here = here->LTRAnextInstance)
{
if ((here-> LTRAbrEq1 != 0) && (here-> LTRAposNode1 != 0))
here->LTRAibr1Pos1Ptr = here->LTRAibr1Pos1StructPtr->CSC_Complex ;
if ((here-> LTRAbrEq1 != 0) && (here-> LTRAnegNode1 != 0))
here->LTRAibr1Neg1Ptr = here->LTRAibr1Neg1StructPtr->CSC_Complex ;
if ((here-> LTRAbrEq1 != 0) && (here-> LTRAposNode2 != 0))
here->LTRAibr1Pos2Ptr = here->LTRAibr1Pos2StructPtr->CSC_Complex ;
if ((here-> LTRAbrEq1 != 0) && (here-> LTRAnegNode2 != 0))
here->LTRAibr1Neg2Ptr = here->LTRAibr1Neg2StructPtr->CSC_Complex ;
if ((here-> LTRAbrEq1 != 0) && (here-> LTRAbrEq1 != 0))
here->LTRAibr1Ibr1Ptr = here->LTRAibr1Ibr1StructPtr->CSC_Complex ;
if ((here-> LTRAbrEq1 != 0) && (here-> LTRAbrEq2 != 0))
here->LTRAibr1Ibr2Ptr = here->LTRAibr1Ibr2StructPtr->CSC_Complex ;
if ((here-> LTRAbrEq2 != 0) && (here-> LTRAposNode1 != 0))
here->LTRAibr2Pos1Ptr = here->LTRAibr2Pos1StructPtr->CSC_Complex ;
if ((here-> LTRAbrEq2 != 0) && (here-> LTRAnegNode1 != 0))
here->LTRAibr2Neg1Ptr = here->LTRAibr2Neg1StructPtr->CSC_Complex ;
if ((here-> LTRAbrEq2 != 0) && (here-> LTRAposNode2 != 0))
here->LTRAibr2Pos2Ptr = here->LTRAibr2Pos2StructPtr->CSC_Complex ;
if ((here-> LTRAbrEq2 != 0) && (here-> LTRAnegNode2 != 0))
here->LTRAibr2Neg2Ptr = here->LTRAibr2Neg2StructPtr->CSC_Complex ;
if ((here-> LTRAbrEq2 != 0) && (here-> LTRAbrEq1 != 0))
here->LTRAibr2Ibr1Ptr = here->LTRAibr2Ibr1StructPtr->CSC_Complex ;
if ((here-> LTRAbrEq2 != 0) && (here-> LTRAbrEq2 != 0))
here->LTRAibr2Ibr2Ptr = here->LTRAibr2Ibr2StructPtr->CSC_Complex ;
if ((here-> LTRAposNode1 != 0) && (here-> LTRAbrEq1 != 0))
here->LTRApos1Ibr1Ptr = here->LTRApos1Ibr1StructPtr->CSC_Complex ;
if ((here-> LTRAnegNode1 != 0) && (here-> LTRAbrEq1 != 0))
here->LTRAneg1Ibr1Ptr = here->LTRAneg1Ibr1StructPtr->CSC_Complex ;
if ((here-> LTRAposNode2 != 0) && (here-> LTRAbrEq2 != 0))
here->LTRApos2Ibr2Ptr = here->LTRApos2Ibr2StructPtr->CSC_Complex ;
if ((here-> LTRAnegNode2 != 0) && (here-> LTRAbrEq2 != 0))
here->LTRAneg2Ibr2Ptr = here->LTRAneg2Ibr2StructPtr->CSC_Complex ;
if ((here-> LTRAposNode1 != 0) && (here-> LTRAposNode1 != 0))
here->LTRApos1Pos1Ptr = here->LTRApos1Pos1StructPtr->CSC_Complex ;
if ((here-> LTRAnegNode1 != 0) && (here-> LTRAnegNode1 != 0))
here->LTRAneg1Neg1Ptr = here->LTRAneg1Neg1StructPtr->CSC_Complex ;
if ((here-> LTRAposNode2 != 0) && (here-> LTRAposNode2 != 0))
here->LTRApos2Pos2Ptr = here->LTRApos2Pos2StructPtr->CSC_Complex ;
if ((here-> LTRAnegNode2 != 0) && (here-> LTRAnegNode2 != 0))
here->LTRAneg2Neg2Ptr = here->LTRAneg2Neg2StructPtr->CSC_Complex ;
}
}
return (OK) ;
}
int
@ -288,155 +289,77 @@ LTRAbindCSCComplexToReal (GENmodel *inModel, CKTcircuit *ckt)
{
LTRAmodel *model = (LTRAmodel *)inModel ;
LTRAinstance *here ;
int i ;
/* loop through all the TransmissionLine models */
NG_IGNORE (ckt) ;
/* loop through all the LTRA models */
for ( ; model != NULL ; model = model->LTRAnextModel)
{
/* loop through all the instances of the model */
for (here = model->LTRAinstances ; here != NULL ; here = here->LTRAnextInstance)
{
i = 0 ;
if ((here->LTRAbrEq1 != 0) && (here->LTRAposNode1 != 0))
{
while (here->LTRAibr1Pos1Ptr != ckt->CKTmatrix->CKTbind_CSC_Complex [i]) i ++ ;
here->LTRAibr1Pos1Ptr = ckt->CKTmatrix->CKTbind_CSC [i] ;
}
if ((here-> LTRAbrEq1 != 0) && (here-> LTRAposNode1 != 0))
here->LTRAibr1Pos1Ptr = here->LTRAibr1Pos1StructPtr->CSC ;
i = 0 ;
if ((here->LTRAbrEq1 != 0) && (here->LTRAnegNode1 != 0))
{
while (here->LTRAibr1Neg1Ptr != ckt->CKTmatrix->CKTbind_CSC_Complex [i]) i ++ ;
here->LTRAibr1Neg1Ptr = ckt->CKTmatrix->CKTbind_CSC [i] ;
}
if ((here-> LTRAbrEq1 != 0) && (here-> LTRAnegNode1 != 0))
here->LTRAibr1Neg1Ptr = here->LTRAibr1Neg1StructPtr->CSC ;
i = 0 ;
if ((here->LTRAbrEq1 != 0) && (here->LTRAposNode2 != 0))
{
while (here->LTRAibr1Pos2Ptr != ckt->CKTmatrix->CKTbind_CSC_Complex [i]) i ++ ;
here->LTRAibr1Pos2Ptr = ckt->CKTmatrix->CKTbind_CSC [i] ;
}
if ((here-> LTRAbrEq1 != 0) && (here-> LTRAposNode2 != 0))
here->LTRAibr1Pos2Ptr = here->LTRAibr1Pos2StructPtr->CSC ;
i = 0 ;
if ((here->LTRAbrEq1 != 0) && (here->LTRAnegNode2 != 0))
{
while (here->LTRAibr1Neg2Ptr != ckt->CKTmatrix->CKTbind_CSC_Complex [i]) i ++ ;
here->LTRAibr1Neg2Ptr = ckt->CKTmatrix->CKTbind_CSC [i] ;
}
if ((here-> LTRAbrEq1 != 0) && (here-> LTRAnegNode2 != 0))
here->LTRAibr1Neg2Ptr = here->LTRAibr1Neg2StructPtr->CSC ;
i = 0 ;
if ((here->LTRAbrEq1 != 0) && (here->LTRAbrEq1 != 0))
{
while (here->LTRAibr1Ibr1Ptr != ckt->CKTmatrix->CKTbind_CSC_Complex [i]) i ++ ;
here->LTRAibr1Ibr1Ptr = ckt->CKTmatrix->CKTbind_CSC [i] ;
}
if ((here-> LTRAbrEq1 != 0) && (here-> LTRAbrEq1 != 0))
here->LTRAibr1Ibr1Ptr = here->LTRAibr1Ibr1StructPtr->CSC ;
i = 0 ;
if ((here->LTRAbrEq1 != 0) && (here->LTRAbrEq2 != 0))
{
while (here->LTRAibr1Ibr2Ptr != ckt->CKTmatrix->CKTbind_CSC_Complex [i]) i ++ ;
here->LTRAibr1Ibr2Ptr = ckt->CKTmatrix->CKTbind_CSC [i] ;
}
if ((here-> LTRAbrEq1 != 0) && (here-> LTRAbrEq2 != 0))
here->LTRAibr1Ibr2Ptr = here->LTRAibr1Ibr2StructPtr->CSC ;
i = 0 ;
if ((here->LTRAbrEq2 != 0) && (here->LTRAposNode1 != 0))
{
while (here->LTRAibr2Pos1Ptr != ckt->CKTmatrix->CKTbind_CSC_Complex [i]) i ++ ;
here->LTRAibr2Pos1Ptr = ckt->CKTmatrix->CKTbind_CSC [i] ;
}
if ((here-> LTRAbrEq2 != 0) && (here-> LTRAposNode1 != 0))
here->LTRAibr2Pos1Ptr = here->LTRAibr2Pos1StructPtr->CSC ;
i = 0 ;
if ((here->LTRAbrEq2 != 0) && (here->LTRAnegNode1 != 0))
{
while (here->LTRAibr2Neg1Ptr != ckt->CKTmatrix->CKTbind_CSC_Complex [i]) i ++ ;
here->LTRAibr2Neg1Ptr = ckt->CKTmatrix->CKTbind_CSC [i] ;
}
if ((here-> LTRAbrEq2 != 0) && (here-> LTRAnegNode1 != 0))
here->LTRAibr2Neg1Ptr = here->LTRAibr2Neg1StructPtr->CSC ;
i = 0 ;
if ((here->LTRAbrEq2 != 0) && (here->LTRAposNode2 != 0))
{
while (here->LTRAibr2Pos2Ptr != ckt->CKTmatrix->CKTbind_CSC_Complex [i]) i ++ ;
here->LTRAibr2Pos2Ptr = ckt->CKTmatrix->CKTbind_CSC [i] ;
}
if ((here-> LTRAbrEq2 != 0) && (here-> LTRAposNode2 != 0))
here->LTRAibr2Pos2Ptr = here->LTRAibr2Pos2StructPtr->CSC ;
i = 0 ;
if ((here->LTRAbrEq2 != 0) && (here->LTRAnegNode2 != 0))
{
while (here->LTRAibr2Neg2Ptr != ckt->CKTmatrix->CKTbind_CSC_Complex [i]) i ++ ;
here->LTRAibr2Neg2Ptr = ckt->CKTmatrix->CKTbind_CSC [i] ;
}
if ((here-> LTRAbrEq2 != 0) && (here-> LTRAnegNode2 != 0))
here->LTRAibr2Neg2Ptr = here->LTRAibr2Neg2StructPtr->CSC ;
i = 0 ;
if ((here->LTRAbrEq2 != 0) && (here->LTRAbrEq1 != 0))
{
while (here->LTRAibr2Ibr1Ptr != ckt->CKTmatrix->CKTbind_CSC_Complex [i]) i ++ ;
here->LTRAibr2Ibr1Ptr = ckt->CKTmatrix->CKTbind_CSC [i] ;
}
if ((here-> LTRAbrEq2 != 0) && (here-> LTRAbrEq1 != 0))
here->LTRAibr2Ibr1Ptr = here->LTRAibr2Ibr1StructPtr->CSC ;
i = 0 ;
if ((here->LTRAbrEq2 != 0) && (here->LTRAbrEq2 != 0))
{
while (here->LTRAibr2Ibr2Ptr != ckt->CKTmatrix->CKTbind_CSC_Complex [i]) i ++ ;
here->LTRAibr2Ibr2Ptr = ckt->CKTmatrix->CKTbind_CSC [i] ;
}
if ((here-> LTRAbrEq2 != 0) && (here-> LTRAbrEq2 != 0))
here->LTRAibr2Ibr2Ptr = here->LTRAibr2Ibr2StructPtr->CSC ;
i = 0 ;
if ((here->LTRAposNode1 != 0) && (here->LTRAbrEq1 != 0))
{
while (here->LTRApos1Ibr1Ptr != ckt->CKTmatrix->CKTbind_CSC_Complex [i]) i ++ ;
here->LTRApos1Ibr1Ptr = ckt->CKTmatrix->CKTbind_CSC [i] ;
}
if ((here-> LTRAposNode1 != 0) && (here-> LTRAbrEq1 != 0))
here->LTRApos1Ibr1Ptr = here->LTRApos1Ibr1StructPtr->CSC ;
i = 0 ;
if ((here->LTRAnegNode1 != 0) && (here->LTRAbrEq1 != 0))
{
while (here->LTRAneg1Ibr1Ptr != ckt->CKTmatrix->CKTbind_CSC_Complex [i]) i ++ ;
here->LTRAneg1Ibr1Ptr = ckt->CKTmatrix->CKTbind_CSC [i] ;
}
if ((here-> LTRAnegNode1 != 0) && (here-> LTRAbrEq1 != 0))
here->LTRAneg1Ibr1Ptr = here->LTRAneg1Ibr1StructPtr->CSC ;
i = 0 ;
if ((here->LTRAposNode2 != 0) && (here->LTRAbrEq2 != 0))
{
while (here->LTRApos2Ibr2Ptr != ckt->CKTmatrix->CKTbind_CSC_Complex [i]) i ++ ;
here->LTRApos2Ibr2Ptr = ckt->CKTmatrix->CKTbind_CSC [i] ;
}
if ((here-> LTRAposNode2 != 0) && (here-> LTRAbrEq2 != 0))
here->LTRApos2Ibr2Ptr = here->LTRApos2Ibr2StructPtr->CSC ;
i = 0 ;
if ((here->LTRAnegNode2 != 0) && (here->LTRAbrEq2 != 0))
{
while (here->LTRAneg2Ibr2Ptr != ckt->CKTmatrix->CKTbind_CSC_Complex [i]) i ++ ;
here->LTRAneg2Ibr2Ptr = ckt->CKTmatrix->CKTbind_CSC [i] ;
}
if ((here-> LTRAnegNode2 != 0) && (here-> LTRAbrEq2 != 0))
here->LTRAneg2Ibr2Ptr = here->LTRAneg2Ibr2StructPtr->CSC ;
i = 0 ;
if ((here->LTRAposNode1 != 0) && (here->LTRAposNode1 != 0))
{
while (here->LTRApos1Pos1Ptr != ckt->CKTmatrix->CKTbind_CSC_Complex [i]) i ++ ;
here->LTRApos1Pos1Ptr = ckt->CKTmatrix->CKTbind_CSC [i] ;
}
if ((here-> LTRAposNode1 != 0) && (here-> LTRAposNode1 != 0))
here->LTRApos1Pos1Ptr = here->LTRApos1Pos1StructPtr->CSC ;
i = 0 ;
if ((here->LTRAnegNode1 != 0) && (here->LTRAnegNode1 != 0))
{
while (here->LTRAneg1Neg1Ptr != ckt->CKTmatrix->CKTbind_CSC_Complex [i]) i ++ ;
here->LTRAneg1Neg1Ptr = ckt->CKTmatrix->CKTbind_CSC [i] ;
}
if ((here-> LTRAnegNode1 != 0) && (here-> LTRAnegNode1 != 0))
here->LTRAneg1Neg1Ptr = here->LTRAneg1Neg1StructPtr->CSC ;
i = 0 ;
if ((here->LTRAposNode2 != 0) && (here->LTRAposNode2 != 0))
{
while (here->LTRApos2Pos2Ptr != ckt->CKTmatrix->CKTbind_CSC_Complex [i]) i ++ ;
here->LTRApos2Pos2Ptr = ckt->CKTmatrix->CKTbind_CSC [i] ;
}
if ((here-> LTRAposNode2 != 0) && (here-> LTRAposNode2 != 0))
here->LTRApos2Pos2Ptr = here->LTRApos2Pos2StructPtr->CSC ;
if ((here-> LTRAnegNode2 != 0) && (here-> LTRAnegNode2 != 0))
here->LTRAneg2Neg2Ptr = here->LTRAneg2Neg2StructPtr->CSC ;
i = 0 ;
if ((here->LTRAnegNode2 != 0) && (here->LTRAnegNode2 != 0))
{
while (here->LTRAneg2Neg2Ptr != ckt->CKTmatrix->CKTbind_CSC_Complex [i]) i ++ ;
here->LTRAneg2Neg2Ptr = ckt->CKTmatrix->CKTbind_CSC [i] ;
}
}
}
return (OK) ;
}
}

View File

@ -67,6 +67,30 @@ typedef struct sLTRAinstance {
unsigned LTRAicC1Given : 1; /* flag to ind. init. current at port 1 given */
unsigned LTRAicV2Given : 1; /* flag to ind. init. voltage at port 2 given */
unsigned LTRAicC2Given : 1; /* flag to ind. init. current at port 2 given */
#ifdef KLU
BindElement *LTRAibr1Pos1StructPtr ;
BindElement *LTRAibr1Neg1StructPtr ;
BindElement *LTRAibr1Pos2StructPtr ;
BindElement *LTRAibr1Neg2StructPtr ;
BindElement *LTRAibr1Ibr1StructPtr ;
BindElement *LTRAibr1Ibr2StructPtr ;
BindElement *LTRAibr2Pos1StructPtr ;
BindElement *LTRAibr2Neg1StructPtr ;
BindElement *LTRAibr2Pos2StructPtr ;
BindElement *LTRAibr2Neg2StructPtr ;
BindElement *LTRAibr2Ibr1StructPtr ;
BindElement *LTRAibr2Ibr2StructPtr ;
BindElement *LTRApos1Ibr1StructPtr ;
BindElement *LTRAneg1Ibr1StructPtr ;
BindElement *LTRApos2Ibr2StructPtr ;
BindElement *LTRAneg2Ibr2StructPtr ;
BindElement *LTRApos1Pos1StructPtr ;
BindElement *LTRAneg1Neg1StructPtr ;
BindElement *LTRApos2Pos2StructPtr ;
BindElement *LTRAneg2Neg2StructPtr ;
#endif
} LTRAinstance ;