You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

73 lines
2.3 KiB

/**********
License : 3-clause BSD
Spice3 Implementation: 2019-2020 Dietmar Warning, Markus Müller, Mario Krattenmacher
Model Author : 1990 Michael Schröter TU Dresden
**********/
#include "ngspice/ngspice.h"
#include "ngspice/cktdefs.h"
#include "hicum2defs.h"
#include "ngspice/trandefs.h"
#include "ngspice/sperror.h"
#include "ngspice/suffix.h"
#include "ngspice/cpdefs.h"
int
HICUMsoaCheck(CKTcircuit *ckt, GENmodel *inModel)
{
HICUMmodel *model = (HICUMmodel *) inModel;
HICUMinstance *here;
double vbe, vbc, vce; /* actual bjt voltages */
int maxwarns;
static int warns_vbe = 0, warns_vbc = 0, warns_vce = 0;
if (!ckt) {
warns_vbe = 0;
warns_vbc = 0;
warns_vce = 0;
return OK;
}
maxwarns = ckt->CKTsoaMaxWarns;
for (; model; model = HICUMnextModel(model)) {
for (here = HICUMinstances(model); here; here=HICUMnextInstance(here)) {
vbe = fabs(ckt->CKTrhsOld [here->HICUMbaseNode] -
ckt->CKTrhsOld [here->HICUMemitNode]);
vbc = fabs(ckt->CKTrhsOld [here->HICUMbaseNode] -
ckt->CKTrhsOld [here->HICUMcollNode]);
vce = fabs(ckt->CKTrhsOld [here->HICUMcollNode] -
ckt->CKTrhsOld [here->HICUMemitNode]);
if (vbe > model->HICUMvbeMax)
if (warns_vbe < maxwarns) {
soa_printf(ckt, (GENinstance*) here,
"|Vbe|=%g has exceeded Vbe_max=%g\n",
vbe, model->HICUMvbeMax);
warns_vbe++;
}
if (vbc > model->HICUMvbcMax)
if (warns_vbc < maxwarns) {
soa_printf(ckt, (GENinstance*) here,
"|Vbc|=%g has exceeded Vbc_max=%g\n",
vbc, model->HICUMvbcMax);
warns_vbc++;
}
if (vce > model->HICUMvceMax)
if (warns_vce < maxwarns) {
soa_printf(ckt, (GENinstance*) here,
"|Vce|=%g has exceeded Vce_max=%g\n",
vce, model->HICUMvceMax);
warns_vce++;
}
}
}
return OK;
}