Prevent arithmetic overflow and reduce operations

This commit is contained in:
dwarning 2021-10-31 14:47:04 +01:00 committed by Holger Vogt
parent 87b9df6681
commit ba9f5be52c
1 changed files with 10 additions and 7 deletions

View File

@ -131,10 +131,13 @@ BJTload(GENmodel *inModel, CKTcircuit *ckt)
double vrci=0.0, delvrci;
double Irci=0.0, Irci_Vrci=0.0, Irci_Vbci=0.0, Irci_Vbcx=0.0;
double Qbci=0.0, Qbci_Vbci=0.0, Qbcx, Qbcx_Vbcx=0.0, gbcx, cbcx;
int ttype;
/* loop through all the models */
for( ; model != NULL; model = BJTnextModel(model)) {
ttype = model->BJTtype*model->BJTsubs;
/* loop through all the instances of the model */
for (here = BJTinstances(model); here != NULL ;
here=BJTnextInstance(here)) {
@ -179,7 +182,7 @@ BJTload(GENmodel *inModel, CKTcircuit *ckt)
vbx=model->BJTtype*(
*(ckt->CKTrhsOp+here->BJTbaseNode)-
*(ckt->CKTrhsOp+here->BJTcolPrimeNode));
vsub=model->BJTtype*model->BJTsubs*(
vsub=ttype*(
*(ckt->CKTrhsOp+here->BJTsubstNode)-
*(ckt->CKTrhsOp+here->BJTsubstConNode));
}
@ -193,7 +196,7 @@ BJTload(GENmodel *inModel, CKTcircuit *ckt)
vbx=model->BJTtype*(
*(ckt->CKTrhsOld+here->BJTbaseNode)-
*(ckt->CKTrhsOld+here->BJTcolPrimeNode));
vsub=model->BJTtype*model->BJTsubs*(
vsub=ttype*(
*(ckt->CKTrhsOld+here->BJTsubstNode)-
*(ckt->CKTrhsOld+here->BJTsubstConNode));
}
@ -201,7 +204,7 @@ BJTload(GENmodel *inModel, CKTcircuit *ckt)
vbx=model->BJTtype*(
*(ckt->CKTrhsOp+here->BJTbaseNode)-
*(ckt->CKTrhsOp+here->BJTcolPrimeNode));
vsub=model->BJTtype*model->BJTsubs*(
vsub=ttype*(
*(ckt->CKTrhsOp+here->BJTsubstNode)-
*(ckt->CKTrhsOp+here->BJTsubstConNode));
}
@ -221,7 +224,7 @@ BJTload(GENmodel *inModel, CKTcircuit *ckt)
vbx=model->BJTtype*(
*(ckt->CKTrhsOld+here->BJTbaseNode)-
*(ckt->CKTrhsOld+here->BJTcolPrimeNode));
vsub=model->BJTtype*model->BJTsubs*(
vsub=ttype*(
*(ckt->CKTrhsOld+here->BJTsubstNode)-
*(ckt->CKTrhsOld+here->BJTsubstConNode));
} else if(ckt->CKTmode & MODEINITTRAN) {
@ -232,7 +235,7 @@ BJTload(GENmodel *inModel, CKTcircuit *ckt)
vbx=model->BJTtype*(
*(ckt->CKTrhsOld+here->BJTbaseNode)-
*(ckt->CKTrhsOld+here->BJTcolPrimeNode));
vsub=model->BJTtype*model->BJTsubs*(
vsub=ttype*(
*(ckt->CKTrhsOld+here->BJTsubstNode)-
*(ckt->CKTrhsOld+here->BJTsubstConNode));
if( (ckt->CKTmode & MODETRAN) && (ckt->CKTmode & MODEUIC) ) {
@ -331,7 +334,7 @@ BJTload(GENmodel *inModel, CKTcircuit *ckt)
vbx=model->BJTtype*(
*(ckt->CKTrhsOld+here->BJTbaseNode)-
*(ckt->CKTrhsOld+here->BJTcolPrimeNode));
vsub=model->BJTtype*model->BJTsubs*(
vsub=ttype*(
*(ckt->CKTrhsOld+here->BJTsubstNode)-
*(ckt->CKTrhsOld+here->BJTsubstConNode));
cchat= *(ckt->CKTstate0 + here->BJTcc)+(*(ckt->CKTstate0 +
@ -882,7 +885,7 @@ load:
* load current excitation vector
*/
geqsub = gcsub + gdsub;
ceqsub=model->BJTtype * model->BJTsubs *
ceqsub=ttype *
(*(ckt->CKTstate0 + here->BJTcqsub) + cdsub - vsub*geqsub);
ceqbx=model->BJTtype * (*(ckt->CKTstate0 + here->BJTcqbx) -
vbx * geqbx);