Browse Source

vbic: more adding reactive part into acload

pre-master-46
dwarning 2 years ago
committed by Holger Vogt
parent
commit
8a88442004
  1. 104
      src/spicelib/devices/vbic/vbicacld.c
  2. 83
      src/spicelib/devices/vbic/vbicdefs.h
  3. 78
      src/spicelib/devices/vbic/vbicload.c

104
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;
}
}

83
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 */

78
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:

Loading…
Cancel
Save