removed rbi fallback, removed rth_de

This commit is contained in:
Markus Mueller 2020-07-26 12:13:39 +02:00
parent 162b174acd
commit d735f445e5
7 changed files with 20 additions and 74 deletions

View File

@ -273,7 +273,6 @@ IFparm HICUMmPTable[] = { /* model parameters */
//Self-Heating
IOP("flsh", HICUM_MOD_FLSH , IF_INTEGER, "Flag for turning on and off self-heating effect"),
IOP("rth_de", HICUM_MOD_RTH_DE , IF_INTEGER, "Experimental flag for turning on and off self-heating using direct evaluation"),
IOP("rth", HICUM_MOD_RTH , IF_REAL, "Thermal resistance"),
IOP("zetarth", HICUM_MOD_ZETARTH, IF_REAL, "Temperature coefficient for Rth"),
IOP("alrth", HICUM_MOD_ALRTH , IF_REAL, "First order relative TC of parameter Rth"),

View File

@ -83,15 +83,9 @@ HICUMconvTest(GENmodel *inModel, CKTcircuit *ckt)
*(ckt->CKTrhsOld+here->HICUMemitEINode));
Vciei = Vbiei - Vbici;
//model->HICUMrth_de
if (model->HICUMrth_de==1) {
Vrth = *(ckt->CKTstate0 + here->HICUMith)*here->HICUMrth_t.rpart;
delvrth = 0;
} else {
Vrth = model->HICUMtype*(*(ckt->CKTrhsOld+here->HICUMtempNode));
delvrth = Vrth - *(ckt->CKTstate0 + here->HICUMvrth);
}
Vrth = model->HICUMtype*(*(ckt->CKTrhsOld+here->HICUMtempNode));
delvrth = Vrth - *(ckt->CKTstate0 + here->HICUMvrth);
delvbiei = Vbiei - *(ckt->CKTstate0 + here->HICUMvbiei);
delvbici = Vbici - *(ckt->CKTstate0 + here->HICUMvbici);
delvbpei = Vbpei - *(ckt->CKTstate0 + here->HICUMvbpei);

View File

@ -703,7 +703,6 @@ typedef struct sHICUMmodel { /* model structure for a hicum */
//Self-Heating
int HICUMflsh;
int HICUMrth_de;
double HICUMrth;
double HICUMzetarth;
double HICUMalrth;
@ -1084,7 +1083,6 @@ enum {
//Self-Heating
HICUM_MOD_FLSH,
HICUM_MOD_RTH_DE,
HICUM_MOD_RTH,
HICUM_MOD_ZETARTH,
HICUM_MOD_ALRTH,

View File

@ -461,9 +461,6 @@ HICUMmAsk(CKTcircuit *ckt, GENmodel *instPtr, int which, IFvalue *value)
case HICUM_MOD_FLSH:
value->iValue = model->HICUMflsh;
return(OK);
case HICUM_MOD_RTH_DE:
value->iValue = model->HICUMrth_de;
return(OK);
case HICUM_MOD_RTH:
value->rValue = model->HICUMrth;
return(OK);

View File

@ -590,10 +590,6 @@ HICUMmParam(int param, IFvalue *value, GENmodel *inModel)
model->HICUMflsh = value->iValue;
model->HICUMflshGiven = TRUE;
break;
case HICUM_MOD_RTH_DE:
model->HICUMrth_de = value->iValue;
model->HICUMrth_deGiven = TRUE;
break;
case HICUM_MOD_RTH:
model->HICUMrth = value->rValue;
model->HICUMrthGiven = TRUE;

View File

@ -445,8 +445,6 @@ HICUMsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states)
//Self-Heating
if(!model->HICUMflshGiven)
model->HICUMflsh = 0;
if(!model->HICUMrth_deGiven)
model->HICUMrth_de = 0;
if(!model->HICUMrthGiven)
model->HICUMrth = 0.0;

View File

@ -1219,11 +1219,7 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
Vxf1 = *(ckt->CKTrhsOld + here->HICUMxf1Node);
Vxf2 = *(ckt->CKTrhsOld + here->HICUMxf2Node);
if (selfheat) {
if (model->HICUMrth_de == 1) {
Vrth = *(ckt->CKTstate0 + here->HICUMith)*here->HICUMrth_t.rpart;
} else {
Vrth = *(ckt->CKTstate0 + here->HICUMvrth);
}
Vrth = *(ckt->CKTstate0 + here->HICUMvrth);
}
} else if(ckt->CKTmode & MODEINITTRAN) {
Vbiei = *(ckt->CKTstate1 + here->HICUMvbiei);
@ -1262,11 +1258,7 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
Vxf1 = *(ckt->CKTrhsOld + here->HICUMxf1Node);
Vxf2 = *(ckt->CKTrhsOld + here->HICUMxf2Node);
if (selfheat) {
if (model->HICUMrth_de == 1) {
Vrth = *(ckt->CKTstate1 + here->HICUMith)*here->HICUMrth_t.rpart;
} else {
Vrth = *(ckt->CKTstate1 + here->HICUMvrth);
}
Vrth = *(ckt->CKTstate1 + here->HICUMvrth);
}
} else if((ckt->CKTmode & MODEINITJCT) &&
(ckt->CKTmode & MODETRANOP) && (ckt->CKTmode & MODEUIC)){
@ -1510,11 +1502,7 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
Vxf2 = *(ckt->CKTrhsOld + here->HICUMxf2Node);
Vciei = Vbiei - Vbici;
if (selfheat) {
if (model->HICUMrth_de==1) {
Vrth = *(ckt->CKTstate0 + here->HICUMith)*here->HICUMrth_t.rpart;
} else {
Vrth = *(ckt->CKTrhsOld + here->HICUMtempNode);
}
Vrth = *(ckt->CKTrhsOld + here->HICUMtempNode);
}
#ifndef PREDICTOR
@ -1567,11 +1555,7 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
Vxf1 = *(ckt->CKTrhsOld + here->HICUMxf1Node);
Vxf2 = *(ckt->CKTrhsOld + here->HICUMxf2Node);
if (selfheat) {
if (model->HICUMrth_de==1) {
Vrth = *(ckt->CKTstate0 + here->HICUMith)*here->HICUMrth_t.rpart;
} else {
Vrth = *(ckt->CKTrhsOld + here->HICUMtempNode);
}
Vrth = *(ckt->CKTrhsOld + here->HICUMtempNode);
}
ibieihat = *(ckt->CKTstate0 + here->HICUMibiei) +
*(ckt->CKTstate0 + here->HICUMibiei_Vbiei)*delvbiei+
@ -1778,20 +1762,20 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
Vbiei = DEVpnjlim(Vbiei,*(ckt->CKTstate0 + here->HICUMvbiei),here->HICUMvt.rpart,
here->HICUMtVcrit,&icheck);
Vaval = 3 * here->HICUMvdci_t.rpart;//limit step around 3*vdci_t -> somehow this brings convergence
if ((model->HICUMkavlGiven) && (Vbici < MIN(0, -Vaval))) {
Vbici_temp = -(Vbici + Vaval);
Vbici_temp = DEVpnjlim(
Vbici_temp,
-(*(ckt->CKTstate0 + here->HICUMvbici) + Vaval),
here->HICUMvt.rpart,
here->HICUMtVcrit,
&ichk1
);
Vbici = -(Vbici_temp + Vaval);
} else {
// if ((model->HICUMkavlGiven) && (Vbici < MIN(0, -Vaval))) {
// Vbici_temp = -(Vbici + Vaval);
// Vbici_temp = DEVpnjlim(
// Vbici_temp,
// -(*(ckt->CKTstate0 + here->HICUMvbici) + Vaval),
// here->HICUMvt.rpart,
// here->HICUMtVcrit,
// &ichk1
// );
// Vbici = -(Vbici_temp + Vaval);
// } else {
Vbici = DEVpnjlim(Vbici,*(ckt->CKTstate0 + here->HICUMvbici),here->HICUMvt.rpart,
here->HICUMtVcrit,&ichk1);
}
//}
Vbpei = DEVpnjlim(Vbpei,*(ckt->CKTstate0 + here->HICUMvbpei),here->HICUMvt.rpart,
here->HICUMtVcrit,&ichk2);
Vbpci = DEVpnjlim(Vbpci,*(ckt->CKTstate0 + here->HICUMvbpci),here->HICUMvt.rpart,
@ -1982,10 +1966,6 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
it_Vbici = itf_Vbici - itr_Vbici;
it_dT = itf_dT - itr_dT;
if (isnan(it)) {
it=0;
}
//end final calculations --------------------------------------------------
here->HICUMtf = Tf;
@ -2355,23 +2335,14 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
Ibpbi_Vbiei = -Vbpbi * rbi_Vbiei / (rbi*rbi);
Ibpbi_Vbici = -Vbpbi * rbi_Vbici / (rbi*rbi);
Ibpbi_Vrth = -Vbpbi * rbi_dT / (rbi*rbi);
} else if(rbi >0.0 ) {
} else {
// fallback in case rbi is low
Ibpbi = Vbpbi / MIN_R;
Ibpbi_Vbpbi = 1 / MIN_R;
Ibpbi_Vbiei = 0;
Ibpbi_Vbici = 0;
Ibpbi_Vrth = 0;
}
else {
// fallback in case rbi is not zero, but smaller than MIN_R
Ibpbi = 0;
Ibpbi_Vbpbi = 0;
Ibpbi_Vbiei = 0;
Ibpbi_Vbici = 0;
Ibpbi_Vrth = 0;
}
};
// ********************************************
// For simulators having no problem with Vrth) <+ 0.0
@ -2392,8 +2363,6 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
Ith_Vrth = 0.0;
if(!selfheat) {
Ith = 0;
} else if (model->HICUMrth_de==1) {
Ith = -Vrth/here->HICUMrth_t.rpart+pterm; //Current from gnd to T
} else {
Ith = -Vrth/here->HICUMrth_t.rpart+pterm; //Current from gnd to T
@ -3212,10 +3181,6 @@ load:
if (selfheat) {
if (model->HICUMrth_de == 1) {
*(here->HICUMtempTempPtr) += 1;
*(ckt->CKTrhs + here->HICUMtempNode) += Vrth;
} else {
// #############################################################
// ############### STAMP WITH SH ADDITIONS #####################
// #############################################################
@ -3387,7 +3352,6 @@ load:
*(here->HICUMtempEmitEIPtr) += -Ith_Veie;
*(here->HICUMtempEmitPtr) += +Ith_Veie;
// finish
}
}
}