New Binding Method extended to BJT device
This commit is contained in:
parent
136e74c9bc
commit
bbadbdab7e
|
|
@ -1,5 +1,5 @@
|
||||||
/**********
|
/**********
|
||||||
Author: 2012 Francesco Lannutti
|
Author: 2013 Francesco Lannutti
|
||||||
**********/
|
**********/
|
||||||
|
|
||||||
#include "ngspice/ngspice.h"
|
#include "ngspice/ngspice.h"
|
||||||
|
|
@ -7,332 +7,314 @@ Author: 2012 Francesco Lannutti
|
||||||
#include "bjtdefs.h"
|
#include "bjtdefs.h"
|
||||||
#include "ngspice/sperror.h"
|
#include "ngspice/sperror.h"
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
static
|
||||||
int
|
int
|
||||||
BJTbindCSC(GENmodel *inModel, CKTcircuit *ckt)
|
BindCompare (const void *a, const void *b)
|
||||||
{
|
{
|
||||||
BJTmodel *model = (BJTmodel *)inModel;
|
BindElement *A, *B ;
|
||||||
int i ;
|
A = (BindElement *)a ;
|
||||||
|
B = (BindElement *)b ;
|
||||||
|
|
||||||
/* loop through all the bjt models */
|
return ((int)(A->Sparse - B->Sparse)) ;
|
||||||
for( ; model != NULL; model = model->BJTnextModel ) {
|
|
||||||
BJTinstance *here;
|
|
||||||
|
|
||||||
/* loop through all the instances of the model */
|
|
||||||
for (here = model->BJTinstances; here != NULL ;
|
|
||||||
here = here->BJTnextInstance) {
|
|
||||||
|
|
||||||
i = 0 ;
|
|
||||||
if ((here->BJTcolNode != 0) && (here->BJTcolPrimeNode != 0)) {
|
|
||||||
while (here->BJTcolColPrimePtr != ckt->CKTmatrix->CKTbind_Sparse [i]) i ++ ;
|
|
||||||
here->BJTcolColPrimePtr = ckt->CKTmatrix->CKTbind_CSC [i] ;
|
|
||||||
}
|
|
||||||
|
|
||||||
i = 0 ;
|
|
||||||
if ((here->BJTbaseNode != 0) && (here->BJTbasePrimeNode != 0)) {
|
|
||||||
while (here->BJTbaseBasePrimePtr != ckt->CKTmatrix->CKTbind_Sparse [i]) i ++ ;
|
|
||||||
here->BJTbaseBasePrimePtr = ckt->CKTmatrix->CKTbind_CSC [i] ;
|
|
||||||
}
|
|
||||||
|
|
||||||
i = 0 ;
|
|
||||||
if ((here->BJTemitNode != 0) && (here->BJTemitPrimeNode != 0)) {
|
|
||||||
while (here->BJTemitEmitPrimePtr != ckt->CKTmatrix->CKTbind_Sparse [i]) i ++ ;
|
|
||||||
here->BJTemitEmitPrimePtr = ckt->CKTmatrix->CKTbind_CSC [i] ;
|
|
||||||
}
|
|
||||||
|
|
||||||
i = 0 ;
|
|
||||||
if ((here->BJTcolPrimeNode != 0) && (here->BJTcolNode != 0)) {
|
|
||||||
while (here->BJTcolPrimeColPtr != ckt->CKTmatrix->CKTbind_Sparse [i]) i ++ ;
|
|
||||||
here->BJTcolPrimeColPtr = ckt->CKTmatrix->CKTbind_CSC [i] ;
|
|
||||||
}
|
|
||||||
|
|
||||||
i = 0 ;
|
|
||||||
if ((here->BJTcolPrimeNode != 0) && (here->BJTbasePrimeNode != 0)) {
|
|
||||||
while (here->BJTcolPrimeBasePrimePtr != ckt->CKTmatrix->CKTbind_Sparse [i]) i ++ ;
|
|
||||||
here->BJTcolPrimeBasePrimePtr = ckt->CKTmatrix->CKTbind_CSC [i] ;
|
|
||||||
}
|
|
||||||
|
|
||||||
i = 0 ;
|
|
||||||
if ((here->BJTcolPrimeNode != 0) && (here->BJTemitPrimeNode != 0)) {
|
|
||||||
while (here->BJTcolPrimeEmitPrimePtr != ckt->CKTmatrix->CKTbind_Sparse [i]) i ++ ;
|
|
||||||
here->BJTcolPrimeEmitPrimePtr = ckt->CKTmatrix->CKTbind_CSC [i] ;
|
|
||||||
}
|
|
||||||
|
|
||||||
i = 0 ;
|
|
||||||
if ((here->BJTbasePrimeNode != 0) && (here->BJTbaseNode != 0)) {
|
|
||||||
while (here->BJTbasePrimeBasePtr != ckt->CKTmatrix->CKTbind_Sparse [i]) i ++ ;
|
|
||||||
here->BJTbasePrimeBasePtr = ckt->CKTmatrix->CKTbind_CSC [i] ;
|
|
||||||
}
|
|
||||||
|
|
||||||
i = 0 ;
|
|
||||||
if ((here->BJTbasePrimeNode != 0) && (here->BJTcolPrimeNode != 0)) {
|
|
||||||
while (here->BJTbasePrimeColPrimePtr != ckt->CKTmatrix->CKTbind_Sparse [i]) i ++ ;
|
|
||||||
here->BJTbasePrimeColPrimePtr = ckt->CKTmatrix->CKTbind_CSC [i] ;
|
|
||||||
}
|
|
||||||
|
|
||||||
i = 0 ;
|
|
||||||
if ((here->BJTbasePrimeNode != 0) && (here->BJTemitPrimeNode != 0)) {
|
|
||||||
while (here->BJTbasePrimeEmitPrimePtr != ckt->CKTmatrix->CKTbind_Sparse [i]) i ++ ;
|
|
||||||
here->BJTbasePrimeEmitPrimePtr = ckt->CKTmatrix->CKTbind_CSC [i] ;
|
|
||||||
}
|
|
||||||
|
|
||||||
i = 0 ;
|
|
||||||
if ((here->BJTemitPrimeNode != 0) && (here->BJTemitNode != 0)) {
|
|
||||||
while (here->BJTemitPrimeEmitPtr != ckt->CKTmatrix->CKTbind_Sparse [i]) i ++ ;
|
|
||||||
here->BJTemitPrimeEmitPtr = ckt->CKTmatrix->CKTbind_CSC [i] ;
|
|
||||||
}
|
|
||||||
|
|
||||||
i = 0 ;
|
|
||||||
if ((here->BJTemitPrimeNode != 0) && (here->BJTcolPrimeNode != 0)) {
|
|
||||||
while (here->BJTemitPrimeColPrimePtr != ckt->CKTmatrix->CKTbind_Sparse [i]) i ++ ;
|
|
||||||
here->BJTemitPrimeColPrimePtr = ckt->CKTmatrix->CKTbind_CSC [i] ;
|
|
||||||
}
|
|
||||||
|
|
||||||
i = 0 ;
|
|
||||||
if ((here->BJTemitPrimeNode != 0) && (here->BJTbasePrimeNode != 0)) {
|
|
||||||
while (here->BJTemitPrimeBasePrimePtr != ckt->CKTmatrix->CKTbind_Sparse [i]) i ++ ;
|
|
||||||
here->BJTemitPrimeBasePrimePtr = ckt->CKTmatrix->CKTbind_CSC [i] ;
|
|
||||||
}
|
|
||||||
|
|
||||||
i = 0 ;
|
|
||||||
if ((here->BJTcolNode != 0) && (here->BJTcolNode != 0)) {
|
|
||||||
while (here->BJTcolColPtr != ckt->CKTmatrix->CKTbind_Sparse [i]) i ++ ;
|
|
||||||
here->BJTcolColPtr = ckt->CKTmatrix->CKTbind_CSC [i] ;
|
|
||||||
}
|
|
||||||
|
|
||||||
i = 0 ;
|
|
||||||
if ((here->BJTbaseNode != 0) && (here->BJTbaseNode != 0)) {
|
|
||||||
while (here->BJTbaseBasePtr != ckt->CKTmatrix->CKTbind_Sparse [i]) i ++ ;
|
|
||||||
here->BJTbaseBasePtr = ckt->CKTmatrix->CKTbind_CSC [i] ;
|
|
||||||
}
|
|
||||||
|
|
||||||
i = 0 ;
|
|
||||||
if ((here->BJTemitNode != 0) && (here->BJTemitNode != 0)) {
|
|
||||||
while (here->BJTemitEmitPtr != ckt->CKTmatrix->CKTbind_Sparse [i]) i ++ ;
|
|
||||||
here->BJTemitEmitPtr = ckt->CKTmatrix->CKTbind_CSC [i] ;
|
|
||||||
}
|
|
||||||
|
|
||||||
i = 0 ;
|
|
||||||
if ((here->BJTcolPrimeNode != 0) && (here->BJTcolPrimeNode != 0)) {
|
|
||||||
while (here->BJTcolPrimeColPrimePtr != ckt->CKTmatrix->CKTbind_Sparse [i]) i ++ ;
|
|
||||||
here->BJTcolPrimeColPrimePtr = ckt->CKTmatrix->CKTbind_CSC [i] ;
|
|
||||||
}
|
|
||||||
|
|
||||||
i = 0 ;
|
|
||||||
if ((here->BJTbasePrimeNode != 0) && (here->BJTbasePrimeNode != 0)) {
|
|
||||||
while (here->BJTbasePrimeBasePrimePtr != ckt->CKTmatrix->CKTbind_Sparse [i]) i ++ ;
|
|
||||||
here->BJTbasePrimeBasePrimePtr = ckt->CKTmatrix->CKTbind_CSC [i] ;
|
|
||||||
}
|
|
||||||
|
|
||||||
i = 0 ;
|
|
||||||
if ((here->BJTemitPrimeNode != 0) && (here->BJTemitPrimeNode != 0)) {
|
|
||||||
while (here->BJTemitPrimeEmitPrimePtr != ckt->CKTmatrix->CKTbind_Sparse [i]) i ++ ;
|
|
||||||
here->BJTemitPrimeEmitPrimePtr = ckt->CKTmatrix->CKTbind_CSC [i] ;
|
|
||||||
}
|
|
||||||
|
|
||||||
i = 0 ;
|
|
||||||
if ((here->BJTsubstNode != 0) && (here->BJTsubstNode != 0)) {
|
|
||||||
while (here->BJTsubstSubstPtr != ckt->CKTmatrix->CKTbind_Sparse [i]) i ++ ;
|
|
||||||
here->BJTsubstSubstPtr = ckt->CKTmatrix->CKTbind_CSC [i] ;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (model -> BJTsubs == LATERAL) {
|
|
||||||
here -> BJTsubstConNode = here -> BJTbasePrimeNode;
|
|
||||||
here -> BJTsubstConSubstConPtr = here -> BJTbasePrimeBasePrimePtr;
|
|
||||||
} else {
|
|
||||||
here -> BJTsubstConNode = here -> BJTcolPrimeNode;
|
|
||||||
here -> BJTsubstConSubstConPtr = here -> BJTcolPrimeColPrimePtr;
|
|
||||||
}
|
|
||||||
|
|
||||||
i = 0 ;
|
|
||||||
if ((here->BJTsubstConNode != 0) && (here->BJTsubstNode != 0)) {
|
|
||||||
while (here->BJTsubstConSubstPtr != ckt->CKTmatrix->CKTbind_Sparse [i]) i ++ ;
|
|
||||||
here->BJTsubstConSubstPtr = ckt->CKTmatrix->CKTbind_CSC [i] ;
|
|
||||||
}
|
|
||||||
|
|
||||||
i = 0 ;
|
|
||||||
if ((here->BJTsubstNode != 0) && (here->BJTsubstConNode != 0)) {
|
|
||||||
while (here->BJTsubstSubstConPtr != ckt->CKTmatrix->CKTbind_Sparse [i]) i ++ ;
|
|
||||||
here->BJTsubstSubstConPtr = ckt->CKTmatrix->CKTbind_CSC [i] ;
|
|
||||||
}
|
|
||||||
|
|
||||||
i = 0 ;
|
|
||||||
if ((here->BJTbaseNode != 0) && (here->BJTcolPrimeNode != 0)) {
|
|
||||||
while (here->BJTbaseColPrimePtr != ckt->CKTmatrix->CKTbind_Sparse [i]) i ++ ;
|
|
||||||
here->BJTbaseColPrimePtr = ckt->CKTmatrix->CKTbind_CSC [i] ;
|
|
||||||
}
|
|
||||||
|
|
||||||
i = 0 ;
|
|
||||||
if ((here->BJTcolPrimeNode != 0) && (here->BJTbaseNode != 0)) {
|
|
||||||
while (here->BJTcolPrimeBasePtr != ckt->CKTmatrix->CKTbind_Sparse [i]) i ++ ;
|
|
||||||
here->BJTcolPrimeBasePtr = ckt->CKTmatrix->CKTbind_CSC [i] ;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return(OK);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
BJTbindCSCComplex(GENmodel *inModel, CKTcircuit *ckt)
|
BJTbindCSC (GENmodel *inModel, CKTcircuit *ckt)
|
||||||
{
|
{
|
||||||
BJTmodel *model = (BJTmodel *)inModel;
|
BJTmodel *model = (BJTmodel *)inModel ;
|
||||||
int i ;
|
BJTinstance *here ;
|
||||||
|
double *i ;
|
||||||
|
BindElement *matched, *BindStruct ;
|
||||||
|
size_t nz ;
|
||||||
|
|
||||||
/* loop through all the bjt models */
|
BindStruct = ckt->CKTmatrix->CKTbindStruct ;
|
||||||
for( ; model != NULL; model = model->BJTnextModel ) {
|
nz = (size_t)ckt->CKTmatrix->CKTklunz ;
|
||||||
BJTinstance *here;
|
|
||||||
|
|
||||||
|
/* loop through all the BJT models */
|
||||||
|
for ( ; model != NULL ; model = model->BJTnextModel)
|
||||||
|
{
|
||||||
/* loop through all the instances of the model */
|
/* loop through all the instances of the model */
|
||||||
for (here = model->BJTinstances; here != NULL ;
|
for (here = model->BJTinstances ; here != NULL ; here = here->BJTnextInstance)
|
||||||
here = here->BJTnextInstance) {
|
{
|
||||||
|
if ((here->BJTcolNode != 0) && (here->BJTcolPrimeNode != 0))
|
||||||
i = 0 ;
|
{
|
||||||
if ((here->BJTcolNode != 0) && (here->BJTcolPrimeNode != 0)) {
|
i = here->BJTcolColPrimePtr ;
|
||||||
while (here->BJTcolColPrimePtr != ckt->CKTmatrix->CKTbind_CSC [i]) i ++ ;
|
matched = (BindElement *) bsearch (&i, BindStruct, nz, sizeof(BindElement), BindCompare) ;
|
||||||
here->BJTcolColPrimePtr = ckt->CKTmatrix->CKTbind_CSC_Complex [i] ;
|
here->BJTcolColPrimeStructPtr = matched ;
|
||||||
}
|
here->BJTcolColPrimePtr = matched->CSC ;
|
||||||
|
|
||||||
i = 0 ;
|
|
||||||
if ((here->BJTbaseNode != 0) && (here->BJTbasePrimeNode != 0)) {
|
|
||||||
while (here->BJTbaseBasePrimePtr != ckt->CKTmatrix->CKTbind_CSC [i]) i ++ ;
|
|
||||||
here->BJTbaseBasePrimePtr = ckt->CKTmatrix->CKTbind_CSC_Complex [i] ;
|
|
||||||
}
|
|
||||||
|
|
||||||
i = 0 ;
|
|
||||||
if ((here->BJTemitNode != 0) && (here->BJTemitPrimeNode != 0)) {
|
|
||||||
while (here->BJTemitEmitPrimePtr != ckt->CKTmatrix->CKTbind_CSC [i]) i ++ ;
|
|
||||||
here->BJTemitEmitPrimePtr = ckt->CKTmatrix->CKTbind_CSC_Complex [i] ;
|
|
||||||
}
|
|
||||||
|
|
||||||
i = 0 ;
|
|
||||||
if ((here->BJTcolPrimeNode != 0) && (here->BJTcolNode != 0)) {
|
|
||||||
while (here->BJTcolPrimeColPtr != ckt->CKTmatrix->CKTbind_CSC [i]) i ++ ;
|
|
||||||
here->BJTcolPrimeColPtr = ckt->CKTmatrix->CKTbind_CSC_Complex [i] ;
|
|
||||||
}
|
|
||||||
|
|
||||||
i = 0 ;
|
|
||||||
if ((here->BJTcolPrimeNode != 0) && (here->BJTbasePrimeNode != 0)) {
|
|
||||||
while (here->BJTcolPrimeBasePrimePtr != ckt->CKTmatrix->CKTbind_CSC [i]) i ++ ;
|
|
||||||
here->BJTcolPrimeBasePrimePtr = ckt->CKTmatrix->CKTbind_CSC_Complex [i] ;
|
|
||||||
}
|
|
||||||
|
|
||||||
i = 0 ;
|
|
||||||
if ((here->BJTcolPrimeNode != 0) && (here->BJTemitPrimeNode != 0)) {
|
|
||||||
while (here->BJTcolPrimeEmitPrimePtr != ckt->CKTmatrix->CKTbind_CSC [i]) i ++ ;
|
|
||||||
here->BJTcolPrimeEmitPrimePtr = ckt->CKTmatrix->CKTbind_CSC_Complex [i] ;
|
|
||||||
}
|
|
||||||
|
|
||||||
i = 0 ;
|
|
||||||
if ((here->BJTbasePrimeNode != 0) && (here->BJTbaseNode != 0)) {
|
|
||||||
while (here->BJTbasePrimeBasePtr != ckt->CKTmatrix->CKTbind_CSC [i]) i ++ ;
|
|
||||||
here->BJTbasePrimeBasePtr = ckt->CKTmatrix->CKTbind_CSC_Complex [i] ;
|
|
||||||
}
|
|
||||||
|
|
||||||
i = 0 ;
|
|
||||||
if ((here->BJTbasePrimeNode != 0) && (here->BJTcolPrimeNode != 0)) {
|
|
||||||
while (here->BJTbasePrimeColPrimePtr != ckt->CKTmatrix->CKTbind_CSC [i]) i ++ ;
|
|
||||||
here->BJTbasePrimeColPrimePtr = ckt->CKTmatrix->CKTbind_CSC_Complex [i] ;
|
|
||||||
}
|
|
||||||
|
|
||||||
i = 0 ;
|
|
||||||
if ((here->BJTbasePrimeNode != 0) && (here->BJTemitPrimeNode != 0)) {
|
|
||||||
while (here->BJTbasePrimeEmitPrimePtr != ckt->CKTmatrix->CKTbind_CSC [i]) i ++ ;
|
|
||||||
here->BJTbasePrimeEmitPrimePtr = ckt->CKTmatrix->CKTbind_CSC_Complex [i] ;
|
|
||||||
}
|
|
||||||
|
|
||||||
i = 0 ;
|
|
||||||
if ((here->BJTemitPrimeNode != 0) && (here->BJTemitNode != 0)) {
|
|
||||||
while (here->BJTemitPrimeEmitPtr != ckt->CKTmatrix->CKTbind_CSC [i]) i ++ ;
|
|
||||||
here->BJTemitPrimeEmitPtr = ckt->CKTmatrix->CKTbind_CSC_Complex [i] ;
|
|
||||||
}
|
|
||||||
|
|
||||||
i = 0 ;
|
|
||||||
if ((here->BJTemitPrimeNode != 0) && (here->BJTcolPrimeNode != 0)) {
|
|
||||||
while (here->BJTemitPrimeColPrimePtr != ckt->CKTmatrix->CKTbind_CSC [i]) i ++ ;
|
|
||||||
here->BJTemitPrimeColPrimePtr = ckt->CKTmatrix->CKTbind_CSC_Complex [i] ;
|
|
||||||
}
|
|
||||||
|
|
||||||
i = 0 ;
|
|
||||||
if ((here->BJTemitPrimeNode != 0) && (here->BJTbasePrimeNode != 0)) {
|
|
||||||
while (here->BJTemitPrimeBasePrimePtr != ckt->CKTmatrix->CKTbind_CSC [i]) i ++ ;
|
|
||||||
here->BJTemitPrimeBasePrimePtr = ckt->CKTmatrix->CKTbind_CSC_Complex [i] ;
|
|
||||||
}
|
|
||||||
|
|
||||||
i = 0 ;
|
|
||||||
if ((here->BJTcolNode != 0) && (here->BJTcolNode != 0)) {
|
|
||||||
while (here->BJTcolColPtr != ckt->CKTmatrix->CKTbind_CSC [i]) i ++ ;
|
|
||||||
here->BJTcolColPtr = ckt->CKTmatrix->CKTbind_CSC_Complex [i] ;
|
|
||||||
}
|
|
||||||
|
|
||||||
i = 0 ;
|
|
||||||
if ((here->BJTbaseNode != 0) && (here->BJTbaseNode != 0)) {
|
|
||||||
while (here->BJTbaseBasePtr != ckt->CKTmatrix->CKTbind_CSC [i]) i ++ ;
|
|
||||||
here->BJTbaseBasePtr = ckt->CKTmatrix->CKTbind_CSC_Complex [i] ;
|
|
||||||
}
|
|
||||||
|
|
||||||
i = 0 ;
|
|
||||||
if ((here->BJTemitNode != 0) && (here->BJTemitNode != 0)) {
|
|
||||||
while (here->BJTemitEmitPtr != ckt->CKTmatrix->CKTbind_CSC [i]) i ++ ;
|
|
||||||
here->BJTemitEmitPtr = ckt->CKTmatrix->CKTbind_CSC_Complex [i] ;
|
|
||||||
}
|
|
||||||
|
|
||||||
i = 0 ;
|
|
||||||
if ((here->BJTcolPrimeNode != 0) && (here->BJTcolPrimeNode != 0)) {
|
|
||||||
while (here->BJTcolPrimeColPrimePtr != ckt->CKTmatrix->CKTbind_CSC [i]) i ++ ;
|
|
||||||
here->BJTcolPrimeColPrimePtr = ckt->CKTmatrix->CKTbind_CSC_Complex [i] ;
|
|
||||||
}
|
|
||||||
|
|
||||||
i = 0 ;
|
|
||||||
if ((here->BJTbasePrimeNode != 0) && (here->BJTbasePrimeNode != 0)) {
|
|
||||||
while (here->BJTbasePrimeBasePrimePtr != ckt->CKTmatrix->CKTbind_CSC [i]) i ++ ;
|
|
||||||
here->BJTbasePrimeBasePrimePtr = ckt->CKTmatrix->CKTbind_CSC_Complex [i] ;
|
|
||||||
}
|
|
||||||
|
|
||||||
i = 0 ;
|
|
||||||
if ((here->BJTemitPrimeNode != 0) && (here->BJTemitPrimeNode != 0)) {
|
|
||||||
while (here->BJTemitPrimeEmitPrimePtr != ckt->CKTmatrix->CKTbind_CSC [i]) i ++ ;
|
|
||||||
here->BJTemitPrimeEmitPrimePtr = ckt->CKTmatrix->CKTbind_CSC_Complex [i] ;
|
|
||||||
}
|
|
||||||
|
|
||||||
i = 0 ;
|
|
||||||
if ((here->BJTsubstNode != 0) && (here->BJTsubstNode != 0)) {
|
|
||||||
while (here->BJTsubstSubstPtr != ckt->CKTmatrix->CKTbind_CSC [i]) i ++ ;
|
|
||||||
here->BJTsubstSubstPtr = ckt->CKTmatrix->CKTbind_CSC_Complex [i] ;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (model -> BJTsubs == LATERAL) {
|
|
||||||
here -> BJTsubstConNode = here -> BJTbasePrimeNode;
|
|
||||||
here -> BJTsubstConSubstConPtr = here -> BJTbasePrimeBasePrimePtr;
|
|
||||||
} else {
|
|
||||||
here -> BJTsubstConNode = here -> BJTcolPrimeNode;
|
|
||||||
here -> BJTsubstConSubstConPtr = here -> BJTcolPrimeColPrimePtr;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
i = 0 ;
|
if ((here->BJTbaseNode != 0) && (here->BJTbasePrimeNode != 0))
|
||||||
if ((here->BJTsubstConNode != 0) && (here->BJTsubstNode != 0)) {
|
{
|
||||||
while (here->BJTsubstConSubstPtr != ckt->CKTmatrix->CKTbind_CSC [i]) i ++ ;
|
i = here->BJTbaseBasePrimePtr ;
|
||||||
here->BJTsubstConSubstPtr = ckt->CKTmatrix->CKTbind_CSC_Complex [i] ;
|
matched = (BindElement *) bsearch (&i, BindStruct, nz, sizeof(BindElement), BindCompare) ;
|
||||||
}
|
here->BJTbaseBasePrimeStructPtr = matched ;
|
||||||
|
here->BJTbaseBasePrimePtr = matched->CSC ;
|
||||||
|
}
|
||||||
|
|
||||||
i = 0 ;
|
if ((here->BJTemitNode != 0) && (here->BJTemitPrimeNode != 0))
|
||||||
if ((here->BJTsubstNode != 0) && (here->BJTsubstConNode != 0)) {
|
{
|
||||||
while (here->BJTsubstSubstConPtr != ckt->CKTmatrix->CKTbind_CSC [i]) i ++ ;
|
i = here->BJTemitEmitPrimePtr ;
|
||||||
here->BJTsubstSubstConPtr = ckt->CKTmatrix->CKTbind_CSC_Complex [i] ;
|
matched = (BindElement *) bsearch (&i, BindStruct, nz, sizeof(BindElement), BindCompare) ;
|
||||||
}
|
here->BJTemitEmitPrimeStructPtr = matched ;
|
||||||
|
here->BJTemitEmitPrimePtr = matched->CSC ;
|
||||||
|
}
|
||||||
|
|
||||||
i = 0 ;
|
if ((here->BJTcolPrimeNode != 0) && (here->BJTcolNode != 0))
|
||||||
if ((here->BJTbaseNode != 0) && (here->BJTcolPrimeNode != 0)) {
|
{
|
||||||
while (here->BJTbaseColPrimePtr != ckt->CKTmatrix->CKTbind_CSC [i]) i ++ ;
|
i = here->BJTcolPrimeColPtr ;
|
||||||
here->BJTbaseColPrimePtr = ckt->CKTmatrix->CKTbind_CSC_Complex [i] ;
|
matched = (BindElement *) bsearch (&i, BindStruct, nz, sizeof(BindElement), BindCompare) ;
|
||||||
}
|
here->BJTcolPrimeColStructPtr = matched ;
|
||||||
|
here->BJTcolPrimeColPtr = matched->CSC ;
|
||||||
|
}
|
||||||
|
|
||||||
i = 0 ;
|
if ((here->BJTcolPrimeNode != 0) && (here->BJTbasePrimeNode != 0))
|
||||||
if ((here->BJTcolPrimeNode != 0) && (here->BJTbaseNode != 0)) {
|
{
|
||||||
while (here->BJTcolPrimeBasePtr != ckt->CKTmatrix->CKTbind_CSC [i]) i ++ ;
|
i = here->BJTcolPrimeBasePrimePtr ;
|
||||||
here->BJTcolPrimeBasePtr = ckt->CKTmatrix->CKTbind_CSC_Complex [i] ;
|
matched = (BindElement *) bsearch (&i, BindStruct, nz, sizeof(BindElement), BindCompare) ;
|
||||||
}
|
here->BJTcolPrimeBasePrimeStructPtr = matched ;
|
||||||
}
|
here->BJTcolPrimeBasePrimePtr = matched->CSC ;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((here->BJTcolPrimeNode != 0) && (here->BJTemitPrimeNode != 0))
|
||||||
|
{
|
||||||
|
i = here->BJTcolPrimeEmitPrimePtr ;
|
||||||
|
matched = (BindElement *) bsearch (&i, BindStruct, nz, sizeof(BindElement), BindCompare) ;
|
||||||
|
here->BJTcolPrimeEmitPrimeStructPtr = matched ;
|
||||||
|
here->BJTcolPrimeEmitPrimePtr = matched->CSC ;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((here->BJTbasePrimeNode != 0) && (here->BJTbaseNode != 0))
|
||||||
|
{
|
||||||
|
i = here->BJTbasePrimeBasePtr ;
|
||||||
|
matched = (BindElement *) bsearch (&i, BindStruct, nz, sizeof(BindElement), BindCompare) ;
|
||||||
|
here->BJTbasePrimeBaseStructPtr = matched ;
|
||||||
|
here->BJTbasePrimeBasePtr = matched->CSC ;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((here->BJTbasePrimeNode != 0) && (here->BJTcolPrimeNode != 0))
|
||||||
|
{
|
||||||
|
i = here->BJTbasePrimeColPrimePtr ;
|
||||||
|
matched = (BindElement *) bsearch (&i, BindStruct, nz, sizeof(BindElement), BindCompare) ;
|
||||||
|
here->BJTbasePrimeColPrimeStructPtr = matched ;
|
||||||
|
here->BJTbasePrimeColPrimePtr = matched->CSC ;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((here->BJTbasePrimeNode != 0) && (here->BJTemitPrimeNode != 0))
|
||||||
|
{
|
||||||
|
i = here->BJTbasePrimeEmitPrimePtr ;
|
||||||
|
matched = (BindElement *) bsearch (&i, BindStruct, nz, sizeof(BindElement), BindCompare) ;
|
||||||
|
here->BJTbasePrimeEmitPrimeStructPtr = matched ;
|
||||||
|
here->BJTbasePrimeEmitPrimePtr = matched->CSC ;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((here->BJTemitPrimeNode != 0) && (here->BJTemitNode != 0))
|
||||||
|
{
|
||||||
|
i = here->BJTemitPrimeEmitPtr ;
|
||||||
|
matched = (BindElement *) bsearch (&i, BindStruct, nz, sizeof(BindElement), BindCompare) ;
|
||||||
|
here->BJTemitPrimeEmitStructPtr = matched ;
|
||||||
|
here->BJTemitPrimeEmitPtr = matched->CSC ;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((here->BJTemitPrimeNode != 0) && (here->BJTcolPrimeNode != 0))
|
||||||
|
{
|
||||||
|
i = here->BJTemitPrimeColPrimePtr ;
|
||||||
|
matched = (BindElement *) bsearch (&i, BindStruct, nz, sizeof(BindElement), BindCompare) ;
|
||||||
|
here->BJTemitPrimeColPrimeStructPtr = matched ;
|
||||||
|
here->BJTemitPrimeColPrimePtr = matched->CSC ;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((here->BJTemitPrimeNode != 0) && (here->BJTbasePrimeNode != 0))
|
||||||
|
{
|
||||||
|
i = here->BJTemitPrimeBasePrimePtr ;
|
||||||
|
matched = (BindElement *) bsearch (&i, BindStruct, nz, sizeof(BindElement), BindCompare) ;
|
||||||
|
here->BJTemitPrimeBasePrimeStructPtr = matched ;
|
||||||
|
here->BJTemitPrimeBasePrimePtr = matched->CSC ;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((here->BJTcolNode != 0) && (here->BJTcolNode != 0))
|
||||||
|
{
|
||||||
|
i = here->BJTcolColPtr ;
|
||||||
|
matched = (BindElement *) bsearch (&i, BindStruct, nz, sizeof(BindElement), BindCompare) ;
|
||||||
|
here->BJTcolColStructPtr = matched ;
|
||||||
|
here->BJTcolColPtr = matched->CSC ;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((here->BJTbaseNode != 0) && (here->BJTbaseNode != 0))
|
||||||
|
{
|
||||||
|
i = here->BJTbaseBasePtr ;
|
||||||
|
matched = (BindElement *) bsearch (&i, BindStruct, nz, sizeof(BindElement), BindCompare) ;
|
||||||
|
here->BJTbaseBaseStructPtr = matched ;
|
||||||
|
here->BJTbaseBasePtr = matched->CSC ;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((here->BJTemitNode != 0) && (here->BJTemitNode != 0))
|
||||||
|
{
|
||||||
|
i = here->BJTemitEmitPtr ;
|
||||||
|
matched = (BindElement *) bsearch (&i, BindStruct, nz, sizeof(BindElement), BindCompare) ;
|
||||||
|
here->BJTemitEmitStructPtr = matched ;
|
||||||
|
here->BJTemitEmitPtr = matched->CSC ;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((here->BJTcolPrimeNode != 0) && (here->BJTcolPrimeNode != 0))
|
||||||
|
{
|
||||||
|
i = here->BJTcolPrimeColPrimePtr ;
|
||||||
|
matched = (BindElement *) bsearch (&i, BindStruct, nz, sizeof(BindElement), BindCompare) ;
|
||||||
|
here->BJTcolPrimeColPrimeStructPtr = matched ;
|
||||||
|
here->BJTcolPrimeColPrimePtr = matched->CSC ;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((here->BJTbasePrimeNode != 0) && (here->BJTbasePrimeNode != 0))
|
||||||
|
{
|
||||||
|
i = here->BJTbasePrimeBasePrimePtr ;
|
||||||
|
matched = (BindElement *) bsearch (&i, BindStruct, nz, sizeof(BindElement), BindCompare) ;
|
||||||
|
here->BJTbasePrimeBasePrimeStructPtr = matched ;
|
||||||
|
here->BJTbasePrimeBasePrimePtr = matched->CSC ;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((here->BJTemitPrimeNode != 0) && (here->BJTemitPrimeNode != 0))
|
||||||
|
{
|
||||||
|
i = here->BJTemitPrimeEmitPrimePtr ;
|
||||||
|
matched = (BindElement *) bsearch (&i, BindStruct, nz, sizeof(BindElement), BindCompare) ;
|
||||||
|
here->BJTemitPrimeEmitPrimeStructPtr = matched ;
|
||||||
|
here->BJTemitPrimeEmitPrimePtr = matched->CSC ;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((here->BJTsubstNode != 0) && (here->BJTsubstNode != 0))
|
||||||
|
{
|
||||||
|
i = here->BJTsubstSubstPtr ;
|
||||||
|
matched = (BindElement *) bsearch (&i, BindStruct, nz, sizeof(BindElement), BindCompare) ;
|
||||||
|
here->BJTsubstSubstStructPtr = matched ;
|
||||||
|
here->BJTsubstSubstPtr = matched->CSC ;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((here->BJTsubstConNode != 0) && (here->BJTsubstNode != 0))
|
||||||
|
{
|
||||||
|
i = here->BJTsubstConSubstPtr ;
|
||||||
|
matched = (BindElement *) bsearch (&i, BindStruct, nz, sizeof(BindElement), BindCompare) ;
|
||||||
|
here->BJTsubstConSubstStructPtr = matched ;
|
||||||
|
here->BJTsubstConSubstPtr = matched->CSC ;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((here->BJTsubstNode != 0) && (here->BJTsubstConNode != 0))
|
||||||
|
{
|
||||||
|
i = here->BJTsubstSubstConPtr ;
|
||||||
|
matched = (BindElement *) bsearch (&i, BindStruct, nz, sizeof(BindElement), BindCompare) ;
|
||||||
|
here->BJTsubstSubstConStructPtr = matched ;
|
||||||
|
here->BJTsubstSubstConPtr = matched->CSC ;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((here->BJTbaseNode != 0) && (here->BJTcolPrimeNode != 0))
|
||||||
|
{
|
||||||
|
i = here->BJTbaseColPrimePtr ;
|
||||||
|
matched = (BindElement *) bsearch (&i, BindStruct, nz, sizeof(BindElement), BindCompare) ;
|
||||||
|
here->BJTbaseColPrimeStructPtr = matched ;
|
||||||
|
here->BJTbaseColPrimePtr = matched->CSC ;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((here->BJTcolPrimeNode != 0) && (here->BJTbaseNode != 0))
|
||||||
|
{
|
||||||
|
i = here->BJTcolPrimeBasePtr ;
|
||||||
|
matched = (BindElement *) bsearch (&i, BindStruct, nz, sizeof(BindElement), BindCompare) ;
|
||||||
|
here->BJTcolPrimeBaseStructPtr = matched ;
|
||||||
|
here->BJTcolPrimeBasePtr = matched->CSC ;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return(OK);
|
|
||||||
|
return (OK) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
BJTbindCSCComplex (GENmodel *inModel, CKTcircuit *ckt)
|
||||||
|
{
|
||||||
|
BJTmodel *model = (BJTmodel *)inModel ;
|
||||||
|
BJTinstance *here ;
|
||||||
|
|
||||||
|
NG_IGNORE (ckt) ;
|
||||||
|
|
||||||
|
/* loop through all the BJT models */
|
||||||
|
for ( ; model != NULL ; model = model->BJTnextModel)
|
||||||
|
{
|
||||||
|
/* loop through all the instances of the model */
|
||||||
|
for (here = model->BJTinstances ; here != NULL ; here = here->BJTnextInstance)
|
||||||
|
{
|
||||||
|
if ((here->BJTcolNode != 0) && (here->BJTcolPrimeNode != 0))
|
||||||
|
here->BJTcolColPrimePtr = here->BJTcolColPrimeStructPtr->CSC_Complex ;
|
||||||
|
|
||||||
|
if ((here->BJTbaseNode != 0) && (here->BJTbasePrimeNode != 0))
|
||||||
|
here->BJTbaseBasePrimePtr = here->BJTbaseBasePrimeStructPtr->CSC_Complex ;
|
||||||
|
|
||||||
|
if ((here->BJTemitNode != 0) && (here->BJTemitPrimeNode != 0))
|
||||||
|
here->BJTemitEmitPrimePtr = here->BJTemitEmitPrimeStructPtr->CSC_Complex ;
|
||||||
|
|
||||||
|
if ((here->BJTcolPrimeNode != 0) && (here->BJTcolNode != 0))
|
||||||
|
here->BJTcolPrimeColPtr = here->BJTcolPrimeColStructPtr->CSC_Complex ;
|
||||||
|
|
||||||
|
if ((here->BJTcolPrimeNode != 0) && (here->BJTbasePrimeNode != 0))
|
||||||
|
here->BJTcolPrimeBasePrimePtr = here->BJTcolPrimeBasePrimeStructPtr->CSC_Complex ;
|
||||||
|
|
||||||
|
if ((here->BJTcolPrimeNode != 0) && (here->BJTemitPrimeNode != 0))
|
||||||
|
here->BJTcolPrimeEmitPrimePtr = here->BJTcolPrimeEmitPrimeStructPtr->CSC_Complex ;
|
||||||
|
|
||||||
|
if ((here->BJTbasePrimeNode != 0) && (here->BJTbaseNode != 0))
|
||||||
|
here->BJTbasePrimeBasePtr = here->BJTbasePrimeBaseStructPtr->CSC_Complex ;
|
||||||
|
|
||||||
|
if ((here->BJTbasePrimeNode != 0) && (here->BJTcolPrimeNode != 0))
|
||||||
|
here->BJTbasePrimeColPrimePtr = here->BJTbasePrimeColPrimeStructPtr->CSC_Complex ;
|
||||||
|
|
||||||
|
if ((here->BJTbasePrimeNode != 0) && (here->BJTemitPrimeNode != 0))
|
||||||
|
here->BJTbasePrimeEmitPrimePtr = here->BJTbasePrimeEmitPrimeStructPtr->CSC_Complex ;
|
||||||
|
|
||||||
|
if ((here->BJTemitPrimeNode != 0) && (here->BJTemitNode != 0))
|
||||||
|
here->BJTemitPrimeEmitPtr = here->BJTemitPrimeEmitStructPtr->CSC_Complex ;
|
||||||
|
|
||||||
|
if ((here->BJTemitPrimeNode != 0) && (here->BJTcolPrimeNode != 0))
|
||||||
|
here->BJTemitPrimeColPrimePtr = here->BJTemitPrimeColPrimeStructPtr->CSC_Complex ;
|
||||||
|
|
||||||
|
if ((here->BJTemitPrimeNode != 0) && (here->BJTbasePrimeNode != 0))
|
||||||
|
here->BJTemitPrimeBasePrimePtr = here->BJTemitPrimeBasePrimeStructPtr->CSC_Complex ;
|
||||||
|
|
||||||
|
if ((here->BJTcolNode != 0) && (here->BJTcolNode != 0))
|
||||||
|
here->BJTcolColPtr = here->BJTcolColStructPtr->CSC_Complex ;
|
||||||
|
|
||||||
|
if ((here->BJTbaseNode != 0) && (here->BJTbaseNode != 0))
|
||||||
|
here->BJTbaseBasePtr = here->BJTbaseBaseStructPtr->CSC_Complex ;
|
||||||
|
|
||||||
|
if ((here->BJTemitNode != 0) && (here->BJTemitNode != 0))
|
||||||
|
here->BJTemitEmitPtr = here->BJTemitEmitStructPtr->CSC_Complex ;
|
||||||
|
|
||||||
|
if ((here->BJTcolPrimeNode != 0) && (here->BJTcolPrimeNode != 0))
|
||||||
|
here->BJTcolPrimeColPrimePtr = here->BJTcolPrimeColPrimeStructPtr->CSC_Complex ;
|
||||||
|
|
||||||
|
if ((here->BJTbasePrimeNode != 0) && (here->BJTbasePrimeNode != 0))
|
||||||
|
here->BJTbasePrimeBasePrimePtr = here->BJTbasePrimeBasePrimeStructPtr->CSC_Complex ;
|
||||||
|
|
||||||
|
if ((here->BJTemitPrimeNode != 0) && (here->BJTemitPrimeNode != 0))
|
||||||
|
here->BJTemitPrimeEmitPrimePtr = here->BJTemitPrimeEmitPrimeStructPtr->CSC_Complex ;
|
||||||
|
|
||||||
|
if ((here->BJTsubstNode != 0) && (here->BJTsubstNode != 0))
|
||||||
|
here->BJTsubstSubstPtr = here->BJTsubstSubstStructPtr->CSC_Complex ;
|
||||||
|
|
||||||
|
if ((here->BJTsubstConNode != 0) && (here->BJTsubstNode != 0))
|
||||||
|
here->BJTsubstConSubstPtr = here->BJTsubstConSubstStructPtr->CSC_Complex ;
|
||||||
|
|
||||||
|
if ((here->BJTsubstNode != 0) && (here->BJTsubstConNode != 0))
|
||||||
|
here->BJTsubstSubstConPtr = here->BJTsubstSubstConStructPtr->CSC_Complex ;
|
||||||
|
|
||||||
|
if ((here->BJTbaseNode != 0) && (here->BJTcolPrimeNode != 0))
|
||||||
|
here->BJTbaseColPrimePtr = here->BJTbaseColPrimeStructPtr->CSC_Complex ;
|
||||||
|
|
||||||
|
if ((here->BJTcolPrimeNode != 0) && (here->BJTbaseNode != 0))
|
||||||
|
here->BJTcolPrimeBasePtr = here->BJTcolPrimeBaseStructPtr->CSC_Complex ;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return (OK) ;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
|
|
@ -340,176 +322,86 @@ BJTbindCSCComplexToReal (GENmodel *inModel, CKTcircuit *ckt)
|
||||||
{
|
{
|
||||||
BJTmodel *model = (BJTmodel *)inModel ;
|
BJTmodel *model = (BJTmodel *)inModel ;
|
||||||
BJTinstance *here ;
|
BJTinstance *here ;
|
||||||
int i ;
|
|
||||||
|
|
||||||
/* loop through all the bjt models */
|
NG_IGNORE (ckt) ;
|
||||||
|
|
||||||
|
/* loop through all the BJT models */
|
||||||
for ( ; model != NULL ; model = model->BJTnextModel)
|
for ( ; model != NULL ; model = model->BJTnextModel)
|
||||||
{
|
{
|
||||||
/* loop through all the instances of the model */
|
/* loop through all the instances of the model */
|
||||||
for (here = model->BJTinstances ; here != NULL ; here = here->BJTnextInstance)
|
for (here = model->BJTinstances ; here != NULL ; here = here->BJTnextInstance)
|
||||||
{
|
{
|
||||||
i = 0 ;
|
|
||||||
if ((here->BJTcolNode != 0) && (here->BJTcolPrimeNode != 0))
|
if ((here->BJTcolNode != 0) && (here->BJTcolPrimeNode != 0))
|
||||||
{
|
here->BJTcolColPrimePtr = here->BJTcolColPrimeStructPtr->CSC ;
|
||||||
while (here->BJTcolColPrimePtr != ckt->CKTmatrix->CKTbind_CSC_Complex [i]) i ++ ;
|
|
||||||
here->BJTcolColPrimePtr = ckt->CKTmatrix->CKTbind_CSC [i] ;
|
|
||||||
}
|
|
||||||
|
|
||||||
i = 0 ;
|
|
||||||
if ((here->BJTbaseNode != 0) && (here->BJTbasePrimeNode != 0))
|
if ((here->BJTbaseNode != 0) && (here->BJTbasePrimeNode != 0))
|
||||||
{
|
here->BJTbaseBasePrimePtr = here->BJTbaseBasePrimeStructPtr->CSC ;
|
||||||
while (here->BJTbaseBasePrimePtr != ckt->CKTmatrix->CKTbind_CSC_Complex [i]) i ++ ;
|
|
||||||
here->BJTbaseBasePrimePtr = ckt->CKTmatrix->CKTbind_CSC [i] ;
|
|
||||||
}
|
|
||||||
|
|
||||||
i = 0 ;
|
|
||||||
if ((here->BJTemitNode != 0) && (here->BJTemitPrimeNode != 0))
|
if ((here->BJTemitNode != 0) && (here->BJTemitPrimeNode != 0))
|
||||||
{
|
here->BJTemitEmitPrimePtr = here->BJTemitEmitPrimeStructPtr->CSC ;
|
||||||
while (here->BJTemitEmitPrimePtr != ckt->CKTmatrix->CKTbind_CSC_Complex [i]) i ++ ;
|
|
||||||
here->BJTemitEmitPrimePtr = ckt->CKTmatrix->CKTbind_CSC [i] ;
|
|
||||||
}
|
|
||||||
|
|
||||||
i = 0 ;
|
|
||||||
if ((here->BJTcolPrimeNode != 0) && (here->BJTcolNode != 0))
|
if ((here->BJTcolPrimeNode != 0) && (here->BJTcolNode != 0))
|
||||||
{
|
here->BJTcolPrimeColPtr = here->BJTcolPrimeColStructPtr->CSC ;
|
||||||
while (here->BJTcolPrimeColPtr != ckt->CKTmatrix->CKTbind_CSC_Complex [i]) i ++ ;
|
|
||||||
here->BJTcolPrimeColPtr = ckt->CKTmatrix->CKTbind_CSC [i] ;
|
|
||||||
}
|
|
||||||
|
|
||||||
i = 0 ;
|
|
||||||
if ((here->BJTcolPrimeNode != 0) && (here->BJTbasePrimeNode != 0))
|
if ((here->BJTcolPrimeNode != 0) && (here->BJTbasePrimeNode != 0))
|
||||||
{
|
here->BJTcolPrimeBasePrimePtr = here->BJTcolPrimeBasePrimeStructPtr->CSC ;
|
||||||
while (here->BJTcolPrimeBasePrimePtr != ckt->CKTmatrix->CKTbind_CSC_Complex [i]) i ++ ;
|
|
||||||
here->BJTcolPrimeBasePrimePtr = ckt->CKTmatrix->CKTbind_CSC [i] ;
|
|
||||||
}
|
|
||||||
|
|
||||||
i = 0 ;
|
|
||||||
if ((here->BJTcolPrimeNode != 0) && (here->BJTemitPrimeNode != 0))
|
if ((here->BJTcolPrimeNode != 0) && (here->BJTemitPrimeNode != 0))
|
||||||
{
|
here->BJTcolPrimeEmitPrimePtr = here->BJTcolPrimeEmitPrimeStructPtr->CSC ;
|
||||||
while (here->BJTcolPrimeEmitPrimePtr != ckt->CKTmatrix->CKTbind_CSC_Complex [i]) i ++ ;
|
|
||||||
here->BJTcolPrimeEmitPrimePtr = ckt->CKTmatrix->CKTbind_CSC [i] ;
|
|
||||||
}
|
|
||||||
|
|
||||||
i = 0 ;
|
|
||||||
if ((here->BJTbasePrimeNode != 0) && (here->BJTbaseNode != 0))
|
if ((here->BJTbasePrimeNode != 0) && (here->BJTbaseNode != 0))
|
||||||
{
|
here->BJTbasePrimeBasePtr = here->BJTbasePrimeBaseStructPtr->CSC ;
|
||||||
while (here->BJTbasePrimeBasePtr != ckt->CKTmatrix->CKTbind_CSC_Complex [i]) i ++ ;
|
|
||||||
here->BJTbasePrimeBasePtr = ckt->CKTmatrix->CKTbind_CSC [i] ;
|
|
||||||
}
|
|
||||||
|
|
||||||
i = 0 ;
|
|
||||||
if ((here->BJTbasePrimeNode != 0) && (here->BJTcolPrimeNode != 0))
|
if ((here->BJTbasePrimeNode != 0) && (here->BJTcolPrimeNode != 0))
|
||||||
{
|
here->BJTbasePrimeColPrimePtr = here->BJTbasePrimeColPrimeStructPtr->CSC ;
|
||||||
while (here->BJTbasePrimeColPrimePtr != ckt->CKTmatrix->CKTbind_CSC_Complex [i]) i ++ ;
|
|
||||||
here->BJTbasePrimeColPrimePtr = ckt->CKTmatrix->CKTbind_CSC [i] ;
|
|
||||||
}
|
|
||||||
|
|
||||||
i = 0 ;
|
|
||||||
if ((here->BJTbasePrimeNode != 0) && (here->BJTemitPrimeNode != 0))
|
if ((here->BJTbasePrimeNode != 0) && (here->BJTemitPrimeNode != 0))
|
||||||
{
|
here->BJTbasePrimeEmitPrimePtr = here->BJTbasePrimeEmitPrimeStructPtr->CSC ;
|
||||||
while (here->BJTbasePrimeEmitPrimePtr != ckt->CKTmatrix->CKTbind_CSC_Complex [i]) i ++ ;
|
|
||||||
here->BJTbasePrimeEmitPrimePtr = ckt->CKTmatrix->CKTbind_CSC [i] ;
|
|
||||||
}
|
|
||||||
|
|
||||||
i = 0 ;
|
|
||||||
if ((here->BJTemitPrimeNode != 0) && (here->BJTemitNode != 0))
|
if ((here->BJTemitPrimeNode != 0) && (here->BJTemitNode != 0))
|
||||||
{
|
here->BJTemitPrimeEmitPtr = here->BJTemitPrimeEmitStructPtr->CSC ;
|
||||||
while (here->BJTemitPrimeEmitPtr != ckt->CKTmatrix->CKTbind_CSC_Complex [i]) i ++ ;
|
|
||||||
here->BJTemitPrimeEmitPtr = ckt->CKTmatrix->CKTbind_CSC [i] ;
|
|
||||||
}
|
|
||||||
|
|
||||||
i = 0 ;
|
|
||||||
if ((here->BJTemitPrimeNode != 0) && (here->BJTcolPrimeNode != 0))
|
if ((here->BJTemitPrimeNode != 0) && (here->BJTcolPrimeNode != 0))
|
||||||
{
|
here->BJTemitPrimeColPrimePtr = here->BJTemitPrimeColPrimeStructPtr->CSC ;
|
||||||
while (here->BJTemitPrimeColPrimePtr != ckt->CKTmatrix->CKTbind_CSC_Complex [i]) i ++ ;
|
|
||||||
here->BJTemitPrimeColPrimePtr = ckt->CKTmatrix->CKTbind_CSC [i] ;
|
|
||||||
}
|
|
||||||
|
|
||||||
i = 0 ;
|
|
||||||
if ((here->BJTemitPrimeNode != 0) && (here->BJTbasePrimeNode != 0))
|
if ((here->BJTemitPrimeNode != 0) && (here->BJTbasePrimeNode != 0))
|
||||||
{
|
here->BJTemitPrimeBasePrimePtr = here->BJTemitPrimeBasePrimeStructPtr->CSC ;
|
||||||
while (here->BJTemitPrimeBasePrimePtr != ckt->CKTmatrix->CKTbind_CSC_Complex [i]) i ++ ;
|
|
||||||
here->BJTemitPrimeBasePrimePtr = ckt->CKTmatrix->CKTbind_CSC [i] ;
|
|
||||||
}
|
|
||||||
|
|
||||||
i = 0 ;
|
|
||||||
if ((here->BJTcolNode != 0) && (here->BJTcolNode != 0))
|
if ((here->BJTcolNode != 0) && (here->BJTcolNode != 0))
|
||||||
{
|
here->BJTcolColPtr = here->BJTcolColStructPtr->CSC ;
|
||||||
while (here->BJTcolColPtr != ckt->CKTmatrix->CKTbind_CSC_Complex [i]) i ++ ;
|
|
||||||
here->BJTcolColPtr = ckt->CKTmatrix->CKTbind_CSC [i] ;
|
|
||||||
}
|
|
||||||
|
|
||||||
i = 0 ;
|
|
||||||
if ((here->BJTbaseNode != 0) && (here->BJTbaseNode != 0))
|
if ((here->BJTbaseNode != 0) && (here->BJTbaseNode != 0))
|
||||||
{
|
here->BJTbaseBasePtr = here->BJTbaseBaseStructPtr->CSC ;
|
||||||
while (here->BJTbaseBasePtr != ckt->CKTmatrix->CKTbind_CSC_Complex [i]) i ++ ;
|
|
||||||
here->BJTbaseBasePtr = ckt->CKTmatrix->CKTbind_CSC [i] ;
|
|
||||||
}
|
|
||||||
|
|
||||||
i = 0 ;
|
|
||||||
if ((here->BJTemitNode != 0) && (here->BJTemitNode != 0))
|
if ((here->BJTemitNode != 0) && (here->BJTemitNode != 0))
|
||||||
{
|
here->BJTemitEmitPtr = here->BJTemitEmitStructPtr->CSC ;
|
||||||
while (here->BJTemitEmitPtr != ckt->CKTmatrix->CKTbind_CSC_Complex [i]) i ++ ;
|
|
||||||
here->BJTemitEmitPtr = ckt->CKTmatrix->CKTbind_CSC [i] ;
|
|
||||||
}
|
|
||||||
|
|
||||||
i = 0 ;
|
|
||||||
if ((here->BJTcolPrimeNode != 0) && (here->BJTcolPrimeNode != 0))
|
if ((here->BJTcolPrimeNode != 0) && (here->BJTcolPrimeNode != 0))
|
||||||
{
|
here->BJTcolPrimeColPrimePtr = here->BJTcolPrimeColPrimeStructPtr->CSC ;
|
||||||
while (here->BJTcolPrimeColPrimePtr != ckt->CKTmatrix->CKTbind_CSC_Complex [i]) i ++ ;
|
|
||||||
here->BJTcolPrimeColPrimePtr = ckt->CKTmatrix->CKTbind_CSC [i] ;
|
|
||||||
}
|
|
||||||
|
|
||||||
i = 0 ;
|
|
||||||
if ((here->BJTbasePrimeNode != 0) && (here->BJTbasePrimeNode != 0))
|
if ((here->BJTbasePrimeNode != 0) && (here->BJTbasePrimeNode != 0))
|
||||||
{
|
here->BJTbasePrimeBasePrimePtr = here->BJTbasePrimeBasePrimeStructPtr->CSC ;
|
||||||
while (here->BJTbasePrimeBasePrimePtr != ckt->CKTmatrix->CKTbind_CSC_Complex [i]) i ++ ;
|
|
||||||
here->BJTbasePrimeBasePrimePtr = ckt->CKTmatrix->CKTbind_CSC [i] ;
|
|
||||||
}
|
|
||||||
|
|
||||||
i = 0 ;
|
|
||||||
if ((here->BJTemitPrimeNode != 0) && (here->BJTemitPrimeNode != 0))
|
if ((here->BJTemitPrimeNode != 0) && (here->BJTemitPrimeNode != 0))
|
||||||
{
|
here->BJTemitPrimeEmitPrimePtr = here->BJTemitPrimeEmitPrimeStructPtr->CSC ;
|
||||||
while (here->BJTemitPrimeEmitPrimePtr != ckt->CKTmatrix->CKTbind_CSC_Complex [i]) i ++ ;
|
|
||||||
here->BJTemitPrimeEmitPrimePtr = ckt->CKTmatrix->CKTbind_CSC [i] ;
|
|
||||||
}
|
|
||||||
|
|
||||||
i = 0 ;
|
|
||||||
if ((here->BJTsubstNode != 0) && (here->BJTsubstNode != 0))
|
if ((here->BJTsubstNode != 0) && (here->BJTsubstNode != 0))
|
||||||
{
|
here->BJTsubstSubstPtr = here->BJTsubstSubstStructPtr->CSC ;
|
||||||
while (here->BJTsubstSubstPtr != ckt->CKTmatrix->CKTbind_CSC_Complex [i]) i ++ ;
|
|
||||||
here->BJTsubstSubstPtr = ckt->CKTmatrix->CKTbind_CSC [i] ;
|
|
||||||
}
|
|
||||||
|
|
||||||
i = 0 ;
|
|
||||||
if ((here->BJTsubstConNode != 0) && (here->BJTsubstNode != 0))
|
if ((here->BJTsubstConNode != 0) && (here->BJTsubstNode != 0))
|
||||||
{
|
here->BJTsubstConSubstPtr = here->BJTsubstConSubstStructPtr->CSC ;
|
||||||
while (here->BJTsubstConSubstPtr != ckt->CKTmatrix->CKTbind_CSC_Complex [i]) i ++ ;
|
|
||||||
here->BJTsubstConSubstPtr = ckt->CKTmatrix->CKTbind_CSC [i] ;
|
|
||||||
}
|
|
||||||
|
|
||||||
i = 0 ;
|
|
||||||
if ((here->BJTsubstNode != 0) && (here->BJTsubstConNode != 0))
|
if ((here->BJTsubstNode != 0) && (here->BJTsubstConNode != 0))
|
||||||
{
|
here->BJTsubstSubstConPtr = here->BJTsubstSubstConStructPtr->CSC ;
|
||||||
while (here->BJTsubstSubstConPtr != ckt->CKTmatrix->CKTbind_CSC_Complex [i]) i ++ ;
|
|
||||||
here->BJTsubstSubstConPtr = ckt->CKTmatrix->CKTbind_CSC [i] ;
|
|
||||||
}
|
|
||||||
|
|
||||||
i = 0 ;
|
|
||||||
if ((here->BJTbaseNode != 0) && (here->BJTcolPrimeNode != 0))
|
if ((here->BJTbaseNode != 0) && (here->BJTcolPrimeNode != 0))
|
||||||
{
|
here->BJTbaseColPrimePtr = here->BJTbaseColPrimeStructPtr->CSC ;
|
||||||
while (here->BJTbaseColPrimePtr != ckt->CKTmatrix->CKTbind_CSC_Complex [i]) i ++ ;
|
|
||||||
here->BJTbaseColPrimePtr = ckt->CKTmatrix->CKTbind_CSC [i] ;
|
|
||||||
}
|
|
||||||
|
|
||||||
i = 0 ;
|
|
||||||
if ((here->BJTcolPrimeNode != 0) && (here->BJTbaseNode != 0))
|
if ((here->BJTcolPrimeNode != 0) && (here->BJTbaseNode != 0))
|
||||||
{
|
here->BJTcolPrimeBasePtr = here->BJTcolPrimeBaseStructPtr->CSC ;
|
||||||
while (here->BJTcolPrimeBasePtr != ckt->CKTmatrix->CKTbind_CSC_Complex [i]) i ++ ;
|
|
||||||
here->BJTcolPrimeBasePtr = ckt->CKTmatrix->CKTbind_CSC [i] ;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return (OK) ;
|
return (OK) ;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -283,6 +283,33 @@ typedef struct sBJTinstance {
|
||||||
#endif /*NONOISE*/
|
#endif /*NONOISE*/
|
||||||
/* the above to avoid allocating memory when it is not needed */
|
/* the above to avoid allocating memory when it is not needed */
|
||||||
|
|
||||||
|
#ifdef KLU
|
||||||
|
BindElement *BJTcolColPrimeStructPtr ;
|
||||||
|
BindElement *BJTbaseBasePrimeStructPtr ;
|
||||||
|
BindElement *BJTemitEmitPrimeStructPtr ;
|
||||||
|
BindElement *BJTcolPrimeColStructPtr ;
|
||||||
|
BindElement *BJTcolPrimeBasePrimeStructPtr ;
|
||||||
|
BindElement *BJTcolPrimeEmitPrimeStructPtr ;
|
||||||
|
BindElement *BJTbasePrimeBaseStructPtr ;
|
||||||
|
BindElement *BJTbasePrimeColPrimeStructPtr ;
|
||||||
|
BindElement *BJTbasePrimeEmitPrimeStructPtr ;
|
||||||
|
BindElement *BJTemitPrimeEmitStructPtr ;
|
||||||
|
BindElement *BJTemitPrimeColPrimeStructPtr ;
|
||||||
|
BindElement *BJTemitPrimeBasePrimeStructPtr ;
|
||||||
|
BindElement *BJTcolColStructPtr ;
|
||||||
|
BindElement *BJTbaseBaseStructPtr ;
|
||||||
|
BindElement *BJTemitEmitStructPtr ;
|
||||||
|
BindElement *BJTcolPrimeColPrimeStructPtr ;
|
||||||
|
BindElement *BJTbasePrimeBasePrimeStructPtr ;
|
||||||
|
BindElement *BJTemitPrimeEmitPrimeStructPtr ;
|
||||||
|
BindElement *BJTsubstSubstStructPtr ;
|
||||||
|
BindElement *BJTsubstConSubstStructPtr ;
|
||||||
|
BindElement *BJTsubstSubstConStructPtr ;
|
||||||
|
BindElement *BJTsubstConSubstConStructPtr ;
|
||||||
|
BindElement *BJTbaseColPrimeStructPtr ;
|
||||||
|
BindElement *BJTcolPrimeBaseStructPtr ;
|
||||||
|
#endif
|
||||||
|
|
||||||
} BJTinstance ;
|
} BJTinstance ;
|
||||||
|
|
||||||
/* entries in the state vector for bjt: */
|
/* entries in the state vector for bjt: */
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue