You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
486 lines
20 KiB
486 lines
20 KiB
/**********
|
|
Copyright 1990 Regents of the University of California. All rights reserved.
|
|
Author: 1985 Thomas L. Quarles
|
|
Model Author: 1995 Colin McAndrew Motorola
|
|
Spice3 Implementation: 2003 Dietmar Warning DAnalyse GmbH
|
|
**********/
|
|
|
|
/*
|
|
* Function to load the COMPLEX circuit matrix using the
|
|
* small signal parameters saved during a previous DC operating
|
|
* point analysis.
|
|
*/
|
|
|
|
#include "ngspice/ngspice.h"
|
|
#include "ngspice/cktdefs.h"
|
|
#include "vbicdefs.h"
|
|
#include "ngspice/sperror.h"
|
|
#include "ngspice/suffix.h"
|
|
|
|
int
|
|
VBICacLoad(GENmodel *inModel, CKTcircuit *ckt)
|
|
{
|
|
VBICinstance *here;
|
|
VBICmodel *model = (VBICmodel*)inModel;
|
|
double Ibe_Vbei,Ibex_Vbex
|
|
,Itzf_Vbei,Itzf_Vbci,Itzr_Vbci,Itzr_Vbei,Ibc_Vbci
|
|
,Ibc_Vbei,Ibep_Vbep,Ircx_Vrcx,Irci_Vrci
|
|
,Irci_Vbci,Irci_Vbcx,Irbx_Vrbx,Irbi_Vrbi,Irbi_Vbei
|
|
,Irbi_Vbci,Ire_Vre,Irbp_Vrbp,Irbp_Vbep,Irbp_Vbci
|
|
,Ibcp_Vbcp,Iccp_Vbep,Irs_Vrs,Iccp_Vbci,Iccp_Vbcp;
|
|
double XQbe_Vbei, XQbe_Vbci, XQbex_Vbex, XQbc_Vbci,
|
|
XQbcx_Vbcx, XQbep_Vbep, XQbep_Vbci,
|
|
XQbcp_Vbcp, XQbeo_Vbe, XQbco_Vbc;
|
|
|
|
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, 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;
|
|
|
|
/* loop through all the models */
|
|
for( ; model != NULL; model = VBICnextModel(model)) {
|
|
|
|
/* loop through all the instances of the model */
|
|
for( here = VBICinstances(model); here!= NULL;
|
|
here = VBICnextInstance(here)) {
|
|
|
|
Ibe_Vbei = *(ckt->CKTstate0 + here->VBICibe_Vbei);
|
|
Ibex_Vbex = *(ckt->CKTstate0 + here->VBICibex_Vbex);
|
|
Itzf_Vbei = *(ckt->CKTstate0 + here->VBICitzf_Vbei);
|
|
Itzf_Vbci = *(ckt->CKTstate0 + here->VBICitzf_Vbci);
|
|
Itzr_Vbci = *(ckt->CKTstate0 + here->VBICitzr_Vbci);
|
|
Itzr_Vbei = *(ckt->CKTstate0 + here->VBICitzr_Vbei);
|
|
Ibc_Vbci = *(ckt->CKTstate0 + here->VBICibc_Vbci);
|
|
Ibc_Vbei = *(ckt->CKTstate0 + here->VBICibc_Vbei);
|
|
Ibep_Vbep = *(ckt->CKTstate0 + here->VBICibep_Vbep);
|
|
Irci_Vrci = *(ckt->CKTstate0 + here->VBICirci_Vrci);
|
|
Irci_Vbci = *(ckt->CKTstate0 + here->VBICirci_Vbci);
|
|
Irci_Vbcx = *(ckt->CKTstate0 + here->VBICirci_Vbcx);
|
|
Irbi_Vrbi = *(ckt->CKTstate0 + here->VBICirbi_Vrbi);
|
|
Irbi_Vbei = *(ckt->CKTstate0 + here->VBICirbi_Vbei);
|
|
Irbi_Vbci = *(ckt->CKTstate0 + here->VBICirbi_Vbci);
|
|
Irbp_Vrbp = *(ckt->CKTstate0 + here->VBICirbp_Vrbp);
|
|
Irbp_Vbep = *(ckt->CKTstate0 + here->VBICirbp_Vbep);
|
|
Irbp_Vbci = *(ckt->CKTstate0 + here->VBICirbp_Vbci);
|
|
Ibcp_Vbcp = *(ckt->CKTstate0 + here->VBICibcp_Vbcp);
|
|
Iccp_Vbep = *(ckt->CKTstate0 + here->VBICiccp_Vbep);
|
|
Iccp_Vbci = *(ckt->CKTstate0 + here->VBICiccp_Vbci);
|
|
Iccp_Vbcp = *(ckt->CKTstate0 + here->VBICiccp_Vbcp);
|
|
Ircx_Vrcx = *(ckt->CKTstate0 + here->VBICircx_Vrcx);
|
|
Irbx_Vrbx = *(ckt->CKTstate0 + here->VBICirbx_Vrbx);
|
|
Irs_Vrs = *(ckt->CKTstate0 + here->VBICirs_Vrs);
|
|
Ire_Vre = *(ckt->CKTstate0 + here->VBICire_Vre);
|
|
|
|
/*
|
|
c The real part
|
|
*/
|
|
/*
|
|
c Stamp element: Ibe
|
|
*/
|
|
*(here->VBICbaseBIBaseBIPtr) += Ibe_Vbei;
|
|
*(here->VBICbaseBIEmitEIPtr) += -Ibe_Vbei;
|
|
*(here->VBICemitEIBaseBIPtr) += -Ibe_Vbei;
|
|
*(here->VBICemitEIEmitEIPtr) += Ibe_Vbei;
|
|
/*
|
|
c Stamp element: Ibex
|
|
*/
|
|
*(here->VBICbaseBXBaseBXPtr) += Ibex_Vbex;
|
|
*(here->VBICbaseBXEmitEIPtr) += -Ibex_Vbex;
|
|
*(here->VBICemitEIBaseBXPtr) += -Ibex_Vbex;
|
|
*(here->VBICemitEIEmitEIPtr) += Ibex_Vbex;
|
|
/*
|
|
c Stamp element: Itzf
|
|
*/
|
|
*(here->VBICcollCIBaseBIPtr) += Itzf_Vbei;
|
|
*(here->VBICcollCIEmitEIPtr) += -Itzf_Vbei;
|
|
*(here->VBICcollCIBaseBIPtr) += Itzf_Vbci;
|
|
*(here->VBICcollCICollCIPtr) += -Itzf_Vbci;
|
|
*(here->VBICemitEIBaseBIPtr) += -Itzf_Vbei;
|
|
*(here->VBICemitEIEmitEIPtr) += Itzf_Vbei;
|
|
*(here->VBICemitEIBaseBIPtr) += -Itzf_Vbci;
|
|
*(here->VBICemitEICollCIPtr) += Itzf_Vbci;
|
|
/*
|
|
c Stamp element: Itzr
|
|
*/
|
|
*(here->VBICemitEIBaseBIPtr) += Itzr_Vbei;
|
|
*(here->VBICemitEIEmitEIPtr) += -Itzr_Vbei;
|
|
*(here->VBICemitEIBaseBIPtr) += Itzr_Vbci;
|
|
*(here->VBICemitEICollCIPtr) += -Itzr_Vbci;
|
|
*(here->VBICcollCIBaseBIPtr) += -Itzr_Vbei;
|
|
*(here->VBICcollCIEmitEIPtr) += Itzr_Vbei;
|
|
*(here->VBICcollCIBaseBIPtr) += -Itzr_Vbci;
|
|
*(here->VBICcollCICollCIPtr) += Itzr_Vbci;
|
|
/*
|
|
c Stamp element: Ibc
|
|
*/
|
|
*(here->VBICbaseBIBaseBIPtr) += Ibc_Vbci;
|
|
*(here->VBICbaseBICollCIPtr) += -Ibc_Vbci;
|
|
*(here->VBICbaseBIBaseBIPtr) += Ibc_Vbei;
|
|
*(here->VBICbaseBIEmitEIPtr) += -Ibc_Vbei;
|
|
*(here->VBICcollCIBaseBIPtr) += -Ibc_Vbci;
|
|
*(here->VBICcollCICollCIPtr) += Ibc_Vbci;
|
|
*(here->VBICcollCIBaseBIPtr) += -Ibc_Vbei;
|
|
*(here->VBICcollCIEmitEIPtr) += Ibc_Vbei;
|
|
/*
|
|
c Stamp element: Ibep
|
|
*/
|
|
*(here->VBICbaseBXBaseBXPtr) += Ibep_Vbep;
|
|
*(here->VBICbaseBXBaseBPPtr) += -Ibep_Vbep;
|
|
*(here->VBICbaseBPBaseBXPtr) += -Ibep_Vbep;
|
|
*(here->VBICbaseBPBaseBPPtr) += Ibep_Vbep;
|
|
/*
|
|
c Stamp element: Rcx
|
|
*/
|
|
*(here->VBICcollCollPtr) += Ircx_Vrcx;
|
|
*(here->VBICcollCXCollCXPtr) += Ircx_Vrcx;
|
|
*(here->VBICcollCXCollPtr) += -Ircx_Vrcx;
|
|
*(here->VBICcollCollCXPtr) += -Ircx_Vrcx;
|
|
/*
|
|
c Stamp element: Irci
|
|
*/
|
|
*(here->VBICcollCXCollCXPtr) += Irci_Vrci;
|
|
*(here->VBICcollCXCollCIPtr) += -Irci_Vrci;
|
|
*(here->VBICcollCXBaseBIPtr) += Irci_Vbci;
|
|
*(here->VBICcollCXCollCIPtr) += -Irci_Vbci;
|
|
*(here->VBICcollCXBaseBIPtr) += Irci_Vbcx;
|
|
*(here->VBICcollCXCollCXPtr) += -Irci_Vbcx;
|
|
*(here->VBICcollCICollCXPtr) += -Irci_Vrci;
|
|
*(here->VBICcollCICollCIPtr) += Irci_Vrci;
|
|
*(here->VBICcollCIBaseBIPtr) += -Irci_Vbci;
|
|
*(here->VBICcollCICollCIPtr) += Irci_Vbci;
|
|
*(here->VBICcollCIBaseBIPtr) += -Irci_Vbcx;
|
|
*(here->VBICcollCICollCXPtr) += Irci_Vbcx;
|
|
/*
|
|
c Stamp element: Rbx
|
|
*/
|
|
*(here->VBICbaseBasePtr) += Irbx_Vrbx;
|
|
*(here->VBICbaseBXBaseBXPtr) += Irbx_Vrbx;
|
|
*(here->VBICbaseBXBasePtr) += -Irbx_Vrbx;
|
|
*(here->VBICbaseBaseBXPtr) += -Irbx_Vrbx;
|
|
/*
|
|
c Stamp element: Irbi
|
|
*/
|
|
*(here->VBICbaseBXBaseBXPtr) += Irbi_Vrbi;
|
|
*(here->VBICbaseBXBaseBIPtr) += -Irbi_Vrbi;
|
|
*(here->VBICbaseBXBaseBIPtr) += Irbi_Vbei;
|
|
*(here->VBICbaseBXEmitEIPtr) += -Irbi_Vbei;
|
|
*(here->VBICbaseBXBaseBIPtr) += Irbi_Vbci;
|
|
*(here->VBICbaseBXCollCIPtr) += -Irbi_Vbci;
|
|
*(here->VBICbaseBIBaseBXPtr) += -Irbi_Vrbi;
|
|
*(here->VBICbaseBIBaseBIPtr) += Irbi_Vrbi;
|
|
*(here->VBICbaseBIBaseBIPtr) += -Irbi_Vbei;
|
|
*(here->VBICbaseBIEmitEIPtr) += Irbi_Vbei;
|
|
*(here->VBICbaseBIBaseBIPtr) += -Irbi_Vbci;
|
|
*(here->VBICbaseBICollCIPtr) += Irbi_Vbci;
|
|
/*
|
|
c Stamp element: Re
|
|
*/
|
|
*(here->VBICemitEmitPtr) += Ire_Vre;
|
|
*(here->VBICemitEIEmitEIPtr) += Ire_Vre;
|
|
*(here->VBICemitEIEmitPtr) += -Ire_Vre;
|
|
*(here->VBICemitEmitEIPtr) += -Ire_Vre;
|
|
/*
|
|
c Stamp element: Irbp
|
|
*/
|
|
*(here->VBICbaseBPBaseBPPtr) += Irbp_Vrbp;
|
|
*(here->VBICbaseBPCollCXPtr) += -Irbp_Vrbp;
|
|
*(here->VBICbaseBPBaseBXPtr) += Irbp_Vbep;
|
|
*(here->VBICbaseBPBaseBPPtr) += -Irbp_Vbep;
|
|
*(here->VBICbaseBPBaseBIPtr) += Irbp_Vbci;
|
|
*(here->VBICbaseBPCollCIPtr) += -Irbp_Vbci;
|
|
*(here->VBICcollCXBaseBPPtr) += -Irbp_Vrbp;
|
|
*(here->VBICcollCXCollCXPtr) += Irbp_Vrbp;
|
|
*(here->VBICcollCXBaseBXPtr) += -Irbp_Vbep;
|
|
*(here->VBICcollCXBaseBPPtr) += Irbp_Vbep;
|
|
*(here->VBICcollCXBaseBIPtr) += -Irbp_Vbci;
|
|
*(here->VBICcollCXCollCIPtr) += Irbp_Vbci;
|
|
/*
|
|
c Stamp element: Ibcp
|
|
*/
|
|
*(here->VBICsubsSISubsSIPtr) += Ibcp_Vbcp;
|
|
*(here->VBICsubsSIBaseBPPtr) += -Ibcp_Vbcp;
|
|
*(here->VBICbaseBPSubsSIPtr) += -Ibcp_Vbcp;
|
|
*(here->VBICbaseBPBaseBPPtr) += Ibcp_Vbcp;
|
|
/*
|
|
c Stamp element: Iccp
|
|
*/
|
|
*(here->VBICbaseBXBaseBXPtr) += Iccp_Vbep;
|
|
*(here->VBICbaseBXBaseBPPtr) += -Iccp_Vbep;
|
|
*(here->VBICbaseBXBaseBIPtr) += Iccp_Vbci;
|
|
*(here->VBICbaseBXCollCIPtr) += -Iccp_Vbci;
|
|
*(here->VBICbaseBXSubsSIPtr) += Iccp_Vbcp;
|
|
*(here->VBICbaseBXBaseBPPtr) += -Iccp_Vbcp;
|
|
*(here->VBICsubsSIBaseBXPtr) += -Iccp_Vbep;
|
|
*(here->VBICsubsSIBaseBPPtr) += Iccp_Vbep;
|
|
*(here->VBICsubsSIBaseBIPtr) += -Iccp_Vbci;
|
|
*(here->VBICsubsSICollCIPtr) += Iccp_Vbci;
|
|
*(here->VBICsubsSISubsSIPtr) += -Iccp_Vbcp;
|
|
*(here->VBICsubsSIBaseBPPtr) += Iccp_Vbcp;
|
|
/*
|
|
c Stamp element: Rs
|
|
*/
|
|
*(here->VBICsubsSubsPtr) += Irs_Vrs;
|
|
*(here->VBICsubsSISubsSIPtr) += Irs_Vrs;
|
|
*(here->VBICsubsSISubsPtr) += -Irs_Vrs;
|
|
*(here->VBICsubsSubsSIPtr) += -Irs_Vrs;
|
|
|
|
if (here->VBIC_selfheat) {
|
|
|
|
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
|
|
*/
|
|
*(here->VBICbaseBItempPtr) += Ibe_Vrth;
|
|
*(here->VBICemitEItempPtr) += -Ibe_Vrth;
|
|
/*
|
|
c Stamp element: Ibex
|
|
*/
|
|
*(here->VBICbaseBXtempPtr) += Ibex_Vrth;
|
|
*(here->VBICemitEItempPtr) += -Ibex_Vrth;
|
|
/*
|
|
c Stamp element: Itzf
|
|
*/
|
|
*(here->VBICcollCItempPtr) += Itzf_Vrth;
|
|
*(here->VBICemitEItempPtr) += -Itzf_Vrth;
|
|
/*
|
|
c Stamp element: Itzr
|
|
*/
|
|
*(here->VBICemitEItempPtr) += Itzr_Vrth;
|
|
*(here->VBICcollCItempPtr) += -Itzr_Vrth;
|
|
/*
|
|
c Stamp element: Ibc
|
|
*/
|
|
*(here->VBICbaseBItempPtr) += Ibc_Vrth;
|
|
*(here->VBICcollCItempPtr) += -Ibc_Vrth;
|
|
/*
|
|
c Stamp element: Ibep
|
|
*/
|
|
*(here->VBICbaseBXtempPtr) += Ibep_Vrth;
|
|
*(here->VBICbaseBPtempPtr) += -Ibep_Vrth;
|
|
/*
|
|
c Stamp element: Rcx
|
|
*/
|
|
*(here->VBICcollTempPtr) += Ircx_Vrth;
|
|
*(here->VBICcollCXtempPtr) += -Ircx_Vrth;
|
|
/*
|
|
c Stamp element: Irci
|
|
*/
|
|
*(here->VBICcollCXtempPtr) += Irci_Vrth;
|
|
*(here->VBICcollCItempPtr) += -Irci_Vrth;
|
|
/*
|
|
c Stamp element: Rbx
|
|
*/
|
|
*(here->VBICbaseTempPtr) += Irbx_Vrth;
|
|
*(here->VBICbaseBXtempPtr) += -Irbx_Vrth;
|
|
/*
|
|
c Stamp element: Irbi
|
|
*/
|
|
*(here->VBICbaseBXtempPtr) += Irbi_Vrth;
|
|
*(here->VBICbaseBItempPtr) += -Irbi_Vrth;
|
|
/*
|
|
c Stamp element: Re
|
|
*/
|
|
*(here->VBICemitTempPtr) += Ire_Vrth;
|
|
*(here->VBICemitEItempPtr) += -Ire_Vrth;
|
|
/*
|
|
c Stamp element: Irbp
|
|
*/
|
|
*(here->VBICbaseBPtempPtr) += Irbp_Vrth;
|
|
*(here->VBICcollCXtempPtr) += -Irbp_Vrth;
|
|
/*
|
|
c Stamp element: Ibcp
|
|
*/
|
|
*(here->VBICsubsSItempPtr) += Ibcp_Vrth;
|
|
*(here->VBICbaseBPtempPtr) += -Ibcp_Vrth;
|
|
/*
|
|
c Stamp element: Iccp
|
|
*/
|
|
*(here->VBICbaseBXtempPtr) += Iccp_Vrth;
|
|
*(here->VBICsubsSItempPtr) += -Iccp_Vrth;
|
|
/*
|
|
c Stamp element: Rs
|
|
*/
|
|
*(here->VBICsubsTempPtr) += Irs_Vrth;
|
|
*(here->VBICsubsSItempPtr) += -Irs_Vrth;
|
|
/*
|
|
c Stamp element: Rth
|
|
*/
|
|
*(here->VBICtempTempPtr) += Irth_Vrth;
|
|
/*
|
|
c Stamp element: Ith
|
|
*/
|
|
*(here->VBICtempTempPtr) += -Ith_Vrth;
|
|
|
|
*(here->VBICtempBaseBIPtr) += -Ith_Vbei;
|
|
*(here->VBICtempEmitEIPtr) += +Ith_Vbei;
|
|
*(here->VBICtempBaseBIPtr) += -Ith_Vbci;
|
|
*(here->VBICtempCollCIPtr) += +Ith_Vbci;
|
|
*(here->VBICtempCollCIPtr) += -Ith_Vcei;
|
|
*(here->VBICtempEmitEIPtr) += +Ith_Vcei;
|
|
*(here->VBICtempBaseBXPtr) += -Ith_Vbex;
|
|
*(here->VBICtempEmitEIPtr) += +Ith_Vbex;
|
|
*(here->VBICtempBaseBXPtr) += -Ith_Vbep;
|
|
*(here->VBICtempBaseBPPtr) += +Ith_Vbep;
|
|
*(here->VBICtempSubsPtr) += -Ith_Vbcp;
|
|
*(here->VBICtempBaseBPPtr) += +Ith_Vbcp;
|
|
*(here->VBICtempBaseBXPtr) += -Ith_Vcep;
|
|
*(here->VBICtempSubsPtr) += +Ith_Vcep;
|
|
*(here->VBICtempCollCXPtr) += -Ith_Vrci;
|
|
*(here->VBICtempCollCIPtr) += +Ith_Vrci;
|
|
*(here->VBICtempBaseBIPtr) += -Ith_Vbcx;
|
|
*(here->VBICtempCollCXPtr) += +Ith_Vbcx;
|
|
*(here->VBICtempBaseBXPtr) += -Ith_Vrbi;
|
|
*(here->VBICtempBaseBIPtr) += +Ith_Vrbi;
|
|
*(here->VBICtempBaseBPPtr) += -Ith_Vrbp;
|
|
*(here->VBICtempCollCXPtr) += +Ith_Vrbp;
|
|
*(here->VBICtempCollPtr) += -Ith_Vrcx;
|
|
*(here->VBICtempCollCXPtr) += +Ith_Vrcx;
|
|
*(here->VBICtempBasePtr) += -Ith_Vrbx;
|
|
*(here->VBICtempBaseBXPtr) += +Ith_Vrbx;
|
|
*(here->VBICtempEmitPtr) += -Ith_Vre;
|
|
*(here->VBICtempEmitEIPtr) += +Ith_Vre;
|
|
*(here->VBICtempSubsPtr) += -Ith_Vrs;
|
|
*(here->VBICtempSubsSIPtr) += +Ith_Vrs;
|
|
}
|
|
|
|
/*
|
|
c The complex part
|
|
*/
|
|
XQbe_Vbei = *(ckt->CKTstate0 + here->VBICcqbe) * ckt->CKTomega;
|
|
XQbe_Vbci = *(ckt->CKTstate0 + here->VBICcqbeci) * ckt->CKTomega;
|
|
XQbex_Vbex = *(ckt->CKTstate0 + here->VBICcqbex) * ckt->CKTomega;
|
|
XQbc_Vbci = *(ckt->CKTstate0 + here->VBICcqbc) * ckt->CKTomega;
|
|
XQbcx_Vbcx = *(ckt->CKTstate0 + here->VBICcqbcx) * ckt->CKTomega;
|
|
XQbep_Vbep = *(ckt->CKTstate0 + here->VBICcqbep) * ckt->CKTomega;
|
|
XQbep_Vbci = *(ckt->CKTstate0 + here->VBICcqbepci) * ckt->CKTomega;
|
|
XQbcp_Vbcp = *(ckt->CKTstate0 + here->VBICcqbcp) * ckt->CKTomega;
|
|
XQbeo_Vbe = *(ckt->CKTstate0 + here->VBICcqbeo) * ckt->CKTomega;
|
|
XQbco_Vbc = *(ckt->CKTstate0 + here->VBICcqbco) * ckt->CKTomega;
|
|
/*
|
|
c Stamp element: Qbe
|
|
*/
|
|
*(here->VBICbaseBIBaseBIPtr + 1) += XQbe_Vbei;
|
|
*(here->VBICbaseBIEmitEIPtr + 1) += -XQbe_Vbei;
|
|
*(here->VBICbaseBIBaseBIPtr + 1) += XQbe_Vbci;
|
|
*(here->VBICbaseBICollCIPtr + 1) += -XQbe_Vbci;
|
|
*(here->VBICemitEIBaseBIPtr + 1) += -XQbe_Vbei;
|
|
*(here->VBICemitEIEmitEIPtr + 1) += XQbe_Vbei;
|
|
*(here->VBICemitEIBaseBIPtr + 1) += -XQbe_Vbci;
|
|
*(here->VBICemitEICollCIPtr + 1) += XQbe_Vbci;
|
|
/*
|
|
c Stamp element: Qbex
|
|
*/
|
|
*(here->VBICbaseBXBaseBXPtr + 1) += XQbex_Vbex;
|
|
*(here->VBICbaseBXEmitEIPtr + 1) += -XQbex_Vbex;
|
|
*(here->VBICemitEIBaseBXPtr + 1) += -XQbex_Vbex;
|
|
*(here->VBICemitEIEmitEIPtr + 1) += XQbex_Vbex;
|
|
/*
|
|
c Stamp element: Qbc
|
|
*/
|
|
*(here->VBICbaseBIBaseBIPtr + 1) += XQbc_Vbci;
|
|
*(here->VBICbaseBICollCIPtr + 1) += -XQbc_Vbci;
|
|
*(here->VBICcollCIBaseBIPtr + 1) += -XQbc_Vbci;
|
|
*(here->VBICcollCICollCIPtr + 1) += XQbc_Vbci;
|
|
/*
|
|
c Stamp element: Qbcx
|
|
*/
|
|
*(here->VBICbaseBIBaseBIPtr + 1) += XQbcx_Vbcx;
|
|
*(here->VBICbaseBICollCXPtr + 1) += -XQbcx_Vbcx;
|
|
*(here->VBICcollCXBaseBIPtr + 1) += -XQbcx_Vbcx;
|
|
*(here->VBICcollCXCollCXPtr + 1) += XQbcx_Vbcx;
|
|
/*
|
|
c Stamp element: Qbep
|
|
*/
|
|
*(here->VBICbaseBXBaseBXPtr + 1) += XQbep_Vbep;
|
|
*(here->VBICbaseBXBaseBPPtr + 1) += -XQbep_Vbep;
|
|
*(here->VBICbaseBXBaseBIPtr + 1) += XQbep_Vbci;
|
|
*(here->VBICbaseBXCollCIPtr + 1) += -XQbep_Vbci;
|
|
*(here->VBICbaseBPBaseBXPtr + 1) += -XQbep_Vbep;
|
|
*(here->VBICbaseBPBaseBPPtr + 1) += XQbep_Vbep;
|
|
*(here->VBICbaseBPBaseBIPtr + 1) += -XQbep_Vbci;
|
|
*(here->VBICbaseBPCollCIPtr + 1) += XQbep_Vbci;
|
|
/*
|
|
c Stamp element: Qbcp
|
|
*/
|
|
*(here->VBICsubsSISubsSIPtr + 1) += XQbcp_Vbcp;
|
|
*(here->VBICsubsSIBaseBPPtr + 1) += -XQbcp_Vbcp;
|
|
*(here->VBICbaseBPSubsSIPtr + 1) += -XQbcp_Vbcp;
|
|
*(here->VBICbaseBPBaseBPPtr + 1) += XQbcp_Vbcp;
|
|
/*
|
|
c Stamp element: Qbeo
|
|
*/
|
|
*(here->VBICbaseBasePtr + 1) += XQbeo_Vbe;
|
|
*(here->VBICemitEmitPtr + 1) += XQbeo_Vbe;
|
|
*(here->VBICbaseEmitPtr + 1) += -XQbeo_Vbe;
|
|
*(here->VBICemitBasePtr + 1) += -XQbeo_Vbe;
|
|
/*
|
|
c Stamp element: Qbco
|
|
*/
|
|
*(here->VBICbaseBasePtr + 1) += XQbco_Vbc;
|
|
*(here->VBICcollCollPtr + 1) += XQbco_Vbc;
|
|
*(here->VBICbaseCollPtr + 1) += -XQbco_Vbc;
|
|
*(here->VBICcollBasePtr + 1) += -XQbco_Vbc;
|
|
|
|
if (here->VBIC_selfheat) {
|
|
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->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;
|
|
}
|
|
|
|
}
|
|
}
|
|
return(OK);
|
|
}
|