hicumL2 load -> remove stamp for rbi, if node BP BI collapsed

This commit is contained in:
Markus Mueller 2020-07-24 11:17:33 +02:00
parent 00f51465e3
commit f5461183f3
1 changed files with 44 additions and 31 deletions

View File

@ -936,7 +936,7 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
if(Qf > 0.0) {
rbi = rbi*(Qjei+Qf*model->HICUMfqi)/(Qjei+Qf);
}
} else {
} else {
rbi = 0.0;
}
return rbi;
@ -2363,7 +2363,7 @@ 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 {
} else if(rbi >0.0 ) {
// fallback in case rbi is low
Ibpbi = Vbpbi / MIN_R;
Ibpbi_Vbpbi = 1 / MIN_R;
@ -2371,6 +2371,15 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
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;
}
// Following code is an intermediate solution (if branch contribution is not supported):
// ******************************************
@ -3119,27 +3128,29 @@ load:
*(here->HICUMemitEmitEIPtr) += -Ieie_Veie;
// finish
// Branch: bpbi, Stamp element: Rbi, Crbi
rhs_current = model->HICUMtype * (Ibpbi - Ibpbi_Vbpbi*Vbpbi - Ibpbi_Vbiei*Vbiei - Ibpbi_Vbici*Vbici);
*(ckt->CKTrhs + here->HICUMbaseBPNode) += -rhs_current;
*(ckt->CKTrhs + here->HICUMbaseBINode) += rhs_current;
//f_Bp = + f_Bi = -
// with respect to Vbpbi
*(here->HICUMbaseBPBaseBPPtr) += Ibpbi_Vbpbi;
*(here->HICUMbaseBIBaseBIPtr) += Ibpbi_Vbpbi;
*(here->HICUMbaseBPBaseBIPtr) += -Ibpbi_Vbpbi;
*(here->HICUMbaseBIBaseBPPtr) += -Ibpbi_Vbpbi;
// with respect to Vbiei
*(here->HICUMbaseBPBaseBIPtr) += Ibpbi_Vbiei;
*(here->HICUMbaseBIEmitEIPtr) += Ibpbi_Vbiei;
*(here->HICUMbaseBPEmitEIPtr) += -Ibpbi_Vbiei;
*(here->HICUMbaseBIBaseBIPtr) += -Ibpbi_Vbiei;
// with respect to Vbici
*(here->HICUMbaseBPBaseBIPtr) += Ibpbi_Vbici;
*(here->HICUMbaseBICollCIPtr) += Ibpbi_Vbici;
*(here->HICUMbaseBPCollCIPtr) += -Ibpbi_Vbici;
*(here->HICUMbaseBIBaseBIPtr) += -Ibpbi_Vbici;
// finish
if (rbi>0.0) {
// Branch: bpbi, Stamp element: Rbi, Crbi
rhs_current = model->HICUMtype * (Ibpbi - Ibpbi_Vbpbi*Vbpbi - Ibpbi_Vbiei*Vbiei - Ibpbi_Vbici*Vbici);
*(ckt->CKTrhs + here->HICUMbaseBPNode) += -rhs_current;
*(ckt->CKTrhs + here->HICUMbaseBINode) += rhs_current;
//f_Bp = + f_Bi = -
// with respect to Vbpbi
*(here->HICUMbaseBPBaseBPPtr) += Ibpbi_Vbpbi;
*(here->HICUMbaseBIBaseBIPtr) += Ibpbi_Vbpbi;
*(here->HICUMbaseBPBaseBIPtr) += -Ibpbi_Vbpbi;
*(here->HICUMbaseBIBaseBPPtr) += -Ibpbi_Vbpbi;
// with respect to Vbiei
*(here->HICUMbaseBPBaseBIPtr) += Ibpbi_Vbiei;
*(here->HICUMbaseBIEmitEIPtr) += Ibpbi_Vbiei;
*(here->HICUMbaseBPEmitEIPtr) += -Ibpbi_Vbiei;
*(here->HICUMbaseBIBaseBIPtr) += -Ibpbi_Vbiei;
// with respect to Vbici
*(here->HICUMbaseBPBaseBIPtr) += Ibpbi_Vbici;
*(here->HICUMbaseBICollCIPtr) += Ibpbi_Vbici;
*(here->HICUMbaseBPCollCIPtr) += -Ibpbi_Vbici;
*(here->HICUMbaseBIBaseBIPtr) += -Ibpbi_Vbici;
// finish
}
// Branch: sici, Stamp element: Ijsc
rhs_current = model->HICUMtype * (Isici - Isici_Vsici*Vsici);
@ -3295,14 +3306,16 @@ load:
*(here->HICUMemitTempPtr) += -Ieie_Vrth;
// finish
// Stamp element: Rbi f_Bp = + f_Bi = -
rhs_current = -Ibpbi_Vrth*Vrth;
*(ckt->CKTrhs + here->HICUMbaseBPNode) += -rhs_current;
*(ckt->CKTrhs + here->HICUMbaseBINode) += rhs_current;
// with respect to Potential Vrth
*(here->HICUMbaseBPtempPtr) += Ibpbi_Vrth;
*(here->HICUMbaseBItempPtr) += -Ibpbi_Vrth;
// finish
if (rbi>0.0) {
// Stamp element: Rbi f_Bp = + f_Bi = -
rhs_current = -Ibpbi_Vrth*Vrth;
*(ckt->CKTrhs + here->HICUMbaseBPNode) += -rhs_current;
*(ckt->CKTrhs + here->HICUMbaseBINode) += rhs_current;
// with respect to Potential Vrth
*(here->HICUMbaseBPtempPtr) += Ibpbi_Vrth;
*(here->HICUMbaseBItempPtr) += -Ibpbi_Vrth;
// finish
};
// Stamp element: Isici f_Si = + f_Ci = -
rhs_current = -Isici_Vrth*Vrth;