From e4b4978368fae796b5a7b97c4dffc34dbcd75a46 Mon Sep 17 00:00:00 2001 From: Markus Mueller Date: Wed, 3 Jun 2020 18:17:49 +0200 Subject: [PATCH] adding derivatives of branches with respect to Vrth to the state vector --- src/spicelib/devices/hicum2/hicum2acld.c | 45 +++- src/spicelib/devices/hicum2/hicum2conv.c | 8 + src/spicelib/devices/hicum2/hicum2defs.h | 179 +++++++------ src/spicelib/devices/hicum2/hicum2load.c | 7 + src/spicelib/devices/hicum2/hicumL2.cpp | 325 ++++++++++++++++------- 5 files changed, 381 insertions(+), 183 deletions(-) diff --git a/src/spicelib/devices/hicum2/hicum2acld.c b/src/spicelib/devices/hicum2/hicum2acld.c index 54cc7eeae..15c943e79 100644 --- a/src/spicelib/devices/hicum2/hicum2acld.c +++ b/src/spicelib/devices/hicum2/hicum2acld.c @@ -23,20 +23,41 @@ HICUMacLoad(GENmodel *inModel, CKTcircuit *ckt) HICUMinstance *here; HICUMmodel *model = (HICUMmodel*)inModel; double Ibpei_Vbpei; + double Ibpei_Vrth; + double Ibiei_Vbiei; double Ibiei_Vbici; + double Ibiei_Vrth; + double Ibici_Vbici; double Ibici_Vbiei; + double Ibici_Vrth; + double Ibpci_Vbpci; + double Ibpci_Vrth; + double Isici_Vsici; + double Isici_Vrth; + double Iciei_Vbiei; double Iciei_Vbici; - double Ibbp_Vbbp; + double Iciei_Vrth; + + + double Ibpbi_Vbpbi; + double Ibpbi_Vciei; + double Ibpbi_Vbiei; + double Ibpbi_Vrth; + double Isis_Vsis; - double Ieie_Veie; - double Ibpbi_Vbpbi, Ibpbi_Vciei, Ibpbi_Vbiei; - double Ibpsi_Vbpci, Ibpsi_Vsici; + double Icic_Vcic; + double Ieie_Veie; + double Ibbp_Vbbp; + + double Ibpsi_Vbpci; + double Ibpsi_Vsici; + double Ibpsi_Vrth; double XQrbi_Vbpbi; // double XQrbi_Vbiei; @@ -65,6 +86,7 @@ HICUMacLoad(GENmodel *inModel, CKTcircuit *ckt) for( here = HICUMinstances(model); here!= NULL; here = HICUMnextInstance(here)) { + //todo: temperature derivatives Ibbp_Vbbp = 1/here->HICUMrbx_t.rpart; Icic_Vcic = 1/here->HICUMrcx_t.rpart; Ieie_Veie = 1/here->HICUMre_t.rpart; @@ -72,18 +94,33 @@ HICUMacLoad(GENmodel *inModel, CKTcircuit *ckt) Ibiei_Vbiei = *(ckt->CKTstate0 + here->HICUMibiei_Vbiei); Ibiei_Vbici = *(ckt->CKTstate0 + here->HICUMibiei_Vbici); + Ibiei_Vrth = *(ckt->CKTstate0 + here->HICUMibiei_Vrth); + Ibpei_Vbpei = *(ckt->CKTstate0 + here->HICUMibpei_Vbpei); + Ibpei_Vrth = *(ckt->CKTstate0 + here->HICUMibpei_Vrth); + Iciei_Vbiei = *(ckt->CKTstate0 + here->HICUMiciei_Vbiei); Iciei_Vbici = *(ckt->CKTstate0 + here->HICUMiciei_Vbici); + Iciei_Vrth = *(ckt->CKTstate0 + here->HICUMiciei_Vrth); + Ibici_Vbici = *(ckt->CKTstate0 + here->HICUMibici_Vbici); Ibici_Vbiei = *(ckt->CKTstate0 + here->HICUMibici_Vbiei); + Ibici_Vrth = *(ckt->CKTstate0 + here->HICUMibici_Vrth); + Ibpbi_Vbpbi = *(ckt->CKTstate0 + here->HICUMibpbi_Vbpbi); Ibpbi_Vbiei = *(ckt->CKTstate0 + here->HICUMibpbi_Vbiei); Ibpbi_Vciei = *(ckt->CKTstate0 + here->HICUMibpbi_Vbici); + Ibpbi_Vrth = *(ckt->CKTstate0 + here->HICUMibpbi_Vrth); + Isici_Vsici = *(ckt->CKTstate0 + here->HICUMisici_Vsici); + Isici_Vrth = *(ckt->CKTstate0 + here->HICUMisici_Vrth); + Ibpsi_Vbpci = *(ckt->CKTstate0 + here->HICUMibpsi_Vbpci); Ibpsi_Vsici = *(ckt->CKTstate0 + here->HICUMibpsi_Vsici); + Ibpsi_Vrth = *(ckt->CKTstate0 + here->HICUMibpsi_Vrth); + Ibpci_Vbpci = *(ckt->CKTstate0 + here->HICUMibpci_Vbpci); + Ibpci_Vrth = *(ckt->CKTstate0 + here->HICUMibpci_Vrth); /* c The real part diff --git a/src/spicelib/devices/hicum2/hicum2conv.c b/src/spicelib/devices/hicum2/hicum2conv.c index 305d9b3c1..c3a156806 100644 --- a/src/spicelib/devices/hicum2/hicum2conv.c +++ b/src/spicelib/devices/hicum2/hicum2conv.c @@ -80,24 +80,32 @@ HICUMconvTest(GENmodel *inModel, CKTcircuit *ckt) ibieihat = *(ckt->CKTstate0 + here->HICUMibiei) + *(ckt->CKTstate0 + here->HICUMibiei_Vbiei)*delvbiei + + *(ckt->CKTstate0 + here->HICUMibiei_Vrth)*delvrth + *(ckt->CKTstate0 + here->HICUMibiei_Vbici)*delvbici; ibicihat = *(ckt->CKTstate0 + here->HICUMibici) + *(ckt->CKTstate0 + here->HICUMibici_Vbici)*delvbici+ + *(ckt->CKTstate0 + here->HICUMibici_Vrth)*delvrth+ *(ckt->CKTstate0 + here->HICUMibici_Vbiei)*delvbiei; icieihat = *(ckt->CKTstate0 + here->HICUMiciei) + *(ckt->CKTstate0 + here->HICUMiciei_Vbiei)*delvbiei + + *(ckt->CKTstate0 + here->HICUMiciei_Vrth)*delvrth + *(ckt->CKTstate0 + here->HICUMiciei_Vbici)*delvbici; ibpeihat = *(ckt->CKTstate0 + here->HICUMibpei) + + *(ckt->CKTstate0 + here->HICUMibpei_Vrth)*delvrth+ *(ckt->CKTstate0 + here->HICUMibpei_Vbpei)*delvbpei; ibpbihat = *(ckt->CKTstate0 + here->HICUMibpbi) + *(ckt->CKTstate0 + here->HICUMibpbi_Vbiei)*delvbiei + + *(ckt->CKTstate0 + here->HICUMibpbi_Vrth)*delvrth + *(ckt->CKTstate0 + here->HICUMibpbi_Vbici)*delvbici; ibpcihat = *(ckt->CKTstate0 + here->HICUMibpci) + + *(ckt->CKTstate0 + here->HICUMibpci_Vrth)*delvrth+ *(ckt->CKTstate0 + here->HICUMibpci_Vbpci)*delvbici; ibpsihat = *(ckt->CKTstate0 + here->HICUMibpsi) + *(ckt->CKTstate0 + here->HICUMibpsi_Vbpci)*delvbpci + + *(ckt->CKTstate0 + here->HICUMibpsi_Vrth)*delvrth + *(ckt->CKTstate0 + here->HICUMibpsi_Vsici)*delvsici; isicihat = *(ckt->CKTstate0 + here->HICUMisici) + + *(ckt->CKTstate0 + here->HICUMisici_Vrth)*delvrth+ *(ckt->CKTstate0 + here->HICUMisici_Vsici)*delvsici; ithhat = *(ckt->CKTstate0 + here->HICUMith) + *(ckt->CKTstate0 + here->HICUMith_Vrth)*delvrth; diff --git a/src/spicelib/devices/hicum2/hicum2defs.h b/src/spicelib/devices/hicum2/hicum2defs.h index eda882c28..6a92f4353 100644 --- a/src/spicelib/devices/hicum2/hicum2defs.h +++ b/src/spicelib/devices/hicum2/hicum2defs.h @@ -314,123 +314,132 @@ typedef struct sHICUMinstance { #define HICUMibiei HICUMstate+6 #define HICUMibiei_Vbiei HICUMstate+7 #define HICUMibiei_Vbici HICUMstate+8 +#define HICUMibiei_Vrth HICUMstate+9 -#define HICUMibpei HICUMstate+9 -#define HICUMibpei_Vbpei HICUMstate+10 +#define HICUMibpei HICUMstate+10 +#define HICUMibpei_Vbpei HICUMstate+11 +#define HICUMibpei_Vrth HICUMstate+12 -#define HICUMiciei HICUMstate+11 -#define HICUMiciei_Vbiei HICUMstate+12 -#define HICUMiciei_Vbici HICUMstate+13 +#define HICUMiciei HICUMstate+13 +#define HICUMiciei_Vbiei HICUMstate+14 +#define HICUMiciei_Vbici HICUMstate+15 +#define HICUMiciei_Vrth HICUMstate+16 -#define HICUMibici HICUMstate+14 -#define HICUMibici_Vbici HICUMstate+15 -#define HICUMibici_Vbiei HICUMstate+16 +#define HICUMibici HICUMstate+17 +#define HICUMibici_Vbici HICUMstate+18 +#define HICUMibici_Vbiei HICUMstate+19 +#define HICUMibici_Vrth HICUMstate+20 -#define HICUMibpbi HICUMstate+17 -#define HICUMibpbi_Vbpbi HICUMstate+18 -#define HICUMibpbi_Vbiei HICUMstate+19 -#define HICUMibpbi_Vbici HICUMstate+20 +#define HICUMibpbi HICUMstate+21 +#define HICUMibpbi_Vbpbi HICUMstate+22 +#define HICUMibpbi_Vbiei HICUMstate+23 +#define HICUMibpbi_Vbici HICUMstate+24 +#define HICUMibpbi_Vrth HICUMstate+25 -#define HICUMibpci HICUMstate+21 -#define HICUMibpci_Vbpci HICUMstate+22 +#define HICUMibpci HICUMstate+26 +#define HICUMibpci_Vbpci HICUMstate+27 +#define HICUMibpci_Vrth HICUMstate+28 -#define HICUMisici HICUMstate+23 -#define HICUMisici_Vsici HICUMstate+24 +#define HICUMisici HICUMstate+29 +#define HICUMisici_Vsici HICUMstate+30 +#define HICUMisici_Vrth HICUMstate+31 -#define HICUMibpsi HICUMstate+25 -#define HICUMibpsi_Vbpci HICUMstate+26 -#define HICUMibpsi_Vsici HICUMstate+27 +#define HICUMibpsi HICUMstate+32 +#define HICUMibpsi_Vbpci HICUMstate+33 +#define HICUMibpsi_Vsici HICUMstate+34 +#define HICUMibpsi_Vrth HICUMstate+35 -#define HICUMisis_Vsis HICUMstate+28 +#define HICUMisis_Vsis HICUMstate+36 -#define HICUMieie HICUMstate+29 // needed for re-flicker noise +#define HICUMieie HICUMstate+39 // needed for re-flicker noise +#define HICUMieie_Vrth HICUMstate+40 -#define HICUMqrbi HICUMstate+30 -#define HICUMcqrbi HICUMstate+31 +#define HICUMqrbi HICUMstate+41 +#define HICUMcqrbi HICUMstate+42 -#define HICUMqjei HICUMstate+32 -#define HICUMcqjei HICUMstate+33 +#define HICUMqjei HICUMstate+43 +#define HICUMcqjei HICUMstate+44 -#define HICUMqdeix HICUMstate+34 -#define HICUMcqdeix HICUMstate+35 +#define HICUMqdeix HICUMstate+45 +#define HICUMcqdeix HICUMstate+46 -#define HICUMqjci HICUMstate+36 -#define HICUMcqjci HICUMstate+37 +#define HICUMqjci HICUMstate+47 +#define HICUMcqjci HICUMstate+48 -#define HICUMqdci HICUMstate+38 -#define HICUMcqdci HICUMstate+39 +#define HICUMqdci HICUMstate+49 +#define HICUMcqdci HICUMstate+50 -#define HICUMqjep HICUMstate+40 -#define HICUMcqjep HICUMstate+41 +#define HICUMqjep HICUMstate+51 +#define HICUMcqjep HICUMstate+52 -#define HICUMqjcx0_i HICUMstate+42 -#define HICUMcqcx0_t_i HICUMstate+43 +#define HICUMqjcx0_i HICUMstate+53 +#define HICUMcqcx0_t_i HICUMstate+54 -#define HICUMqjcx0_ii HICUMstate+44 -#define HICUMcqcx0_t_ii HICUMstate+45 +#define HICUMqjcx0_ii HICUMstate+55 +#define HICUMcqcx0_t_ii HICUMstate+56 -#define HICUMqdsu HICUMstate+46 -#define HICUMcqdsu HICUMstate+47 +#define HICUMqdsu HICUMstate+57 +#define HICUMcqdsu HICUMstate+58 -#define HICUMqjs HICUMstate+48 -#define HICUMcqjs HICUMstate+49 +#define HICUMqjs HICUMstate+59 +#define HICUMcqjs HICUMstate+60 -#define HICUMqscp HICUMstate+50 -#define HICUMcqscp HICUMstate+51 +#define HICUMqscp HICUMstate+61 +#define HICUMcqscp HICUMstate+62 -#define HICUMqbepar1 HICUMstate+52 -#define HICUMcqbepar1 HICUMstate+53 -#define HICUMgqbepar1 HICUMstate+54 +#define HICUMqbepar1 HICUMstate+63 +#define HICUMcqbepar1 HICUMstate+64 +#define HICUMgqbepar1 HICUMstate+65 -#define HICUMqbepar2 HICUMstate+55 -#define HICUMcqbepar2 HICUMstate+56 -#define HICUMgqbepar2 HICUMstate+57 +#define HICUMqbepar2 HICUMstate+66 +#define HICUMcqbepar2 HICUMstate+66 +#define HICUMgqbepar2 HICUMstate+67 -#define HICUMqbcpar1 HICUMstate+58 -#define HICUMcqbcpar1 HICUMstate+59 -#define HICUMgqbcpar1 HICUMstate+60 +#define HICUMqbcpar1 HICUMstate+68 +#define HICUMcqbcpar1 HICUMstate+69 +#define HICUMgqbcpar1 HICUMstate+70 -#define HICUMqbcpar2 HICUMstate+61 -#define HICUMcqbcpar2 HICUMstate+62 -#define HICUMgqbcpar2 HICUMstate+63 +#define HICUMqbcpar2 HICUMstate+71 +#define HICUMcqbcpar2 HICUMstate+72 +#define HICUMgqbcpar2 HICUMstate+73 -#define HICUMqsu HICUMstate+64 -#define HICUMcqsu HICUMstate+65 -#define HICUMgqsu HICUMstate+66 +#define HICUMqsu HICUMstate+74 +#define HICUMcqsu HICUMstate+75 +#define HICUMgqsu HICUMstate+76 -#define HICUMqcth HICUMstate+67 /* thermal capacitor charge */ -#define HICUMcqcth HICUMstate+68 /* thermal capacitor current */ +#define HICUMqcth HICUMstate+77 /* thermal capacitor charge */ +#define HICUMcqcth HICUMstate+78 /* thermal capacitor current */ -#define HICUMvrth HICUMstate+69 -#define HICUMicth_dT HICUMstate+70 +#define HICUMvrth HICUMstate+79 +#define HICUMicth_dT HICUMstate+80 -#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 HICUMvxf HICUMstate+81 +#define HICUMqxf HICUMstate+82 +#define HICUMcqxf HICUMstate+83 +#define HICUMgqxf HICUMstate+84 +#define HICUMixf_Vbiei HICUMstate+85 +#define HICUMixf_Vbici HICUMstate+86 -#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 HICUMvxf1 HICUMstate+87 +#define HICUMqxf1 HICUMstate+88 +#define HICUMcqxf1 HICUMstate+89 +#define HICUMgqxf1 HICUMstate+90 +#define HICUMixf1_Vbiei HICUMstate+91 +#define HICUMixf1_Vbici HICUMstate+92 +#define HICUMixf1_Vfx2 HICUMstate+93 -#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 HICUMvxf2 HICUMstate+94 +#define HICUMqxf2 HICUMstate+95 +#define HICUMcqxf2 HICUMstate+96 +#define HICUMgqxf2 HICUMstate+97 +#define HICUMixf2_Vbiei HICUMstate+98 +#define HICUMixf2_Vbici HICUMstate+99 +#define HICUMixf2_Vfx1 HICUMstate+100 -#define HICUMith HICUMstate+91 -#define HICUMith_Vrth HICUMstate+92 +#define HICUMith HICUMstate+101 +#define HICUMith_Vrth HICUMstate+102 -#define HICUMnumStates 93 +#define HICUMnumStates 103 /* 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 2fdc3c769..6bbb32c95 100644 --- a/src/spicelib/devices/hicum2/hicum2load.c +++ b/src/spicelib/devices/hicum2/hicum2load.c @@ -797,6 +797,10 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt) xfact * *(ckt->CKTstate2 + here->HICUMvxf1); Vbxf2 = (1+xfact) * *(ckt->CKTstate1 + here->HICUMvxf2)- xfact * *(ckt->CKTstate2 + here->HICUMvxf2); + + //////////////////////// + // begin copy state vector + //////////////////////// *(ckt->CKTstate0 + here->HICUMvbiei) = *(ckt->CKTstate1 + here->HICUMvbiei); *(ckt->CKTstate0 + here->HICUMvbpei) = @@ -885,6 +889,9 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt) *(ckt->CKTstate0 + here->HICUMith_Vrth) = *(ckt->CKTstate1 + here->HICUMith_Vrth); } + //////////////////////// + // end copy state vector + //////////////////////// } else { #endif /* PREDICTOR */ /* diff --git a/src/spicelib/devices/hicum2/hicumL2.cpp b/src/spicelib/devices/hicum2/hicumL2.cpp index 793d38b12..d9c5b572d 100644 --- a/src/spicelib/devices/hicum2/hicumL2.cpp +++ b/src/spicelib/devices/hicum2/hicumL2.cpp @@ -1391,94 +1391,205 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt) xfact * *(ckt->CKTstate2 + here->HICUMvxf1); Vbxf2 = (1+xfact) * *(ckt->CKTstate1 + here->HICUMvxf2)- xfact * *(ckt->CKTstate2 + here->HICUMvxf2); - *(ckt->CKTstate0 + here->HICUMvbiei) = - *(ckt->CKTstate1 + here->HICUMvbiei); - *(ckt->CKTstate0 + here->HICUMvbpei) = - *(ckt->CKTstate1 + here->HICUMvbpei); - *(ckt->CKTstate0 + here->HICUMvbici) = - *(ckt->CKTstate1 + here->HICUMvbici); - *(ckt->CKTstate0 + here->HICUMvbpei) = - *(ckt->CKTstate1 + here->HICUMvbpei); - *(ckt->CKTstate0 + here->HICUMvbpbi) = - *(ckt->CKTstate1 + here->HICUMvbpbi); - *(ckt->CKTstate0 + here->HICUMvsici) = - *(ckt->CKTstate1 + here->HICUMvsici); - *(ckt->CKTstate0 + here->HICUMvxf) = - *(ckt->CKTstate1 + here->HICUMvxf); - *(ckt->CKTstate0 + here->HICUMvxf1) = - *(ckt->CKTstate1 + here->HICUMvxf1); - *(ckt->CKTstate0 + here->HICUMvxf2) = - *(ckt->CKTstate1 + here->HICUMvxf2); - *(ckt->CKTstate0 + here->HICUMibiei) = - *(ckt->CKTstate1 + here->HICUMibiei); - *(ckt->CKTstate0 + here->HICUMibiei_Vbiei) = - *(ckt->CKTstate1 + here->HICUMibiei_Vbiei); - *(ckt->CKTstate0 + here->HICUMibiei_Vbici) = - *(ckt->CKTstate1 + here->HICUMibiei_Vbici); - *(ckt->CKTstate0 + here->HICUMibpei) = - *(ckt->CKTstate1 + here->HICUMibpei); - *(ckt->CKTstate0 + here->HICUMibpei_Vbpei) = - *(ckt->CKTstate1 + here->HICUMibpei_Vbpei); - *(ckt->CKTstate0 + here->HICUMiciei) = - *(ckt->CKTstate1 + here->HICUMiciei); - *(ckt->CKTstate0 + here->HICUMiciei_Vbiei) = - *(ckt->CKTstate1 + here->HICUMiciei_Vbiei); - *(ckt->CKTstate0 + here->HICUMiciei_Vbici) = - *(ckt->CKTstate1 + here->HICUMiciei_Vbici); - *(ckt->CKTstate0 + here->HICUMibici) = - *(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) = - *(ckt->CKTstate1 + here->HICUMibpbi); - *(ckt->CKTstate0 + here->HICUMibpbi_Vbpbi) = - *(ckt->CKTstate1 + here->HICUMibpbi_Vbpbi); - *(ckt->CKTstate0 + here->HICUMibpbi_Vbiei) = - *(ckt->CKTstate1 + here->HICUMibpbi_Vbiei); - *(ckt->CKTstate0 + here->HICUMibpbi_Vbici) = - *(ckt->CKTstate1 + here->HICUMibpbi_Vbici); - *(ckt->CKTstate0 + here->HICUMisici) = - *(ckt->CKTstate1 + here->HICUMisici); - *(ckt->CKTstate0 + here->HICUMisici_Vsici) = - *(ckt->CKTstate1 + here->HICUMisici_Vsici); - *(ckt->CKTstate0 + here->HICUMibpsi) = - *(ckt->CKTstate1 + here->HICUMibpsi); - *(ckt->CKTstate0 + here->HICUMibpsi_Vbpci) = - *(ckt->CKTstate1 + here->HICUMibpsi_Vbpci); - *(ckt->CKTstate0 + here->HICUMibpsi_Vsici) = - *(ckt->CKTstate1 + here->HICUMibpsi_Vsici); - *(ckt->CKTstate0 + here->HICUMgqbepar1) = - *(ckt->CKTstate1 + here->HICUMgqbepar1); - *(ckt->CKTstate0 + here->HICUMgqbepar2) = - *(ckt->CKTstate1 + here->HICUMgqbepar2); - *(ckt->CKTstate0 + here->HICUMieie) = - *(ckt->CKTstate1 + here->HICUMieie); - *(ckt->CKTstate0 + here->HICUMisis_Vsis) = - *(ckt->CKTstate1 + here->HICUMisis_Vsis); -//NQS - *(ckt->CKTstate0 + here->HICUMgqxf) = - *(ckt->CKTstate1 + here->HICUMgqxf); - *(ckt->CKTstate0 + here->HICUMixf_Vbiei) = - *(ckt->CKTstate1 + here->HICUMixf_Vbiei); - *(ckt->CKTstate0 + here->HICUMixf_Vbici) = - *(ckt->CKTstate1 + here->HICUMixf_Vbici); + ///////////////////////// + // begin copy state vector + ///////////////////////// + //below is obsolete, I leave it here to remember old code since I am no ngspice expert +// *(ckt->CKTstate0 + here->HICUMvbiei) = +// *(ckt->CKTstate1 + here->HICUMvbiei); +// *(ckt->CKTstate0 + here->HICUMvbpei) = +// *(ckt->CKTstate1 + here->HICUMvbpei); +// *(ckt->CKTstate0 + here->HICUMvbici) = +// *(ckt->CKTstate1 + here->HICUMvbici); +// *(ckt->CKTstate0 + here->HICUMvbpei) = +// *(ckt->CKTstate1 + here->HICUMvbpei); +// *(ckt->CKTstate0 + here->HICUMvbpbi) = +// *(ckt->CKTstate1 + here->HICUMvbpbi); +// *(ckt->CKTstate0 + here->HICUMvsici) = +// *(ckt->CKTstate1 + here->HICUMvsici); +// *(ckt->CKTstate0 + here->HICUMvxf) = +// *(ckt->CKTstate1 + here->HICUMvxf); +// *(ckt->CKTstate0 + here->HICUMvxf1) = +// *(ckt->CKTstate1 + here->HICUMvxf1); +// *(ckt->CKTstate0 + here->HICUMvxf2) = +// *(ckt->CKTstate1 + here->HICUMvxf2); +// *(ckt->CKTstate0 + here->HICUMibiei) = +// *(ckt->CKTstate1 + here->HICUMibiei); +// *(ckt->CKTstate0 + here->HICUMibiei_Vbiei) = +// *(ckt->CKTstate1 + here->HICUMibiei_Vbiei); +// *(ckt->CKTstate0 + here->HICUMibiei_Vbici) = +// *(ckt->CKTstate1 + here->HICUMibiei_Vbici); +// *(ckt->CKTstate0 + here->HICUMibpei) = +// *(ckt->CKTstate1 + here->HICUMibpei); +// *(ckt->CKTstate0 + here->HICUMibpei_Vbpei) = +// *(ckt->CKTstate1 + here->HICUMibpei_Vbpei); +// *(ckt->CKTstate0 + here->HICUMiciei) = +// *(ckt->CKTstate1 + here->HICUMiciei); +// *(ckt->CKTstate0 + here->HICUMiciei_Vbiei) = +// *(ckt->CKTstate1 + here->HICUMiciei_Vbiei); +// *(ckt->CKTstate0 + here->HICUMiciei_Vbici) = +// *(ckt->CKTstate1 + here->HICUMiciei_Vbici); +// *(ckt->CKTstate0 + here->HICUMibici) = +// *(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) = +// *(ckt->CKTstate1 + here->HICUMibpbi); +// *(ckt->CKTstate0 + here->HICUMibpbi_Vbpbi) = +// *(ckt->CKTstate1 + here->HICUMibpbi_Vbpbi); +// *(ckt->CKTstate0 + here->HICUMibpbi_Vbiei) = +// *(ckt->CKTstate1 + here->HICUMibpbi_Vbiei); +// *(ckt->CKTstate0 + here->HICUMibpbi_Vbici) = +// *(ckt->CKTstate1 + here->HICUMibpbi_Vbici); +// *(ckt->CKTstate0 + here->HICUMisici) = +// *(ckt->CKTstate1 + here->HICUMisici); +// *(ckt->CKTstate0 + here->HICUMisici_Vsici) = +// *(ckt->CKTstate1 + here->HICUMisici_Vsici); +// *(ckt->CKTstate0 + here->HICUMibpsi) = +// *(ckt->CKTstate1 + here->HICUMibpsi); +// *(ckt->CKTstate0 + here->HICUMibpsi_Vbpci) = +// *(ckt->CKTstate1 + here->HICUMibpsi_Vbpci); +// *(ckt->CKTstate0 + here->HICUMibpsi_Vsici) = +// *(ckt->CKTstate1 + here->HICUMibpsi_Vsici); +// *(ckt->CKTstate0 + here->HICUMgqbepar1) = +// *(ckt->CKTstate1 + here->HICUMgqbepar1); +// *(ckt->CKTstate0 + here->HICUMgqbepar2) = +// *(ckt->CKTstate1 + here->HICUMgqbepar2); +// *(ckt->CKTstate0 + here->HICUMieie) = +// *(ckt->CKTstate1 + here->HICUMieie); +// *(ckt->CKTstate0 + here->HICUMisis_Vsis) = +// *(ckt->CKTstate1 + here->HICUMisis_Vsis); +// //NQS +// *(ckt->CKTstate0 + here->HICUMgqxf) = +// *(ckt->CKTstate1 + here->HICUMgqxf); +// *(ckt->CKTstate0 + here->HICUMixf_Vbiei) = +// *(ckt->CKTstate1 + here->HICUMixf_Vbiei); +// *(ckt->CKTstate0 + here->HICUMixf_Vbici) = +// *(ckt->CKTstate1 + here->HICUMixf_Vbici); - if (model->HICUMflsh) { - Vrth = (1.0 + xfact)* (*(ckt->CKTstate1 + here->HICUMvrth)) - - ( xfact * (*(ckt->CKTstate2 + here->HICUMvrth))); - *(ckt->CKTstate0 + here->HICUMvrth) = - *(ckt->CKTstate1 + here->HICUMvrth); - *(ckt->CKTstate0 + here->HICUMith) = - *(ckt->CKTstate1 + here->HICUMith); - *(ckt->CKTstate0 + here->HICUMith_Vrth) = - *(ckt->CKTstate1 + here->HICUMith_Vrth); - *(ckt->CKTstate0 + here->HICUMqcth) = - *(ckt->CKTstate1 + here->HICUMqcth); - } +// if (model->HICUMflsh) { +// Vrth = (1.0 + xfact)* (*(ckt->CKTstate1 + here->HICUMvrth)) +// - ( xfact * (*(ckt->CKTstate2 + here->HICUMvrth))); +// *(ckt->CKTstate0 + here->HICUMvrth) = +// *(ckt->CKTstate1 + here->HICUMvrth); +// *(ckt->CKTstate0 + here->HICUMith) = +// *(ckt->CKTstate1 + here->HICUMith); +// *(ckt->CKTstate0 + here->HICUMith_Vrth) = +// *(ckt->CKTstate1 + here->HICUMith_Vrth); +// *(ckt->CKTstate0 + here->HICUMqcth) = +// *(ckt->CKTstate1 + here->HICUMqcth); +// } + + *(ckt->CKTstate0+here->HICUMvbiei)=*(ckt->CKTstate1+here->HICUMvbiei); + *(ckt->CKTstate0+here->HICUMvbici)=*(ckt->CKTstate1+here->HICUMvbici); + *(ckt->CKTstate0+here->HICUMvbpei)=*(ckt->CKTstate1+here->HICUMvbpei); + *(ckt->CKTstate0+here->HICUMvbpbi)=*(ckt->CKTstate1+here->HICUMvbpbi); + *(ckt->CKTstate0+here->HICUMvbpci)=*(ckt->CKTstate1+here->HICUMvbpci); + *(ckt->CKTstate0+here->HICUMvsici)=*(ckt->CKTstate1+here->HICUMvsici); + *(ckt->CKTstate0+here->HICUMibiei)=*(ckt->CKTstate1+here->HICUMibiei); + *(ckt->CKTstate0+here->HICUMibiei_Vbiei)=*(ckt->CKTstate1+here->HICUMibiei_Vbiei); + *(ckt->CKTstate0+here->HICUMibiei_Vbici)=*(ckt->CKTstate1+here->HICUMibiei_Vbici); + *(ckt->CKTstate0+here->HICUMibiei_Vrth)=*(ckt->CKTstate1+here->HICUMibiei_Vrth); + *(ckt->CKTstate0+here->HICUMibpei)=*(ckt->CKTstate1+here->HICUMibpei); + *(ckt->CKTstate0+here->HICUMibpei_Vbpei)=*(ckt->CKTstate1+here->HICUMibpei_Vbpei); + *(ckt->CKTstate0+here->HICUMibpei_Vrth)=*(ckt->CKTstate1+here->HICUMibpei_Vrth); + *(ckt->CKTstate0+here->HICUMiciei)=*(ckt->CKTstate1+here->HICUMiciei); + *(ckt->CKTstate0+here->HICUMiciei_Vbiei)=*(ckt->CKTstate1+here->HICUMiciei_Vbiei); + *(ckt->CKTstate0+here->HICUMiciei_Vbici)=*(ckt->CKTstate1+here->HICUMiciei_Vbici); + *(ckt->CKTstate0+here->HICUMiciei_Vrth)=*(ckt->CKTstate1+here->HICUMiciei_Vrth); + *(ckt->CKTstate0+here->HICUMibici)=*(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->HICUMibici_Vrth)=*(ckt->CKTstate1+here->HICUMibici_Vrth); + *(ckt->CKTstate0+here->HICUMibpbi)=*(ckt->CKTstate1+here->HICUMibpbi); + *(ckt->CKTstate0+here->HICUMibpbi_Vbpbi)=*(ckt->CKTstate1+here->HICUMibpbi_Vbpbi); + *(ckt->CKTstate0+here->HICUMibpbi_Vbiei)=*(ckt->CKTstate1+here->HICUMibpbi_Vbiei); + *(ckt->CKTstate0+here->HICUMibpbi_Vbici)=*(ckt->CKTstate1+here->HICUMibpbi_Vbici); + *(ckt->CKTstate0+here->HICUMibpbi_Vrth)=*(ckt->CKTstate1+here->HICUMibpbi_Vrth); + *(ckt->CKTstate0+here->HICUMibpci)=*(ckt->CKTstate1+here->HICUMibpci); + *(ckt->CKTstate0+here->HICUMibpci_Vbpci)=*(ckt->CKTstate1+here->HICUMibpci_Vbpci); + *(ckt->CKTstate0+here->HICUMibpci_Vrth)=*(ckt->CKTstate1+here->HICUMibpci_Vrth); + *(ckt->CKTstate0+here->HICUMisici)=*(ckt->CKTstate1+here->HICUMisici); + *(ckt->CKTstate0+here->HICUMisici_Vsici)=*(ckt->CKTstate1+here->HICUMisici_Vsici); + *(ckt->CKTstate0+here->HICUMisici_Vrth)=*(ckt->CKTstate1+here->HICUMisici_Vrth); + *(ckt->CKTstate0+here->HICUMibpsi)=*(ckt->CKTstate1+here->HICUMibpsi); + *(ckt->CKTstate0+here->HICUMibpsi_Vbpci)=*(ckt->CKTstate1+here->HICUMibpsi_Vbpci); + *(ckt->CKTstate0+here->HICUMibpsi_Vsici)=*(ckt->CKTstate1+here->HICUMibpsi_Vsici); + *(ckt->CKTstate0+here->HICUMibpsi_Vrth)=*(ckt->CKTstate1+here->HICUMibpsi_Vrth); + *(ckt->CKTstate0+here->HICUMisis_Vsis)=*(ckt->CKTstate1+here->HICUMisis_Vsis); + *(ckt->CKTstate0+here->HICUMieie)=*(ckt->CKTstate1+here->HICUMieie); + *(ckt->CKTstate0+here->HICUMieie_Vrth)=*(ckt->CKTstate1+here->HICUMieie_Vrth); + *(ckt->CKTstate0+here->HICUMqrbi)=*(ckt->CKTstate1+here->HICUMqrbi); + *(ckt->CKTstate0+here->HICUMcqrbi)=*(ckt->CKTstate1+here->HICUMcqrbi); + *(ckt->CKTstate0+here->HICUMqjei)=*(ckt->CKTstate1+here->HICUMqjei); + *(ckt->CKTstate0+here->HICUMcqjei)=*(ckt->CKTstate1+here->HICUMcqjei); + *(ckt->CKTstate0+here->HICUMqdeix)=*(ckt->CKTstate1+here->HICUMqdeix); + *(ckt->CKTstate0+here->HICUMcqdeix)=*(ckt->CKTstate1+here->HICUMcqdeix); + *(ckt->CKTstate0+here->HICUMqjci)=*(ckt->CKTstate1+here->HICUMqjci); + *(ckt->CKTstate0+here->HICUMcqjci)=*(ckt->CKTstate1+here->HICUMcqjci); + *(ckt->CKTstate0+here->HICUMqdci)=*(ckt->CKTstate1+here->HICUMqdci); + *(ckt->CKTstate0+here->HICUMcqdci)=*(ckt->CKTstate1+here->HICUMcqdci); + *(ckt->CKTstate0+here->HICUMqjep)=*(ckt->CKTstate1+here->HICUMqjep); + *(ckt->CKTstate0+here->HICUMcqjep)=*(ckt->CKTstate1+here->HICUMcqjep); + *(ckt->CKTstate0+here->HICUMqjcx0_i)=*(ckt->CKTstate1+here->HICUMqjcx0_i); + *(ckt->CKTstate0+here->HICUMcqcx0_t_i)=*(ckt->CKTstate1+here->HICUMcqcx0_t_i); + *(ckt->CKTstate0+here->HICUMqjcx0_ii)=*(ckt->CKTstate1+here->HICUMqjcx0_ii); + *(ckt->CKTstate0+here->HICUMcqcx0_t_ii)=*(ckt->CKTstate1+here->HICUMcqcx0_t_ii); + *(ckt->CKTstate0+here->HICUMqdsu)=*(ckt->CKTstate1+here->HICUMqdsu); + *(ckt->CKTstate0+here->HICUMcqdsu)=*(ckt->CKTstate1+here->HICUMcqdsu); + *(ckt->CKTstate0+here->HICUMqjs)=*(ckt->CKTstate1+here->HICUMqjs); + *(ckt->CKTstate0+here->HICUMcqjs)=*(ckt->CKTstate1+here->HICUMcqjs); + *(ckt->CKTstate0+here->HICUMqscp)=*(ckt->CKTstate1+here->HICUMqscp); + *(ckt->CKTstate0+here->HICUMcqscp)=*(ckt->CKTstate1+here->HICUMcqscp); + *(ckt->CKTstate0+here->HICUMqbepar1)=*(ckt->CKTstate1+here->HICUMqbepar1); + *(ckt->CKTstate0+here->HICUMcqbepar1)=*(ckt->CKTstate1+here->HICUMcqbepar1); + *(ckt->CKTstate0+here->HICUMgqbepar1)=*(ckt->CKTstate1+here->HICUMgqbepar1); + *(ckt->CKTstate0+here->HICUMqbepar2)=*(ckt->CKTstate1+here->HICUMqbepar2); + *(ckt->CKTstate0+here->HICUMcqbepar2)=*(ckt->CKTstate1+here->HICUMcqbepar2); + *(ckt->CKTstate0+here->HICUMgqbepar2)=*(ckt->CKTstate1+here->HICUMgqbepar2); + *(ckt->CKTstate0+here->HICUMqbcpar1)=*(ckt->CKTstate1+here->HICUMqbcpar1); + *(ckt->CKTstate0+here->HICUMcqbcpar1)=*(ckt->CKTstate1+here->HICUMcqbcpar1); + *(ckt->CKTstate0+here->HICUMgqbcpar1)=*(ckt->CKTstate1+here->HICUMgqbcpar1); + *(ckt->CKTstate0+here->HICUMqbcpar2)=*(ckt->CKTstate1+here->HICUMqbcpar2); + *(ckt->CKTstate0+here->HICUMcqbcpar2)=*(ckt->CKTstate1+here->HICUMcqbcpar2); + *(ckt->CKTstate0+here->HICUMgqbcpar2)=*(ckt->CKTstate1+here->HICUMgqbcpar2); + *(ckt->CKTstate0+here->HICUMqsu)=*(ckt->CKTstate1+here->HICUMqsu); + *(ckt->CKTstate0+here->HICUMcqsu)=*(ckt->CKTstate1+here->HICUMcqsu); + *(ckt->CKTstate0+here->HICUMgqsu)=*(ckt->CKTstate1+here->HICUMgqsu); + *(ckt->CKTstate0+here->HICUMqcth)=*(ckt->CKTstate1+here->HICUMqcth); + *(ckt->CKTstate0+here->HICUMcqcth)=*(ckt->CKTstate1+here->HICUMcqcth); + *(ckt->CKTstate0+here->HICUMvrth)=*(ckt->CKTstate1+here->HICUMvrth); + *(ckt->CKTstate0+here->HICUMicth_dT)=*(ckt->CKTstate1+here->HICUMicth_dT); + *(ckt->CKTstate0+here->HICUMvxf)=*(ckt->CKTstate1+here->HICUMvxf); + *(ckt->CKTstate0+here->HICUMqxf)=*(ckt->CKTstate1+here->HICUMqxf); + *(ckt->CKTstate0+here->HICUMcqxf)=*(ckt->CKTstate1+here->HICUMcqxf); + *(ckt->CKTstate0+here->HICUMgqxf)=*(ckt->CKTstate1+here->HICUMgqxf); + *(ckt->CKTstate0+here->HICUMixf_Vbiei)=*(ckt->CKTstate1+here->HICUMixf_Vbiei); + *(ckt->CKTstate0+here->HICUMixf_Vbici)=*(ckt->CKTstate1+here->HICUMixf_Vbici); + *(ckt->CKTstate0+here->HICUMvxf1)=*(ckt->CKTstate1+here->HICUMvxf1); + *(ckt->CKTstate0+here->HICUMqxf1)=*(ckt->CKTstate1+here->HICUMqxf1); + *(ckt->CKTstate0+here->HICUMcqxf1)=*(ckt->CKTstate1+here->HICUMcqxf1); + *(ckt->CKTstate0+here->HICUMgqxf1)=*(ckt->CKTstate1+here->HICUMgqxf1); + *(ckt->CKTstate0+here->HICUMixf1_Vbiei)=*(ckt->CKTstate1+here->HICUMixf1_Vbiei); + *(ckt->CKTstate0+here->HICUMixf1_Vbici)=*(ckt->CKTstate1+here->HICUMixf1_Vbici); + *(ckt->CKTstate0+here->HICUMixf1_Vfx2)=*(ckt->CKTstate1+here->HICUMixf1_Vfx2); + *(ckt->CKTstate0+here->HICUMvxf2)=*(ckt->CKTstate1+here->HICUMvxf2); + *(ckt->CKTstate0+here->HICUMqxf2)=*(ckt->CKTstate1+here->HICUMqxf2); + *(ckt->CKTstate0+here->HICUMcqxf2)=*(ckt->CKTstate1+here->HICUMcqxf2); + *(ckt->CKTstate0+here->HICUMgqxf2)=*(ckt->CKTstate1+here->HICUMgqxf2); + *(ckt->CKTstate0+here->HICUMixf2_Vbiei)=*(ckt->CKTstate1+here->HICUMixf2_Vbiei); + *(ckt->CKTstate0+here->HICUMixf2_Vbici)=*(ckt->CKTstate1+here->HICUMixf2_Vbici); + *(ckt->CKTstate0+here->HICUMixf2_Vfx1)=*(ckt->CKTstate1+here->HICUMixf2_Vfx1); + *(ckt->CKTstate0+here->HICUMith)=*(ckt->CKTstate1+here->HICUMith); + *(ckt->CKTstate0+here->HICUMith_Vrth)=*(ckt->CKTstate1+here->HICUMith_Vrth); + + ///////////////////////// + // end copy state vector + ///////////////////////// } else { #endif /* PREDICTOR */ /* @@ -1520,8 +1631,7 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt) delvbpbi = Vbpbi - *(ckt->CKTstate0 + here->HICUMvbpbi); delvbpci = Vbpci - *(ckt->CKTstate0 + here->HICUMvbpci); delvsici = Vsici - *(ckt->CKTstate0 + here->HICUMvsici); - if (model->HICUMflsh) - delvrth = Vrth - *(ckt->CKTstate0 + here->HICUMvrth); + delvrth = Vrth - *(ckt->CKTstate0 + here->HICUMvrth); Vbe = model->HICUMtype*( *(ckt->CKTrhsOld+here->HICUMbaseNode)- *(ckt->CKTrhsOld+here->HICUMemitNode)); @@ -1553,28 +1663,36 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt) Vrth = *(ckt->CKTrhsOld + here->HICUMtempNode); ibieihat = *(ckt->CKTstate0 + here->HICUMibiei) + *(ckt->CKTstate0 + here->HICUMibiei_Vbiei)*delvbiei+ + *(ckt->CKTstate0 + here->HICUMibiei_Vrth)*delvrth+ *(ckt->CKTstate0 + here->HICUMibiei_Vbici)*delvbici, ibicihat = *(ckt->CKTstate0 + here->HICUMibici) + *(ckt->CKTstate0 + here->HICUMibici_Vbici)*delvbici+ + *(ckt->CKTstate0 + here->HICUMibici_Vrth)*delvrth+ *(ckt->CKTstate0 + here->HICUMibici_Vbiei)*delvbiei; ibpeihat = *(ckt->CKTstate0 + here->HICUMibpei) + - *(ckt->CKTstate0 + here->HICUMibpei_Vbpei)*delvbpei; + *(ckt->CKTstate0 + here->HICUMibpei_Vbpei)*delvbpei+ + *(ckt->CKTstate0 + here->HICUMibpei_Vrth)*delvrth; ibpcihat = *(ckt->CKTstate0 + here->HICUMibpci) + - *(ckt->CKTstate0 + here->HICUMibpci_Vbpci)*delvbpci; + *(ckt->CKTstate0 + here->HICUMibpci_Vbpci)*delvbpci+ + *(ckt->CKTstate0 + here->HICUMibpci_Vrth)*delvrth; icieihat = *(ckt->CKTstate0 + here->HICUMiciei) + *(ckt->CKTstate0 + here->HICUMiciei_Vbiei)*delvbiei + + *(ckt->CKTstate0 + here->HICUMiciei_Vrth)*delvrth + *(ckt->CKTstate0 + here->HICUMiciei_Vbici)*delvbici; ibpbihat = *(ckt->CKTstate0 + here->HICUMibpbi) + *(ckt->CKTstate0 + here->HICUMibpbi_Vbpbi)*delvbpbi + + *(ckt->CKTstate0 + here->HICUMibpbi_Vrth)*delvrth + *(ckt->CKTstate0 + here->HICUMibpbi_Vbiei)*delvbiei + *(ckt->CKTstate0 + here->HICUMibpbi_Vbici)*delvbici; isicihat = *(ckt->CKTstate0 + here->HICUMisici) + - *(ckt->CKTstate0 + here->HICUMisici_Vsici)*delvsici; + *(ckt->CKTstate0 + here->HICUMisici_Vsici)*delvsici+ + *(ckt->CKTstate0 + here->HICUMisici_Vrth)*delvrth; ibpsihat = *(ckt->CKTstate0 + here->HICUMibpsi) + *(ckt->CKTstate0 + here->HICUMibpsi_Vbpci)*delvbpci + + *(ckt->CKTstate0 + here->HICUMibpsi_Vrth)*delvrth + *(ckt->CKTstate0 + here->HICUMibpsi_Vsici)*delvsici; ithhat = *(ckt->CKTstate0 + here->HICUMith) + - *(ckt->CKTstate0 + here->HICUMith_Vrth)*delvrth; + *(ckt->CKTstate0 + here->HICUMith_Vrth)*delvrth; //other dels are missing here... great :/ /* * bypass if solution has not changed */ @@ -1648,34 +1766,43 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt) Ibiei = *(ckt->CKTstate0 + here->HICUMibiei); Ibiei_Vbiei = *(ckt->CKTstate0 + here->HICUMibiei_Vbiei); Ibiei_Vbici = *(ckt->CKTstate0 + here->HICUMibiei_Vbici); + Ibiei_dT = *(ckt->CKTstate0 + here->HICUMibiei_Vrth); Ibpei = *(ckt->CKTstate0 + here->HICUMibpei); Ibpei_Vbpei = *(ckt->CKTstate0 + here->HICUMibpei_Vbpei); + Ibpei_dT = *(ckt->CKTstate0 + here->HICUMibpei_Vrth); Iciei = *(ckt->CKTstate0 + here->HICUMiciei); Iciei_Vbiei = *(ckt->CKTstate0 + here->HICUMiciei_Vbiei); Iciei_Vbici = *(ckt->CKTstate0 + here->HICUMiciei_Vbici); + Iciei_dT = *(ckt->CKTstate0 + here->HICUMiciei_Vrth); Ibici = *(ckt->CKTstate0 + here->HICUMibici); Ibici_Vbici = *(ckt->CKTstate0 + here->HICUMibici_Vbici); Ibici_Vbiei = *(ckt->CKTstate0 + here->HICUMibici_Vbiei); + Ibici_dT = *(ckt->CKTstate0 + here->HICUMibici_Vrth); Ibpbi = *(ckt->CKTstate0 + here->HICUMibpbi); Ibpbi_Vbpbi = *(ckt->CKTstate0 + here->HICUMibpbi_Vbpbi); Ibpbi_Vbiei = *(ckt->CKTstate0 + here->HICUMibpbi_Vbiei); Ibpbi_Vbici = *(ckt->CKTstate0 + here->HICUMibpbi_Vbici); + Ibpbi_dT = *(ckt->CKTstate0 + here->HICUMibpbi_Vrth); Isici = *(ckt->CKTstate0 + here->HICUMisici); Isici_Vsici = *(ckt->CKTstate0 + here->HICUMisici_Vsici); + Isici_dT = *(ckt->CKTstate0 + here->HICUMisici_Vrth); Ibpsi = *(ckt->CKTstate0 + here->HICUMibpsi); Ibpsi_Vbpci = *(ckt->CKTstate0 + here->HICUMibpsi_Vbpci); Ibpsi_Vsici = *(ckt->CKTstate0 + here->HICUMibpsi_Vsici); + Ibpsi_dT = *(ckt->CKTstate0 + here->HICUMibpsi_Vrth); Ibpci = *(ckt->CKTstate0 + here->HICUMibpci); Ibpci_Vbpci = *(ckt->CKTstate0 + here->HICUMibpci_Vbpci); + Ibpci_dT = *(ckt->CKTstate0 + here->HICUMibpci_Vrth); Ieie = *(ckt->CKTstate0 + here->HICUMieie); + Ieie_dT = *(ckt->CKTstate0 + here->HICUMieie_Vrth); Isis_Vsis = *(ckt->CKTstate0 + here->HICUMisis_Vsis); @@ -1712,7 +1839,7 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt) //todo: check for double multiplication on pnp's Vbiei = model->HICUMtype*Vbiei; Vbici = model->HICUMtype*Vbici; - Vciei = Vbiei-Vbici; + Vciei = model->HICUMtype*(Vbiei-Vbici); Vbpei = model->HICUMtype*Vbpei; Vbpci = model->HICUMtype*Vbpci; Vbci = model->HICUMtype*Vbci; @@ -1727,6 +1854,7 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt) here->HICUMdtemp_sh = Temp - ckt->CKTtemp; } else { + Temp = here->HICUMtemp; here->HICUMdtemp_sh = 0; } @@ -2809,36 +2937,45 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt) *(ckt->CKTstate0 + here->HICUMibiei) = Ibiei; *(ckt->CKTstate0 + here->HICUMibiei_Vbiei) = Ibiei_Vbiei; *(ckt->CKTstate0 + here->HICUMibiei_Vbici) = Ibiei_Vbici; + *(ckt->CKTstate0 + here->HICUMibiei_Vrth) = Ibiei_dT; *(ckt->CKTstate0 + here->HICUMibpei) = Ibpei; *(ckt->CKTstate0 + here->HICUMibpei_Vbpei) = Ibpei_Vbpei; + *(ckt->CKTstate0 + here->HICUMibpei_Vrth) = Ibpei_dT; *(ckt->CKTstate0 + here->HICUMiciei) = Iciei; *(ckt->CKTstate0 + here->HICUMiciei_Vbiei) = Iciei_Vbiei; *(ckt->CKTstate0 + here->HICUMiciei_Vbici) = Iciei_Vbici; + *(ckt->CKTstate0 + here->HICUMiciei_Vrth) = Iciei_dT; *(ckt->CKTstate0 + here->HICUMibici) = Ibici; *(ckt->CKTstate0 + here->HICUMibici_Vbici) = Ibici_Vbici; *(ckt->CKTstate0 + here->HICUMibici_Vbiei) = Ibici_Vbiei; + *(ckt->CKTstate0 + here->HICUMibici_Vrth) = Ibici_dT; *(ckt->CKTstate0 + here->HICUMibpbi) = Ibpbi; *(ckt->CKTstate0 + here->HICUMibpbi_Vbpbi) = Ibpbi_Vbpbi; *(ckt->CKTstate0 + here->HICUMibpbi_Vbiei) = Ibpbi_Vbiei; *(ckt->CKTstate0 + here->HICUMibpbi_Vbici) = Ibpbi_Vbici; + *(ckt->CKTstate0 + here->HICUMibpbi_Vrth) = Ibpbi_dT; *(ckt->CKTstate0 + here->HICUMibpci) = Ibpci; *(ckt->CKTstate0 + here->HICUMibpci_Vbpci) = Ibpci_Vbpci; + *(ckt->CKTstate0 + here->HICUMibpci_Vrth) = Ibpci_dT; *(ckt->CKTstate0 + here->HICUMisici) = Isici; *(ckt->CKTstate0 + here->HICUMisici_Vsici) = Isici_Vsici; + *(ckt->CKTstate0 + here->HICUMisici_Vrth) = Isici_dT; *(ckt->CKTstate0 + here->HICUMibpsi) = Ibpsi; *(ckt->CKTstate0 + here->HICUMibpsi_Vbpci) = Ibpsi_Vbpci; *(ckt->CKTstate0 + here->HICUMibpsi_Vsici) = Ibpsi_Vsici; + *(ckt->CKTstate0 + here->HICUMibpsi_Vrth) = Ibpsi_dT; *(ckt->CKTstate0 + here->HICUMisis_Vsis) = Isis_Vsis; *(ckt->CKTstate0 + here->HICUMieie) = Ieie; + *(ckt->CKTstate0 + here->HICUMieie_Vrth) = Ieie_dT; *(ckt->CKTstate0 + here->HICUMcqcth) = Icth; *(ckt->CKTstate0 + here->HICUMicth_dT) = Icth_dT;