From 8a88442004006fd6490ab3df8ca41a24e95e64c8 Mon Sep 17 00:00:00 2001 From: dwarning Date: Mon, 1 Jul 2024 14:35:44 +0200 Subject: [PATCH] vbic: more adding reactive part into acload --- src/spicelib/devices/vbic/vbicacld.c | 104 ++++++++++++++------------- src/spicelib/devices/vbic/vbicdefs.h | 83 ++++++++++----------- src/spicelib/devices/vbic/vbicload.c | 78 ++++++++++---------- 3 files changed, 134 insertions(+), 131 deletions(-) diff --git a/src/spicelib/devices/vbic/vbicacld.c b/src/spicelib/devices/vbic/vbicacld.c index ada696e19..226f57bfe 100644 --- a/src/spicelib/devices/vbic/vbicacld.c +++ b/src/spicelib/devices/vbic/vbicacld.c @@ -34,7 +34,7 @@ VBICacLoad(GENmodel *inModel, CKTcircuit *ckt) double Ibe_Vrth, Ibex_Vrth, Itzf_Vrth, Itzr_Vrth, Ibc_Vrth, Ibep_Vrth, Ircx_Vrth, Irci_Vrth, Irbx_Vrth, Irbi_Vrth, Ire_Vrth, Irbp_Vrth, - Ibcp_Vrth, Iccp_Vrth, Irs_Vrth, Irth_Vrth, Icth_Vrth, Ith_Vrth, + Ibcp_Vrth, Iccp_Vrth, Irs_Vrth, Irth_Vrth, Ith_Vrth, Ith_Vbei, Ith_Vbci, Ith_Vcei, Ith_Vbex, Ith_Vbep, Ith_Vbcp, Ith_Vcep, Ith_Vrci, Ith_Vbcx, Ith_Vrbi, Ith_Vrbp, Ith_Vrcx, Ith_Vrbx, Ith_Vre, Ith_Vrs; double XQcth_Vrth, XQbe_Vrth, XQbex_Vrth, XQbc_Vrth, XQbcx_Vrth, XQbep_Vrth, XQbcp_Vrth; @@ -228,39 +228,38 @@ c Stamp element: Rs if (here->VBIC_selfheat) { - Ibe_Vrth = *(ckt->CKTstate0 + here->VBICibe_Vrth); - Ibex_Vrth = *(ckt->CKTstate0 + here->VBICibex_Vrth); - Itzf_Vrth = *(ckt->CKTstate0 + here->VBICitzf_Vrth); - Itzr_Vrth = *(ckt->CKTstate0 + here->VBICitzr_Vrth); - Ibc_Vrth = *(ckt->CKTstate0 + here->VBICibc_Vrth); - Ibep_Vrth = *(ckt->CKTstate0 + here->VBICibep_Vrth); - Ircx_Vrth = *(ckt->CKTstate0 + here->VBICircx_Vrth); - Irci_Vrth = *(ckt->CKTstate0 + here->VBICirci_Vrth); - Irbx_Vrth = *(ckt->CKTstate0 + here->VBICirbx_Vrth); - Irbi_Vrth = *(ckt->CKTstate0 + here->VBICirbi_Vrth); - Ire_Vrth = *(ckt->CKTstate0 + here->VBICire_Vrth); - Irbp_Vrth = *(ckt->CKTstate0 + here->VBICirbp_Vrth); - Ibcp_Vrth = *(ckt->CKTstate0 + here->VBICibcp_Vrth); - Iccp_Vrth = *(ckt->CKTstate0 + here->VBICiccp_Vrth); - Irs_Vrth = *(ckt->CKTstate0 + here->VBICirs_Vrth); - Irth_Vrth = *(ckt->CKTstate0 + here->VBICirth_Vrth); - Icth_Vrth = *(ckt->CKTstate0 + here->VBICicth_Vrth); - Ith_Vrth = *(ckt->CKTstate0 + here->VBICith_Vrth); - Ith_Vbei = *(ckt->CKTstate0 + here->VBICith_Vbei); - Ith_Vbci = *(ckt->CKTstate0 + here->VBICith_Vbci); - Ith_Vcei = *(ckt->CKTstate0 + here->VBICith_Vcei); - Ith_Vbex = *(ckt->CKTstate0 + here->VBICith_Vbex); - Ith_Vbep = *(ckt->CKTstate0 + here->VBICith_Vbep); - Ith_Vbcp = *(ckt->CKTstate0 + here->VBICith_Vbcp); - Ith_Vcep = *(ckt->CKTstate0 + here->VBICith_Vcep); - Ith_Vrci = *(ckt->CKTstate0 + here->VBICith_Vrci); - Ith_Vbcx = *(ckt->CKTstate0 + here->VBICith_Vbcx); - Ith_Vrbi = *(ckt->CKTstate0 + here->VBICith_Vrbi); - Ith_Vrbp = *(ckt->CKTstate0 + here->VBICith_Vrbp); - Ith_Vrcx = *(ckt->CKTstate0 + here->VBICith_Vrcx); - Ith_Vrbx = *(ckt->CKTstate0 + here->VBICith_Vrbx); - Ith_Vre = *(ckt->CKTstate0 + here->VBICith_Vre); - Ith_Vrs = *(ckt->CKTstate0 + here->VBICith_Vrs); + Ibe_Vrth = here->VBICibe_Vrth; + Ibex_Vrth = here->VBICibex_Vrth; + Itzf_Vrth = here->VBICitzf_Vrth; + Itzr_Vrth = here->VBICitzr_Vrth; + Ibc_Vrth = here->VBICibc_Vrth; + Ibep_Vrth = here->VBICibep_Vrth; + Ircx_Vrth = here->VBICircx_Vrth; + Irci_Vrth = here->VBICirci_Vrth; + Irbx_Vrth = here->VBICirbx_Vrth; + Irbi_Vrth = here->VBICirbi_Vrth; + Ire_Vrth = here->VBICire_Vrth; + Irbp_Vrth = here->VBICirbp_Vrth; + Ibcp_Vrth = here->VBICibcp_Vrth; + Iccp_Vrth = here->VBICiccp_Vrth; + Irs_Vrth = here->VBICirs_Vrth; + Irth_Vrth = here->VBICirth_Vrth; + Ith_Vrth = here->VBICith_Vrth; + Ith_Vbei = here->VBICith_Vbei; + Ith_Vbci = here->VBICith_Vbci; + Ith_Vcei = here->VBICith_Vcei; + Ith_Vbex = here->VBICith_Vbex; + Ith_Vbep = here->VBICith_Vbep; + Ith_Vbcp = here->VBICith_Vbcp; + Ith_Vcep = here->VBICith_Vcep; + Ith_Vrci = here->VBICith_Vrci; + Ith_Vbcx = here->VBICith_Vbcx; + Ith_Vrbi = here->VBICith_Vrbi; + Ith_Vrbp = here->VBICith_Vrbp; + Ith_Vrcx = here->VBICith_Vrcx; + Ith_Vrbx = here->VBICith_Vrbx; + Ith_Vre = here->VBICith_Vre; + Ith_Vrs = here->VBICith_Vrs; /* c Stamp element: Ibe @@ -342,10 +341,6 @@ c Stamp element: Rth */ *(here->VBICtempTempPtr) += Irth_Vrth; /* -c Stamp element: Cth -*/ - *(here->VBICtempTempPtr) += Icth_Vrth; -/* c Stamp element: Ith */ *(here->VBICtempTempPtr) += -Ith_Vrth; @@ -461,21 +456,28 @@ c Stamp element: Qbco *(here->VBICcollBasePtr + 1) += -XQbco_Vbc; if (here->VBIC_selfheat) { - XQcth_Vrth = *(ckt->CKTstate0 + here->VBICcqcth) * ckt->CKTomega; - XQbe_Vrth = *(ckt->CKTstate0 + here->VBICcqbeth) * ckt->CKTomega; - XQbex_Vrth = *(ckt->CKTstate0 + here->VBICcqbexth) * ckt->CKTomega; - XQbc_Vrth = *(ckt->CKTstate0 + here->VBICcqbcth) * ckt->CKTomega; - XQbcx_Vrth = *(ckt->CKTstate0 + here->VBICcqbcxth) * ckt->CKTomega; - XQbep_Vrth = *(ckt->CKTstate0 + here->VBICcqbepth) * ckt->CKTomega; - XQbcp_Vrth = *(ckt->CKTstate0 + here->VBICcqbcpth) * ckt->CKTomega; + XQcth_Vrth = here->VBICcapcth * ckt->CKTomega; + XQbe_Vrth = here->VBICcapqbeth * ckt->CKTomega; + XQbex_Vrth = here->VBICcapqbexth * ckt->CKTomega; + XQbc_Vrth = here->VBICcapqbcth * ckt->CKTomega; + XQbcx_Vrth = here->VBICcapqbcxth * ckt->CKTomega; + XQbep_Vrth = here->VBICcapqbepth * ckt->CKTomega; + XQbcp_Vrth = here->VBICcapqbcpth * ckt->CKTomega; -// *(here->VBICtempTempPtr + 1) += XQcth_Vrth; +// *(here->VBICtempTempPtr + 1) += XQcth_Vrth; // -// *(here->VBICbaseBIBaseBIPtr + 1) += XQbe_Vrth; -// *(here->VBICbaseBItempPtr + 1) += -XQbe_Vrth; -// *(here->VBICemitEIBaseBIPtr + 1) += -XQbe_Vrth; -// *(here->VBICemitEItempPtr + 1) += XQbe_Vrth; - +// *(here->VBICbaseBItempPtr + 1) += XQbe_Vrth; +// *(here->VBICemitEItempPtr + 1) += -XQbe_Vrth; +// *(here->VBICbaseBXtempPtr + 1) += XQbex_Vrth; +// *(here->VBICemitEItempPtr + 1) += -XQbex_Vrth; +// *(here->VBICbaseBItempPtr + 1) += XQbc_Vrth; +// *(here->VBICcollCItempPtr + 1) += -XQbc_Vrth; +// *(here->VBICbaseBItempPtr + 1) += XQbcx_Vrth; +// *(here->VBICcollCXtempPtr + 1) += -XQbcx_Vrth; +// *(here->VBICbaseBXtempPtr + 1) += XQbep_Vrth; +// *(here->VBICbaseBPtempPtr + 1) += -XQbep_Vrth; +// *(here->VBICsubsSItempPtr + 1) += XQbcp_Vrth; +// *(here->VBICbaseBPtempPtr + 1) += -XQbcp_Vrth; } } diff --git a/src/spicelib/devices/vbic/vbicdefs.h b/src/spicelib/devices/vbic/vbicdefs.h index 76bd8b81b..f7ecafa90 100644 --- a/src/spicelib/devices/vbic/vbicdefs.h +++ b/src/spicelib/devices/vbic/vbicdefs.h @@ -249,6 +249,47 @@ typedef struct sVBICinstance { double VBICcapbcp; double VBICcapcth; + double VBICcapqbeth; + double VBICcapqbexth; + double VBICcapqbcth; + double VBICcapqbcxth; + double VBICcapqbepth; + double VBICcapqbcpth; + + double VBICibe_Vrth; + double VBICibex_Vrth; + double VBICitzf_Vrth; + double VBICitzr_Vrth; + double VBICibc_Vrth; + double VBICibep_Vrth; + double VBICircx_Vrth; + double VBICirci_Vrth; + double VBICirbx_Vrth; + double VBICirbi_Vrth; + double VBICire_Vrth; + double VBICirbp_Vrth; + double VBICibcp_Vrth; + double VBICiccp_Vrth; + double VBICirs_Vrth; + double VBICirth_Vrth; + double VBICith_Vrth; + + double VBICith_Vbei; + double VBICith_Vbci; + double VBICith_Vcei; + double VBICith_Vbex; + double VBICith_Vbep; + double VBICith_Vbcp; + double VBICith_Vcep; + double VBICith_Vrci; + double VBICith_Vbcx; + double VBICith_Vrbi; + double VBICith_Vrbp; + double VBICith_Vrcx; + double VBICith_Vrbx; + double VBICith_Vre; + double VBICith_Vrs; + int VBIC_selfheat; /* self-heating enabled */ #ifndef NONOISE @@ -433,47 +474,7 @@ typedef struct sVBICinstance { #define VBICvrth VBICstate+68 #define VBICicth_Vrth VBICstate+69 -#define VBICibe_Vrth VBICstate+70 -#define VBICibex_Vrth VBICstate+71 -#define VBICitzf_Vrth VBICstate+72 -#define VBICitzr_Vrth VBICstate+73 -#define VBICibc_Vrth VBICstate+74 -#define VBICibep_Vrth VBICstate+75 -#define VBICircx_Vrth VBICstate+76 -#define VBICirci_Vrth VBICstate+77 -#define VBICirbx_Vrth VBICstate+78 -#define VBICirbi_Vrth VBICstate+79 -#define VBICire_Vrth VBICstate+80 -#define VBICirbp_Vrth VBICstate+81 -#define VBICibcp_Vrth VBICstate+82 -#define VBICiccp_Vrth VBICstate+83 -#define VBICirs_Vrth VBICstate+84 -#define VBICirth_Vrth VBICstate+85 -#define VBICith_Vrth VBICstate+86 -#define VBICith_Vbei VBICstate+87 -#define VBICith_Vbci VBICstate+88 -#define VBICith_Vcei VBICstate+89 -#define VBICith_Vbex VBICstate+90 -#define VBICith_Vbep VBICstate+91 -#define VBICith_Vbcp VBICstate+92 -#define VBICith_Vcep VBICstate+93 -#define VBICith_Vrci VBICstate+94 -#define VBICith_Vbcx VBICstate+95 -#define VBICith_Vrbi VBICstate+96 -#define VBICith_Vrbp VBICstate+97 -#define VBICith_Vrcx VBICstate+98 -#define VBICith_Vrbx VBICstate+99 -#define VBICith_Vre VBICstate+100 -#define VBICith_Vrs VBICstate+101 - -#define VBICcqbeth VBICstate+102 -#define VBICcqbexth VBICstate+103 -#define VBICcqbcth VBICstate+104 -#define VBICcqbcxth VBICstate+105 -#define VBICcqbepth VBICstate+106 -#define VBICcqbcpth VBICstate+107 - -#define VBICnumStates 108 +#define VBICnumStates 70 /* per model data */ typedef struct sVBICmodel { /* model structure for a vbic */ diff --git a/src/spicelib/devices/vbic/vbicload.c b/src/spicelib/devices/vbic/vbicload.c index b01311209..23457b32a 100644 --- a/src/spicelib/devices/vbic/vbicload.c +++ b/src/spicelib/devices/vbic/vbicload.c @@ -736,13 +736,13 @@ VBICload(GENmodel *inModel, CKTcircuit *ckt) *(ckt->CKTstate0 + here->VBICcqbco) = Qbco_Vbc; *(ckt->CKTstate0 + here->VBICcqbcp) = Qbcp_Vbcp; if (here->VBIC_selfheat) { - *(ckt->CKTstate0 + here->VBICcqcth) = Qcth_Vrth; - *(ckt->CKTstate0 + here->VBICcqbeth) = Qbe_Vrth; - *(ckt->CKTstate0 + here->VBICcqbexth) = Qbex_Vrth; - *(ckt->CKTstate0 + here->VBICcqbcth) = Qbc_Vrth; - *(ckt->CKTstate0 + here->VBICcqbcxth) = Qbcx_Vrth; - *(ckt->CKTstate0 + here->VBICcqbepth) = Qbep_Vrth; - *(ckt->CKTstate0 + here->VBICcqbcpth) = Qbcp_Vrth; + here->VBICcapcth = Qcth_Vrth; + here->VBICcapqbeth = Qbe_Vrth; + here->VBICcapqbexth = Qbex_Vrth; + here->VBICcapqbcth = Qbc_Vrth; + here->VBICcapqbcxth = Qbcx_Vrth; + here->VBICcapqbepth = Qbep_Vrth; + here->VBICcapqbcpth = Qbcp_Vrth; } continue; /* go to 1000 */ } @@ -909,38 +909,38 @@ VBICload(GENmodel *inModel, CKTcircuit *ckt) *(ckt->CKTstate0 + here->VBICcqcth) = Icth; *(ckt->CKTstate0 + here->VBICicth_Vrth) = Icth_Vrth; - *(ckt->CKTstate0 + here->VBICibe_Vrth) = Ibe_Vrth ; - *(ckt->CKTstate0 + here->VBICibex_Vrth) = Ibex_Vrth; - *(ckt->CKTstate0 + here->VBICitzf_Vrth) = Itzf_Vrth; - *(ckt->CKTstate0 + here->VBICitzr_Vrth) = Itzr_Vrth; - *(ckt->CKTstate0 + here->VBICibc_Vrth) = Ibc_Vrth ; - *(ckt->CKTstate0 + here->VBICibep_Vrth) = Ibep_Vrth; - *(ckt->CKTstate0 + here->VBICircx_Vrth) = Ircx_Vrth; - *(ckt->CKTstate0 + here->VBICirci_Vrth) = Irci_Vrth; - *(ckt->CKTstate0 + here->VBICirbx_Vrth) = Irbx_Vrth; - *(ckt->CKTstate0 + here->VBICirbi_Vrth) = Irbi_Vrth; - *(ckt->CKTstate0 + here->VBICire_Vrth) = Ire_Vrth ; - *(ckt->CKTstate0 + here->VBICirbp_Vrth) = Irbp_Vrth; - *(ckt->CKTstate0 + here->VBICibcp_Vrth) = Ibcp_Vrth; - *(ckt->CKTstate0 + here->VBICiccp_Vrth) = Iccp_Vrth; - *(ckt->CKTstate0 + here->VBICirs_Vrth) = Irs_Vrth ; - *(ckt->CKTstate0 + here->VBICirth_Vrth) = Irth_Vrth; - *(ckt->CKTstate0 + here->VBICith_Vrth) = Ith_Vrth ; - *(ckt->CKTstate0 + here->VBICith_Vbei) = Ith_Vbei ; - *(ckt->CKTstate0 + here->VBICith_Vbci) = Ith_Vbci ; - *(ckt->CKTstate0 + here->VBICith_Vcei) = Ith_Vcei ; - *(ckt->CKTstate0 + here->VBICith_Vbex) = Ith_Vbex ; - *(ckt->CKTstate0 + here->VBICith_Vbep) = Ith_Vbep ; - *(ckt->CKTstate0 + here->VBICith_Vbcp) = Ith_Vbcp ; - *(ckt->CKTstate0 + here->VBICith_Vcep) = Ith_Vcep ; - *(ckt->CKTstate0 + here->VBICith_Vrci) = Ith_Vrci ; - *(ckt->CKTstate0 + here->VBICith_Vbcx) = Ith_Vbcx ; - *(ckt->CKTstate0 + here->VBICith_Vrbi) = Ith_Vrbi ; - *(ckt->CKTstate0 + here->VBICith_Vrbp) = Ith_Vrbp ; - *(ckt->CKTstate0 + here->VBICith_Vrcx) = Ith_Vrcx ; - *(ckt->CKTstate0 + here->VBICith_Vrbx) = Ith_Vrbx ; - *(ckt->CKTstate0 + here->VBICith_Vre) = Ith_Vre ; - *(ckt->CKTstate0 + here->VBICith_Vrs) = Ith_Vrs ; + here->VBICibe_Vrth = Ibe_Vrth; + here->VBICibex_Vrth = Ibex_Vrth; + here->VBICitzf_Vrth = Itzf_Vrth; + here->VBICitzr_Vrth = Itzr_Vrth; + here->VBICibc_Vrth = Ibc_Vrth; + here->VBICibep_Vrth = Ibep_Vrth; + here->VBICircx_Vrth = Ircx_Vrth; + here->VBICirci_Vrth = Irci_Vrth; + here->VBICirbx_Vrth = Irbx_Vrth; + here->VBICirbi_Vrth = Irbi_Vrth; + here->VBICire_Vrth = Ire_Vrth; + here->VBICirbp_Vrth = Irbp_Vrth; + here->VBICibcp_Vrth = Ibcp_Vrth; + here->VBICiccp_Vrth = Iccp_Vrth; + here->VBICirs_Vrth = Irs_Vrth; + here->VBICirth_Vrth = Irth_Vrth; + here->VBICith_Vrth = Ith_Vrth; + here->VBICith_Vbei = Ith_Vbei; + here->VBICith_Vbci = Ith_Vbci; + here->VBICith_Vcei = Ith_Vcei; + here->VBICith_Vbex = Ith_Vbex; + here->VBICith_Vbep = Ith_Vbep; + here->VBICith_Vbcp = Ith_Vbcp; + here->VBICith_Vcep = Ith_Vcep; + here->VBICith_Vrci = Ith_Vrci; + here->VBICith_Vbcx = Ith_Vbcx; + here->VBICith_Vrbi = Ith_Vrbi; + here->VBICith_Vrbp = Ith_Vrbp; + here->VBICith_Vrcx = Ith_Vrcx; + here->VBICith_Vrbx = Ith_Vrbx; + here->VBICith_Vre = Ith_Vre; + here->VBICith_Vrs = Ith_Vrs; } load: