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
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;
|
|
}
|