allow SHE also without external temperature node
prevent crash with rth=0
This commit is contained in:
parent
7161253342
commit
88cf4bb925
|
|
@ -37,6 +37,8 @@ HICUMsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states)
|
||||||
/* loop through all the transistor models */
|
/* loop through all the transistor models */
|
||||||
for( ; model != NULL; model = HICUMnextModel(model)) {
|
for( ; model != NULL; model = HICUMnextModel(model)) {
|
||||||
|
|
||||||
|
int selfheat = ((model->HICUMflsh == 1) && (model->HICUMrthGiven) && (model->HICUMrth > 0.0));
|
||||||
|
|
||||||
//Circuit simulator specific parameters
|
//Circuit simulator specific parameters
|
||||||
if(model->HICUMtype != NPN && model->HICUMtype != PNP)
|
if(model->HICUMtype != NPN && model->HICUMtype != PNP)
|
||||||
model->HICUMtype = NPN;
|
model->HICUMtype = NPN;
|
||||||
|
|
@ -565,18 +567,13 @@ HICUMsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states)
|
||||||
here->HICUMbaseBINode = tmp->number;
|
here->HICUMbaseBINode = tmp->number;
|
||||||
}
|
}
|
||||||
|
|
||||||
//VDMOS COPY
|
if (selfheat) {
|
||||||
if (!(model->HICUMflsh == 0 || model->HICUMrth < MIN_R )) {
|
if (here->HICUMtempNode == 0) { // no external node for temperature
|
||||||
if (here->HICUMtempNode == -1) {
|
error = CKTmkVolt(ckt,&tmp,here->HICUMname,"dT"); // create internal node
|
||||||
error = CKTmkVolt(ckt,&tmp,here->HICUMname,"dT");
|
|
||||||
if (error) return(error);
|
if (error) return(error);
|
||||||
here->HICUMtempNode = tmp->number;
|
here->HICUMtempNode = tmp->number;
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
here->HICUMtempNode = 0;
|
|
||||||
}
|
}
|
||||||
//END VDMOS COPY
|
|
||||||
|
|
||||||
|
|
||||||
// if(here->HICUMxfNode == 0) {
|
// if(here->HICUMxfNode == 0) {
|
||||||
// error = CKTmkVolt(ckt, &tmp, here->HICUMname, "xf");
|
// 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(HICUMxf1Xf1Ptr,HICUMxf1Node,HICUMxf1Node);
|
||||||
// TSTALLOC(HICUMxf2Xf2Ptr,HICUMxf2Node,HICUMxf2Node);
|
// TSTALLOC(HICUMxf2Xf2Ptr,HICUMxf2Node,HICUMxf2Node);
|
||||||
|
|
||||||
if (model->HICUMflsh && model->HICUMrth>0.001) {
|
if (selfheat) {
|
||||||
TSTALLOC(HICUMcollTempPtr,HICUMcollNode,HICUMtempNode);
|
TSTALLOC(HICUMcollTempPtr, HICUMcollNode, HICUMtempNode);
|
||||||
TSTALLOC(HICUMbaseTempPtr,HICUMbaseNode,HICUMtempNode);
|
TSTALLOC(HICUMbaseTempPtr,HICUMbaseNode,HICUMtempNode);
|
||||||
TSTALLOC(HICUMemitTempPtr,HICUMemitNode,HICUMtempNode);
|
TSTALLOC(HICUMemitTempPtr,HICUMemitNode,HICUMtempNode);
|
||||||
|
|
||||||
|
|
@ -702,6 +699,8 @@ HICUMunsetup(
|
||||||
for (model = (HICUMmodel *)inModel; model != NULL;
|
for (model = (HICUMmodel *)inModel; model != NULL;
|
||||||
model = HICUMnextModel(model))
|
model = HICUMnextModel(model))
|
||||||
{
|
{
|
||||||
|
int selfheat = ((model->HICUMflsh == 1) && (model->HICUMrthGiven) && (model->HICUMrth > 0.0));
|
||||||
|
|
||||||
for (here = HICUMinstances(model); here != NULL;
|
for (here = HICUMinstances(model); here != NULL;
|
||||||
here=HICUMnextInstance(here))
|
here=HICUMnextInstance(here))
|
||||||
{
|
{
|
||||||
|
|
@ -729,6 +728,12 @@ HICUMunsetup(
|
||||||
CKTdltNNum(ckt, here->HICUMcollCINode);
|
CKTdltNNum(ckt, here->HICUMcollCINode);
|
||||||
here->HICUMcollCINode = 0;
|
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)
|
// if(here->HICUMxfNode > 0)
|
||||||
// CKTdltNNum(ckt, here->HICUMxfNode);
|
// CKTdltNNum(ckt, here->HICUMxfNode);
|
||||||
// here->HICUMxfNode = 0;
|
// here->HICUMxfNode = 0;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue