clarify charge and capacitance implementation
This commit is contained in:
parent
c318ef15ee
commit
414eeb4067
|
|
@ -1296,6 +1296,7 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
||||||
//Iteration for Q_pT is required for improved initial solution
|
//Iteration for Q_pT is required for improved initial solution
|
||||||
Qf = sqrt(T_f0*itf*Q_fT);
|
Qf = sqrt(T_f0*itf*Q_fT);
|
||||||
Q_pT = Q_0+Qf+Qr;
|
Q_pT = Q_0+Qf+Qr;
|
||||||
|
//todo: Q_pT_Vbiei, Vbici
|
||||||
d_Q = Q_pT;
|
d_Q = Q_pT;
|
||||||
while (fabs(d_Q) >= RTOLC*fabs(Q_pT) && l_it <= l_itmax) {
|
while (fabs(d_Q) >= RTOLC*fabs(Q_pT) && l_it <= l_itmax) {
|
||||||
double a;
|
double a;
|
||||||
|
|
@ -1606,24 +1607,16 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
||||||
|
|
||||||
// Load_sources
|
// Load_sources
|
||||||
|
|
||||||
// Ibci += ddt(model->HICUMtype*qjcx0_t_i);
|
|
||||||
// Ibci += ddt(cbcpar1*Vbci);
|
|
||||||
|
|
||||||
// Ibpci += ddt(cbcpar2*Vbpci);
|
|
||||||
|
|
||||||
// Ibpbi += ddt(Qrbi);
|
|
||||||
|
|
||||||
Ibpei = model->HICUMtype*ibep;
|
Ibpei = model->HICUMtype*ibep;
|
||||||
Ibpei += model->HICUMtype*irep;
|
Ibpei += model->HICUMtype*irep;
|
||||||
Ibpei_Vbpei += model->HICUMtype*irep_Vbpei;
|
Ibpei_Vbpei += model->HICUMtype*irep_Vbpei;
|
||||||
// Ibpei += ddt(model->HICUMtype*Qjep);
|
|
||||||
|
|
||||||
Ibiei = model->HICUMtype*ibei;
|
Ibiei = model->HICUMtype*ibei;
|
||||||
Ibiei += model->HICUMtype*irei;
|
Ibiei += model->HICUMtype*irei;
|
||||||
Ibiei_Vbiei += model->HICUMtype*irei_Vbiei;
|
Ibiei_Vbiei += model->HICUMtype*irei_Vbiei;
|
||||||
Ibiei += model->HICUMtype*ibh_rec;
|
Ibiei += model->HICUMtype*ibh_rec;
|
||||||
Ibiei_Vbiei += model->HICUMtype*ibh_rec_Vbiei;
|
Ibiei_Vbiei += model->HICUMtype*ibh_rec_Vbiei;
|
||||||
// Ibiei += ddt(model->HICUMtype*(Qdeix+Qjei));
|
|
||||||
if (model->HICUMtunode==1.0) {
|
if (model->HICUMtunode==1.0) {
|
||||||
Ibpei += -model->HICUMtype*ibet;
|
Ibpei += -model->HICUMtype*ibet;
|
||||||
Ibpei_Vbpei += -model->HICUMtype*ibet_Vbpei;
|
Ibpei_Vbpei += -model->HICUMtype*ibet_Vbpei;
|
||||||
|
|
@ -1635,19 +1628,11 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
||||||
Ibpsi = model->HICUMtype*HSI_Tsu;
|
Ibpsi = model->HICUMtype*HSI_Tsu;
|
||||||
|
|
||||||
Ibpci = model->HICUMtype*ijbcx;
|
Ibpci = model->HICUMtype*ijbcx;
|
||||||
// Ibpci += ddt(model->HICUMtype*(qjcx0_t_ii+Qdsu));
|
|
||||||
|
|
||||||
// Ibe += ddt(cbepar1*Vbe);
|
|
||||||
// Ibpe += ddt(cbepar2*Vbpe);
|
|
||||||
|
|
||||||
Ibici = model->HICUMtype*(ibci - iavl);
|
Ibici = model->HICUMtype*(ibci - iavl);
|
||||||
Ibici_Vbici = model->HICUMtype*(Ibici_Vbici - iavl_Vbici);
|
Ibici_Vbici = model->HICUMtype*(Ibici_Vbici - iavl_Vbici);
|
||||||
// Ibici += ddt(model->HICUMtype*(Qdci+Qjci));
|
|
||||||
|
|
||||||
Isici = model->HICUMtype*ijsc;
|
Isici = model->HICUMtype*ijsc;
|
||||||
// Isici += ddt(model->HICUMtype*Qjs);
|
|
||||||
|
|
||||||
// Isc += ddt(model->HICUMtype*Qscp);
|
|
||||||
|
|
||||||
Iciei = model->HICUMtype*(Itxf - itr);
|
Iciei = model->HICUMtype*(Itxf - itr);
|
||||||
Iciei_Vbiei = model->HICUMtype*itf_Vbiei;
|
Iciei_Vbiei = model->HICUMtype*itf_Vbiei;
|
||||||
|
|
@ -1655,7 +1640,6 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
||||||
|
|
||||||
//printf("Vbiei: %f Vbici: %f Vciei: %f Vbpei: %f Vbpci: %f Vbci: %f Vsici: %f\n", Vbiei, Vbici, Vciei, Vbpei, Vbpci, Vbci, Vsici);
|
//printf("Vbiei: %f Vbici: %f Vciei: %f Vbpei: %f Vbpci: %f Vbci: %f Vsici: %f\n", Vbiei, Vbici, Vciei, Vbpei, Vbpci, Vbci, Vsici);
|
||||||
//printf("Ibiei: %g Ibici: %g Ibpei: %g Iciei: %g\n",Ibiei,Ibici,Ibpei,Iciei);
|
//printf("Ibiei: %g Ibici: %g Ibpei: %g Iciei: %g\n",Ibiei,Ibici,Ibpei,Iciei);
|
||||||
// Isis += ddt(model->HICUMcsu*Vsis);
|
|
||||||
|
|
||||||
// Following code is an intermediate solution (if branch contribution is not supported):
|
// Following code is an intermediate solution (if branch contribution is not supported):
|
||||||
// ******************************************
|
// ******************************************
|
||||||
|
|
@ -1711,7 +1695,6 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
||||||
Ith_Vbbp = -Vbbp*Vbbp/here->HICUMrbx_t;
|
Ith_Vbbp = -Vbbp*Vbbp/here->HICUMrbx_t;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Ith += ddt(model->HICUMcth*Vrth);
|
|
||||||
}
|
}
|
||||||
// ********************************************
|
// ********************************************
|
||||||
|
|
||||||
|
|
@ -1721,8 +1704,6 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
||||||
// Ibxf2 = Ixf2;
|
// Ibxf2 = Ixf2;
|
||||||
// Icxf2 += ddt(Qxf2);
|
// Icxf2 += ddt(Qxf2);
|
||||||
|
|
||||||
// Icxf += ddt(Qxf); //for RC nw
|
|
||||||
|
|
||||||
// end of Load_sources
|
// end of Load_sources
|
||||||
|
|
||||||
if (rbi >= MIN_R) {
|
if (rbi >= MIN_R) {
|
||||||
|
|
@ -1904,61 +1885,71 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
||||||
*(ckt->CKTstate1 + here->HICUMqcth) =
|
*(ckt->CKTstate1 + here->HICUMqcth) =
|
||||||
*(ckt->CKTstate0 + here->HICUMqcth) ;
|
*(ckt->CKTstate0 + here->HICUMqcth) ;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Ibpbi += ddt(Qrbi);
|
||||||
error = NIintegrate(ckt,&geq,&ceq,Qrbi_Vbpbi,here->HICUMqrbi);
|
error = NIintegrate(ckt,&geq,&ceq,Qrbi_Vbpbi,here->HICUMqrbi);
|
||||||
if(error) return(error);
|
if(error) return(error);
|
||||||
Ibpbi_Vbpbi += geq;
|
Ibpbi_Vbpbi += geq;
|
||||||
Ibpbi += *(ckt->CKTstate0 + here->HICUMcqrbi);
|
Ibpbi += *(ckt->CKTstate0 + here->HICUMcqrbi);
|
||||||
|
|
||||||
|
// Ibiei += ddt(model->HICUMtype*(Qdeix+Qjei));
|
||||||
|
error = NIintegrate(ckt,&geq,&ceq,Cdei,here->HICUMqdeix);
|
||||||
|
if(error) return(error);
|
||||||
|
Ibiei_Vbiei += geq;
|
||||||
|
Ibiei += *(ckt->CKTstate0 + here->HICUMcqdeix);
|
||||||
|
|
||||||
error = NIintegrate(ckt,&geq,&ceq,Cjei,here->HICUMqjei);
|
error = NIintegrate(ckt,&geq,&ceq,Cjei,here->HICUMqjei);
|
||||||
if(error) return(error);
|
if(error) return(error);
|
||||||
Ibiei_Vbiei += geq;
|
Ibiei_Vbiei += geq;
|
||||||
Ibiei += *(ckt->CKTstate0 + here->HICUMcqjep);
|
Ibiei += *(ckt->CKTstate0 + here->HICUMcqjep);
|
||||||
|
|
||||||
error = NIintegrate(ckt,&geq,&ceq,Cdei,here->HICUMqdeix);
|
// Ibici += ddt(model->HICUMtype*(Qdci+Qjci));
|
||||||
|
error = NIintegrate(ckt,&geq,&ceq,Cdci,here->HICUMqdci);
|
||||||
if(error) return(error);
|
if(error) return(error);
|
||||||
Ibiei_Vbiei += geq;
|
Ibici_Vbici += geq;
|
||||||
Ibiei += *(ckt->CKTstate0 + here->HICUMcqdeix);
|
Ibici += *(ckt->CKTstate0 + here->HICUMcqdci);
|
||||||
|
|
||||||
error = NIintegrate(ckt,&geq,&ceq,Cjci,here->HICUMqjci);
|
error = NIintegrate(ckt,&geq,&ceq,Cjci,here->HICUMqjci);
|
||||||
if(error) return(error);
|
if(error) return(error);
|
||||||
Ibici_Vbici += geq;
|
Ibici_Vbici += geq;
|
||||||
Ibici += *(ckt->CKTstate0 + here->HICUMcqjci);
|
Ibici += *(ckt->CKTstate0 + here->HICUMcqjci);
|
||||||
|
|
||||||
error = NIintegrate(ckt,&geq,&ceq,Cdci,here->HICUMqdci);
|
// Ibpei += ddt(model->HICUMtype*Qjep);
|
||||||
if(error) return(error);
|
|
||||||
Ibici_Vbici += geq;
|
|
||||||
Ibici += *(ckt->CKTstate0 + here->HICUMcqdci);
|
|
||||||
|
|
||||||
error = NIintegrate(ckt,&geq,&ceq,Cjep,here->HICUMqjep);
|
error = NIintegrate(ckt,&geq,&ceq,Cjep,here->HICUMqjep);
|
||||||
if(error) return(error);
|
if(error) return(error);
|
||||||
Ibpei_Vbpei += geq;
|
Ibpei_Vbpei += geq;
|
||||||
Ibpei += *(ckt->CKTstate0 + here->HICUMcqjep);
|
Ibpei += *(ckt->CKTstate0 + here->HICUMcqjep);
|
||||||
|
|
||||||
|
// Isici += ddt(model->HICUMtype*Qjs);
|
||||||
|
error = NIintegrate(ckt,&geq,&ceq,Cjs,here->HICUMqjs);
|
||||||
|
if(error) return(error);
|
||||||
|
Isici_Vsici += geq;
|
||||||
|
Isici += *(ckt->CKTstate0 + here->HICUMcqjs);
|
||||||
|
|
||||||
|
// Ibci += ddt(model->HICUMtype*qjcx0_t_i);
|
||||||
|
error = NIintegrate(ckt,&geq,&ceq,CjCx_i,here->HICUMqjcx0_i);
|
||||||
|
if(error) return(error);
|
||||||
|
Ibci_Vbci = geq;
|
||||||
|
Ibci = *(ckt->CKTstate0 + here->HICUMcqcx0_t_i);
|
||||||
|
|
||||||
|
// Ibpci += ddt(model->HICUMtype*(qjcx0_t_ii+Qdsu));
|
||||||
|
error = NIintegrate(ckt,&geq,&ceq,CjCx_ii,here->HICUMqjcx0_ii);
|
||||||
|
if(error) return(error);
|
||||||
|
Ibpci_Vbpci += geq;
|
||||||
|
Ibpci += *(ckt->CKTstate0 + here->HICUMcqcx0_t_ii);
|
||||||
|
|
||||||
error = NIintegrate(ckt,&geq,&ceq,Qdsu_Vbpci,here->HICUMqdsu);
|
error = NIintegrate(ckt,&geq,&ceq,Qdsu_Vbpci,here->HICUMqdsu);
|
||||||
if(error) return(error);
|
if(error) return(error);
|
||||||
Ibpci_Vbpci += geq;
|
Ibpci_Vbpci += geq;
|
||||||
Ibpci += *(ckt->CKTstate0 + here->HICUMcqdsu);
|
Ibpci += *(ckt->CKTstate0 + here->HICUMcqdsu);
|
||||||
|
|
||||||
error = NIintegrate(ckt,&geq,&ceq,Cjs,here->HICUMqjs);
|
// Isc += ddt(model->HICUMtype*Qscp);
|
||||||
if(error) return(error);
|
|
||||||
Isici_Vsici += geq;
|
|
||||||
Isici += *(ckt->CKTstate0 + here->HICUMcqjs);
|
|
||||||
|
|
||||||
error = NIintegrate(ckt,&geq,&ceq,CjCx_i,here->HICUMqjcx0_i);
|
|
||||||
if(error) return(error);
|
|
||||||
Ibci_Vbci = geq;
|
|
||||||
Ibci = *(ckt->CKTstate0 + here->HICUMcqcx0_t_i);
|
|
||||||
|
|
||||||
error = NIintegrate(ckt,&geq,&ceq,CjCx_ii,here->HICUMqjcx0_ii);
|
|
||||||
if(error) return(error);
|
|
||||||
Ibpci_Vbpci += geq;
|
|
||||||
Ibpci += *(ckt->CKTstate0 + here->HICUMcqcx0_t_ii);
|
|
||||||
|
|
||||||
error = NIintegrate(ckt,&geq,&ceq,Cscp,here->HICUMqscp);
|
error = NIintegrate(ckt,&geq,&ceq,Cscp,here->HICUMqscp);
|
||||||
if(error) return(error);
|
if(error) return(error);
|
||||||
Isc_Vsc = geq;
|
Isc_Vsc = geq;
|
||||||
Isc = *(ckt->CKTstate0 + here->HICUMcqscp);
|
Isc = *(ckt->CKTstate0 + here->HICUMcqscp);
|
||||||
//NQS
|
//NQS
|
||||||
|
// Icxf += ddt(Qxf); //for RC nw
|
||||||
error = NIintegrate(ckt,&geq,&ceq,Qxf_Vxf,here->HICUMqxf);
|
error = NIintegrate(ckt,&geq,&ceq,Qxf_Vxf,here->HICUMqxf);
|
||||||
if(error) return(error);
|
if(error) return(error);
|
||||||
Iqxf_Vxf = geq;
|
Iqxf_Vxf = geq;
|
||||||
|
|
@ -1966,6 +1957,7 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
||||||
|
|
||||||
if (model->HICUMflsh)
|
if (model->HICUMflsh)
|
||||||
{
|
{
|
||||||
|
// Ith += ddt(model->HICUMcth*Vrth);
|
||||||
error = NIintegrate(ckt,&geq,&ceq,model->HICUMcth,here->HICUMqcth);
|
error = NIintegrate(ckt,&geq,&ceq,model->HICUMcth,here->HICUMqcth);
|
||||||
if(error) return(error);
|
if(error) return(error);
|
||||||
Icth_Vrth = geq;
|
Icth_Vrth = geq;
|
||||||
|
|
@ -2016,14 +2008,19 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
|
||||||
* charge storage for outer junctions
|
* charge storage for outer junctions
|
||||||
*/
|
*/
|
||||||
if(ckt->CKTmode & (MODETRAN | MODEAC)) {
|
if(ckt->CKTmode & (MODETRAN | MODEAC)) {
|
||||||
|
// Ibe += ddt(cbepar1*Vbe);
|
||||||
error = NIintegrate(ckt,&gqbepar1,&cqbepar1,cbepar1,here->HICUMqbepar1);
|
error = NIintegrate(ckt,&gqbepar1,&cqbepar1,cbepar1,here->HICUMqbepar1);
|
||||||
if(error) return(error);
|
if(error) return(error);
|
||||||
|
// Ibpe += ddt(cbepar2*Vbpe);
|
||||||
error = NIintegrate(ckt,&gqbepar2,&cqbepar2,cbepar2,here->HICUMqbepar2);
|
error = NIintegrate(ckt,&gqbepar2,&cqbepar2,cbepar2,here->HICUMqbepar2);
|
||||||
if(error) return(error);
|
if(error) return(error);
|
||||||
|
// Ibci += ddt(cbcpar1*Vbci);
|
||||||
error = NIintegrate(ckt,&gqbcpar1,&cqbcpar1,cbcpar1,here->HICUMqbcpar1);
|
error = NIintegrate(ckt,&gqbcpar1,&cqbcpar1,cbcpar1,here->HICUMqbcpar1);
|
||||||
if(error) return(error);
|
if(error) return(error);
|
||||||
|
// Ibpci += ddt(cbcpar2*Vbpci);
|
||||||
error = NIintegrate(ckt,&gqbcpar2,&cqbcpar2,cbcpar2,here->HICUMqbcpar2);
|
error = NIintegrate(ckt,&gqbcpar2,&cqbcpar2,cbcpar2,here->HICUMqbcpar2);
|
||||||
if(error) return(error);
|
if(error) return(error);
|
||||||
|
// Isis += ddt(model->HICUMcsu*Vsis);
|
||||||
error = NIintegrate(ckt,&gqsu,&cqsu,model->HICUMcsu,here->HICUMqsu);
|
error = NIintegrate(ckt,&gqsu,&cqsu,model->HICUMcsu,here->HICUMqsu);
|
||||||
if(error) return(error);
|
if(error) return(error);
|
||||||
//tocheck: Currents and conductances must used in stamping below
|
//tocheck: Currents and conductances must used in stamping below
|
||||||
|
|
@ -2295,25 +2292,26 @@ c Branch: sis, Stamp element: Rsu
|
||||||
*(here->HICUMsubsSubsSIPtr) += -Isis_Vsis;
|
*(here->HICUMsubsSubsSIPtr) += -Isis_Vsis;
|
||||||
//NQS
|
//NQS
|
||||||
/*
|
/*
|
||||||
c Branch: xf, Stamp element: Ixf
|
c Branch: xf-ground, Stamp element: Ixf
|
||||||
*/
|
*/
|
||||||
|
// rhs_current = model->HICUMtype * (Ixf - Ixf_Vrth*Vrth - Ixf_Vbiei*Vbiei - Ixf_Vbici*Vbici);
|
||||||
rhs_current = model->HICUMtype * Ixf;
|
rhs_current = model->HICUMtype * Ixf;
|
||||||
*(ckt->CKTrhs + here->HICUMxfNode) += -rhs_current;
|
*(ckt->CKTrhs + here->HICUMxfNode) += rhs_current; // into xf node
|
||||||
// *(here->HICUMxfTempPtr) += -Ixf_Vrth;
|
// *(here->HICUMxfTempPtr) += -Ixf_Vrth;
|
||||||
// *(here->HICUMxfBaseBIPtr) += -Ixf_Vbiei;
|
// *(here->HICUMxfBaseBIPtr) += -Ixf_Vbiei;
|
||||||
// *(here->HICUMxfEmitEIPtr) += +Ixf_Vbiei;
|
// *(here->HICUMxfEmitEIPtr) += +Ixf_Vbiei;
|
||||||
// *(here->HICUMxfBaseBIPtr) += -Ixf_Vbici;
|
// *(here->HICUMxfBaseBIPtr) += -Ixf_Vbici;
|
||||||
// *(here->HICUMxfCollCIPtr) += +Ixf_Vbici;
|
// *(here->HICUMxfCollCIPtr) += +Ixf_Vbici;
|
||||||
/*
|
/*
|
||||||
c Branch: xf, Stamp element: Qxf
|
c Branch: xf-ground, Stamp element: Qxf
|
||||||
*/
|
*/
|
||||||
rhs_current = model->HICUMtype * (Iqxf - Iqxf_Vxf*Vxf);
|
rhs_current = model->HICUMtype * (Iqxf - Iqxf_Vxf*Vxf);
|
||||||
*(ckt->CKTrhs + here->HICUMxfNode) += -rhs_current;
|
*(ckt->CKTrhs + here->HICUMxfNode) += rhs_current; // into ground
|
||||||
*(here->HICUMxfXfPtr) += Iqxf_Vxf;
|
*(here->HICUMxfXfPtr) += Iqxf_Vxf;
|
||||||
/*
|
/*
|
||||||
c Branch: xf, Stamp element: Rxf
|
c Branch: xf-ground, Stamp element: Rxf
|
||||||
*/
|
*/
|
||||||
*(here->HICUMxfXfPtr) += 1.0;
|
*(here->HICUMxfXfPtr) += Tf; // current Ixf is normalized to Tf
|
||||||
|
|
||||||
if (model->HICUMflsh) {
|
if (model->HICUMflsh) {
|
||||||
/*
|
/*
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue