Merge branch 'pre-master' of ssh://git.code.sf.net/p/ngspice/ngspice into pre-master
This commit is contained in:
commit
01266e48ea
|
|
@ -121,9 +121,6 @@ HICUMacLoad(GENmodel *inModel, CKTcircuit *ckt)
|
||||||
/* loop through all the models */
|
/* loop through all the models */
|
||||||
for( ; model != NULL; model = HICUMnextModel(model)) {
|
for( ; model != NULL; model = HICUMnextModel(model)) {
|
||||||
|
|
||||||
int selfheat = ( (model->HICUMflsh > 0) && (model->HICUMrthGiven) && (model->HICUMrth > 0.0));
|
|
||||||
int nqs = ( (model->HICUMflnqs != 0 || model->HICUMflcomp < 2.3) && (model->HICUMalit > 0 || model->HICUMalqf > 0));
|
|
||||||
|
|
||||||
/* loop through all the instances of the model */
|
/* loop through all the instances of the model */
|
||||||
for( here = HICUMinstances(model); here!= NULL;
|
for( here = HICUMinstances(model); here!= NULL;
|
||||||
here = HICUMnextInstance(here)) {
|
here = HICUMnextInstance(here)) {
|
||||||
|
|
@ -156,7 +153,7 @@ HICUMacLoad(GENmodel *inModel, CKTcircuit *ckt)
|
||||||
} else {
|
} else {
|
||||||
Isis_Vsis = 0.0;
|
Isis_Vsis = 0.0;
|
||||||
}
|
}
|
||||||
if(selfheat) {
|
if(model->HICUMselfheat) {
|
||||||
Irth_Vrth = (1/here->HICUMrth_t.rpart - *(ckt->CKTstate0 + here->HICUMvrth)/(here->HICUMrth_t.rpart*here->HICUMrth_t.rpart) * here->HICUMrth_t.dpart);
|
Irth_Vrth = (1/here->HICUMrth_t.rpart - *(ckt->CKTstate0 + here->HICUMvrth)/(here->HICUMrth_t.rpart*here->HICUMrth_t.rpart) * here->HICUMrth_t.dpart);
|
||||||
} else {
|
} else {
|
||||||
Irth_Vrth = 0.0;
|
Irth_Vrth = 0.0;
|
||||||
|
|
@ -238,7 +235,7 @@ HICUMacLoad(GENmodel *inModel, CKTcircuit *ckt)
|
||||||
*(here->HICUMemitEICollCIPtr) += Ibiei_Vbici;
|
*(here->HICUMemitEICollCIPtr) += Ibiei_Vbici;
|
||||||
*(here->HICUMbaseBICollCIPtr) += -Ibiei_Vbici;
|
*(here->HICUMbaseBICollCIPtr) += -Ibiei_Vbici;
|
||||||
*(here->HICUMemitEIBaseBIPtr) += -Ibiei_Vbici;
|
*(here->HICUMemitEIBaseBIPtr) += -Ibiei_Vbici;
|
||||||
if (nqs) {
|
if (model->HICUMnqs) {
|
||||||
*(here->HICUMbaseBIXfPtr) += Ibiei_Vxf;
|
*(here->HICUMbaseBIXfPtr) += Ibiei_Vxf;
|
||||||
*(here->HICUMemitEIXfPtr) += -Ibiei_Vxf;
|
*(here->HICUMemitEIXfPtr) += -Ibiei_Vxf;
|
||||||
}
|
}
|
||||||
|
|
@ -268,7 +265,7 @@ HICUMacLoad(GENmodel *inModel, CKTcircuit *ckt)
|
||||||
*(here->HICUMemitEICollCIPtr) += Iciei_Vbici;
|
*(here->HICUMemitEICollCIPtr) += Iciei_Vbici;
|
||||||
*(here->HICUMcollCICollCIPtr) += -Iciei_Vbici;
|
*(here->HICUMcollCICollCIPtr) += -Iciei_Vbici;
|
||||||
*(here->HICUMemitEIBaseBIPtr) += -Iciei_Vbici;
|
*(here->HICUMemitEIBaseBIPtr) += -Iciei_Vbici;
|
||||||
if (nqs) {
|
if (model->HICUMnqs) {
|
||||||
*(here->HICUMcollCIXf2Ptr) += Iciei_Vxf2;
|
*(here->HICUMcollCIXf2Ptr) += Iciei_Vxf2;
|
||||||
*(here->HICUMemitEIXf2Ptr) += -Iciei_Vxf2;
|
*(here->HICUMemitEIXf2Ptr) += -Iciei_Vxf2;
|
||||||
}
|
}
|
||||||
|
|
@ -336,7 +333,7 @@ HICUMacLoad(GENmodel *inModel, CKTcircuit *ckt)
|
||||||
*(here->HICUMsubsSISubsPtr) += -Isis_Vsis;
|
*(here->HICUMsubsSISubsPtr) += -Isis_Vsis;
|
||||||
*(here->HICUMsubsSubsSIPtr) += -Isis_Vsis;
|
*(here->HICUMsubsSubsSIPtr) += -Isis_Vsis;
|
||||||
|
|
||||||
if (nqs) {
|
if (model->HICUMnqs) {
|
||||||
//Ixf1
|
//Ixf1
|
||||||
*(here->HICUMxf1BaseBIPtr) += +Ixf1_Vbiei;
|
*(here->HICUMxf1BaseBIPtr) += +Ixf1_Vbiei;
|
||||||
*(here->HICUMxf1EmitEIPtr) += -Ixf1_Vbiei;
|
*(here->HICUMxf1EmitEIPtr) += -Ixf1_Vbiei;
|
||||||
|
|
@ -448,7 +445,7 @@ HICUMacLoad(GENmodel *inModel, CKTcircuit *ckt)
|
||||||
*(here->HICUMemitEICollCIPtr +1) += XQf_Vbici;
|
*(here->HICUMemitEICollCIPtr +1) += XQf_Vbici;
|
||||||
*(here->HICUMbaseBICollCIPtr +1) += -XQf_Vbici;
|
*(here->HICUMbaseBICollCIPtr +1) += -XQf_Vbici;
|
||||||
*(here->HICUMemitEIBaseBIPtr +1) += -XQf_Vbici;
|
*(here->HICUMemitEIBaseBIPtr +1) += -XQf_Vbici;
|
||||||
if (nqs) {
|
if (model->HICUMnqs) {
|
||||||
*(here->HICUMbaseBIXfPtr +1) += XQf_Vxf;
|
*(here->HICUMbaseBIXfPtr +1) += XQf_Vxf;
|
||||||
*(here->HICUMemitEIXfPtr +1) += -XQf_Vxf;
|
*(here->HICUMemitEIXfPtr +1) += -XQf_Vxf;
|
||||||
}
|
}
|
||||||
|
|
@ -525,7 +522,7 @@ HICUMacLoad(GENmodel *inModel, CKTcircuit *ckt)
|
||||||
*(here->HICUMsubsSISubsSIPtr + 1) += XQsu_Vsis;
|
*(here->HICUMsubsSISubsSIPtr + 1) += XQsu_Vsis;
|
||||||
*(here->HICUMsubsSISubsPtr + 1) += -XQsu_Vsis;
|
*(here->HICUMsubsSISubsPtr + 1) += -XQsu_Vsis;
|
||||||
*(here->HICUMsubsSubsSIPtr + 1) += -XQsu_Vsis;
|
*(here->HICUMsubsSubsSIPtr + 1) += -XQsu_Vsis;
|
||||||
if (nqs) {
|
if (model->HICUMnqs) {
|
||||||
//Qxf1
|
//Qxf1
|
||||||
*(here->HICUMxf1Xf1Ptr + 1) += +XQxf1_Vxf1;
|
*(here->HICUMxf1Xf1Ptr + 1) += +XQxf1_Vxf1;
|
||||||
//Qxf2
|
//Qxf2
|
||||||
|
|
@ -535,7 +532,7 @@ HICUMacLoad(GENmodel *inModel, CKTcircuit *ckt)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Stamps with SH
|
// Stamps with SH
|
||||||
if (selfheat) {
|
if (model->HICUMselfheat) {
|
||||||
// Stamp element: Ibiei f_Bi = + f_Ei = -
|
// Stamp element: Ibiei f_Bi = + f_Ei = -
|
||||||
*(here->HICUMbaseBItempPtr) += Ibiei_Vrth;
|
*(here->HICUMbaseBItempPtr) += Ibiei_Vrth;
|
||||||
*(here->HICUMemitEItempPtr) += -Ibiei_Vrth;
|
*(here->HICUMemitEItempPtr) += -Ibiei_Vrth;
|
||||||
|
|
@ -570,7 +567,7 @@ HICUMacLoad(GENmodel *inModel, CKTcircuit *ckt)
|
||||||
// Branch: bpsi, Stamp element: Its
|
// Branch: bpsi, Stamp element: Its
|
||||||
*(here->HICUMbaseBPtempPtr) += Ibpsi_Vrth;
|
*(here->HICUMbaseBPtempPtr) += Ibpsi_Vrth;
|
||||||
*(here->HICUMsubsSItempPtr) += -Ibpsi_Vrth;
|
*(here->HICUMsubsSItempPtr) += -Ibpsi_Vrth;
|
||||||
if (nqs) {
|
if (model->HICUMnqs) {
|
||||||
// Stamp element: Ixf f_xf = +
|
// Stamp element: Ixf f_xf = +
|
||||||
*(here->HICUMxfTempPtr) += Ixf_Vrth;
|
*(here->HICUMxfTempPtr) += Ixf_Vrth;
|
||||||
// Stamp element: Ixf1 f_xf1 = +
|
// Stamp element: Ixf1 f_xf1 = +
|
||||||
|
|
|
||||||
|
|
@ -720,6 +720,10 @@ typedef struct sHICUMmodel { /* model structure for a hicum */
|
||||||
double HICUMvbcMax; /* maximum voltage over B-C junction */
|
double HICUMvbcMax; /* maximum voltage over B-C junction */
|
||||||
double HICUMvceMax; /* maximum voltage over C-E branch */
|
double HICUMvceMax; /* maximum voltage over C-E branch */
|
||||||
|
|
||||||
|
//Model internal switches
|
||||||
|
int HICUMselfheat;
|
||||||
|
int HICUMnqs;
|
||||||
|
|
||||||
//Circuit simulator specific parameters
|
//Circuit simulator specific parameters
|
||||||
unsigned HICUMtypeGiven : 1;
|
unsigned HICUMtypeGiven : 1;
|
||||||
unsigned HICUMtnomGiven : 1;
|
unsigned HICUMtnomGiven : 1;
|
||||||
|
|
|
||||||
|
|
@ -122,9 +122,6 @@ HICUMpzLoad(GENmodel *inModel, CKTcircuit *ckt, SPcomplex *s)
|
||||||
/* loop through all the models */
|
/* loop through all the models */
|
||||||
for( ; model != NULL; model = HICUMnextModel(model)) {
|
for( ; model != NULL; model = HICUMnextModel(model)) {
|
||||||
|
|
||||||
int selfheat = ( (model->HICUMflsh > 0) && (model->HICUMrthGiven) && (model->HICUMrth > 0.0));
|
|
||||||
int nqs = ( (model->HICUMflnqs != 0 || model->HICUMflcomp < 2.3) && (model->HICUMalit > 0 || model->HICUMalqf > 0));
|
|
||||||
|
|
||||||
/* loop through all the instances of the model */
|
/* loop through all the instances of the model */
|
||||||
for( here = HICUMinstances(model); here!= NULL;
|
for( here = HICUMinstances(model); here!= NULL;
|
||||||
here = HICUMnextInstance(here)) {
|
here = HICUMnextInstance(here)) {
|
||||||
|
|
@ -157,7 +154,7 @@ HICUMpzLoad(GENmodel *inModel, CKTcircuit *ckt, SPcomplex *s)
|
||||||
} else {
|
} else {
|
||||||
Isis_Vsis = 0.0;
|
Isis_Vsis = 0.0;
|
||||||
}
|
}
|
||||||
if(selfheat) {
|
if(model->HICUMselfheat) {
|
||||||
Irth_Vrth = (1/here->HICUMrth_t.rpart - *(ckt->CKTstate0 + here->HICUMvrth)/(here->HICUMrth_t.rpart*here->HICUMrth_t.rpart) * here->HICUMrth_t.dpart);
|
Irth_Vrth = (1/here->HICUMrth_t.rpart - *(ckt->CKTstate0 + here->HICUMvrth)/(here->HICUMrth_t.rpart*here->HICUMrth_t.rpart) * here->HICUMrth_t.dpart);
|
||||||
} else {
|
} else {
|
||||||
Irth_Vrth = 0.0;
|
Irth_Vrth = 0.0;
|
||||||
|
|
@ -237,7 +234,7 @@ HICUMpzLoad(GENmodel *inModel, CKTcircuit *ckt, SPcomplex *s)
|
||||||
*(here->HICUMemitEICollCIPtr) += Ibiei_Vbici;
|
*(here->HICUMemitEICollCIPtr) += Ibiei_Vbici;
|
||||||
*(here->HICUMbaseBICollCIPtr) += -Ibiei_Vbici;
|
*(here->HICUMbaseBICollCIPtr) += -Ibiei_Vbici;
|
||||||
*(here->HICUMemitEIBaseBIPtr) += -Ibiei_Vbici;
|
*(here->HICUMemitEIBaseBIPtr) += -Ibiei_Vbici;
|
||||||
if (nqs) {
|
if (model->HICUMnqs) {
|
||||||
*(here->HICUMbaseBIXfPtr) += Ibiei_Vxf;
|
*(here->HICUMbaseBIXfPtr) += Ibiei_Vxf;
|
||||||
*(here->HICUMemitEIXfPtr) += -Ibiei_Vxf;
|
*(here->HICUMemitEIXfPtr) += -Ibiei_Vxf;
|
||||||
}
|
}
|
||||||
|
|
@ -267,7 +264,7 @@ HICUMpzLoad(GENmodel *inModel, CKTcircuit *ckt, SPcomplex *s)
|
||||||
*(here->HICUMemitEICollCIPtr) += Iciei_Vbici;
|
*(here->HICUMemitEICollCIPtr) += Iciei_Vbici;
|
||||||
*(here->HICUMcollCICollCIPtr) += -Iciei_Vbici;
|
*(here->HICUMcollCICollCIPtr) += -Iciei_Vbici;
|
||||||
*(here->HICUMemitEIBaseBIPtr) += -Iciei_Vbici;
|
*(here->HICUMemitEIBaseBIPtr) += -Iciei_Vbici;
|
||||||
if (nqs) {
|
if (model->HICUMnqs) {
|
||||||
*(here->HICUMcollCIXf2Ptr) += Iciei_Vxf2;
|
*(here->HICUMcollCIXf2Ptr) += Iciei_Vxf2;
|
||||||
*(here->HICUMemitEIXf2Ptr) += -Iciei_Vxf2;
|
*(here->HICUMemitEIXf2Ptr) += -Iciei_Vxf2;
|
||||||
}
|
}
|
||||||
|
|
@ -335,7 +332,7 @@ HICUMpzLoad(GENmodel *inModel, CKTcircuit *ckt, SPcomplex *s)
|
||||||
*(here->HICUMsubsSISubsPtr) += -Isis_Vsis;
|
*(here->HICUMsubsSISubsPtr) += -Isis_Vsis;
|
||||||
*(here->HICUMsubsSubsSIPtr) += -Isis_Vsis;
|
*(here->HICUMsubsSubsSIPtr) += -Isis_Vsis;
|
||||||
|
|
||||||
if (nqs) {
|
if (model->HICUMnqs) {
|
||||||
//Ixf1
|
//Ixf1
|
||||||
*(here->HICUMxf1BaseBIPtr) += +Ixf1_Vbiei;
|
*(here->HICUMxf1BaseBIPtr) += +Ixf1_Vbiei;
|
||||||
*(here->HICUMxf1EmitEIPtr) += -Ixf1_Vbiei;
|
*(here->HICUMxf1EmitEIPtr) += -Ixf1_Vbiei;
|
||||||
|
|
@ -471,7 +468,7 @@ HICUMpzLoad(GENmodel *inModel, CKTcircuit *ckt, SPcomplex *s)
|
||||||
*(here->HICUMbaseBICollCIPtr) += -XQf_Vbici*(s->real);
|
*(here->HICUMbaseBICollCIPtr) += -XQf_Vbici*(s->real);
|
||||||
*(here->HICUMemitEIBaseBIPtr +1) += -XQf_Vbici*(s->imag);
|
*(here->HICUMemitEIBaseBIPtr +1) += -XQf_Vbici*(s->imag);
|
||||||
*(here->HICUMemitEIBaseBIPtr) += -XQf_Vbici*(s->real);
|
*(here->HICUMemitEIBaseBIPtr) += -XQf_Vbici*(s->real);
|
||||||
if (nqs) {
|
if (model->HICUMnqs) {
|
||||||
*(here->HICUMbaseBIXfPtr +1) += XQf_Vxf*(s->imag);
|
*(here->HICUMbaseBIXfPtr +1) += XQf_Vxf*(s->imag);
|
||||||
*(here->HICUMbaseBIXfPtr ) += XQf_Vxf*(s->real);
|
*(here->HICUMbaseBIXfPtr ) += XQf_Vxf*(s->real);
|
||||||
*(here->HICUMemitEIXfPtr +1) += -XQf_Vxf*(s->imag);
|
*(here->HICUMemitEIXfPtr +1) += -XQf_Vxf*(s->imag);
|
||||||
|
|
@ -610,7 +607,7 @@ HICUMpzLoad(GENmodel *inModel, CKTcircuit *ckt, SPcomplex *s)
|
||||||
*(here->HICUMsubsSISubsPtr ) += -XQsu_Vsis*(s->real);
|
*(here->HICUMsubsSISubsPtr ) += -XQsu_Vsis*(s->real);
|
||||||
*(here->HICUMsubsSubsSIPtr + 1) += -XQsu_Vsis*(s->imag);
|
*(here->HICUMsubsSubsSIPtr + 1) += -XQsu_Vsis*(s->imag);
|
||||||
*(here->HICUMsubsSubsSIPtr ) += -XQsu_Vsis*(s->real);
|
*(here->HICUMsubsSubsSIPtr ) += -XQsu_Vsis*(s->real);
|
||||||
if (nqs) {
|
if (model->HICUMnqs) {
|
||||||
//Qxf1
|
//Qxf1
|
||||||
*(here->HICUMxf1Xf1Ptr + 1) += +XQxf1_Vxf1*(s->imag);
|
*(here->HICUMxf1Xf1Ptr + 1) += +XQxf1_Vxf1*(s->imag);
|
||||||
*(here->HICUMxf1Xf1Ptr) += +XQxf1_Vxf1*(s->real);
|
*(here->HICUMxf1Xf1Ptr) += +XQxf1_Vxf1*(s->real);
|
||||||
|
|
@ -623,7 +620,7 @@ HICUMpzLoad(GENmodel *inModel, CKTcircuit *ckt, SPcomplex *s)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Stamps with SH
|
// Stamps with SH
|
||||||
if (selfheat) {
|
if (model->HICUMselfheat) {
|
||||||
// Stamp element: Ibiei f_Bi = + f_Ei = -
|
// Stamp element: Ibiei f_Bi = + f_Ei = -
|
||||||
*(here->HICUMbaseBItempPtr) += Ibiei_Vrth;
|
*(here->HICUMbaseBItempPtr) += Ibiei_Vrth;
|
||||||
*(here->HICUMemitEItempPtr) += -Ibiei_Vrth;
|
*(here->HICUMemitEItempPtr) += -Ibiei_Vrth;
|
||||||
|
|
@ -660,7 +657,7 @@ HICUMpzLoad(GENmodel *inModel, CKTcircuit *ckt, SPcomplex *s)
|
||||||
// Branch: bpsi, Stamp element: Its
|
// Branch: bpsi, Stamp element: Its
|
||||||
*(here->HICUMbaseBPtempPtr) += Ibpsi_Vrth;
|
*(here->HICUMbaseBPtempPtr) += Ibpsi_Vrth;
|
||||||
*(here->HICUMsubsSItempPtr) += -Ibpsi_Vrth;
|
*(here->HICUMsubsSItempPtr) += -Ibpsi_Vrth;
|
||||||
if (nqs) {
|
if (model->HICUMnqs) {
|
||||||
// Stamp element: Ixf f_xf = +
|
// Stamp element: Ixf f_xf = +
|
||||||
*(here->HICUMxfTempPtr) += Ixf_Vrth;
|
*(here->HICUMxfTempPtr) += Ixf_Vrth;
|
||||||
// Stamp element: Ixf1 f_xf1 = +
|
// Stamp element: Ixf1 f_xf1 = +
|
||||||
|
|
|
||||||
|
|
@ -473,8 +473,8 @@ HICUMsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states)
|
||||||
if(!model->HICUMvceMaxGiven)
|
if(!model->HICUMvceMaxGiven)
|
||||||
model->HICUMvceMax = 1e99;
|
model->HICUMvceMax = 1e99;
|
||||||
|
|
||||||
int selfheat = (((model->HICUMflsh == 1) || (model->HICUMflsh == 2)) && (model->HICUMrthGiven) && (model->HICUMrth > 0.0));
|
model->HICUMselfheat = (((model->HICUMflsh == 1) || (model->HICUMflsh == 2)) && (model->HICUMrthGiven) && (model->HICUMrth > 0.0));
|
||||||
int nqs = ( (model->HICUMflnqs != 0 || model->HICUMflcomp < 2.3) && (model->HICUMalit > 0 || model->HICUMalqf > 0));
|
model->HICUMnqs = ((model->HICUMflnqs != 0 || model->HICUMflcomp < 2.3) && (model->HICUMt0Given) && (model->HICUMt0 > 0.0) && (model->HICUMalit > 0 || model->HICUMalqf > 0));
|
||||||
|
|
||||||
/* loop through all the instances of the model */
|
/* loop through all the instances of the model */
|
||||||
for (here = HICUMinstances(model); here != NULL ;
|
for (here = HICUMinstances(model); here != NULL ;
|
||||||
|
|
@ -631,7 +631,7 @@ HICUMsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (selfheat) {
|
if (model->HICUMselfheat) {
|
||||||
if (here->HICUMtempNode == 0) { // no external node for temperature
|
if (here->HICUMtempNode == 0) { // no external node for temperature
|
||||||
error = CKTmkVolt(ckt,&tmp,here->HICUMname,"dT"); // create internal node
|
error = CKTmkVolt(ckt,&tmp,here->HICUMname,"dT"); // create internal node
|
||||||
if (error) return(error);
|
if (error) return(error);
|
||||||
|
|
@ -643,7 +643,7 @@ HICUMsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (nqs) {
|
if (model->HICUMnqs) {
|
||||||
if(here->HICUMxfNode == 0) {
|
if(here->HICUMxfNode == 0) {
|
||||||
error = CKTmkVolt(ckt, &tmp, here->HICUMname, "xf");
|
error = CKTmkVolt(ckt, &tmp, here->HICUMname, "xf");
|
||||||
if(error) return(error);
|
if(error) return(error);
|
||||||
|
|
@ -712,7 +712,7 @@ do { if((here->ptr = SMPmakeElt(matrix, here->first, here->second)) == NULL){\
|
||||||
|
|
||||||
TSTALLOC(HICUMbaseBIEmitEIPtr,HICUMbaseBINode,HICUMemitEINode); //ei-bi
|
TSTALLOC(HICUMbaseBIEmitEIPtr,HICUMbaseBINode,HICUMemitEINode); //ei-bi
|
||||||
TSTALLOC(HICUMemitEIBaseBIPtr,HICUMemitEINode,HICUMbaseBINode); //bi-ei
|
TSTALLOC(HICUMemitEIBaseBIPtr,HICUMemitEINode,HICUMbaseBINode); //bi-ei
|
||||||
if (nqs) {
|
if (model->HICUMnqs) {
|
||||||
TSTALLOC(HICUMbaseBIXfPtr ,HICUMbaseBINode,HICUMxfNode); //bi - xf
|
TSTALLOC(HICUMbaseBIXfPtr ,HICUMbaseBINode,HICUMxfNode); //bi - xf
|
||||||
TSTALLOC(HICUMemitEIXfPtr ,HICUMemitEINode,HICUMxfNode); //ei - xf
|
TSTALLOC(HICUMemitEIXfPtr ,HICUMemitEINode,HICUMxfNode); //ei - xf
|
||||||
}
|
}
|
||||||
|
|
@ -732,7 +732,7 @@ do { if((here->ptr = SMPmakeElt(matrix, here->first, here->second)) == NULL){\
|
||||||
TSTALLOC(HICUMsubsCollPtr,HICUMsubsNode,HICUMcollNode); //s-c
|
TSTALLOC(HICUMsubsCollPtr,HICUMsubsNode,HICUMcollNode); //s-c
|
||||||
TSTALLOC(HICUMcollSubsPtr,HICUMcollNode,HICUMsubsNode); //c-s
|
TSTALLOC(HICUMcollSubsPtr,HICUMcollNode,HICUMsubsNode); //c-s
|
||||||
|
|
||||||
if (nqs) {
|
if (model->HICUMnqs) {
|
||||||
TSTALLOC(HICUMxf1Xf1Ptr ,HICUMxf1Node ,HICUMxf1Node);
|
TSTALLOC(HICUMxf1Xf1Ptr ,HICUMxf1Node ,HICUMxf1Node);
|
||||||
TSTALLOC(HICUMxf1BaseBIPtr,HICUMxf1Node ,HICUMbaseBINode);
|
TSTALLOC(HICUMxf1BaseBIPtr,HICUMxf1Node ,HICUMbaseBINode);
|
||||||
TSTALLOC(HICUMxf1EmitEIPtr,HICUMxf1Node ,HICUMemitEINode);
|
TSTALLOC(HICUMxf1EmitEIPtr,HICUMxf1Node ,HICUMemitEINode);
|
||||||
|
|
@ -754,7 +754,7 @@ do { if((here->ptr = SMPmakeElt(matrix, here->first, here->second)) == NULL){\
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (selfheat) {
|
if (model->HICUMselfheat) {
|
||||||
TSTALLOC(HICUMcollTempPtr, HICUMcollNode, HICUMtempNode);
|
TSTALLOC(HICUMcollTempPtr, HICUMcollNode, HICUMtempNode);
|
||||||
TSTALLOC(HICUMbaseTempPtr,HICUMbaseNode,HICUMtempNode);
|
TSTALLOC(HICUMbaseTempPtr,HICUMbaseNode,HICUMtempNode);
|
||||||
TSTALLOC(HICUMemitTempPtr,HICUMemitNode,HICUMtempNode);
|
TSTALLOC(HICUMemitTempPtr,HICUMemitNode,HICUMtempNode);
|
||||||
|
|
@ -779,7 +779,7 @@ do { if((here->ptr = SMPmakeElt(matrix, here->first, here->second)) == NULL){\
|
||||||
|
|
||||||
TSTALLOC(HICUMtempTempPtr,HICUMtempNode,HICUMtempNode);
|
TSTALLOC(HICUMtempTempPtr,HICUMtempNode,HICUMtempNode);
|
||||||
|
|
||||||
if (nqs) {
|
if (model->HICUMnqs) {
|
||||||
TSTALLOC(HICUMxfTempPtr ,HICUMxfNode,HICUMtempNode);
|
TSTALLOC(HICUMxfTempPtr ,HICUMxfNode,HICUMtempNode);
|
||||||
TSTALLOC(HICUMxf2TempPtr ,HICUMxf2Node ,HICUMtempNode);
|
TSTALLOC(HICUMxf2TempPtr ,HICUMxf2Node ,HICUMtempNode);
|
||||||
TSTALLOC(HICUMxf1TempPtr ,HICUMxf1Node ,HICUMtempNode);
|
TSTALLOC(HICUMxf1TempPtr ,HICUMxf1Node ,HICUMtempNode);
|
||||||
|
|
@ -801,8 +801,6 @@ 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->HICUMflsh == 2)) && (model->HICUMrthGiven) && (model->HICUMrth > 0.0));
|
|
||||||
int nqs = ( (model->HICUMflnqs != 0 || model->HICUMflcomp < 2.3) && (model->HICUMalit > 0 || model->HICUMalqf > 0));
|
|
||||||
|
|
||||||
for (here = HICUMinstances(model); here != NULL;
|
for (here = HICUMinstances(model); here != NULL;
|
||||||
here=HICUMnextInstance(here))
|
here=HICUMnextInstance(here))
|
||||||
|
|
@ -832,14 +830,14 @@ HICUMunsetup(
|
||||||
CKTdltNNum(ckt, here->HICUMsubsSINode);
|
CKTdltNNum(ckt, here->HICUMsubsSINode);
|
||||||
here->HICUMsubsSINode = 0;
|
here->HICUMsubsSINode = 0;
|
||||||
|
|
||||||
if (selfheat) {
|
if (model->HICUMselfheat) {
|
||||||
if (here->HICUMtempNode > 6) { // it is an internal node
|
if (here->HICUMtempNode > 6) { // it is an internal node
|
||||||
CKTdltNNum(ckt, here->HICUMtempNode);
|
CKTdltNNum(ckt, here->HICUMtempNode);
|
||||||
here->HICUMtempNode = 0;
|
here->HICUMtempNode = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (nqs) {
|
if (model->HICUMnqs) {
|
||||||
|
|
||||||
if(here->HICUMxfNode > 0)
|
if(here->HICUMxfNode > 0)
|
||||||
CKTdltNNum(ckt, here->HICUMxfNode);
|
CKTdltNNum(ckt, here->HICUMxfNode);
|
||||||
|
|
|
||||||
|
|
@ -1106,10 +1106,6 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
||||||
/* loop through all the models */
|
/* loop through all the models */
|
||||||
for (; model != NULL; model = HICUMnextModel(model)) {
|
for (; model != NULL; model = HICUMnextModel(model)) {
|
||||||
|
|
||||||
// Model_initialization
|
|
||||||
int selfheat = ((model->HICUMflsh > 0) && (model->HICUMrthGiven) && (model->HICUMrth > 0.0));
|
|
||||||
int nqs = ((model->HICUMflnqs != 0 || model->HICUMflcomp < 2.3) && (model->HICUMalit > 0 || model->HICUMalqf > 0));
|
|
||||||
|
|
||||||
// Avoid divide-by-zero and define infinity other way
|
// Avoid divide-by-zero and define infinity other way
|
||||||
// High current correction for 2D and 3D effects
|
// High current correction for 2D and 3D effects
|
||||||
if (model->HICUMich != 0.0) {
|
if (model->HICUMich != 0.0) {
|
||||||
|
|
@ -1205,7 +1201,7 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
||||||
Vxf = *(ckt->CKTrhsOld + here->HICUMxfNode);
|
Vxf = *(ckt->CKTrhsOld + here->HICUMxfNode);
|
||||||
Vxf1 = *(ckt->CKTrhsOld + here->HICUMxf1Node);
|
Vxf1 = *(ckt->CKTrhsOld + here->HICUMxf1Node);
|
||||||
Vxf2 = *(ckt->CKTrhsOld + here->HICUMxf2Node);
|
Vxf2 = *(ckt->CKTrhsOld + here->HICUMxf2Node);
|
||||||
if (selfheat) {
|
if (model->HICUMselfheat) {
|
||||||
Vrth = *(ckt->CKTstate0 + here->HICUMvrth);
|
Vrth = *(ckt->CKTstate0 + here->HICUMvrth);
|
||||||
}
|
}
|
||||||
} else if(ckt->CKTmode & MODEINITTRAN) {
|
} else if(ckt->CKTmode & MODEINITTRAN) {
|
||||||
|
|
@ -1245,7 +1241,7 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
||||||
Vxf = *(ckt->CKTrhsOld + here->HICUMxfNode);
|
Vxf = *(ckt->CKTrhsOld + here->HICUMxfNode);
|
||||||
Vxf1 = *(ckt->CKTrhsOld + here->HICUMxf1Node);
|
Vxf1 = *(ckt->CKTrhsOld + here->HICUMxf1Node);
|
||||||
Vxf2 = *(ckt->CKTrhsOld + here->HICUMxf2Node);
|
Vxf2 = *(ckt->CKTrhsOld + here->HICUMxf2Node);
|
||||||
if (selfheat) {
|
if (model->HICUMselfheat) {
|
||||||
Vrth = *(ckt->CKTstate1 + here->HICUMvrth);
|
Vrth = *(ckt->CKTstate1 + here->HICUMvrth);
|
||||||
}
|
}
|
||||||
} else if((ckt->CKTmode & MODEINITJCT) &&
|
} else if((ckt->CKTmode & MODEINITJCT) &&
|
||||||
|
|
@ -1496,7 +1492,7 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
||||||
//Vxf1 = *(ckt->CKTrhsOld + here->HICUMxf1Node);
|
//Vxf1 = *(ckt->CKTrhsOld + here->HICUMxf1Node);
|
||||||
Vxf2 = *(ckt->CKTrhsOld + here->HICUMxf2Node);
|
Vxf2 = *(ckt->CKTrhsOld + here->HICUMxf2Node);
|
||||||
Vciei = Vbiei - Vbici;
|
Vciei = Vbiei - Vbici;
|
||||||
if (selfheat) {
|
if (model->HICUMselfheat) {
|
||||||
Vrth = *(ckt->CKTrhsOld + here->HICUMtempNode);
|
Vrth = *(ckt->CKTrhsOld + here->HICUMtempNode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1514,7 +1510,7 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
||||||
delveie = Veie - *(ckt->CKTstate0 + here->HICUMveie);
|
delveie = Veie - *(ckt->CKTstate0 + here->HICUMveie);
|
||||||
delvxf2 = Vxf2 - *(ckt->CKTstate0 + here->HICUMvxf2);
|
delvxf2 = Vxf2 - *(ckt->CKTstate0 + here->HICUMvxf2);
|
||||||
delvciei = delvbiei-delvbici;
|
delvciei = delvbiei-delvbici;
|
||||||
if (selfheat) {
|
if (model->HICUMselfheat) {
|
||||||
delvrth = Vrth - *(ckt->CKTstate0 + here->HICUMvrth);
|
delvrth = Vrth - *(ckt->CKTstate0 + here->HICUMvrth);
|
||||||
} else {
|
} else {
|
||||||
delvrth = 0;
|
delvrth = 0;
|
||||||
|
|
@ -1546,7 +1542,7 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
||||||
Vxf = *(ckt->CKTrhsOld + here->HICUMxfNode);
|
Vxf = *(ckt->CKTrhsOld + here->HICUMxfNode);
|
||||||
Vxf1 = *(ckt->CKTrhsOld + here->HICUMxf1Node);
|
Vxf1 = *(ckt->CKTrhsOld + here->HICUMxf1Node);
|
||||||
Vxf2 = *(ckt->CKTrhsOld + here->HICUMxf2Node);
|
Vxf2 = *(ckt->CKTrhsOld + here->HICUMxf2Node);
|
||||||
if (selfheat) {
|
if (model->HICUMselfheat) {
|
||||||
Vrth = *(ckt->CKTrhsOld + here->HICUMtempNode);
|
Vrth = *(ckt->CKTrhsOld + here->HICUMtempNode);
|
||||||
}
|
}
|
||||||
//todo: maybe add ibiei_Vxf
|
//todo: maybe add ibiei_Vxf
|
||||||
|
|
@ -1601,7 +1597,7 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
||||||
* find the expression too complicated, thus the split.
|
* find the expression too complicated, thus the split.
|
||||||
* ... no bypass in case of selfheating
|
* ... no bypass in case of selfheating
|
||||||
*/
|
*/
|
||||||
if( (ckt->CKTbypass) && (!(ckt->CKTmode & MODEINITPRED)) && !selfheat &&
|
if( (ckt->CKTbypass) && (!(ckt->CKTmode & MODEINITPRED)) && !model->HICUMselfheat &&
|
||||||
(fabs(delvbiei) < (ckt->CKTreltol*MAX(fabs(Vbiei),
|
(fabs(delvbiei) < (ckt->CKTreltol*MAX(fabs(Vbiei),
|
||||||
fabs(*(ckt->CKTstate0 + here->HICUMvbiei)))+
|
fabs(*(ckt->CKTstate0 + here->HICUMvbiei)))+
|
||||||
ckt->CKTvoltTol)) )
|
ckt->CKTvoltTol)) )
|
||||||
|
|
@ -1779,7 +1775,7 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
||||||
here->HICUMtVcrit,&ichk4);
|
here->HICUMtVcrit,&ichk4);
|
||||||
Vbpbi = DEVpnjlim(Vbpbi,*(ckt->CKTstate0 + here->HICUMvbpbi),here->HICUMvt.rpart,
|
Vbpbi = DEVpnjlim(Vbpbi,*(ckt->CKTstate0 + here->HICUMvbpbi),here->HICUMvt.rpart,
|
||||||
here->HICUMtVcrit,&ichk5);
|
here->HICUMtVcrit,&ichk5);
|
||||||
if (selfheat) {
|
if (model->HICUMselfheat) {
|
||||||
Vrth = DEVlimitlog(Vrth,
|
Vrth = DEVlimitlog(Vrth,
|
||||||
*(ckt->CKTstate0 + here->HICUMvrth),1,&ichk6);
|
*(ckt->CKTstate0 + here->HICUMvrth),1,&ichk6);
|
||||||
}
|
}
|
||||||
|
|
@ -1798,7 +1794,7 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
||||||
Vsc = model->HICUMtype*Vsc;
|
Vsc = model->HICUMtype*Vsc;
|
||||||
|
|
||||||
// Thermal update
|
// Thermal update
|
||||||
if (selfheat) {
|
if (model->HICUMselfheat) {
|
||||||
Temp = here->HICUMtemp+Vrth;
|
Temp = here->HICUMtemp+Vrth;
|
||||||
hicum_thermal_update(model, here, &Temp, &Tdev_Vrth);
|
hicum_thermal_update(model, here, &Temp, &Tdev_Vrth);
|
||||||
|
|
||||||
|
|
@ -2153,7 +2149,7 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
||||||
Qdeix_Vxf = 0.0;
|
Qdeix_Vxf = 0.0;
|
||||||
|
|
||||||
// Excess Phase calculation -> hand implementation instead of dual numbers
|
// Excess Phase calculation -> hand implementation instead of dual numbers
|
||||||
if (nqs) { // && (ckt->CKTmode & (MODETRAN | MODEAC) ) ) { //evaluate nqs network only in TRANSIENT and AC modes.
|
if (model->HICUMnqs) { // && (ckt->CKTmode & (MODETRAN | MODEAC) ) ) { //evaluate nqs network only in TRANSIENT and AC modes.
|
||||||
Ixf1 = (Vxf2-itf)/Tf*model->HICUMt0;
|
Ixf1 = (Vxf2-itf)/Tf*model->HICUMt0;
|
||||||
Ixf1_Vxf1 = 0.0;
|
Ixf1_Vxf1 = 0.0;
|
||||||
Ixf1_Vxf2 = 1.0/Tf*model->HICUMt0;
|
Ixf1_Vxf2 = 1.0/Tf*model->HICUMt0;
|
||||||
|
|
@ -2267,7 +2263,7 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
||||||
} else {
|
} else {
|
||||||
Isis_Vsis = 0.0;
|
Isis_Vsis = 0.0;
|
||||||
}
|
}
|
||||||
if(selfheat){
|
if(model->HICUMselfheat){
|
||||||
Irth_Vrth = (1/here->HICUMrth_t.rpart - Vrth/(here->HICUMrth_t.rpart*here->HICUMrth_t.rpart) * here->HICUMrth_t.dpart);
|
Irth_Vrth = (1/here->HICUMrth_t.rpart - Vrth/(here->HICUMrth_t.rpart*here->HICUMrth_t.rpart) * here->HICUMrth_t.dpart);
|
||||||
} else {
|
} else {
|
||||||
Irth_Vrth = 0.0;
|
Irth_Vrth = 0.0;
|
||||||
|
|
@ -2351,7 +2347,7 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
||||||
Ith_Vbbp = 0.0;
|
Ith_Vbbp = 0.0;
|
||||||
Ith_Veie = 0.0;
|
Ith_Veie = 0.0;
|
||||||
Ith_Vrth = 0.0;
|
Ith_Vrth = 0.0;
|
||||||
if(!selfheat) {
|
if(!model->HICUMselfheat) {
|
||||||
Ith = 0;
|
Ith = 0;
|
||||||
} else {
|
} else {
|
||||||
Ith = pterm; //Current from gnd to T
|
Ith = pterm; //Current from gnd to T
|
||||||
|
|
@ -2430,7 +2426,7 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
||||||
Qbcpar1 = cbcpar1*Vbci;
|
Qbcpar1 = cbcpar1*Vbci;
|
||||||
Qbcpar2 = cbcpar2*Vbpci;
|
Qbcpar2 = cbcpar2*Vbpci;
|
||||||
Qsu = model->HICUMcsu*Vsis;
|
Qsu = model->HICUMcsu*Vsis;
|
||||||
if (selfheat) {
|
if (model->HICUMselfheat) {
|
||||||
Qcth = here->HICUMcth_scaled*Vrth;
|
Qcth = here->HICUMcth_scaled*Vrth;
|
||||||
} else {
|
} else {
|
||||||
Qcth = 0;
|
Qcth = 0;
|
||||||
|
|
@ -2492,7 +2488,7 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
||||||
*(ckt->CKTstate0 + here->HICUMcqxf2) = Qxf2_Vxf2;
|
*(ckt->CKTstate0 + here->HICUMcqxf2) = Qxf2_Vxf2;
|
||||||
*(ckt->CKTstate0 + here->HICUMqxf) = Qxf;
|
*(ckt->CKTstate0 + here->HICUMqxf) = Qxf;
|
||||||
*(ckt->CKTstate0 + here->HICUMcqxf) = Qxf_Vxf;
|
*(ckt->CKTstate0 + here->HICUMcqxf) = Qxf_Vxf;
|
||||||
if (selfheat) {
|
if (model->HICUMselfheat) {
|
||||||
//Qth
|
//Qth
|
||||||
*(ckt->CKTstate0 + here->HICUMqcth) = Qcth;
|
*(ckt->CKTstate0 + here->HICUMqcth) = Qcth;
|
||||||
*(ckt->CKTstate0 + here->HICUMcqcth) = Qcth_Vrth;
|
*(ckt->CKTstate0 + here->HICUMcqcth) = Qcth_Vrth;
|
||||||
|
|
@ -2561,7 +2557,7 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
||||||
*(ckt->CKTstate0 + here->HICUMcqxf1) = Qxf1_Vxf1;
|
*(ckt->CKTstate0 + here->HICUMcqxf1) = Qxf1_Vxf1;
|
||||||
*(ckt->CKTstate0 + here->HICUMcqxf2) = Qxf2_Vxf2;
|
*(ckt->CKTstate0 + here->HICUMcqxf2) = Qxf2_Vxf2;
|
||||||
*(ckt->CKTstate0 + here->HICUMcqxf) = Qxf_Vxf;
|
*(ckt->CKTstate0 + here->HICUMcqxf) = Qxf_Vxf;
|
||||||
if (selfheat)
|
if (model->HICUMselfheat)
|
||||||
*(ckt->CKTstate0 + here->HICUMcqcth) = here->HICUMcth_scaled;
|
*(ckt->CKTstate0 + here->HICUMcqcth) = here->HICUMcth_scaled;
|
||||||
continue; /* go to 1000 */
|
continue; /* go to 1000 */
|
||||||
}
|
}
|
||||||
|
|
@ -2606,7 +2602,7 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
||||||
*(ckt->CKTstate1 + here->HICUMqxf) =
|
*(ckt->CKTstate1 + here->HICUMqxf) =
|
||||||
*(ckt->CKTstate0 + here->HICUMqxf) ;
|
*(ckt->CKTstate0 + here->HICUMqxf) ;
|
||||||
|
|
||||||
if (selfheat)
|
if (model->HICUMselfheat)
|
||||||
*(ckt->CKTstate1 + here->HICUMqcth) =
|
*(ckt->CKTstate1 + here->HICUMqcth) =
|
||||||
*(ckt->CKTstate0 + here->HICUMqcth) ;
|
*(ckt->CKTstate0 + here->HICUMqcth) ;
|
||||||
}
|
}
|
||||||
|
|
@ -2623,7 +2619,7 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
||||||
Ibiei_Vbiei += geq;
|
Ibiei_Vbiei += geq;
|
||||||
Ibiei += *(ckt->CKTstate0 + here->HICUMcqjei);
|
Ibiei += *(ckt->CKTstate0 + here->HICUMcqjei);
|
||||||
//Qdeix
|
//Qdeix
|
||||||
if (!nqs) {
|
if (!model->HICUMnqs) {
|
||||||
error = NIintegrate(ckt,&geq,&ceq,Qdeix_Vbiei,here->HICUMqf);
|
error = NIintegrate(ckt,&geq,&ceq,Qdeix_Vbiei,here->HICUMqf);
|
||||||
if(error) return(error);
|
if(error) return(error);
|
||||||
Ibiei_Vbiei += geq;
|
Ibiei_Vbiei += geq;
|
||||||
|
|
@ -2675,7 +2671,7 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
||||||
if(error) return(error);
|
if(error) return(error);
|
||||||
Isc_Vsc = geq;
|
Isc_Vsc = geq;
|
||||||
Isc = *(ckt->CKTstate0 + here->HICUMcqscp);
|
Isc = *(ckt->CKTstate0 + here->HICUMcqscp);
|
||||||
if (nqs) {
|
if (model->HICUMnqs) {
|
||||||
//Qxf1
|
//Qxf1
|
||||||
error = NIintegrate(ckt,&geq,&ceq,Qxf1_Vxf1,here->HICUMqxf1);
|
error = NIintegrate(ckt,&geq,&ceq,Qxf1_Vxf1,here->HICUMqxf1);
|
||||||
if(error) return(error);
|
if(error) return(error);
|
||||||
|
|
@ -2693,7 +2689,7 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
||||||
Ixf += *(ckt->CKTstate0 + here->HICUMcqxf);
|
Ixf += *(ckt->CKTstate0 + here->HICUMcqxf);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (selfheat)
|
if (model->HICUMselfheat)
|
||||||
{
|
{
|
||||||
//Qth
|
//Qth
|
||||||
error = NIintegrate(ckt,&geq,&ceq,here->HICUMcth_scaled,here->HICUMqcth);
|
error = NIintegrate(ckt,&geq,&ceq,here->HICUMcth_scaled,here->HICUMqcth);
|
||||||
|
|
@ -2732,7 +2728,7 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
||||||
*(ckt->CKTstate0 + here->HICUMcqxf2) ;
|
*(ckt->CKTstate0 + here->HICUMcqxf2) ;
|
||||||
*(ckt->CKTstate1 + here->HICUMcqxf) =
|
*(ckt->CKTstate1 + here->HICUMcqxf) =
|
||||||
*(ckt->CKTstate0 + here->HICUMcqxf) ;
|
*(ckt->CKTstate0 + here->HICUMcqxf) ;
|
||||||
if (selfheat)
|
if (model->HICUMselfheat)
|
||||||
*(ckt->CKTstate1 + here->HICUMcqcth) =
|
*(ckt->CKTstate1 + here->HICUMcqcth) =
|
||||||
*(ckt->CKTstate0 + here->HICUMcqcth) ;
|
*(ckt->CKTstate0 + here->HICUMcqcth) ;
|
||||||
}
|
}
|
||||||
|
|
@ -2975,7 +2971,7 @@ load:
|
||||||
*(here->HICUMemitEICollCIPtr) += Ibiei_Vbici;
|
*(here->HICUMemitEICollCIPtr) += Ibiei_Vbici;
|
||||||
*(here->HICUMbaseBICollCIPtr) += -Ibiei_Vbici;
|
*(here->HICUMbaseBICollCIPtr) += -Ibiei_Vbici;
|
||||||
*(here->HICUMemitEIBaseBIPtr) += -Ibiei_Vbici;
|
*(here->HICUMemitEIBaseBIPtr) += -Ibiei_Vbici;
|
||||||
if (nqs) {
|
if (model->HICUMnqs) {
|
||||||
*(here->HICUMbaseBIXfPtr) += Ibiei_Vxf;
|
*(here->HICUMbaseBIXfPtr) += Ibiei_Vxf;
|
||||||
*(here->HICUMemitEIXfPtr) += -Ibiei_Vxf;
|
*(here->HICUMemitEIXfPtr) += -Ibiei_Vxf;
|
||||||
}
|
}
|
||||||
|
|
@ -3019,7 +3015,7 @@ load:
|
||||||
*(here->HICUMemitEICollCIPtr) += Iciei_Vbici;
|
*(here->HICUMemitEICollCIPtr) += Iciei_Vbici;
|
||||||
*(here->HICUMcollCICollCIPtr) += -Iciei_Vbici;
|
*(here->HICUMcollCICollCIPtr) += -Iciei_Vbici;
|
||||||
*(here->HICUMemitEIBaseBIPtr) += -Iciei_Vbici;
|
*(here->HICUMemitEIBaseBIPtr) += -Iciei_Vbici;
|
||||||
if (nqs) {
|
if (model->HICUMnqs) {
|
||||||
// with respect to Vxf2
|
// with respect to Vxf2
|
||||||
*(here->HICUMcollCIXf2Ptr) += Iciei_Vxf2;
|
*(here->HICUMcollCIXf2Ptr) += Iciei_Vxf2;
|
||||||
*(here->HICUMemitEIXf2Ptr) += -Iciei_Vxf2;
|
*(here->HICUMemitEIXf2Ptr) += -Iciei_Vxf2;
|
||||||
|
|
@ -3112,7 +3108,7 @@ load:
|
||||||
*(here->HICUMsubsSISubsPtr) += -Isis_Vsis;
|
*(here->HICUMsubsSISubsPtr) += -Isis_Vsis;
|
||||||
*(here->HICUMsubsSubsSIPtr) += -Isis_Vsis;
|
*(here->HICUMsubsSubsSIPtr) += -Isis_Vsis;
|
||||||
|
|
||||||
if (nqs) {
|
if (model->HICUMnqs) {
|
||||||
// Branch: xf1-ground, Stamp element: Ixf1 f_xf1=+
|
// Branch: xf1-ground, Stamp element: Ixf1 f_xf1=+
|
||||||
rhs_current = Ixf1 - Ixf1_Vbici*Vbici - Ixf1_Vbiei*Vbiei -Ixf1_Vxf1*Vxf1 - Ixf1_Vxf2*Vxf2;
|
rhs_current = Ixf1 - Ixf1_Vbici*Vbici - Ixf1_Vbiei*Vbiei -Ixf1_Vxf1*Vxf1 - Ixf1_Vxf2*Vxf2;
|
||||||
*(ckt->CKTrhs + here->HICUMxf1Node) += -rhs_current; // rhs_current; // into xf1 node
|
*(ckt->CKTrhs + here->HICUMxf1Node) += -rhs_current; // rhs_current; // into xf1 node
|
||||||
|
|
@ -3148,7 +3144,7 @@ load:
|
||||||
// ############### FINISH STAMPS NO SH #########################
|
// ############### FINISH STAMPS NO SH #########################
|
||||||
// #############################################################
|
// #############################################################
|
||||||
|
|
||||||
if (selfheat) {
|
if (model->HICUMselfheat) {
|
||||||
|
|
||||||
// #############################################################
|
// #############################################################
|
||||||
// ############### STAMP WITH SH ADDITIONS #####################
|
// ############### STAMP WITH SH ADDITIONS #####################
|
||||||
|
|
@ -3245,7 +3241,7 @@ load:
|
||||||
*(here->HICUMbaseBPtempPtr) += Ibpsi_Vrth;
|
*(here->HICUMbaseBPtempPtr) += Ibpsi_Vrth;
|
||||||
*(here->HICUMsubsSItempPtr) += -Ibpsi_Vrth;
|
*(here->HICUMsubsSItempPtr) += -Ibpsi_Vrth;
|
||||||
|
|
||||||
if (nqs) {
|
if (model->HICUMnqs) {
|
||||||
// Stamp element: Ixf f_xf = +
|
// Stamp element: Ixf f_xf = +
|
||||||
rhs_current = -Ixf_dT*Vrth;
|
rhs_current = -Ixf_dT*Vrth;
|
||||||
*(ckt->CKTrhs + here->HICUMxfNode) += -rhs_current;
|
*(ckt->CKTrhs + here->HICUMxfNode) += -rhs_current;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue