From ee25c6ce4209927377018dbd6ac0e926a36f6a9c Mon Sep 17 00:00:00 2001 From: Markus Mueller Date: Mon, 1 Jun 2020 20:07:25 +0200 Subject: [PATCH] cleaned up --- src/spicelib/devices/hicum2/hicum2acld.c | 4 +- src/spicelib/devices/hicum2/hicum2conv.c | 3 +- src/spicelib/devices/hicum2/hicum2defs.h | 155 ++++++++++++----------- src/spicelib/devices/hicum2/hicum2load.c | 7 +- src/spicelib/devices/hicum2/hicum2pzld.c | 2 + src/spicelib/devices/hicum2/hicumL2.cpp | 81 +++++++----- 6 files changed, 142 insertions(+), 110 deletions(-) diff --git a/src/spicelib/devices/hicum2/hicum2acld.c b/src/spicelib/devices/hicum2/hicum2acld.c index 220d309e0..54cc7eeae 100644 --- a/src/spicelib/devices/hicum2/hicum2acld.c +++ b/src/spicelib/devices/hicum2/hicum2acld.c @@ -26,6 +26,7 @@ HICUMacLoad(GENmodel *inModel, CKTcircuit *ckt) double Ibiei_Vbiei; double Ibiei_Vbici; double Ibici_Vbici; + double Ibici_Vbiei; double Ibpci_Vbpci; double Isici_Vsici; double Iciei_Vbiei; @@ -75,6 +76,7 @@ HICUMacLoad(GENmodel *inModel, CKTcircuit *ckt) Iciei_Vbiei = *(ckt->CKTstate0 + here->HICUMiciei_Vbiei); Iciei_Vbici = *(ckt->CKTstate0 + here->HICUMiciei_Vbici); Ibici_Vbici = *(ckt->CKTstate0 + here->HICUMibici_Vbici); + Ibici_Vbiei = *(ckt->CKTstate0 + here->HICUMibici_Vbiei); Ibpbi_Vbpbi = *(ckt->CKTstate0 + here->HICUMibpbi_Vbpbi); Ibpbi_Vbiei = *(ckt->CKTstate0 + here->HICUMibpbi_Vbiei); Ibpbi_Vciei = *(ckt->CKTstate0 + here->HICUMibpbi_Vbici); @@ -113,7 +115,7 @@ c Stamp element: Iciei *(here->HICUMemitEIBaseBIPtr) += -Iciei_Vbici; *(here->HICUMemitEICollCIPtr) += Iciei_Vbici; /* -c Stamp element: Ibici +c Stamp element: Ibici (missing Ibici_Vbiei) */ *(here->HICUMbaseBIBaseBIPtr) += Ibici_Vbici; *(here->HICUMbaseBICollCIPtr) += -Ibici_Vbici; diff --git a/src/spicelib/devices/hicum2/hicum2conv.c b/src/spicelib/devices/hicum2/hicum2conv.c index f0ef63954..05be76650 100644 --- a/src/spicelib/devices/hicum2/hicum2conv.c +++ b/src/spicelib/devices/hicum2/hicum2conv.c @@ -82,7 +82,8 @@ HICUMconvTest(GENmodel *inModel, CKTcircuit *ckt) *(ckt->CKTstate0 + here->HICUMibiei_Vbiei)*delvbiei + *(ckt->CKTstate0 + here->HICUMibiei_Vbici)*delvbici; ibicihat = *(ckt->CKTstate0 + here->HICUMibici) + - *(ckt->CKTstate0 + here->HICUMibici_Vbici)*delvbici; + *(ckt->CKTstate0 + here->HICUMibici_Vbici)*delvbici+ + *(ckt->CKTstate0 + here->HICUMibici_Vbiei)*delvbiei; icieihat = *(ckt->CKTstate0 + here->HICUMiciei) + *(ckt->CKTstate0 + here->HICUMiciei_Vbiei)*delvbiei + *(ckt->CKTstate0 + here->HICUMiciei_Vbici)*delvbici; diff --git a/src/spicelib/devices/hicum2/hicum2defs.h b/src/spicelib/devices/hicum2/hicum2defs.h index abb8179a0..eda882c28 100644 --- a/src/spicelib/devices/hicum2/hicum2defs.h +++ b/src/spicelib/devices/hicum2/hicum2defs.h @@ -324,112 +324,113 @@ typedef struct sHICUMinstance { #define HICUMibici HICUMstate+14 #define HICUMibici_Vbici HICUMstate+15 +#define HICUMibici_Vbiei HICUMstate+16 -#define HICUMibpbi HICUMstate+16 -#define HICUMibpbi_Vbpbi HICUMstate+17 -#define HICUMibpbi_Vbiei HICUMstate+18 -#define HICUMibpbi_Vbici HICUMstate+19 +#define HICUMibpbi HICUMstate+17 +#define HICUMibpbi_Vbpbi HICUMstate+18 +#define HICUMibpbi_Vbiei HICUMstate+19 +#define HICUMibpbi_Vbici HICUMstate+20 -#define HICUMibpci HICUMstate+20 -#define HICUMibpci_Vbpci HICUMstate+21 +#define HICUMibpci HICUMstate+21 +#define HICUMibpci_Vbpci HICUMstate+22 -#define HICUMisici HICUMstate+22 -#define HICUMisici_Vsici HICUMstate+23 +#define HICUMisici HICUMstate+23 +#define HICUMisici_Vsici HICUMstate+24 -#define HICUMibpsi HICUMstate+24 -#define HICUMibpsi_Vbpci HICUMstate+25 -#define HICUMibpsi_Vsici HICUMstate+26 +#define HICUMibpsi HICUMstate+25 +#define HICUMibpsi_Vbpci HICUMstate+26 +#define HICUMibpsi_Vsici HICUMstate+27 -#define HICUMisis_Vsis HICUMstate+27 +#define HICUMisis_Vsis HICUMstate+28 -#define HICUMieie HICUMstate+28 // needed for re-flicker noise +#define HICUMieie HICUMstate+29 // needed for re-flicker noise -#define HICUMqrbi HICUMstate+29 -#define HICUMcqrbi HICUMstate+30 +#define HICUMqrbi HICUMstate+30 +#define HICUMcqrbi HICUMstate+31 -#define HICUMqjei HICUMstate+31 -#define HICUMcqjei HICUMstate+32 +#define HICUMqjei HICUMstate+32 +#define HICUMcqjei HICUMstate+33 -#define HICUMqdeix HICUMstate+33 -#define HICUMcqdeix HICUMstate+34 +#define HICUMqdeix HICUMstate+34 +#define HICUMcqdeix HICUMstate+35 -#define HICUMqjci HICUMstate+35 -#define HICUMcqjci HICUMstate+36 +#define HICUMqjci HICUMstate+36 +#define HICUMcqjci HICUMstate+37 -#define HICUMqdci HICUMstate+37 -#define HICUMcqdci HICUMstate+38 +#define HICUMqdci HICUMstate+38 +#define HICUMcqdci HICUMstate+39 -#define HICUMqjep HICUMstate+39 -#define HICUMcqjep HICUMstate+40 +#define HICUMqjep HICUMstate+40 +#define HICUMcqjep HICUMstate+41 -#define HICUMqjcx0_i HICUMstate+41 -#define HICUMcqcx0_t_i HICUMstate+42 +#define HICUMqjcx0_i HICUMstate+42 +#define HICUMcqcx0_t_i HICUMstate+43 -#define HICUMqjcx0_ii HICUMstate+43 -#define HICUMcqcx0_t_ii HICUMstate+44 +#define HICUMqjcx0_ii HICUMstate+44 +#define HICUMcqcx0_t_ii HICUMstate+45 -#define HICUMqdsu HICUMstate+45 -#define HICUMcqdsu HICUMstate+46 +#define HICUMqdsu HICUMstate+46 +#define HICUMcqdsu HICUMstate+47 -#define HICUMqjs HICUMstate+47 -#define HICUMcqjs HICUMstate+48 +#define HICUMqjs HICUMstate+48 +#define HICUMcqjs HICUMstate+49 -#define HICUMqscp HICUMstate+49 -#define HICUMcqscp HICUMstate+50 +#define HICUMqscp HICUMstate+50 +#define HICUMcqscp HICUMstate+51 -#define HICUMqbepar1 HICUMstate+51 -#define HICUMcqbepar1 HICUMstate+52 -#define HICUMgqbepar1 HICUMstate+53 +#define HICUMqbepar1 HICUMstate+52 +#define HICUMcqbepar1 HICUMstate+53 +#define HICUMgqbepar1 HICUMstate+54 -#define HICUMqbepar2 HICUMstate+54 -#define HICUMcqbepar2 HICUMstate+55 -#define HICUMgqbepar2 HICUMstate+56 +#define HICUMqbepar2 HICUMstate+55 +#define HICUMcqbepar2 HICUMstate+56 +#define HICUMgqbepar2 HICUMstate+57 -#define HICUMqbcpar1 HICUMstate+57 -#define HICUMcqbcpar1 HICUMstate+58 -#define HICUMgqbcpar1 HICUMstate+59 +#define HICUMqbcpar1 HICUMstate+58 +#define HICUMcqbcpar1 HICUMstate+59 +#define HICUMgqbcpar1 HICUMstate+60 -#define HICUMqbcpar2 HICUMstate+60 -#define HICUMcqbcpar2 HICUMstate+61 -#define HICUMgqbcpar2 HICUMstate+62 +#define HICUMqbcpar2 HICUMstate+61 +#define HICUMcqbcpar2 HICUMstate+62 +#define HICUMgqbcpar2 HICUMstate+63 -#define HICUMqsu HICUMstate+63 -#define HICUMcqsu HICUMstate+64 -#define HICUMgqsu HICUMstate+65 +#define HICUMqsu HICUMstate+64 +#define HICUMcqsu HICUMstate+65 +#define HICUMgqsu HICUMstate+66 -#define HICUMqcth HICUMstate+66 /* thermal capacitor charge */ -#define HICUMcqcth HICUMstate+67 /* thermal capacitor current */ +#define HICUMqcth HICUMstate+67 /* thermal capacitor charge */ +#define HICUMcqcth HICUMstate+68 /* thermal capacitor current */ -#define HICUMvrth HICUMstate+68 -#define HICUMicth_dT HICUMstate+69 +#define HICUMvrth HICUMstate+69 +#define HICUMicth_dT HICUMstate+70 -#define HICUMvxf HICUMstate+70 -#define HICUMqxf HICUMstate+71 -#define HICUMcqxf HICUMstate+72 -#define HICUMgqxf HICUMstate+73 -#define HICUMixf_Vbiei HICUMstate+74 -#define HICUMixf_Vbici HICUMstate+75 +#define HICUMvxf HICUMstate+71 +#define HICUMqxf HICUMstate+72 +#define HICUMcqxf HICUMstate+73 +#define HICUMgqxf HICUMstate+74 +#define HICUMixf_Vbiei HICUMstate+75 +#define HICUMixf_Vbici HICUMstate+76 -#define HICUMvxf1 HICUMstate+76 -#define HICUMqxf1 HICUMstate+77 -#define HICUMcqxf1 HICUMstate+78 -#define HICUMgqxf1 HICUMstate+79 -#define HICUMixf1_Vbiei HICUMstate+80 -#define HICUMixf1_Vbici HICUMstate+81 -#define HICUMixf1_Vfx2 HICUMstate+82 +#define HICUMvxf1 HICUMstate+77 +#define HICUMqxf1 HICUMstate+78 +#define HICUMcqxf1 HICUMstate+79 +#define HICUMgqxf1 HICUMstate+80 +#define HICUMixf1_Vbiei HICUMstate+81 +#define HICUMixf1_Vbici HICUMstate+82 +#define HICUMixf1_Vfx2 HICUMstate+83 -#define HICUMvxf2 HICUMstate+83 -#define HICUMqxf2 HICUMstate+84 -#define HICUMcqxf2 HICUMstate+85 -#define HICUMgqxf2 HICUMstate+86 -#define HICUMixf2_Vbiei HICUMstate+87 -#define HICUMixf2_Vbici HICUMstate+88 -#define HICUMixf2_Vfx1 HICUMstate+89 +#define HICUMvxf2 HICUMstate+84 +#define HICUMqxf2 HICUMstate+85 +#define HICUMcqxf2 HICUMstate+86 +#define HICUMgqxf2 HICUMstate+87 +#define HICUMixf2_Vbiei HICUMstate+88 +#define HICUMixf2_Vbici HICUMstate+89 +#define HICUMixf2_Vfx1 HICUMstate+90 -#define HICUMith HICUMstate+90 -#define HICUMith_Vrth HICUMstate+91 +#define HICUMith HICUMstate+91 +#define HICUMith_Vrth HICUMstate+92 -#define HICUMnumStates 92 +#define HICUMnumStates 93 /* per model data */ typedef struct sHICUMmodel { /* model structure for a hicum */ diff --git a/src/spicelib/devices/hicum2/hicum2load.c b/src/spicelib/devices/hicum2/hicum2load.c index 249033dfe..2fdc3c769 100644 --- a/src/spicelib/devices/hicum2/hicum2load.c +++ b/src/spicelib/devices/hicum2/hicum2load.c @@ -835,6 +835,8 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt) *(ckt->CKTstate1 + here->HICUMibici); *(ckt->CKTstate0 + here->HICUMibici_Vbici) = *(ckt->CKTstate1 + here->HICUMibici_Vbici); + *(ckt->CKTstate0 + here->HICUMibici_Vbiei) = + *(ckt->CKTstate1 + here->HICUMibici_Vbiei); *(ckt->CKTstate0 + here->HICUMibpei) = *(ckt->CKTstate1 + here->HICUMibpei); *(ckt->CKTstate0 + here->HICUMibpbi) = @@ -956,7 +958,8 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt) *(ckt->CKTstate0 + here->HICUMibiei_Vbiei)*delvbiei + *(ckt->CKTstate0 + here->HICUMibiei_Vbici)*delvbici; ibicihat = *(ckt->CKTstate0 + here->HICUMibici) + - *(ckt->CKTstate0 + here->HICUMibici_Vbici)*delvbici; + *(ckt->CKTstate0 + here->HICUMibici_Vbici)*delvbici+ + *(ckt->CKTstate0 + here->HICUMibici_Vbiei)*delvbiei; ibpeihat = *(ckt->CKTstate0 + here->HICUMibpei) + *(ckt->CKTstate0 + here->HICUMibpei_Vbpei)*delvbpei; ibpcihat = *(ckt->CKTstate0 + here->HICUMibpci) + @@ -1058,6 +1061,7 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt) Ibici = *(ckt->CKTstate0 + here->HICUMibici); Ibici_Vbici = *(ckt->CKTstate0 + here->HICUMibici_Vbici); + Ibici_Vbiei = *(ckt->CKTstate0 + here->HICUMibici_Vbiei); Ibpbi = *(ckt->CKTstate0 + here->HICUMibpbi); Ibpbi_Vbpbi = *(ckt->CKTstate0 + here->HICUMibpbi_Vbpbi); @@ -2091,6 +2095,7 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt) *(ckt->CKTstate0 + here->HICUMibici) = Ibici; *(ckt->CKTstate0 + here->HICUMibici_Vbici) = Ibici_Vbici; + *(ckt->CKTstate0 + here->HICUMibici_Vbiei) = Ibici_Vbiei; *(ckt->CKTstate0 + here->HICUMibpbi) = Ibpbi; *(ckt->CKTstate0 + here->HICUMibpbi_Vbpbi) = Ibpbi_Vbpbi; diff --git a/src/spicelib/devices/hicum2/hicum2pzld.c b/src/spicelib/devices/hicum2/hicum2pzld.c index 59ecf77b4..62aca52f1 100644 --- a/src/spicelib/devices/hicum2/hicum2pzld.c +++ b/src/spicelib/devices/hicum2/hicum2pzld.c @@ -26,6 +26,7 @@ HICUMpzLoad(GENmodel *inModel, CKTcircuit *ckt, SPcomplex *s) double Ibiei_Vbiei; double Ibiei_Vbici; double Ibici_Vbici; + double Ibici_Vbiei; double Ibpci_Vbpci; double Isici_Vsici; double Iciei_Vbiei; @@ -75,6 +76,7 @@ HICUMpzLoad(GENmodel *inModel, CKTcircuit *ckt, SPcomplex *s) Iciei_Vbiei = *(ckt->CKTstate0 + here->HICUMiciei_Vbiei); Iciei_Vbici = *(ckt->CKTstate0 + here->HICUMiciei_Vbici); Ibici_Vbici = *(ckt->CKTstate0 + here->HICUMibici_Vbici); + Ibici_Vbiei = *(ckt->CKTstate0 + here->HICUMibici_Vbiei); Ibpbi_Vbpbi = *(ckt->CKTstate0 + here->HICUMibpbi_Vbpbi); Ibpbi_Vbiei = *(ckt->CKTstate0 + here->HICUMibpbi_Vbiei); Ibpbi_Vciei = *(ckt->CKTstate0 + here->HICUMibpbi_Vbici); diff --git a/src/spicelib/devices/hicum2/hicumL2.cpp b/src/spicelib/devices/hicum2/hicumL2.cpp index 60449f125..76876557b 100644 --- a/src/spicelib/devices/hicum2/hicumL2.cpp +++ b/src/spicelib/devices/hicum2/hicumL2.cpp @@ -471,6 +471,7 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt) double ibpbihat; double isicihat; double ibpsihat; + double ithhat; double ceq, geq=0.0; double volatile rhs_current; int icheck=1; @@ -479,19 +480,19 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt) double Vbe, Vcic, Vbbp, Veie, Vsis, Vbpe; double Ibiei, Ibiei_Vbiei, Ibiei_Vbici; - double Ibici, Ibici_Vbici; + double Ibici, Ibici_Vbici, Ibici_Vbiei; double Ibpei, Ibpei_Vbpei; double Ibpci, Ibpci_Vbpci; - double Isici, Isici_Vsici; + double Isici, Isici_Vsici;// double Isc=0, Isc_Vsc=0; double Iciei, Iciei_Vbiei, Iciei_Vbici, Iciei_dT; double Ibbp_Vbbp=0; double Isis_Vsis; double Ieie, Ieie_Veie=0; double Ibpbi, Ibpbi_Vbpbi, Ibpbi_Vbici, Ibpbi_Vbiei; - double Ibpsi, Ibpsi_Vbpci, Ibpsi_Vsici; + double Ibpsi, Ibpsi_Vbpci, Ibpsi_Vsici, Ibpsi_dT=0; double Icic_Vcic=0; - // double Ibci, Ibci_Vbci, Ibci_dT; + double Ibci=0, Ibci_Vbci=0, Ibci_dT; double volatile hjei_vbe_Vbiei, hjei_vbe_dT, ibet_Vbpei=0.0, ibet_dT=0, ibet_Vbiei=0.0, ibh_rec_Vbiei, ibh_rec_dT, ibh_rec_Vbici; double irei_Vbiei, irei_dT; double ibep_Vbpei, ibep_dT; @@ -1414,6 +1415,8 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt) *(ckt->CKTstate1 + here->HICUMibici); *(ckt->CKTstate0 + here->HICUMibici_Vbici) = *(ckt->CKTstate1 + here->HICUMibici_Vbici); + *(ckt->CKTstate0 + here->HICUMibici_Vbiei) = + *(ckt->CKTstate1 + here->HICUMibici_Vbiei); *(ckt->CKTstate0 + here->HICUMibpei) = *(ckt->CKTstate1 + here->HICUMibpei); *(ckt->CKTstate0 + here->HICUMibpbi) = @@ -1538,7 +1541,8 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt) *(ckt->CKTstate0 + here->HICUMibiei_Vbiei)*delvbiei+ *(ckt->CKTstate0 + here->HICUMibiei_Vbici)*delvbici, ibicihat = *(ckt->CKTstate0 + here->HICUMibici) + - *(ckt->CKTstate0 + here->HICUMibici_Vbici)*delvbici; + *(ckt->CKTstate0 + here->HICUMibici_Vbici)*delvbici+ + *(ckt->CKTstate0 + here->HICUMibici_Vbiei)*delvbiei; ibpeihat = *(ckt->CKTstate0 + here->HICUMibpei) + *(ckt->CKTstate0 + here->HICUMibpei_Vbpei)*delvbpei; ibpcihat = *(ckt->CKTstate0 + here->HICUMibpci) + @@ -1555,6 +1559,8 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt) ibpsihat = *(ckt->CKTstate0 + here->HICUMibpsi) + *(ckt->CKTstate0 + here->HICUMibpsi_Vbpci)*delvbpci + *(ckt->CKTstate0 + here->HICUMibpsi_Vsici)*delvsici; + ithhat = *(ckt->CKTstate0 + here->HICUMith) + + *(ckt->CKTstate0 + here->HICUMith_Vrth)*delvrth; /* * bypass if solution has not changed */ @@ -1607,6 +1613,10 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt) ckt->CKTreltol* MAX(fabs(isicihat), fabs(*(ckt->CKTstate0 + here->HICUMisici)))+ ckt->CKTabstol) ) + if( (fabs(ithhat-*(ckt->CKTstate0 + here->HICUMith)) < + ckt->CKTreltol* MAX(fabs(ithhat), + fabs(*(ckt->CKTstate0 + here->HICUMith)))+ + ckt->CKTabstol) ) if( (fabs(ibpsihat-*(ckt->CKTstate0 + here->HICUMibpsi)) < ckt->CKTreltol* MAX(fabs(ibpsihat), fabs(*(ckt->CKTstate0 + here->HICUMibpsi)))+ @@ -1634,6 +1644,7 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt) Ibici = *(ckt->CKTstate0 + here->HICUMibici); Ibici_Vbici = *(ckt->CKTstate0 + here->HICUMibici_Vbici); + Ibici_Vbiei = *(ckt->CKTstate0 + here->HICUMibici_Vbiei); Ibpbi = *(ckt->CKTstate0 + here->HICUMibpbi); Ibpbi_Vbpbi = *(ckt->CKTstate0 + here->HICUMibpbi_Vbpbi); @@ -1895,8 +1906,6 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt) Tf_dT += Tf_dick*ick_dT; } else { //Newton needed - //todo: derivatives of temperature dependent hicum parameters - //todo: it should be enough to run the newtone once -> potential for performance improvement is exactly here result = calc_it(here->HICUMtemp+1_e, Vbiei , Vbici , Q_0 , T_f0 , ick ); Q_pT = result.rpart(); Q_pT_dT = result.dpart(); @@ -2160,7 +2169,6 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt) result = calc_ibet(Vbiei, Vbpei, here->HICUMtemp+1_e); ibet_dT = result.dpart(); - //Base currents across peripheral b-c junction (bp,ci) hicum_diode(here->HICUMtemp,here->HICUMibcxs_t,model->HICUMmbcx, Vbpci, &ijbcx, &ijbcx_Vbpci, &ijbcx_dT); @@ -2315,26 +2323,30 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt) Ibiei += model->HICUMtype*ibh_rec; Ibiei_Vbiei += model->HICUMtype*ibh_rec_Vbiei; Ibiei_dT += model->HICUMtype*ibh_rec_dT; - Ibiei_Vbici += model->HICUMtype*ibh_rec_Vbici; + Ibiei_Vbici = model->HICUMtype*ibh_rec_Vbici; if (model->HICUMtunode==1.0) { Ibpei += -model->HICUMtype*ibet; Ibpei_Vbpei += -model->HICUMtype*ibet_Vbpei; + Ibpei_dT += -model->HICUMtype*ibet_dT; } else { Ibiei += -model->HICUMtype*ibet; Ibiei_Vbiei += -model->HICUMtype*ibet_Vbiei; + Ibiei_dT += -model->HICUMtype*ibet_dT; } //printf("Vbiei: %f ibei: %g irei: %g ibh_rec: %g ibet: %g\n",Vbiei,ibei,irei,ibh_rec,ibet); Ibpsi = model->HICUMtype*HSI_Tsu; Ibpsi_Vbpci = model->HICUMtype*HSI_Tsu_Vbpci; Ibpsi_Vsici = model->HICUMtype*HSI_Tsu_Vsici; + Ibpsi_dT = model->HICUMtype*HSI_Tsu_dT; Ibpci = model->HICUMtype*ijbcx; Ibpci_Vbpci = model->HICUMtype*ijbcx_Vbpci; Ibpci_dT = model->HICUMtype*ijbcx_dT; Ibici = model->HICUMtype*(ibci - iavl); - Ibici_Vbici = model->HICUMtype*(ibci_Vbici - iavl_Vbici); //@Dietmar: What about Ibici_Vbiei from Iavl? + Ibici_Vbici = model->HICUMtype*(ibci_Vbici - iavl_Vbici); + Ibici_Vbiei = model->HICUMtype*(iavl_Vbiei); Ibici_dT = model->HICUMtype*(ibci_dT - iavl_dT); Isici = model->HICUMtype*ijsc; @@ -2414,7 +2426,7 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt) Ith_dT = pterm_dT; Ith_dT += -1/here->HICUMrth_t.rpart; - Ith_dT += +Vrth/here->HICUMrth_t.rpart/here->HICUMrth_t.rpart * here->HICUMrth_t.dpart; //Mario check this please + Ith_dT += +Vrth/here->HICUMrth_t.rpart/here->HICUMrth_t.rpart * here->HICUMrth_t.dpart; if (model->HICUMflsh == 1) { //Iciei(Vbiei,Vbici)*(Vbiei-Vbici) Ith_Vbiei += it_Vbiei*(Vbiei-Vbici) + it; @@ -2424,14 +2436,14 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt) Ith_Vbici += (here->HICUMvdci_t.rpart-Vbici)*iavl_Vbici - iavl; } else if (model->HICUMflsh == 2) { //Iciei(Vbiei,Vbici)*Vciei - Ith_Vciei += it; - Ith_Vbiei += it_Vbiei*Vciei; - Ith_Vbici += it_Vbici*Vciei; + Ith_Vbiei += it_Vbiei*(Vbiei-Vbici) + it; + Ith_Vbici += it_Vbici*(Vbiei-Vbici) - it; //Vbiei*Ibiei(Vbiei) Ith_Vbiei += Ibiei + Ibiei_Vbiei*Vbiei; Ith_Vbici += Ibiei_Vbici*Vbiei; - //Vbici*Ibici(Vbici) + //Vbici*Ibici(Vbici,Vbiei) Ith_Vbici += Ibici + Ibici_Vbici*Vbici; + Ith_Vbiei += Ibici_Vbiei*Vbici; Ith_Vbici += (here->HICUMvdci_t.rpart-Vbici)*iavl_Vbici - iavl; //Vbpei*Ibpei(Vbpei) Ith_Vbpei += Ibpei + Ibpei_Vbpei*Vbpei; @@ -2479,7 +2491,6 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt) Qsu_Vsis = model->HICUMcsu; Qjs_Vsici = Cjs; -//TODO: all the derivatives have to be known dI/dT //TODO: @Dietmar: what about dQ/dT ? @@ -2649,10 +2660,10 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt) 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); + 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); @@ -2755,7 +2766,6 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt) // Isis += ddt(model->HICUMcsu*Vsis); error = NIintegrate(ckt,&gqsu,&cqsu,model->HICUMcsu,here->HICUMqsu); if(error) return(error); -//tocheck: Currents and conductances must used in stamping below if(ckt->CKTmode & MODEINITTRAN) { *(ckt->CKTstate1 + here->HICUMcqbepar1) = *(ckt->CKTstate0 + here->HICUMcqbepar1); @@ -2791,6 +2801,7 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt) *(ckt->CKTstate0 + here->HICUMibici) = Ibici; *(ckt->CKTstate0 + here->HICUMibici_Vbici) = Ibici_Vbici; + *(ckt->CKTstate0 + here->HICUMibici_Vbiei) = Ibici_Vbiei; *(ckt->CKTstate0 + here->HICUMibpbi) = Ibpbi; *(ckt->CKTstate0 + here->HICUMibpbi_Vbpbi) = Ibpbi_Vbpbi; @@ -2940,15 +2951,15 @@ load: *(here->HICUMemitEIBaseBIPtr) += -Iciei_Vbici; // finish -// Branch: bci, Stamp element: Qbcx -// rhs_current = model->HICUMtype * (Ibci - Ibci_Vbci*Vbci); -// *(ckt->CKTrhs + here->HICUMbaseNode) += -rhs_current; -// *(ckt->CKTrhs + here->HICUMcollCINode) += rhs_current; - // with respect to Vbci -// *(here->HICUMbaseBasePtr) += Ibci_Vbci; -// *(here->HICUMcollCICollCIPtr) += Ibci_Vbci; -// *(here->HICUMbaseCollCIPtr) += -Ibci_Vbci; -// *(here->HICUMcollCIBasePtr) += -Ibci_Vbci; +// Branch: bci, Stamp element: Qbcx + rhs_current = model->HICUMtype * (Ibci - Ibci_Vbci*Vbci); + *(ckt->CKTrhs + here->HICUMbaseNode) += -rhs_current; + *(ckt->CKTrhs + here->HICUMcollCINode) += rhs_current; + //with respect to Vbci + *(here->HICUMbaseBasePtr) += Ibci_Vbci; + *(here->HICUMcollCICollCIPtr) += Ibci_Vbci; + *(here->HICUMbaseCollCIPtr) += -Ibci_Vbci; + *(here->HICUMcollCIBasePtr) += -Ibci_Vbci; // finish // Branch: bpci, Stamp element: Ibpci ( was Ijbcx ) @@ -3148,6 +3159,16 @@ c Branch: xf-ground, Stamp element: Rxf *(here->HICUMcollCItempPtr) += -Ibici_dT; // finish +// Branch: bpsi, Stamp element: Its + rhs_current = - Ibpsi_dT*Vsici; + *(ckt->CKTrhs + here->HICUMbaseBPNode) += -rhs_current; + *(ckt->CKTrhs + here->HICUMsubsSINode) += rhs_current; + // f_Bp = + f_Si = - + // with respect to Vrth + *(here->HICUMbaseBPtempPtr) += Ibpsi_Vsici; + *(here->HICUMsubsSItempPtr) += -Ibpsi_Vsici; +// finish + // Stamp element: Iciei f_Ci = + f_Ei = - rhs_current = -Iciei_dT*Vrth; *(ckt->CKTrhs + here->HICUMcollCINode) += -rhs_current;