fix hicumACload singular matrix bug

This commit is contained in:
Markus Mueller 2020-06-13 21:52:32 +02:00
parent 2a1f47e1e5
commit eae118787e
4 changed files with 109 additions and 18 deletions

View File

@ -68,9 +68,9 @@ HICUMacLoad(GENmodel *inModel, CKTcircuit *ckt)
double XQjci_Vrth;
double XQjep_Vbpei;
double XQjep_Vrth;
double Xqjcx0_t_i_Vbci;
double volatile Xqjcx0_t_i_Vbci;
double Xqjcx0_t_i_Vrth;
double Xqjcx0_t_ii_Vbpci;
double volatile Xqjcx0_t_ii_Vbpci;
double Xqjcx0_t_ii_Vrth;
double XQdsu_Vbpci;
double XQdsu_Vsici;
@ -378,19 +378,19 @@ HICUMacLoad(GENmodel *inModel, CKTcircuit *ckt)
*(here->HICUMcollCollPtr + 1) += -XQscp_Vsc;
//Qbepar1
*(here->HICUMbaseBasePtr + 1) += XQbepar1_Vbe;
*(here->HICUMemitEmitPtr + 1) += XQbepar1_Vbe;
*(here->HICUMbaseEmitPtr + 1) += -XQbepar1_Vbe;
*(here->HICUMemitBasePtr + 1) += -XQbepar1_Vbe;
*(here->HICUMemitEmitPtr + 1) += XQbepar1_Vbe;
//Qbepar2
*(here->HICUMbaseBPBaseBPPtr + 1) += XQbepar2_Vbpe;
*(here->HICUMemitEmitPtr + 1) += XQbepar2_Vbpe;
*(here->HICUMemitBaseBPPtr + 1) += -XQbepar2_Vbpe;
*(here->HICUMemitEmitPtr + 1) += -XQbepar2_Vbpe;
*(here->HICUMbaseBPEmitPtr + 1) += XQbepar2_Vbpe;
*(here->HICUMbaseBPEmitPtr + 1) += -XQbepar2_Vbpe;
//Qbcpar1
*(here->HICUMbaseBasePtr + 1) += XQbcpar1_Vbci;
*(here->HICUMcollCICollCIPtr + 1) += XQbcpar1_Vbci;
*(here->HICUMbaseCollCIPtr + 1) += -XQbcpar1_Vbci;
*(here->HICUMcollCIBasePtr + 1) += -XQbcpar1_Vbci;
*(here->HICUMcollCICollCIPtr + 1) += XQbcpar1_Vbci;
//Qbcpar2
*(here->HICUMbaseBPBaseBPPtr +1) += XQbepar2_Vbpe;
*(here->HICUMcollCICollCIPtr +1) += XQbepar2_Vbpe;
@ -398,9 +398,9 @@ HICUMacLoad(GENmodel *inModel, CKTcircuit *ckt)
*(here->HICUMcollCIBaseBPPtr +1) += -XQbepar2_Vbpe;
//Qsu
*(here->HICUMsubsSubsPtr + 1) += XQsu_Vsis;
*(here->HICUMsubsSISubsSIPtr + 1) += XQsu_Vsis;
*(here->HICUMsubsSISubsPtr + 1) += -XQsu_Vsis;
*(here->HICUMsubsSubsSIPtr + 1) += -XQsu_Vsis;
*(here->HICUMsubsSISubsSIPtr + 1) += XQsu_Vsis;
// Stamps with SH
if (model->HICUMflsh && model->HICUMrth >= 0.001) { //dirty: hardcoded MIN_R
@ -512,6 +512,8 @@ HICUMacLoad(GENmodel *inModel, CKTcircuit *ckt)
//Qcth from 0 to T f_0=- f_T=+
*(here->HICUMtempTempPtr + 1) += -XQcth_Vrth;
} else {
*(here->HICUMtempTempPtr) += ckt->CKTgmin;
}
}

View File

@ -2701,8 +2701,7 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
Ith_Vbbp = 2*Vbbp/here->HICUMrbx_t.rpart;
}
}
Ith += ckt->CKTgmin*Vrth;
Ith_Vrth += ckt->CKTgmin;
}
// ********************************************
@ -2720,6 +2719,10 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
//S from Isis
//all derivatives with gmin
Ibbp_Vbbp += ckt->CKTgmin;
Icic_Vcic += ckt->CKTgmin;
Ieie_Veie += ckt->CKTgmin;
Isis_Vsis += ckt->CKTgmin;
//Ibiei
Ibiei_Vbiei += ckt->CKTgmin;
Ibiei_Vbici += ckt->CKTgmin;
@ -2752,6 +2755,11 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
//SHE derivatives
if (!(model->HICUMflsh == 0 || model->HICUMrth < MIN_R )) {
// T node
Ith += ckt->CKTgmin*Vrth;
Ibbp_Vrth += ckt->CKTgmin;
Icic_Vrth += ckt->CKTgmin;
Ieie_Vrth += ckt->CKTgmin;
//Ibiei
Ibiei_Vrth += ckt->CKTgmin;
//Ibici

View File

@ -110,4 +110,93 @@ Ableitungen des Stromes gmin als Zusatz.
Praktisch heißt das, daß die Beaufschlagung von Iciei überflüssig ist,
da schon mit den Zweigen biei und bici erfolgt ist.
Es fehlen aber noch Beaufschlagungen,
z.B. Ibiei_Vbici, weil die Ableitung später hinzugekommen ist.
z.B. Ibiei_Vbici, weil die Ableitung später hinzugekommen ist.
# CMC Failing Tests
****** Checking test (ngspice): fgum_ac_npn_1D_ac
variant: standard (compared to: reference) FAIL (probably from some simulation failure)
****** Checking test (ngspice): fgum_ac_npn_internal_ac
variant: standard (compared to: reference) FAIL (probably from some simulation failure)
****** Checking test (ngspice): fgum_ac_npn_full_ac
variant: standard (compared to: reference) FAIL (probably from some simulation failure)
****** Checking test (ngspice): fgum_ac_npn_full_subcoupl_peri_bias_ac
variant: standard (compared to: reference) DIFFER (max rel error is 100%)
variant: standard (compared to: reference) DIFFER (max rel error is 100%)
****** Checking test (ngspice): fgum_ac_npn_full_subcoupl_peri_con_ac
variant: standard (compared to: reference) DIFFER (max rel error is 100%)
****** Checking test (ngspice): fgum_ac_npn_full_subcoupl_peri_bias_ac
variant: standard (compared to: reference) DIFFER (max rel error is 100%)
variant: standard (compared to: reference) DIFFER (max rel error is 100%)
****** Checking test (ngspice): fgum_ac_npn_full_subcoupl_peri_cond_ac
variant: standard (compared to: reference) DIFFER (max rel error is 100%)
****** Checking test (ngspice): fgum_ac_npn_vert_nqs_ac
variant: standard (compared to: reference) FAIL (probably from some simulation failure)
***** Checking test (ngspice): fgum_ac_npn_lat_nqs_ac
variant: standard (compared to: reference) FAIL (probably from some simulation failure)
****** Checking test (ngspice): fgum_ac_npn_cornoise_ac
variant: standard (compared to: reference) DIFFER (max rel error is 100%)
***** Checking test (ngspice): CBE_npn_1D_dc
variant: standard (compared to: reference) FAIL (probably from some simulation failure)
****** Checking test (ngspice): CBE_npn_1D_ac
variant: standard (compared to: reference) FAIL (probably from some simulation failure)
****** Checking test (ngspice): CBE_npn_internal_ac
variant: standard (compared to: reference) FAIL (probably from some simulation failure)
***** Checking test (ngspice): CBE_npn_full_ac
variant: standard (compared to: reference) FAIL (probably from some simulation failure)
***** Checking test (ngspice): ypara_npn_1D_ac
variant: standard (compared to: reference) FAIL (probably from some simulation failure)
***** Checking test (ngspice): ypara_npn_internal_ac
variant: standard (compared to: reference) FAIL (probably from some simulation failure)
***** Checking test (ngspice): ypara_npn_full_ac
variant: standard (compared to: reference) FAIL (probably from some simulation failure)
***** Checking test (ngspice): ypara_npn_full_sh_ac
variant: standard (compared to: reference) DIFFER (max rel error is 100%)
****** Checking test (ngspice): ypara_npn_full_subtran_ac
variant: standard (compared to: reference) DIFFER (max rel error is 100%)
****** Checking test (ngspice): ypara_npn_full_subcoupl_ac
variant: standard (compared to: reference) DIFFER (max rel error is 100%)
****** Checking test (ngspice): ypara_npn_full_subcoupl_peri_bias_ac
variant: standard (compared to: reference) DIFFER (max rel error is 100%)
variant: standard (compared to: reference) DIFFER (max rel error is 100%)
****** Checking test (ngspice): ypara_npn_full_subcoupl_peri_con_ac
variant: standard (compared to: reference) DIFFER (max rel error is 100%)
variant: standard (compared to: reference) DIFFER (max rel error is 100%)
***** Checking test (ngspice): ypara_npn_full_subcoupl_peri_bias_ac
variant: standard (compared to: reference) DIFFER (max rel error is 100%)
variant: standard (compared to: reference) DIFFER (max rel error is 100%)
****** Checking test (ngspice): ypara_npn_full_subcoupl_peri_con_ac
variant: standard (compared to: reference) DIFFER (max rel error is 100%)
variant: standard (compared to: reference) DIFFER (max rel error is 100%)
***** Checking test (ngspice): ypara_npn_vert_nqs_ac
variant: standard (compared to: reference) FAIL (probably from some simulation failure)
****** Checking test (ngspice): ypara_npn_lat_nqs_ac
variant: standard (compared to: reference) FAIL (probably from some simulation failure)
****** Checking test (ngspice): ypara_npn_cornoise_ac
variant: standard (compared to: reference) DIFFER (max rel error is 100%)

View File

@ -39,13 +39,5 @@ freq dec 5 1e+008 1e+011
outputs G(base,base) G(base,coll) G(coll,base) G(coll,coll) C(base,base) C(base,coll) C(coll,base) C(coll,coll)
modelParameters parameters/npn_full_sh
test ypara_npn_full_ac
temperature 27
biases V(emit)=0 V(subs)=0 V(coll)=1.000000
biasSweep V(base)=0.800000,0.950000,0.050000
freq dec 5 1e+008 1e+011
outputs G(base,base) G(base,coll) G(coll,base) G(coll,coll) C(base,base) C(base,coll) C(coll,base) C(coll,coll)
modelParameters parameters/npn_full
`ifdef NOT_USED
`endif