allow SHE also without external temperature node

prevent crash with rth=0
This commit is contained in:
dwarning 2020-06-17 13:24:03 +02:00
parent 7161253342
commit 88cf4bb925
1 changed files with 15 additions and 10 deletions

View File

@ -37,6 +37,8 @@ HICUMsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states)
/* loop through all the transistor models */
for( ; model != NULL; model = HICUMnextModel(model)) {
int selfheat = ((model->HICUMflsh == 1) && (model->HICUMrthGiven) && (model->HICUMrth > 0.0));
//Circuit simulator specific parameters
if(model->HICUMtype != NPN && model->HICUMtype != PNP)
model->HICUMtype = NPN;
@ -565,18 +567,13 @@ HICUMsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states)
here->HICUMbaseBINode = tmp->number;
}
//VDMOS COPY
if (!(model->HICUMflsh == 0 || model->HICUMrth < MIN_R )) {
if (here->HICUMtempNode == -1) {
error = CKTmkVolt(ckt,&tmp,here->HICUMname,"dT");
if (selfheat) {
if (here->HICUMtempNode == 0) { // no external node for temperature
error = CKTmkVolt(ckt,&tmp,here->HICUMname,"dT"); // create internal node
if (error) return(error);
here->HICUMtempNode = tmp->number;
}
} else {
here->HICUMtempNode = 0;
}
//END VDMOS COPY
// if(here->HICUMxfNode == 0) {
// error = CKTmkVolt(ckt, &tmp, here->HICUMname, "xf");
@ -663,8 +660,8 @@ do { if((here->ptr = SMPmakeElt(matrix, here->first, here->second)) == NULL){\
// TSTALLOC(HICUMxf1Xf1Ptr,HICUMxf1Node,HICUMxf1Node);
// TSTALLOC(HICUMxf2Xf2Ptr,HICUMxf2Node,HICUMxf2Node);
if (model->HICUMflsh && model->HICUMrth>0.001) {
TSTALLOC(HICUMcollTempPtr,HICUMcollNode,HICUMtempNode);
if (selfheat) {
TSTALLOC(HICUMcollTempPtr, HICUMcollNode, HICUMtempNode);
TSTALLOC(HICUMbaseTempPtr,HICUMbaseNode,HICUMtempNode);
TSTALLOC(HICUMemitTempPtr,HICUMemitNode,HICUMtempNode);
@ -702,6 +699,8 @@ HICUMunsetup(
for (model = (HICUMmodel *)inModel; model != NULL;
model = HICUMnextModel(model))
{
int selfheat = ((model->HICUMflsh == 1) && (model->HICUMrthGiven) && (model->HICUMrth > 0.0));
for (here = HICUMinstances(model); here != NULL;
here=HICUMnextInstance(here))
{
@ -729,6 +728,12 @@ HICUMunsetup(
CKTdltNNum(ckt, here->HICUMcollCINode);
here->HICUMcollCINode = 0;
if (selfheat) {
if (here->HICUMtempNode > 4) // it is an internal node
CKTdltNNum(ckt, here->HICUMtempNode);
here->HICUMtempNode = 0;
}
// if(here->HICUMxfNode > 0)
// CKTdltNNum(ckt, here->HICUMxfNode);
// here->HICUMxfNode = 0;