From 6eefe34d56bc0aedfd086adc246d0f8fd12aed56 Mon Sep 17 00:00:00 2001 From: Markus Mueller Date: Sun, 7 Jun 2020 13:58:24 +0200 Subject: [PATCH] add real part of AC matrix --- src/spicelib/devices/hicum2/hicum2acld.c | 232 +++++++++++------------ 1 file changed, 116 insertions(+), 116 deletions(-) diff --git a/src/spicelib/devices/hicum2/hicum2acld.c b/src/spicelib/devices/hicum2/hicum2acld.c index 15c943e79..ca9a524ef 100644 --- a/src/spicelib/devices/hicum2/hicum2acld.c +++ b/src/spicelib/devices/hicum2/hicum2acld.c @@ -45,15 +45,14 @@ HICUMacLoad(GENmodel *inModel, CKTcircuit *ckt) double Ibpbi_Vbpbi; - double Ibpbi_Vciei; + double Ibpbi_Vbici; double Ibpbi_Vbiei; double Ibpbi_Vrth; - double Isis_Vsis; - - double Icic_Vcic; - double Ieie_Veie; - double Ibbp_Vbbp; + double Isis_Vsis, Isis_Vrth; + double Icic_Vcic, Icic_Vrth; + double Ieie_Veie, Ieie_Vrth; + double Ibbp_Vbbp, Ibbp_Vrth; double Ibpsi_Vbpci; double Ibpsi_Vsici; @@ -86,12 +85,17 @@ HICUMacLoad(GENmodel *inModel, CKTcircuit *ckt) for( here = HICUMinstances(model); here!= NULL; here = HICUMnextInstance(here)) { - //todo: temperature derivatives + // get all derivatives of branch DC currents Ibbp_Vbbp = 1/here->HICUMrbx_t.rpart; Icic_Vcic = 1/here->HICUMrcx_t.rpart; Ieie_Veie = 1/here->HICUMre_t.rpart; Isis_Vsis = 1/model->HICUMrsu; + Ibbp_Vrth = -*(ckt->CKTstate0 + here->HICUMvbbp)/here->HICUMrbx_t.rpart/here->HICUMrbx_t.rpart*here->HICUMrbx_t.dpart; + Icic_Vrth = -*(ckt->CKTstate0 + here->HICUMvcic)/here->HICUMrcx_t.rpart/here->HICUMrcx_t.rpart*here->HICUMrcx_t.dpart; + Icic_Vrth = -*(ckt->CKTstate0 + here->HICUMveie)/here->HICUMre_t.rpart/here->HICUMre_t.rpart*here->HICUMre_t.dpart; + Isis_Vrth = 0.0; + Ibiei_Vbiei = *(ckt->CKTstate0 + here->HICUMibiei_Vbiei); Ibiei_Vbici = *(ckt->CKTstate0 + here->HICUMibiei_Vbici); Ibiei_Vrth = *(ckt->CKTstate0 + here->HICUMibiei_Vrth); @@ -109,9 +113,12 @@ HICUMacLoad(GENmodel *inModel, CKTcircuit *ckt) Ibpbi_Vbpbi = *(ckt->CKTstate0 + here->HICUMibpbi_Vbpbi); Ibpbi_Vbiei = *(ckt->CKTstate0 + here->HICUMibpbi_Vbiei); - Ibpbi_Vciei = *(ckt->CKTstate0 + here->HICUMibpbi_Vbici); + Ibpbi_Vbici = *(ckt->CKTstate0 + here->HICUMibpbi_Vbici); Ibpbi_Vrth = *(ckt->CKTstate0 + here->HICUMibpbi_Vrth); + Ibpci_Vbpci = *(ckt->CKTstate0 + here->HICUMibpci_Vbpci); + Ibpci_Vrth = *(ckt->CKTstate0 + here->HICUMibpci_Vrth); + Isici_Vsici = *(ckt->CKTstate0 + here->HICUMisici_Vsici); Isici_Vrth = *(ckt->CKTstate0 + here->HICUMisici_Vrth); @@ -119,116 +126,109 @@ HICUMacLoad(GENmodel *inModel, CKTcircuit *ckt) 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); +//////////////////////////////////// +////////// The real part ///////// +//////////////////////////////////// -/* -c The real part -*/ -/* -c Stamp element: Ibiei (missing Ibiei_Vbici) -*/ - *(here->HICUMbaseBIBaseBIPtr) += Ibiei_Vbiei; - *(here->HICUMbaseBIEmitEIPtr) += -Ibiei_Vbiei; - *(here->HICUMemitEIBaseBIPtr) += -Ibiei_Vbiei; - *(here->HICUMemitEIEmitEIPtr) += Ibiei_Vbiei; -/* -c Stamp element: Ibpei -*/ - *(here->HICUMbaseBPBaseBPPtr) += Ibpei_Vbpei; - *(here->HICUMbaseBPEmitEIPtr) += -Ibpei_Vbpei; - *(here->HICUMemitEIBaseBPPtr) += -Ibpei_Vbpei; - *(here->HICUMemitEIEmitEIPtr) += Ibpei_Vbpei; +// Stamp element: Ibiei + *(here->HICUMbaseBIBaseBIPtr) += Ibiei_Vbiei; + *(here->HICUMemitEIEmitEIPtr) += Ibiei_Vbiei; + *(here->HICUMbaseBIEmitEIPtr) += -Ibiei_Vbiei; + *(here->HICUMemitEIBaseBIPtr) += -Ibiei_Vbiei; + *(here->HICUMbaseBIBaseBIPtr) += Ibiei_Vbici; + *(here->HICUMemitEICollCIPtr) += Ibiei_Vbici; + *(here->HICUMbaseBICollCIPtr) += -Ibiei_Vbici; + *(here->HICUMemitEIBaseBIPtr) += -Ibiei_Vbici; -/* -c Stamp element: Iciei -*/ - *(here->HICUMcollCIBaseBIPtr) += Iciei_Vbiei; - *(here->HICUMcollCIEmitEIPtr) += -Iciei_Vbiei; - *(here->HICUMemitEIBaseBIPtr) += -Iciei_Vbiei; - *(here->HICUMemitEIEmitEIPtr) += Iciei_Vbiei; - *(here->HICUMcollCIBaseBIPtr) += Iciei_Vbici; - *(here->HICUMcollCICollCIPtr) += -Iciei_Vbici; - *(here->HICUMemitEIBaseBIPtr) += -Iciei_Vbici; - *(here->HICUMemitEICollCIPtr) += Iciei_Vbici; -/* -c Stamp element: Ibici (missing Ibici_Vbiei) -*/ - *(here->HICUMbaseBIBaseBIPtr) += Ibici_Vbici; - *(here->HICUMbaseBICollCIPtr) += -Ibici_Vbici; - *(here->HICUMcollCIBaseBIPtr) += -Ibici_Vbici; - *(here->HICUMcollCICollCIPtr) += Ibici_Vbici; -/* -c Stamp element: Ibpci -*/ - *(here->HICUMbaseBPCollCIPtr) += Ibpci_Vbpci; - *(here->HICUMbaseBPBaseBPPtr) += -Ibpci_Vbpci; - *(here->HICUMcollCIBaseBPPtr) += -Ibpci_Vbpci; - *(here->HICUMcollCICollCIPtr) += Ibpci_Vbpci; -/* -c Stamp element: Rcx -*/ - *(here->HICUMcollCollPtr) += Icic_Vcic; - *(here->HICUMcollCICollPtr) += -Icic_Vcic; - *(here->HICUMcollCollCIPtr) += -Icic_Vcic; - *(here->HICUMcollCICollCIPtr) += Icic_Vcic; -/* -c Stamp element: Rbx -*/ - *(here->HICUMbaseBasePtr) += Ibbp_Vbbp; - *(here->HICUMbaseBPBasePtr) += -Ibbp_Vbbp; - *(here->HICUMbaseBaseBPPtr) += -Ibbp_Vbbp; - *(here->HICUMbaseBPBaseBPPtr) += Ibbp_Vbbp; -/* -c Stamp element: Ibpbi -*/ - *(here->HICUMbaseBPBaseBPPtr) += Ibpbi_Vbpbi; - *(here->HICUMbaseBPBaseBIPtr) += -Ibpbi_Vbpbi; - *(here->HICUMbaseBPBaseBIPtr) += Ibpbi_Vbiei; - *(here->HICUMbaseBPEmitEIPtr) += -Ibpbi_Vbiei; - *(here->HICUMbaseBPCollCIPtr) += Ibpbi_Vciei; - *(here->HICUMbaseBPEmitEIPtr) += -Ibpbi_Vciei; - *(here->HICUMbaseBIBaseBPPtr) += -Ibpbi_Vbpbi; - *(here->HICUMbaseBIBaseBIPtr) += Ibpbi_Vbpbi; - *(here->HICUMbaseBIBaseBIPtr) += -Ibpbi_Vbiei; - *(here->HICUMbaseBIEmitEIPtr) += Ibpbi_Vbiei; - *(here->HICUMbaseBICollCIPtr) += -Ibpbi_Vciei; - *(here->HICUMbaseBIEmitEIPtr) += Ibpbi_Vciei; -/* -c Stamp element: Re -*/ - *(here->HICUMemitEmitPtr) += Ieie_Veie; - *(here->HICUMemitEIEmitPtr) += -Ieie_Veie; - *(here->HICUMemitEmitEIPtr) += -Ieie_Veie; - *(here->HICUMemitEIEmitEIPtr) += Ieie_Veie; -/* -c Stamp element: Isici -*/ - *(here->HICUMsubsSISubsSIPtr) += Isici_Vsici; - *(here->HICUMsubsSICollCIPtr) += -Isici_Vsici; - *(here->HICUMcollCISubsSIPtr) += -Isici_Vsici; - *(here->HICUMcollCICollCIPtr) += Isici_Vsici; -/* -c Stamp element: Ibpsi -*/ - *(here->HICUMbaseBPBaseBPPtr) += Ibpsi_Vbpci; - *(here->HICUMbaseBPCollCIPtr) += -Ibpsi_Vbpci; - *(here->HICUMbaseBPSubsSIPtr) += Ibpsi_Vsici; - *(here->HICUMbaseBPCollCIPtr) += -Ibpsi_Vsici; - *(here->HICUMsubsSIBaseBPPtr) += -Ibpsi_Vbpci; - *(here->HICUMsubsSICollCIPtr) += Ibpsi_Vbpci; - *(here->HICUMsubsSISubsSIPtr) += -Ibpsi_Vsici; - *(here->HICUMsubsSICollCIPtr) += Ibpsi_Vsici; -/* -c Stamp element: Rs -*/ - *(here->HICUMsubsSubsPtr) += Isis_Vsis; - *(here->HICUMsubsSISubsPtr) += -Isis_Vsis; - *(here->HICUMsubsSubsSIPtr) += -Isis_Vsis; - *(here->HICUMsubsSISubsSIPtr) += Isis_Vsis; -/* -c The complex part -*/ +// Stamp element: Ibpei + *(here->HICUMbaseBPBaseBPPtr) += Ibpei_Vbpei; + *(here->HICUMemitEIEmitEIPtr) += Ibpei_Vbpei; + *(here->HICUMbaseBPEmitEIPtr) += -Ibpei_Vbpei; + *(here->HICUMemitEIBaseBPPtr) += -Ibpei_Vbpei;; + +// Stamp element: Iciei + *(here->HICUMcollCIBaseBIPtr) += Iciei_Vbiei; + *(here->HICUMemitEIEmitEIPtr) += Iciei_Vbiei; + *(here->HICUMcollCIEmitEIPtr) += -Iciei_Vbiei; + *(here->HICUMemitEIBaseBIPtr) += -Iciei_Vbiei; + *(here->HICUMcollCIBaseBIPtr) += Iciei_Vbici; + *(here->HICUMemitEICollCIPtr) += Iciei_Vbici; + *(here->HICUMcollCICollCIPtr) += -Iciei_Vbici; + *(here->HICUMemitEIBaseBIPtr) += -Iciei_Vbici; + +// Stamp element: Ibici (missing Ibici_Vbiei) + *(here->HICUMbaseBIBaseBIPtr) += Ibici_Vbici; + *(here->HICUMcollCICollCIPtr) += Ibici_Vbici; + *(here->HICUMcollCIBaseBIPtr) += -Ibici_Vbici; + *(here->HICUMbaseBICollCIPtr) += -Ibici_Vbici; + *(here->HICUMbaseBIBaseBIPtr) += Ibici_Vbiei; + *(here->HICUMcollCIEmitEIPtr) += Ibici_Vbiei; + *(here->HICUMcollCIBaseBIPtr) += -Ibici_Vbiei; + *(here->HICUMbaseBIEmitEIPtr) += -Ibici_Vbiei; + +// Stamp element: Ibpci + *(here->HICUMbaseBPBaseBPPtr) += Ibpci_Vbpci; + *(here->HICUMcollCICollCIPtr) += Ibpci_Vbpci; + *(here->HICUMbaseBPCollCIPtr) += -Ibpci_Vbpci; + *(here->HICUMcollCIBaseBPPtr) += -Ibpci_Vbpci; + +// Stamp element: Rcx + *(here->HICUMcollCollPtr) += Icic_Vcic; + *(here->HICUMcollCICollCIPtr) += Icic_Vcic; + *(here->HICUMcollCICollPtr) += -Icic_Vcic; + *(here->HICUMcollCollCIPtr) += -Icic_Vcic; + +// Stamp element: Rbx + *(here->HICUMbaseBasePtr) += Ibbp_Vbbp; + *(here->HICUMbaseBPBaseBPPtr) += Ibbp_Vbbp; + *(here->HICUMbaseBPBasePtr) += -Ibbp_Vbbp; + *(here->HICUMbaseBaseBPPtr) += -Ibbp_Vbbp; + +// Stamp element: Ibpbi + *(here->HICUMbaseBPBaseBPPtr) += Ibpbi_Vbpbi; + *(here->HICUMbaseBIBaseBIPtr) += Ibpbi_Vbpbi; + *(here->HICUMbaseBPBaseBIPtr) += -Ibpbi_Vbpbi; + *(here->HICUMbaseBIBaseBPPtr) += -Ibpbi_Vbpbi; + *(here->HICUMbaseBPBaseBIPtr) += Ibpbi_Vbiei; + *(here->HICUMbaseBIEmitEIPtr) += Ibpbi_Vbiei; + *(here->HICUMbaseBPEmitEIPtr) += -Ibpbi_Vbiei; + *(here->HICUMbaseBIBaseBIPtr) += -Ibpbi_Vbiei; + *(here->HICUMbaseBPBaseBIPtr) += Ibpbi_Vbici; + *(here->HICUMbaseBICollCIPtr) += Ibpbi_Vbici; + *(here->HICUMbaseBPCollCIPtr) += -Ibpbi_Vbici; + *(here->HICUMbaseBIBaseBIPtr) += -Ibpbi_Vbici + +// Stamp element: Re + *(here->HICUMemitEmitPtr) += Ieie_Veie; + *(here->HICUMemitEIEmitEIPtr) += Ieie_Veie; + *(here->HICUMemitEIEmitPtr) += -Ieie_Veie; + *(here->HICUMemitEmitEIPtr) += -Ieie_Veie; + +// Stamp element: Isici + *(here->HICUMsubsSISubsSIPtr) += Isici_Vsici; + *(here->HICUMcollCICollCIPtr) += Isici_Vsici; + *(here->HICUMsubsSICollCIPtr) += -Isici_Vsici; + *(here->HICUMcollCISubsSIPtr) += -Isici_Vsici;; + +// Stamp element: Ibpsi + *(here->HICUMbaseBPSubsSIPtr) += Ibpsi_Vsici; + *(here->HICUMsubsSICollCIPtr) += Ibpsi_Vsici; + *(here->HICUMbaseBPCollCIPtr) += -Ibpsi_Vsici; + *(here->HICUMsubsSISubsSIPtr) += -Ibpsi_Vsici; + *(here->HICUMbaseBPBaseBPPtr) += Ibpsi_Vbpci; + *(here->HICUMsubsSICollCIPtr) += Ibpsi_Vbpci; + *(here->HICUMbaseBPCollCIPtr) += -Ibpsi_Vbpci; + *(here->HICUMsubsSIBaseBPPtr) += -Ibpsi_Vbpci;; + +// Stamp element: Rs + *(here->HICUMsubsSubsPtr) += Isis_Vsis; + *(here->HICUMsubsSISubsSIPtr) += Isis_Vsis; + *(here->HICUMsubsSISubsPtr) += -Isis_Vsis; + *(here->HICUMsubsSubsSIPtr) += -Isis_Vsis;; + +//////////////////////////////////// +////////// The complex part ////// +//////////////////////////////////// //todo: Complete with partial dervatives e.g. Qjs_Vsici, Qrbi_Vbici XQrbi_Vbpbi = *(ckt->CKTstate0 + here->HICUMcqrbi) * ckt->CKTomega;