first implementation of NQS, not tested
This commit is contained in:
parent
4fd24db766
commit
1c5773292e
|
|
@ -235,8 +235,27 @@ typedef struct sHICUMinstance {
|
|||
|
||||
/* excess phase */
|
||||
double *HICUMxfXfPtr;
|
||||
double *HICUMxfBaseBIPtr;
|
||||
double *HICUMxfEmitEIPtr;
|
||||
double *HICUMxfCollCIPtr;
|
||||
double *HICUMxfTempPtr;
|
||||
|
||||
double *HICUMxf1Xf1Ptr;
|
||||
double *HICUMxf1TempPtr;
|
||||
double *HICUMxf1BaseBIPtr;
|
||||
double *HICUMxf1EmitEIPtr;
|
||||
double *HICUMxf1CollCIPtr;
|
||||
double *HICUMxf1Xf2Ptr;
|
||||
|
||||
double *HICUMxf2Xf1Ptr;
|
||||
double *HICUMxf2TempPtr;
|
||||
double *HICUMxf2BaseBIPtr;
|
||||
double *HICUMxf2EmitEIPtr;
|
||||
double *HICUMxf2CollCIPtr;
|
||||
double *HICUMxf2Xf2Ptr;
|
||||
double *HICUMemitXf2Ptr;
|
||||
double *HICUMemitEIXf2Ptr;
|
||||
double *HICUMcollCIXf2Ptr;
|
||||
|
||||
/* self heating */
|
||||
double *HICUMcollTempPtr;
|
||||
|
|
|
|||
|
|
@ -656,9 +656,27 @@ do { if((here->ptr = SMPmakeElt(matrix, here->first, here->second)) == NULL){\
|
|||
TSTALLOC(HICUMsubsCollPtr,HICUMsubsNode,HICUMcollNode); //s-c
|
||||
TSTALLOC(HICUMcollSubsPtr,HICUMcollNode,HICUMsubsNode); //c-s
|
||||
|
||||
// TSTALLOC(HICUMxfXfPtr,HICUMxfNode,HICUMxfNode);
|
||||
// TSTALLOC(HICUMxf1Xf1Ptr,HICUMxf1Node,HICUMxf1Node);
|
||||
// TSTALLOC(HICUMxf2Xf2Ptr,HICUMxf2Node,HICUMxf2Node);
|
||||
TSTALLOC(HICUMxf1Xf1Ptr,HICUMxf1Node,HICUMxf1Node);
|
||||
TSTALLOC(HICUMxf1TempPtr,HICUMxf1Node,HICUMtempNode);
|
||||
TSTALLOC(HICUMxf1BaseBIPtr,HICUMxf1Node,HICUMbaseBINode);
|
||||
TSTALLOC(HICUMxf1EmitEIPtr,HICUMxf1Node,HICUMemitEINode);
|
||||
TSTALLOC(HICUMxf1CollCIPtr,HICUMxf1Node,HICUMcollCINode);
|
||||
TSTALLOC(HICUMxf1Xf2Ptr,HICUMxf1Node,HICUMxf2Node);
|
||||
|
||||
TSTALLOC(HICUMxf2Xf1Ptr,HICUMxf1Node,HICUMxf1Node);
|
||||
TSTALLOC(HICUMxf2TempPtr,HICUMxf1Node,HICUMtempNode);
|
||||
TSTALLOC(HICUMxf2BaseBIPtr,HICUMxf1Node,HICUMbaseBINode);
|
||||
TSTALLOC(HICUMxf2EmitEIPtr,HICUMxf1Node,HICUMemitEINode);
|
||||
TSTALLOC(HICUMxf2CollCIPtr,HICUMxf1Node,HICUMcollCINode);
|
||||
TSTALLOC(HICUMxf2Xf2Ptr,HICUMxf1Node,HICUMxf2Node);
|
||||
TSTALLOC(HICUMemitEIXf2Ptr,HICUMemitEINode,HICUMxf2Node);
|
||||
TSTALLOC(HICUMcollCIXf2Ptr,HICUMcollCINode,HICUMxf2Node);
|
||||
|
||||
TSTALLOC(HICUMxfXfPtr,HICUMxfNode,HICUMxfNode);
|
||||
TSTALLOC(HICUMxfTempPtr,HICUMxfNode,HICUMtempNode);
|
||||
TSTALLOC(HICUMxfEmitEIPtr,HICUMxfNode,HICUMemitEINode);
|
||||
TSTALLOC(HICUMxfCollCIPtr,HICUMxfNode,HICUMcollCINode);
|
||||
TSTALLOC(HICUMxfBaseBIPtr,HICUMxfNode,HICUMbaseBINode);
|
||||
|
||||
if (selfheat) {
|
||||
TSTALLOC(HICUMcollTempPtr, HICUMcollNode, HICUMtempNode);
|
||||
|
|
@ -729,22 +747,22 @@ HICUMunsetup(
|
|||
here->HICUMcollCINode = 0;
|
||||
|
||||
if (selfheat) {
|
||||
if (here->HICUMtempNode > 5) // it is an internal node
|
||||
CKTdltNNum(ckt, here->HICUMtempNode);
|
||||
here->HICUMtempNode = 0;
|
||||
// if (here->HICUMtempNode > 5) // it is an internal node
|
||||
// CKTdltNNum(ckt, here->HICUMtempNode);
|
||||
// here->HICUMtempNode = 0;
|
||||
}
|
||||
|
||||
// if(here->HICUMxfNode > 0)
|
||||
// CKTdltNNum(ckt, here->HICUMxfNode);
|
||||
// here->HICUMxfNode = 0;
|
||||
//
|
||||
// if(here->HICUMxf1Node > 0)
|
||||
// CKTdltNNum(ckt, here->HICUMxf1Node);
|
||||
// here->HICUMxf1Node = 0;
|
||||
//
|
||||
// if(here->HICUMxf2Node > 0)
|
||||
// CKTdltNNum(ckt, here->HICUMxf2Node);
|
||||
// here->HICUMxf2Node = 0;
|
||||
if(here->HICUMxfNode > 0)
|
||||
CKTdltNNum(ckt, here->HICUMxfNode);
|
||||
here->HICUMxfNode = 0;
|
||||
|
||||
if(here->HICUMxf1Node > 0)
|
||||
CKTdltNNum(ckt, here->HICUMxf1Node);
|
||||
here->HICUMxf1Node = 0;
|
||||
|
||||
if(here->HICUMxf2Node > 0)
|
||||
CKTdltNNum(ckt, here->HICUMxf2Node);
|
||||
here->HICUMxf2Node = 0;
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -400,6 +400,7 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
|||
//Charges, capacitances and currents
|
||||
double Qjci,Qjei,Qjep;
|
||||
double Qdei,Qrbi;
|
||||
double Qdei_Vbiei, Qdei_Vbici, Qdei_dT;
|
||||
double it,ibei,irei,ibci,ibep,irep,ibh_rec;
|
||||
double volatile ibet,iavl,iavl_ditf,iavl_dT,iavl_Vbiei,iavl_dCjci;
|
||||
double ijbcx,ijbcx_dT,ijbcx_Vbpci,ijsc,ijsc_Vsici,ijsc_Vrth,Qjs,Qscp,HSI_Tsu,Qdsu;
|
||||
|
|
@ -442,13 +443,15 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
|||
double ick, ick_Vciei, ick_dT;//,cjcx01;//,cjcx02;
|
||||
|
||||
//NQS
|
||||
double Ixf1,Ixf2,Qxf1,Qxf2;
|
||||
double Ixf1_Vxf2, Ixf1_ditf, Ixf1_dTf, Ixf1_Vbiei, Ixf1_Vbici, Ixf1_dT;
|
||||
double Ixf2_Vxf1, Ixf2_Vbiei, Ixf2_Vbici, Ixf2_dT;
|
||||
double Ixf_Vxf, Ixf_Tf,Ixf_Qdei,Ixf_Vbiei, Ixf_Vbici, Ixf_dT;
|
||||
double Ixf2_Vxf2, Ixf2_dTf;
|
||||
double Ixf1=0,Ixf2=0,Qxf1,Qxf2;
|
||||
double Ixf1_Vxf1=0, Ixf1_Vxf2=0, Ixf1_ditf=0, Ixf1_dTf, Ixf1_Vbiei=0, Ixf1_Vbici=0, Ixf1_dT=0;
|
||||
double Ixf2_Vxf1=0, Ixf2_Vbiei=0, Ixf2_Vbici=0, Ixf2_dT=0;
|
||||
double Ixf_Vxf=0, Ixf_Tf,Ixf_Qdei,Ixf_Vbiei=0, Ixf_Vbici=0, Ixf_dT=0;
|
||||
double Ixf2_Vxf2=0, Ixf2_dTf;
|
||||
double Itxf, Qdeix;
|
||||
double Qxf, Ixf, Vxf;
|
||||
double Itxf_Vxf2, Itxf_Vbici, Itxf_Vbiei, Itxf_dT;
|
||||
double Qdeix_Vxf, Qdeix_dT, Qdeix_Vbici, Qdeix_Vbiei;
|
||||
double Qxf, Ixf=0, Vxf;
|
||||
double Vxf1, Vxf2;
|
||||
|
||||
double hjei_vbe;
|
||||
|
|
@ -481,7 +484,7 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
|||
double ceq, geq=0.0;
|
||||
double volatile rhs_current;
|
||||
int icheck=1;
|
||||
int ichk1, ichk2, ichk3, ichk4, ichk5;
|
||||
int ichk1, ichk2, ichk3, ichk4, ichk5, ichk6, ichk7, ichk8;
|
||||
int error;
|
||||
double Vbe, Vcic, Vbbp, Veie, Vsis, Vbpe;
|
||||
|
||||
|
|
@ -491,7 +494,7 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
|||
double Ibpci=0, Ibpci_Vbpci;
|
||||
double Isici, Isici_Vsici;//
|
||||
double Isc=0, Isc_Vsc=0;
|
||||
double volatile Iciei, Iciei_Vbiei, Iciei_Vbici, Iciei_Vrth;
|
||||
double volatile Iciei, Iciei_Vbiei, Iciei_Vbici, Iciei_Vrth, Iciei_Vxf2;
|
||||
double Ibbp_Vbbp=0;
|
||||
double Isis_Vsis;
|
||||
double Ieie, Ieie_Veie=0;
|
||||
|
|
@ -539,9 +542,8 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
|||
double cqsu, gqsu;
|
||||
|
||||
//NQS
|
||||
double Vbxf, Vbxf1, Vbxf2;
|
||||
double Qxf_Vxf, Qxf1_Vxf1, Qxf2_Vxf2;
|
||||
// double Iqxf, Iqxf_Vxf, Iqxf1, Iqxf1_Vxf1, Iqxf2, Iqxf2_Vxf2; //not needed withouth NQS
|
||||
double Iqxf=0, Iqxf_Vxf=0, Iqxf1=0, Iqxf1_Vxf1=0, Iqxf2=0, Iqxf2_Vxf2=0; //not needed withouth NQS, initialized with 0 here
|
||||
|
||||
double volatile Ith=0, Vrth=0, Icth, Icth_Vrth, delvrth;
|
||||
|
||||
|
|
@ -1297,9 +1299,9 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
|||
Vsis = model->HICUMtype*(
|
||||
*(ckt->CKTrhsOld+here->HICUMsubsSINode)-
|
||||
*(ckt->CKTrhsOld+here->HICUMsubsNode));
|
||||
Vbxf = *(ckt->CKTrhsOld + here->HICUMxfNode);
|
||||
Vbxf1 = *(ckt->CKTrhsOld + here->HICUMxf1Node);
|
||||
Vbxf2 = *(ckt->CKTrhsOld + here->HICUMxf2Node);
|
||||
Vxf = *(ckt->CKTrhsOld + here->HICUMxfNode);
|
||||
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;
|
||||
|
|
@ -1340,9 +1342,9 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
|||
Vsis = model->HICUMtype*(
|
||||
*(ckt->CKTrhsOld+here->HICUMsubsSINode)-
|
||||
*(ckt->CKTrhsOld+here->HICUMsubsNode));
|
||||
Vbxf = *(ckt->CKTrhsOld + here->HICUMxfNode);
|
||||
Vbxf1 = *(ckt->CKTrhsOld + here->HICUMxf1Node);
|
||||
Vbxf2 = *(ckt->CKTrhsOld + here->HICUMxf2Node);
|
||||
Vxf = *(ckt->CKTrhsOld + here->HICUMxfNode);
|
||||
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;
|
||||
|
|
@ -1368,7 +1370,7 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
|||
Vsc=Vsici=0.0;
|
||||
Vsis=0.0;
|
||||
Icth=0.0,Icth_Vrth=0.0;
|
||||
Vbxf=Vbxf1=Vbxf2=0.0;
|
||||
Vxf=Vxf1=Vxf2=0.0;
|
||||
} else if((ckt->CKTmode & MODEINITJCT) && (here->HICUMoff==0)) {
|
||||
Vbe = here->HICUMicVB-here->HICUMicVE;
|
||||
Vbiei = here->HICUMicVBi-here->HICUMicVEi; //here was a hicumtype before, why?
|
||||
|
|
@ -1386,7 +1388,7 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
|||
Vsc=Vsici=0.0;
|
||||
Vsis=0.0;
|
||||
Icth=0.0,Icth_Vrth=0.0;
|
||||
Vbxf=Vbxf1=Vbxf2=0.0;
|
||||
Vxf=Vxf1=Vxf2=0.0;
|
||||
} else if((ckt->CKTmode & MODEINITJCT) ||
|
||||
( (ckt->CKTmode & MODEINITFIX) && (here->HICUMoff!=0))) {
|
||||
Vbe=0.0;
|
||||
|
|
@ -1398,7 +1400,7 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
|||
Vbpbi=Vbbp=Vbpe=0.0;
|
||||
Vcic=Veie=Vsis=0.0;
|
||||
Vrth=0.0,Icth=0.0,Icth_Vrth=0.0;
|
||||
Vbxf=Vbxf1=Vbxf2=0.0;
|
||||
Vxf=Vxf1=Vxf2=0.0;
|
||||
} else {
|
||||
#ifndef PREDICTOR
|
||||
if(ckt->CKTmode & MODEINITPRED) {
|
||||
|
|
@ -1416,11 +1418,11 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
|||
xfact * *(ckt->CKTstate2 + here->HICUMvsici);
|
||||
Vbpbi = (1+xfact) * *(ckt->CKTstate1 + here->HICUMvbpbi)-
|
||||
xfact * *(ckt->CKTstate2 + here->HICUMvbpbi);
|
||||
Vbxf = (1+xfact) * *(ckt->CKTstate1 + here->HICUMvxf)-
|
||||
Vxf = (1+xfact) * *(ckt->CKTstate1 + here->HICUMvxf)-
|
||||
xfact * *(ckt->CKTstate2 + here->HICUMvxf);
|
||||
Vbxf1 = (1+xfact) * *(ckt->CKTstate1 + here->HICUMvxf1)-
|
||||
Vxf1 = (1+xfact) * *(ckt->CKTstate1 + here->HICUMvxf1)-
|
||||
xfact * *(ckt->CKTstate2 + here->HICUMvxf1);
|
||||
Vbxf2 = (1+xfact) * *(ckt->CKTstate1 + here->HICUMvxf2)-
|
||||
Vxf2 = (1+xfact) * *(ckt->CKTstate1 + here->HICUMvxf2)-
|
||||
xfact * *(ckt->CKTstate2 + here->HICUMvxf2);
|
||||
Vrth = (1+xfact) * *(ckt->CKTstate1 + here->HICUMvrth);
|
||||
Veie = (1+xfact) * *(ckt->CKTstate1 + here->HICUMveie)-
|
||||
|
|
@ -1603,9 +1605,9 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
|||
Vsici = model->HICUMtype*(
|
||||
*(ckt->CKTrhsOld+here->HICUMsubsSINode)-
|
||||
*(ckt->CKTrhsOld+here->HICUMcollCINode));
|
||||
Vbxf = *(ckt->CKTrhsOld + here->HICUMxfNode);
|
||||
Vbxf1 = *(ckt->CKTrhsOld + here->HICUMxf1Node);
|
||||
Vbxf2 = *(ckt->CKTrhsOld + here->HICUMxf2Node);
|
||||
Vxf = *(ckt->CKTrhsOld + here->HICUMxfNode);
|
||||
Vxf1 = *(ckt->CKTrhsOld + here->HICUMxf1Node);
|
||||
Vxf2 = *(ckt->CKTrhsOld + here->HICUMxf2Node);
|
||||
Vciei = Vbiei - Vbici;
|
||||
if (selfheat) {
|
||||
if (model->HICUMrth_de==1) {
|
||||
|
|
@ -1660,9 +1662,9 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
|||
Vsis = model->HICUMtype*(
|
||||
*(ckt->CKTrhsOld+here->HICUMsubsSINode)-
|
||||
*(ckt->CKTrhsOld+here->HICUMsubsNode));
|
||||
Vbxf = *(ckt->CKTrhsOld + here->HICUMxfNode);
|
||||
Vbxf1 = *(ckt->CKTrhsOld + here->HICUMxf1Node);
|
||||
Vbxf2 = *(ckt->CKTrhsOld + here->HICUMxf2Node);
|
||||
Vxf = *(ckt->CKTrhsOld + here->HICUMxfNode);
|
||||
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;
|
||||
|
|
@ -1794,6 +1796,9 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
|||
Vbbp = *(ckt->CKTstate0 + here->HICUMvbbp);
|
||||
Veie = *(ckt->CKTstate0 + here->HICUMveie);
|
||||
Vrth = *(ckt->CKTstate0 + here->HICUMvrth);
|
||||
Vxf = *(ckt->CKTstate0 + here->HICUMvxf);
|
||||
Vxf1 = *(ckt->CKTstate0 + here->HICUMvxf1);
|
||||
Vxf2 = *(ckt->CKTstate0 + here->HICUMvxf2);
|
||||
|
||||
Ibiei = *(ckt->CKTstate0 + here->HICUMibiei);
|
||||
Ibiei_Vbiei = *(ckt->CKTstate0 + here->HICUMibiei_Vbiei);
|
||||
|
|
@ -1807,7 +1812,7 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
|||
Iciei = *(ckt->CKTstate0 + here->HICUMiciei);
|
||||
Iciei_Vbiei = *(ckt->CKTstate0 + here->HICUMiciei_Vbiei);
|
||||
Iciei_Vbici = *(ckt->CKTstate0 + here->HICUMiciei_Vbici);
|
||||
Iciei_Vrth = *(ckt->CKTstate0 + here->HICUMiciei_Vrth);
|
||||
Iciei_Vrth = *(ckt->CKTstate0 + here->HICUMiciei_Vrth);
|
||||
|
||||
Ibici = *(ckt->CKTstate0 + here->HICUMibici);
|
||||
Ibici_Vbici = *(ckt->CKTstate0 + here->HICUMibici_Vbici);
|
||||
|
|
@ -1847,7 +1852,7 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
|||
/*
|
||||
* limit nonlinear branch voltages
|
||||
*/
|
||||
ichk1 = 1, ichk2 = 1, ichk3 = 1, ichk4 = 1, ichk5 = 0;
|
||||
ichk1 = 1, ichk2 = 1, ichk3 = 1, ichk4 = 1, ichk5 = 1, ichk6=1, ichk7=1, ichk8=0;
|
||||
Vbiei = DEVpnjlim(Vbiei,*(ckt->CKTstate0 + here->HICUMvbiei),here->HICUMvt.rpart,
|
||||
here->HICUMtVcrit,&icheck);
|
||||
Vbici = DEVpnjlim(Vbici,*(ckt->CKTstate0 + here->HICUMvbici),here->HICUMvt.rpart,
|
||||
|
|
@ -1858,12 +1863,18 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
|||
here->HICUMtVcrit,&ichk3);
|
||||
Vsici = DEVpnjlim(Vsici,*(ckt->CKTstate0 + here->HICUMvsici),here->HICUMvt.rpart,
|
||||
here->HICUMtVcrit,&ichk4);
|
||||
Vxf = DEVpnjlim(Vxf,*(ckt->CKTstate0 + here->HICUMvxf),here->HICUMvt.rpart,
|
||||
here->HICUMtVcrit,&ichk5);
|
||||
Vxf1 = DEVpnjlim(Vxf1,*(ckt->CKTstate0 + here->HICUMvxf1),here->HICUMvt.rpart,
|
||||
here->HICUMtVcrit,&ichk6);
|
||||
Vxf2 = DEVpnjlim(Vxf2,*(ckt->CKTstate0 + here->HICUMvxf2),here->HICUMvt.rpart,
|
||||
here->HICUMtVcrit,&ichk7);
|
||||
if (selfheat) {
|
||||
ichk5 = 1;
|
||||
ichk8 = 1;
|
||||
Vrth = HICUMlimitlog(Vrth,
|
||||
*(ckt->CKTstate0 + here->HICUMvrth),100,&ichk5);
|
||||
*(ckt->CKTstate0 + here->HICUMvrth),100,&ichk8);
|
||||
}
|
||||
if ((ichk1 == 1) || (ichk2 == 1) || (ichk3 == 1) || (ichk4 == 1) || (ichk5 == 1)) icheck=1;
|
||||
if ((ichk1 == 1) || (ichk2 == 1) || (ichk3 == 1) || (ichk4 == 1) || (ichk5 == 1)|| (ichk6 == 1)|| (ichk7 == 1)|| (ichk8 == 1)) icheck=1;
|
||||
}
|
||||
/*
|
||||
* determine dc current and derivatives
|
||||
|
|
@ -1877,6 +1888,9 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
|||
Vbci = model->HICUMtype*Vbci;
|
||||
Vsici = model->HICUMtype*Vsici;
|
||||
Vsc = model->HICUMtype*Vsc;
|
||||
// Vxf = model->HICUMtype*Vxf;
|
||||
// Vxf1 = model->HICUMtype*Vxf1;
|
||||
// Vxf2 = model->HICUMtype*Vxf2;
|
||||
//Vrth not needed
|
||||
|
||||
if (selfheat) { // Thermal_update_with_self_heating
|
||||
|
|
@ -2247,6 +2261,8 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
|||
itf_Vbici -= itf_Vciei;
|
||||
itr_Vbiei += itr_Vciei;
|
||||
itr_Vbici -= itr_Vciei;
|
||||
Qf_Vbiei += Qf_Vciei;
|
||||
Qf_Vbici -= Qf_Vciei;
|
||||
|
||||
// finally the transfer current
|
||||
it = itf-itr;
|
||||
|
|
@ -2266,7 +2282,10 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
|||
//Once the delay in ITF is considered, IT_NQS is calculated afterwards
|
||||
|
||||
//Diffusion charges for further use (remember derivatives if this will be used somebday)
|
||||
Qdei = Qf;
|
||||
Qdei = Qf;
|
||||
Qdei_Vbici = Qf_Vbici;
|
||||
Qdei_Vbiei = Qf_Vbiei;
|
||||
Qdei_dT = Qf_dT;
|
||||
//Qdci = Qr; //we just use Qr herein
|
||||
|
||||
//High-frequency emitter current crowding (lateral NQS)
|
||||
|
|
@ -2398,8 +2417,8 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
|||
rbi_dQf = result.dpart();
|
||||
here->HICUMrbi = rbi;
|
||||
|
||||
rbi_Vbiei = rbi_dQjei* Qjei_Vbiei + rbi_dQf *(Qf_Vbiei+Qf_Vciei) ;
|
||||
rbi_Vbici = rbi_dQf * (Qf_Vbici-Qf_Vciei);
|
||||
rbi_Vbiei = rbi_dQjei* Qjei_Vbiei + rbi_dQf *(Qf_Vbiei) ;
|
||||
rbi_Vbici = rbi_dQf * (Qf_Vbici);
|
||||
rbi_dT += rbi_dQjei*Qjei_dT + rbi_dQf*Qf_dT;
|
||||
|
||||
//Base currents across peripheral b-e junction
|
||||
|
|
@ -2505,21 +2524,25 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
|||
}
|
||||
here->HICUMpterm = pterm;
|
||||
|
||||
Itxf = itf;
|
||||
Qdeix = Qdei;
|
||||
Itxf = itf;
|
||||
Itxf_Vbici = itf_Vbici;
|
||||
Itxf_Vbiei = itf_Vbiei;
|
||||
Itxf_dT = itf_dT;
|
||||
Itxf_Vxf2 = 0.0;
|
||||
Qdeix = Qdei;
|
||||
Qdeix_Vbiei = Qdei_Vbiei;
|
||||
Qdeix_Vbici = Qdei_Vbici;
|
||||
Qdeix_dT = Qdei_dT;
|
||||
Qdeix_Vxf = 0.0;
|
||||
|
||||
// Excess Phase calculation
|
||||
|
||||
if ((model->HICUMflnqs != 0 || model->HICUMflcomp == 0.0 || model->HICUMflcomp == 2.1) && Tf != 0 && (model->HICUMalit > 0 || model->HICUMalqf > 0)) {
|
||||
Vxf1 = Vbxf1;
|
||||
Vxf2 = Vbxf2;
|
||||
|
||||
Ixf1 = (Vxf2-itf)/Tf*model->HICUMt0;
|
||||
Ixf1 = (Vxf2-itf)/Tf*model->HICUMt0;
|
||||
Ixf1_Vxf2 = 1.0/Tf*model->HICUMt0;
|
||||
Ixf1_ditf = -1.0/Tf*model->HICUMt0;
|
||||
Ixf1_ditf = -Ixf1_Vxf2;
|
||||
Ixf1_dTf = -Ixf1/Tf; //Tf(Vbiei,Vciei=Vbiei-Vbici)
|
||||
Ixf1_Vbiei = Ixf1_ditf*itf_Vbiei + Ixf1_dTf*Tf_Vbiei + Ixf1_dTf*Tf_Vciei;
|
||||
Ixf1_Vbici = Ixf1_ditf*itf_Vbici + Ixf1_dTf*Tf_Vbici - Ixf1_dTf*Tf_Vciei;
|
||||
Ixf1_Vbiei = Ixf1_ditf*itf_Vbiei + Ixf1_dTf*(Tf_Vbiei + Tf_Vciei);
|
||||
Ixf1_Vbici = Ixf1_ditf*itf_Vbici + Ixf1_dTf*(Tf_Vbici - Tf_Vciei);
|
||||
Ixf1_dT = Ixf1_ditf*itf_dT + Ixf1_dTf*Tf_dT;
|
||||
|
||||
Ixf2 = (Vxf2-Vxf1)/Tf*model->HICUMt0;
|
||||
|
|
@ -2530,35 +2553,65 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
|||
Ixf2_Vbici = Ixf2_dTf*(Tf_Vbici-Tf_Vciei);
|
||||
Ixf2_dT = Ixf2_dTf*Tf_dT;
|
||||
|
||||
Qxf1 = model->HICUMalit*model->HICUMt0*Vxf1;
|
||||
Qxf1_Vxf1 = model->HICUMalit*model->HICUMt0;
|
||||
Qxf2 = model->HICUMalit*model->HICUMt0*Vxf2/3;
|
||||
Qxf2_Vxf2 = model->HICUMalit*model->HICUMt0/3;
|
||||
Itxf = Vxf2;
|
||||
Qxf1 = model->HICUMalit*model->HICUMt0*Vxf1;
|
||||
Qxf1_Vxf1 = model->HICUMalit*model->HICUMt0;
|
||||
Qxf2 = model->HICUMalit*model->HICUMt0*Vxf2/3;
|
||||
Qxf2_Vxf2 = model->HICUMalit*model->HICUMt0/3;
|
||||
|
||||
Itxf = Vxf2;
|
||||
Itxf_Vbiei = 0;
|
||||
Itxf_Vbici = 0;
|
||||
Itxf_dT = 0;
|
||||
Itxf_Vxf2 = 1.0;
|
||||
|
||||
Vxf = Vbxf; //for RC nw
|
||||
Ixf = (Vxf - Qdei)*model->HICUMt0/Tf; //for RC nw
|
||||
Ixf_Vxf = Vxf*model->HICUMt0/Tf;
|
||||
Ixf_Vxf = 1.0*model->HICUMt0/Tf;
|
||||
Ixf_Qdei = -Ixf_Vxf;
|
||||
Ixf_Tf = -Ixf/Tf;
|
||||
Ixf_Qdei = -1.0/model->HICUMt0/Tf;
|
||||
Ixf_Vbiei = Ixf_Tf*(Tf_Vbiei+Tf_Vciei) + Ixf_Vbiei*(Qf_Vbiei+Qf_Vciei);
|
||||
Ixf_Vbici = Ixf_Tf*(Tf_Vbici-Tf_Vciei) + Ixf_Qdei*(Qf_Vbici-Qf_Vciei);
|
||||
Ixf_dT = Ixf_Tf*Tf_dT + Ixf_Qdei*Qf_dT;
|
||||
Ixf_Vbiei = Ixf_Tf*(Tf_Vbiei+Tf_Vciei) + Ixf_Vbiei*Qf_Vbiei;
|
||||
Ixf_Vbici = Ixf_Tf*(Tf_Vbici-Tf_Vciei) + Ixf_Qdei *Qf_Vbici;
|
||||
Ixf_dT = Ixf_Tf*Tf_dT + Ixf_Qdei*Qdei_dT;
|
||||
|
||||
Qxf = model->HICUMalqf*model->HICUMt0*Vxf; //for RC nw
|
||||
Qxf_Vxf = model->HICUMalqf*model->HICUMt0; //for RC nw
|
||||
Qdeix = Vxf; //for RC nw
|
||||
Qxf = model->HICUMalqf*model->HICUMt0*Vxf; //for RC nw
|
||||
Qxf_Vxf = model->HICUMalqf*model->HICUMt0; //for RC nw
|
||||
|
||||
Qdeix = Vxf; //for RC nw
|
||||
Qdeix_Vxf = 1.0;
|
||||
} else {
|
||||
Ixf1 = Vbxf1;
|
||||
Ixf2 = Vbxf2;
|
||||
Qxf1 = 0;
|
||||
Qxf2 = 0;
|
||||
Qxf1_Vxf1 = 0;
|
||||
Qxf2_Vxf2 = 0;
|
||||
Ixf1 = Vxf1;
|
||||
Ixf1_Vxf1 = 1.0;
|
||||
Ixf1_Vxf2 = 0;
|
||||
Ixf1_ditf = 0;
|
||||
Ixf1_dTf = 0;
|
||||
Ixf1_Vbiei = 0;
|
||||
Ixf1_Vbici = 0;
|
||||
Ixf1_dT = 0;
|
||||
|
||||
Ixf2 = Vxf2;
|
||||
Ixf2_Vxf2 = 0;
|
||||
Ixf2_Vxf1 = 0;
|
||||
Ixf2_dTf = 0;
|
||||
Ixf2_Vbiei = 0;
|
||||
Ixf2_Vbici = 0;
|
||||
Ixf2_dT = 0;
|
||||
|
||||
Qxf1 = 0;
|
||||
Qxf1_Vxf1 = 0;
|
||||
|
||||
Qxf2 = 0;
|
||||
Qxf2_Vxf2 = 0;
|
||||
|
||||
Ixf = Vxf;
|
||||
Ixf_Vxf = 1.0;
|
||||
Ixf_Tf = 0;
|
||||
Ixf_Qdei = 0;
|
||||
Ixf_Vbiei = 0;
|
||||
Ixf_Vbici = 0;
|
||||
Ixf_dT = 0;
|
||||
|
||||
Qxf = 0;
|
||||
Qxf_Vxf = 0;
|
||||
|
||||
Ixf = Vbxf;
|
||||
Qxf = 0;
|
||||
Qxf_Vxf = 0;
|
||||
}
|
||||
|
||||
// end of Model_evaluation
|
||||
|
|
@ -2621,10 +2674,11 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
|||
Isici_Vsici = model->HICUMtype*ijsc_Vsici;
|
||||
Isici_Vrth = model->HICUMtype*ijsc_Vrth;
|
||||
|
||||
Iciei = model->HICUMtype*it;
|
||||
Iciei_Vbiei = model->HICUMtype*it_Vbiei;
|
||||
Iciei_Vbici = model->HICUMtype*it_Vbici;
|
||||
Iciei_Vrth = model->HICUMtype*it_dT;
|
||||
Iciei = model->HICUMtype*(Itxf - itr);
|
||||
Iciei_Vbiei = model->HICUMtype*(Itxf_Vbiei - itr_Vbiei);
|
||||
Iciei_Vbici = model->HICUMtype*(Itxf_Vbici - itr_Vbici);
|
||||
Iciei_Vrth = model->HICUMtype*(Itxf_dT - itr_dT);
|
||||
Iciei_Vxf2 = model->HICUMtype*Itxf_Vxf2;
|
||||
|
||||
if (rbi >= MIN_R) {
|
||||
Ibpbi = Vbpbi / rbi;
|
||||
|
|
@ -2791,6 +2845,7 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
|||
Ibici_Vrth += ckt->CKTgmin;
|
||||
//Iciei
|
||||
Iciei_Vrth += ckt->CKTgmin;
|
||||
Iciei_Vxf2 += ckt->CKTgmin;
|
||||
//Ibpei
|
||||
Ibpei_Vrth += ckt->CKTgmin;
|
||||
// Ibpbi
|
||||
|
|
@ -2858,10 +2913,10 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
|||
*(ckt->CKTstate0 + here->HICUMcqjei) = Qjei_Vbiei;
|
||||
*(ckt->CKTstate0 + here->HICUMqjei_Vrth) = Qjei_dT;
|
||||
//Qf
|
||||
*(ckt->CKTstate0 + here->HICUMqf) = Qf;
|
||||
*(ckt->CKTstate0 + here->HICUMcqf) = Qf_Vbiei;
|
||||
*(ckt->CKTstate0 + here->HICUMqf_Vbici) = Qf_Vbici;
|
||||
*(ckt->CKTstate0 + here->HICUMqf_Vrth) = Qf_dT;
|
||||
*(ckt->CKTstate0 + here->HICUMqf) = Qdeix;
|
||||
*(ckt->CKTstate0 + here->HICUMcqf) = Qdeix_Vbiei;
|
||||
*(ckt->CKTstate0 + here->HICUMqf_Vbici) = Qdeix_Vbici;
|
||||
*(ckt->CKTstate0 + here->HICUMqf_Vrth) = Qdeix_dT;
|
||||
//Qr
|
||||
*(ckt->CKTstate0 + here->HICUMqr) = Qr;
|
||||
*(ckt->CKTstate0 + here->HICUMcqr) = Qr_Vbici;
|
||||
|
|
@ -2944,9 +2999,9 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
|||
if(ckt->CKTmode & MODEINITSMSIG) {
|
||||
|
||||
//TODO (transient not yet implented)
|
||||
*(ckt->CKTstate0 + here->HICUMcqf) = Qf_Vbiei;
|
||||
*(ckt->CKTstate0 + here->HICUMqf_Vbici) = Qf_Vbici;
|
||||
*(ckt->CKTstate0 + here->HICUMqf_Vrth) = Qf_dT;
|
||||
*(ckt->CKTstate0 + here->HICUMcqf) = Qdeix_Vbiei;
|
||||
*(ckt->CKTstate0 + here->HICUMqf_Vbici) = Qdeix_Vbici;
|
||||
*(ckt->CKTstate0 + here->HICUMqf_Vrth) = Qdeix_dT;
|
||||
|
||||
*(ckt->CKTstate0 + here->HICUMcqjei) = Cjei;
|
||||
*(ckt->CKTstate0 + here->HICUMcqjci) = Cjci;
|
||||
|
|
@ -3030,8 +3085,8 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
|||
if(error) return(error);
|
||||
Ibiei_Vbiei += geq;
|
||||
Ibiei += *(ckt->CKTstate0 + here->HICUMcqjei);
|
||||
//Qf
|
||||
error = NIintegrate(ckt,&geq,&ceq,Cdei,here->HICUMqf);
|
||||
//Qdeix
|
||||
error = NIintegrate(ckt,&geq,&ceq,Qdeix_Vbiei,here->HICUMqf);
|
||||
if(error) return(error);
|
||||
Ibiei_Vbiei += geq;
|
||||
Ibiei += *(ckt->CKTstate0 + here->HICUMcqf);
|
||||
|
|
@ -3076,21 +3131,20 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
|||
Isc_Vsc = geq;
|
||||
Isc = *(ckt->CKTstate0 + here->HICUMcqscp);
|
||||
//NQS
|
||||
// Iqxf1 <+ ddt(Qxf1);
|
||||
// error = NIintegrate(ckt,&geq,&ceq,Qxf1_Vxf1,here->HICUMqxf);
|
||||
// if(error) return(error);
|
||||
// Iqxf1_Vxf1 = geq;
|
||||
// Iqxf1 = *(ckt->CKTstate0 + here->HICUMcqxf1);
|
||||
// Iqxf2 <+ ddt(Qxf2);
|
||||
// error = NIintegrate(ckt,&geq,&ceq,Qxf2_Vxf2,here->HICUMqxf);
|
||||
// if(error) return(error);
|
||||
// Iqxf2_Vxf2 = geq;
|
||||
// Iqxf2 = *(ckt->CKTstate0 + here->HICUMcqxf2);
|
||||
// Iqxf += ddt(Qxf); //for RC nw
|
||||
// error = NIintegrate(ckt,&geq,&ceq,Qxf_Vxf,here->HICUMqxf);
|
||||
// if(error) return(error);
|
||||
// Iqxf_Vxf = geq;
|
||||
// Iqxf = *(ckt->CKTstate0 + here->HICUMcqxf);
|
||||
error = NIintegrate(ckt,&geq,&ceq,Qxf1_Vxf1,here->HICUMqxf);
|
||||
if(error) return(error);
|
||||
Iqxf1_Vxf1 = geq;
|
||||
Iqxf1 = *(ckt->CKTstate0 + here->HICUMcqxf1);
|
||||
//Qxf2
|
||||
error = NIintegrate(ckt,&geq,&ceq,Qxf2_Vxf2,here->HICUMqxf);
|
||||
if(error) return(error);
|
||||
Iqxf2_Vxf2 = geq;
|
||||
Iqxf2 = *(ckt->CKTstate0 + here->HICUMcqxf2);
|
||||
//Qxf
|
||||
error = NIintegrate(ckt,&geq,&ceq,Qxf_Vxf,here->HICUMqxf);
|
||||
if(error) return(error);
|
||||
Iqxf_Vxf = geq;
|
||||
Iqxf = *(ckt->CKTstate0 + here->HICUMcqxf);
|
||||
|
||||
if (selfheat)
|
||||
{
|
||||
|
|
@ -3207,6 +3261,7 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
|||
*(ckt->CKTstate0 + here->HICUMiciei_Vbiei) = Iciei_Vbiei;
|
||||
*(ckt->CKTstate0 + here->HICUMiciei_Vbici) = Iciei_Vbici;
|
||||
*(ckt->CKTstate0 + here->HICUMiciei_Vrth) = Iciei_Vrth;
|
||||
//*(ckt->CKTstate0 + here->HICUMiciei_Vxf2) = Iciei_Vxf2;
|
||||
|
||||
*(ckt->CKTstate0 + here->HICUMibici) = Ibici;
|
||||
*(ckt->CKTstate0 + here->HICUMibici_Vbici) = Ibici_Vbici;
|
||||
|
|
@ -3369,7 +3424,7 @@ load:
|
|||
// finish
|
||||
|
||||
// Branch: ciei, Stamp element: It
|
||||
rhs_current = model->HICUMtype * (Iciei - Iciei_Vbiei*Vbiei - Iciei_Vbici*Vbici);
|
||||
rhs_current = model->HICUMtype * (Iciei - Iciei_Vbiei*Vbiei - Iciei_Vbici*Vbici- Iciei_Vxf2*Vxf2);
|
||||
*(ckt->CKTrhs + here->HICUMcollCINode) += -rhs_current;
|
||||
*(ckt->CKTrhs + here->HICUMemitEINode) += rhs_current;
|
||||
// with respect to Vbiei f_CI = + f_EI = -
|
||||
|
|
@ -3382,6 +3437,9 @@ load:
|
|||
*(here->HICUMemitEICollCIPtr) += Iciei_Vbici;
|
||||
*(here->HICUMcollCICollCIPtr) += -Iciei_Vbici;
|
||||
*(here->HICUMemitEIBaseBIPtr) += -Iciei_Vbici;
|
||||
// with respect to Vxf2
|
||||
*(here->HICUMcollCIXf2Ptr) += Iciei_Vxf2;
|
||||
*(here->HICUMemitEIXf2Ptr) += -Iciei_Vxf2;
|
||||
// finish
|
||||
|
||||
// Branch: bci, Stamp element: Qbcx
|
||||
|
|
@ -3499,67 +3557,69 @@ load:
|
|||
*(here->HICUMsubsSubsSIPtr) += -Isis_Vsis;
|
||||
// finish
|
||||
|
||||
//NQS
|
||||
/*
|
||||
c Branch: xf1-ground, Stamp element: Ixf1
|
||||
*/
|
||||
// rhs_current = (Ixf1 - Ixf1_Vxf1*Vxf1 - Ixf1_dT*Vrth - Ixf1_Vbiei*Vbiei - Ixf1_Vbici*Vbici - Ixf1_Vxf2*Vxf2); // TODO
|
||||
// rhs_current = Ixf1;
|
||||
// *(ckt->CKTrhs + here->HICUMxf1Node) += 0; // rhs_current; // into xf1 node
|
||||
// *(here->HICUMxf1TempPtr) += -Ixf1_dT;
|
||||
// *(here->HICUMxf1BaseBIPtr) += -Ixf1_Vbiei;
|
||||
// *(here->HICUMxf1EmitEIPtr) += +Ixf1_Vbiei;
|
||||
// *(here->HICUMxf1BaseBIPtr) += -Ixf1_Vbici;
|
||||
// *(here->HICUMxf1CollCIPtr) += +Ixf1_Vbici;
|
||||
// *(here->HICUMxf1Xf2Ptr) += +Ixf1_Vxf2;
|
||||
/*
|
||||
c Branch: xf1-ground, Stamp element: Qxf1 // TODO Test in AC simulation!
|
||||
*/
|
||||
// rhs_current = Iqxf1 - Iqxf1_Vxf1*Vxf1;
|
||||
// *(ckt->CKTrhs + here->HICUMxf1Node) += rhs_current; // into ground
|
||||
// *(here->HICUMxf1Xf1Ptr) += Iqxf1_Vxf1;
|
||||
// NQS effect
|
||||
// I(br_bxf1) <+ Ixf1;
|
||||
// I(br_cxf1) <+ ddt(Qxf1);
|
||||
// I(br_bxf2) <+ Ixf2;
|
||||
// I(br_cxf2) <+ ddt(Qxf2);
|
||||
|
||||
// I(br_bxf) <+ Ixf; //for RC nw
|
||||
// I(br_cxf) <+ ddt(Qxf); //for RC nw
|
||||
|
||||
// Branch: xf1-ground, Stamp element: Ixf1 f_xf1=+ //Markus has opposite sign than Dietmar. This current flows from xf1 to ground?
|
||||
rhs_current = Ixf1 - Ixf1_Vbici*Vbici - Ixf1_Vbiei*Vbiei -Ixf1_dT*Vrth -Ixf1_Vxf1*Vxf1 - Ixf1_Vxf2*Vxf2;
|
||||
*(ckt->CKTrhs + here->HICUMxf1Node) += -rhs_current; // rhs_current; // into xf1 node
|
||||
*(here->HICUMxf1TempPtr) += Ixf1_dT;
|
||||
*(here->HICUMxf1BaseBIPtr) += +Ixf1_Vbiei;
|
||||
*(here->HICUMxf1EmitEIPtr) += -Ixf1_Vbiei;
|
||||
*(here->HICUMxf1BaseBIPtr) += +Ixf1_Vbici;
|
||||
*(here->HICUMxf1CollCIPtr) += -Ixf1_Vbici;
|
||||
*(here->HICUMxf1Xf2Ptr) += +Ixf1_Vxf2;
|
||||
*(here->HICUMxf1Xf1Ptr) += +Ixf1_Vxf1;
|
||||
|
||||
// Branch: xf2-ground, Stamp element: Ixf2 f_xf2=+ //Markus has opposite sign than Dietmar. This current flows from xf1 to ground?
|
||||
rhs_current = Ixf2 - Ixf2_dT*Vrth - Ixf2_Vbici*Vbici - Ixf2_Vbiei*Vbiei - Ixf2_Vxf1*Vxf1 - Ixf2_Vxf2*Vxf2;
|
||||
*(ckt->CKTrhs + here->HICUMxf2Node) += -rhs_current; // rhs_current; // into xf2 node
|
||||
*(here->HICUMxf2TempPtr) += Ixf2_dT;
|
||||
*(here->HICUMxf2BaseBIPtr) += +Ixf2_Vbiei;
|
||||
*(here->HICUMxf2EmitEIPtr) += -Ixf2_Vbiei;
|
||||
*(here->HICUMxf2BaseBIPtr) += +Ixf2_Vbici;
|
||||
*(here->HICUMxf2CollCIPtr) += -Ixf2_Vbici;
|
||||
*(here->HICUMxf2Xf2Ptr) += +Ixf2_Vxf2;
|
||||
*(here->HICUMxf2Xf1Ptr) += +Ixf2_Vxf1;
|
||||
|
||||
// Branch: xf-ground, Stamp element: Ixf f_xf=+ //Markus has opposite sign than Dietmar. This current flows from xf1 to ground?
|
||||
rhs_current = Ixf - Ixf_Vbici*Vbici - Ixf_Vbiei*Vbiei - Ixf_Vxf*Vxf- Ixf_dT;
|
||||
*(ckt->CKTrhs + here->HICUMxfNode) += -rhs_current; // rhs_current; // into xf2 node
|
||||
*(here->HICUMxfTempPtr) += Ixf_dT;
|
||||
*(here->HICUMxfBaseBIPtr) += +Ixf_Vbiei;
|
||||
*(here->HICUMxfEmitEIPtr) += -Ixf_Vbiei;
|
||||
*(here->HICUMxfBaseBIPtr) += +Ixf_Vbici;
|
||||
*(here->HICUMxfCollCIPtr) += -Ixf_Vbici;
|
||||
*(here->HICUMxfXfPtr) += +Ixf_Vxf;
|
||||
// Branch: xf1-ground, Stamp element: Qxf1 // TODO Test in AC simulation!
|
||||
rhs_current = Iqxf1 - Iqxf1_Vxf1*Vxf1;
|
||||
*(ckt->CKTrhs + here->HICUMxf1Node) += -rhs_current;
|
||||
*(here->HICUMxf1Xf1Ptr) += +Iqxf1_Vxf1;
|
||||
// Branch: xf2-ground, Stamp element: Qxf2 // TODO Test in AC simulation!
|
||||
rhs_current = Iqxf2 - Iqxf2_Vxf2*Vxf2;
|
||||
*(ckt->CKTrhs + here->HICUMxf2Node) += -rhs_current;
|
||||
*(here->HICUMxf2Xf2Ptr) += +Iqxf2_Vxf2;
|
||||
// Branch: xf-ground, Stamp element: Qxf // TODO Test in AC simulation!
|
||||
rhs_current = model->HICUMtype * (Iqxf - Iqxf_Vxf*Vxf);
|
||||
*(ckt->CKTrhs + here->HICUMxfNode) += -rhs_current; // into ground
|
||||
*(here->HICUMxfXfPtr) += +Iqxf_Vxf;
|
||||
/*
|
||||
c Branch: xf1-ground, Stamp element: Rxf1 TODO: This is wrong, but needed at the moment for convergence
|
||||
*/
|
||||
// *(here->HICUMxf1Xf1Ptr) += 1; // current Ixf1 is normalized to Tf
|
||||
/*
|
||||
c Branch: xf2-ground, Stamp element: Ixf2
|
||||
*/
|
||||
// rhs_current = (Ixf2 - Ixf2_Vxf1*Vxf1 - Ixf2_dT*Vrth - Ixf2_Vbiei*Vbiei - Ixf2_Vbici*Vbici - Ixf2_Vxf2*Vxf2); // TODO
|
||||
// rhs_current = Ixf2;
|
||||
// *(ckt->CKTrhs + here->HICUMxf2Node) += rhs_current; // into xf2 node
|
||||
// *(here->HICUMxf2TempPtr) += -Ixf2_dT;
|
||||
// *(here->HICUMxf2BaseBIPtr) += -Ixf2_Vbiei;
|
||||
// *(here->HICUMxf2EmitEIPtr) += +Ixf2_Vbiei;
|
||||
// *(here->HICUMxf2BaseBIPtr) += -Ixf2_Vbici;
|
||||
// *(here->HICUMxf2CollCIPtr) += +Ixf2_Vbici;
|
||||
/*
|
||||
c Branch: xf2-ground, Stamp element: Qxf2 // TODO Test in AC simulation!
|
||||
*/
|
||||
// rhs_current = Iqxf2 - Iqxf2_Vxf2*Vxf2;
|
||||
// *(ckt->CKTrhs + here->HICUMxf2Node) += rhs_current; // into ground
|
||||
// *(here->HICUMxf2Xf2Ptr) += Iqxf2_Vxf2;
|
||||
/*
|
||||
c Branch: xf2-ground, Stamp element: Rxf2
|
||||
*/
|
||||
// *(here->HICUMxf2Xf2Ptr) += 1; // current Ixf2 is normalized to Tf
|
||||
/*
|
||||
c Branch: xf-ground, Stamp element: Ixf
|
||||
*/
|
||||
// rhs_current = model->HICUMtype * (Ixf - Ixf_dT*Vrth - Ixf_Vbiei*Vbiei - Ixf_Vbici*Vbici);
|
||||
// rhs_current = model->HICUMtype * Ixf;
|
||||
// *(ckt->CKTrhs + here->HICUMxfNode) += rhs_current; // into xf node
|
||||
// *(here->HICUMxfTempPtr) += -Ixf_dT;
|
||||
// *(here->HICUMxfBaseBIPtr) += -Ixf_Vbiei;
|
||||
// *(here->HICUMxfEmitEIPtr) += +Ixf_Vbiei;
|
||||
// *(here->HICUMxfBaseBIPtr) += -Ixf_Vbici;
|
||||
// *(here->HICUMxfCollCIPtr) += +Ixf_Vbici;
|
||||
/*
|
||||
c Branch: xf-ground, Stamp element: Qxf // TODO Test in AC simulation!
|
||||
*/
|
||||
// rhs_current = model->HICUMtype * (Iqxf - Iqxf_Vxf*Vxf);
|
||||
// *(ckt->CKTrhs + here->HICUMxfNode) += rhs_current; // into ground
|
||||
// *(here->HICUMxfXfPtr) += Iqxf_Vxf;
|
||||
/*
|
||||
c Branch: xf-ground, Stamp element: Rxf
|
||||
*/
|
||||
|
|
|
|||
Loading…
Reference in New Issue