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.
 
 
 
 
 
 

645 lines
31 KiB

/**********
License : 3-clause BSD
Spice3 Implementation: 2019-2020 Dietmar Warning, Markus Müller, Mario Krattenmacher
Model Author : 1990 Michael Schröter TU Dresden
**********/
/*
* 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 "hicum2defs.h"
#include "ngspice/sperror.h"
#include "ngspice/suffix.h"
int
HICUMacLoad(GENmodel *inModel, CKTcircuit *ckt)
{
HICUMinstance *here;
HICUMmodel *model = (HICUMmodel*)inModel;
double Ibpei_Vbpei;
double Ibpei_Vrth;
double Ibiei_Vbiei;
double Ibiei_Vxf;
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 Iciei_Vrth;
double Iciei_Vxf2;
double Ibpbi_Vbpbi;
double Ibpbi_Vbici;
double Ibpbi_Vbiei;
double Ibpbi_Vrth;
double Isis_Vsis;
double Irth_Vrth;
double Icic_Vcic, Icic_Vrth;
double Ieie_Veie, Ieie_Vrth;
double Ibbp_Vbbp, Ibbp_Vrth;
double Ibpsi_Vbpci;
double Ibpsi_Vsici;
double Ibpsi_Vrth;
double XQrbi_Vbpbi;
double XQrbi_Vbiei;
double XQrbi_Vbici;
double XQrbi_Vrth;
double XQjei_Vbiei;
double XQjei_Vrth;
double XQjci_Vbici;
double XQjci_Vrth;
double XQjep_Vbpei;
double XQjep_Vrth;
double volatile Xqjcx0_t_i_Vbci;
double Xqjcx0_t_i_Vrth;
double volatile Xqjcx0_t_ii_Vbpci;
double Xqjcx0_t_ii_Vrth;
double XQdsu_Vbpci;
double XQdsu_Vsici;
double XQdsu_Vrth;
double XQjs_Vsici;
double XQjs_Vrth;
double XQscp_Vsc;
double XQscp_Vrth;
double XQbepar1_Vbe;
double XQbepar2_Vbpe;
double XQbcpar1_Vbci;
double XQbcpar2_Vbpci;
double XQsu_Vsis;
double XQcth_Vrth;
double XQf_Vbiei;
double XQf_Vbici;
double XQf_Vrth;
double XQf_Vxf;
double XQr_Vrth;
double XQr_Vbiei;
double XQr_Vbici;
double XQxf_Vxf;
double XQxf1_Vxf1;
double XQxf2_Vxf2;
double Ixf1_Vbiei;
double Ixf1_Vbici;
double Ixf1_Vxf2 ;
double Ixf1_Vxf1 ;
double Ixf1_Vrth ;
double Ixf2_Vbiei;
double Ixf2_Vbici;
double Ixf2_Vxf2 ;
double Ixf2_Vxf1 ;
double Ixf2_Vrth ;
double Ixf_Vbiei ;
double Ixf_Vbici ;
double Ixf_Vxf ;
double Ixf_Vrth ;
double Ith_Vrth, Ith_Vbiei, Ith_Vbici, Ith_Vbpbi, Ith_Vbpci, Ith_Vbpei, Ith_Vciei, Ith_Vsici, Ith_Vcic, Ith_Vbbp, Ith_Veie;
/* loop through all the models */
for( ; model != NULL; model = HICUMnextModel(model)) {
int selfheat = ( (model->HICUMflsh > 0) && (model->HICUMrthGiven) && (model->HICUMrth > 0.0));
int nqs = ( (model->HICUMflnqs != 0 || model->HICUMflcomp < 2.3) && (model->HICUMalit > 0 || model->HICUMalqf > 0));
/* loop through all the instances of the model */
for( here = HICUMinstances(model); here!= NULL;
here = HICUMnextInstance(here)) {
// get all derivatives of branch DC currents
if(model->HICUMrcxGiven && model->HICUMrcx != 0) {
Icic_Vcic = 1/here->HICUMrcx_t.rpart;
Icic_Vrth = -*(ckt->CKTstate0 + here->HICUMvcic)/here->HICUMrcx_t.rpart/here->HICUMrcx_t.rpart*here->HICUMrcx_t.dpart;
} else {
Icic_Vcic = 0.0;
Icic_Vrth = 0.0;
}
if(model->HICUMrbxGiven && model->HICUMrbx != 0) {
Ibbp_Vbbp = 1/here->HICUMrbx_t.rpart;
Ibbp_Vrth = -*(ckt->CKTstate0 + here->HICUMvbbp)/here->HICUMrbx_t.rpart/here->HICUMrbx_t.rpart*here->HICUMrbx_t.dpart;
} else {
Ibbp_Vbbp = 0.0;
Ibbp_Vrth = 0.0;
}
if(model->HICUMreGiven && model->HICUMre != 0) {
Ieie_Veie = 1/here->HICUMre_t.rpart;
Ieie_Vrth = -*(ckt->CKTstate0 + here->HICUMveie)/here->HICUMre_t.rpart/here->HICUMre_t.rpart*here->HICUMre_t.dpart;
} else {
Ieie_Veie = 0.0;
Ieie_Vrth = 0.0;
}
if(model->HICUMrsuGiven && model->HICUMrsu != 0) {
Isis_Vsis = 1/model->HICUMrsu*here->HICUMm;
} else {
Isis_Vsis = 0.0;
}
if(selfheat) {
Irth_Vrth = (1/here->HICUMrth_t.rpart - *(ckt->CKTstate0 + here->HICUMvrth)/(here->HICUMrth_t.rpart*here->HICUMrth_t.rpart) * here->HICUMrth_t.dpart);
} else {
Irth_Vrth = 0.0;
}
Ibiei_Vbiei = *(ckt->CKTstate0 + here->HICUMibiei_Vbiei);
Ibiei_Vxf = *(ckt->CKTstate0 + here->HICUMibiei_Vxf);
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);
Iciei_Vxf2 = *(ckt->CKTstate0 + here->HICUMiciei_Vxf2);
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_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);
Ibpsi_Vbpci = *(ckt->CKTstate0 + here->HICUMibpsi_Vbpci);
Ibpsi_Vsici = *(ckt->CKTstate0 + here->HICUMibpsi_Vsici);
Ibpsi_Vrth = *(ckt->CKTstate0 + here->HICUMibpsi_Vrth);
Ith_Vrth = *(ckt->CKTstate0 + here->HICUMith_Vrth);
Ith_Vbiei = *(ckt->CKTstate0 + here->HICUMith_Vbiei);
Ith_Vbici = *(ckt->CKTstate0 + here->HICUMith_Vbici);
Ith_Vbpbi = *(ckt->CKTstate0 + here->HICUMith_Vbpbi);
Ith_Vbpci = *(ckt->CKTstate0 + here->HICUMith_Vbpci);
Ith_Vbpei = *(ckt->CKTstate0 + here->HICUMith_Vbpei);
Ith_Vciei = *(ckt->CKTstate0 + here->HICUMith_Vciei);
Ith_Vsici = *(ckt->CKTstate0 + here->HICUMith_Vsici);
Ith_Vcic = *(ckt->CKTstate0 + here->HICUMith_Vcic);
Ith_Vbbp = *(ckt->CKTstate0 + here->HICUMith_Vbbp);
Ith_Veie = *(ckt->CKTstate0 + here->HICUMith_Veie);
Ixf1_Vbiei = *(ckt->CKTstate0 + here->HICUMixf1_Vbiei);
Ixf1_Vbici = *(ckt->CKTstate0 + here->HICUMixf1_Vbici);
Ixf1_Vxf2 = *(ckt->CKTstate0 + here->HICUMixf1_Vxf2);
Ixf1_Vxf1 = *(ckt->CKTstate0 + here->HICUMixf1_Vxf1);
Ixf1_Vrth = *(ckt->CKTstate0 + here->HICUMixf1_Vrth);
Ixf2_Vbiei = *(ckt->CKTstate0 + here->HICUMixf2_Vbiei);
Ixf2_Vbici = *(ckt->CKTstate0 + here->HICUMixf2_Vbici);
Ixf2_Vxf2 = *(ckt->CKTstate0 + here->HICUMixf2_Vxf2);
Ixf2_Vxf1 = *(ckt->CKTstate0 + here->HICUMixf2_Vxf1);
Ixf2_Vrth = *(ckt->CKTstate0 + here->HICUMixf2_Vrth);
Ixf_Vbiei = *(ckt->CKTstate0 + here->HICUMixf_Vbiei);
Ixf_Vbici = *(ckt->CKTstate0 + here->HICUMixf_Vbici);
Ixf_Vxf = *(ckt->CKTstate0 + here->HICUMixf_Vxf);
Ixf_Vrth = *(ckt->CKTstate0 + here->HICUMixf_Vrth);
////////////////////////////////////
////////// The real part /////////
////////////////////////////////////
// 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;
// Stamp element: Ibpei
*(here->HICUMbaseBPBaseBPPtr) += Ibpei_Vbpei;
*(here->HICUMemitEIEmitEIPtr) += Ibpei_Vbpei;
*(here->HICUMbaseBPEmitEIPtr) += -Ibpei_Vbpei;
*(here->HICUMemitEIBaseBPPtr) += -Ibpei_Vbpei;;
// Stamp element: Ibici
*(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: 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;
if (nqs) {
*(here->HICUMcollCIXf2Ptr) += Iciei_Vxf2;
*(here->HICUMemitEIXf2Ptr) += -Iciei_Vxf2;
}
// 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: Re
*(here->HICUMemitEmitPtr) += Ieie_Veie;
*(here->HICUMemitEIEmitEIPtr) += Ieie_Veie;
*(here->HICUMemitEIEmitPtr) += -Ieie_Veie;
*(here->HICUMemitEmitEIPtr) += -Ieie_Veie;
// Stamp element: Ibpbi
if (here->HICUMrbi>0.0) {
*(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: 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: Rsu
*(here->HICUMsubsSubsPtr) += Isis_Vsis;
*(here->HICUMsubsSISubsSIPtr) += Isis_Vsis;
*(here->HICUMsubsSISubsPtr) += -Isis_Vsis;
*(here->HICUMsubsSubsSIPtr) += -Isis_Vsis;
if (nqs) {
//Ixf1
*(here->HICUMxf1BaseBIPtr) += +Ixf1_Vbiei;
*(here->HICUMxf1EmitEIPtr) += -Ixf1_Vbiei;
*(here->HICUMxf1BaseBIPtr) += +Ixf1_Vbici;
*(here->HICUMxf1CollCIPtr) += -Ixf1_Vbici;
*(here->HICUMxf1Xf2Ptr) += +Ixf1_Vxf2;
*(here->HICUMxf1Xf1Ptr) += +Ixf1_Vxf1;
//Ixf2
*(here->HICUMxf2BaseBIPtr) += +Ixf2_Vbiei;
*(here->HICUMxf2EmitEIPtr) += -Ixf2_Vbiei;
*(here->HICUMxf2BaseBIPtr) += +Ixf2_Vbici;
*(here->HICUMxf2CollCIPtr) += -Ixf2_Vbici;
*(here->HICUMxf2Xf2Ptr) += +Ixf2_Vxf2;
*(here->HICUMxf2Xf1Ptr) += +Ixf2_Vxf1;
//Ixf
*(here->HICUMxfBaseBIPtr) += +Ixf_Vbiei;
*(here->HICUMxfEmitEIPtr) += -Ixf_Vbiei;
*(here->HICUMxfBaseBIPtr) += +Ixf_Vbici;
*(here->HICUMxfCollCIPtr) += -Ixf_Vbici;
*(here->HICUMxfXfPtr) += +Ixf_Vxf;
}
////////////////////////////////////
////////// The complex part //////
////////////////////////////////////
//Qrbi
XQrbi_Vbpbi = *(ckt->CKTstate0 + here->HICUMcqrbi) * ckt->CKTomega;
XQrbi_Vbiei = here->HICUMqrbi_Vbiei * ckt->CKTomega;
XQrbi_Vbici = here->HICUMqrbi_Vbici * ckt->CKTomega;
XQrbi_Vrth = here->HICUMqrbi_Vrth * ckt->CKTomega;
//Qjei
XQjei_Vbiei = *(ckt->CKTstate0 + here->HICUMcqjei) * ckt->CKTomega;
XQjei_Vrth = here->HICUMqjei_Vrth * ckt->CKTomega;
//Qf
XQf_Vbiei = *(ckt->CKTstate0 + here->HICUMcqf) * ckt->CKTomega;
XQf_Vbici = here->HICUMqf_Vbici * ckt->CKTomega;
XQf_Vrth = here->HICUMqf_Vrth * ckt->CKTomega;
XQf_Vxf = here->HICUMqf_Vxf * ckt->CKTomega;
//Qr
XQr_Vbici = *(ckt->CKTstate0 + here->HICUMcqr) * ckt->CKTomega;
XQr_Vbiei = here->HICUMqr_Vbiei * ckt->CKTomega;
XQr_Vrth = here->HICUMqr_Vrth * ckt->CKTomega;
//Qjci
XQjci_Vbici = *(ckt->CKTstate0 + here->HICUMcqjci) * ckt->CKTomega;
XQjci_Vrth = here->HICUMqjci_Vrth * ckt->CKTomega;
//Qjep
XQjep_Vbpei = *(ckt->CKTstate0 + here->HICUMcqjep) * ckt->CKTomega;
XQjep_Vrth = here->HICUMqjep_Vrth * ckt->CKTomega;
//Qjcx_i
Xqjcx0_t_i_Vbci = *(ckt->CKTstate0 + here->HICUMcqcx0_t_i) * ckt->CKTomega;
Xqjcx0_t_i_Vrth = here->HICUMqjcx0_i_Vrth * ckt->CKTomega;
//Qjcx_ii
Xqjcx0_t_ii_Vbpci = *(ckt->CKTstate0 + here->HICUMcqcx0_t_ii) * ckt->CKTomega;
Xqjcx0_t_ii_Vrth = here->HICUMqjcx0_ii_Vrth * ckt->CKTomega;
//Qdsu
XQdsu_Vbpci = *(ckt->CKTstate0 + here->HICUMcqdsu) * ckt->CKTomega;
XQdsu_Vsici = here->HICUMqdsu_Vsici * ckt->CKTomega;
XQdsu_Vrth = here->HICUMqdsu_Vrth * ckt->CKTomega;
//Qjs
XQjs_Vsici = *(ckt->CKTstate0 + here->HICUMcqjs) * ckt->CKTomega;
XQjs_Vrth = here->HICUMqjs_Vrth * ckt->CKTomega;
//Qscp
XQscp_Vsc = *(ckt->CKTstate0 + here->HICUMcqscp) * ckt->CKTomega;
XQscp_Vrth = here->HICUMqscp_Vrth * ckt->CKTomega;
//Qbepar1
XQbepar1_Vbe = *(ckt->CKTstate0 + here->HICUMcqbepar1) * ckt->CKTomega;
//Qbepar2
XQbepar2_Vbpe = *(ckt->CKTstate0 + here->HICUMcqbepar2) * ckt->CKTomega;
//Qbcpar1
XQbcpar1_Vbci = *(ckt->CKTstate0 + here->HICUMcqbcpar1) * ckt->CKTomega;
//Qbcpar2
XQbcpar2_Vbpci = *(ckt->CKTstate0 + here->HICUMcqbcpar2) * ckt->CKTomega;
//Qsu
XQsu_Vsis = *(ckt->CKTstate0 + here->HICUMcqsu) * ckt->CKTomega;
//Qcth
XQcth_Vrth = *(ckt->CKTstate0 + here->HICUMcqcth) * ckt->CKTomega;
//Qxf
XQxf_Vxf = *(ckt->CKTstate0 + here->HICUMcqxf) * ckt->CKTomega;
XQxf1_Vxf1 = *(ckt->CKTstate0 + here->HICUMcqxf1) * ckt->CKTomega;
XQxf2_Vxf2 = *(ckt->CKTstate0 + here->HICUMcqxf2) * ckt->CKTomega;
//Qrbi f_bp=+ f_bi=-
if (here->HICUMrbi>0.0) {
*(here->HICUMbaseBPBaseBPPtr + 1) += XQrbi_Vbpbi;
*(here->HICUMbaseBIBaseBIPtr + 1) += XQrbi_Vbpbi;
*(here->HICUMbaseBPBaseBIPtr + 1) += -XQrbi_Vbpbi;
*(here->HICUMbaseBIBaseBPPtr + 1) += -XQrbi_Vbpbi;
*(here->HICUMbaseBPBaseBIPtr + 1) += XQrbi_Vbiei;
*(here->HICUMbaseBIEmitEIPtr + 1) += XQrbi_Vbiei;
*(here->HICUMbaseBPEmitEIPtr + 1) += -XQrbi_Vbiei;
*(here->HICUMbaseBIBaseBIPtr + 1) += -XQrbi_Vbiei;
*(here->HICUMbaseBPBaseBIPtr + 1) += XQrbi_Vbici;
*(here->HICUMbaseBICollCIPtr + 1) += XQrbi_Vbici;
*(here->HICUMbaseBPCollCIPtr + 1) += -XQrbi_Vbici;
*(here->HICUMbaseBIBaseBIPtr + 1) += -XQrbi_Vbici;
}
//Qjei
*(here->HICUMbaseBIBaseBIPtr + 1) += XQjei_Vbiei;
*(here->HICUMemitEIEmitEIPtr + 1) += XQjei_Vbiei;
*(here->HICUMbaseBIEmitEIPtr + 1) += -XQjei_Vbiei;
*(here->HICUMemitEIBaseBIPtr + 1) += -XQjei_Vbiei;
//Qf f_Bi=+ f_Ei =-
*(here->HICUMbaseBIBaseBIPtr +1) += XQf_Vbiei;
*(here->HICUMemitEIEmitEIPtr +1) += XQf_Vbiei;
*(here->HICUMbaseBIEmitEIPtr +1) += -XQf_Vbiei;
*(here->HICUMemitEIBaseBIPtr +1) += -XQf_Vbiei;
*(here->HICUMbaseBIBaseBIPtr +1) += XQf_Vbici;
*(here->HICUMemitEICollCIPtr +1) += XQf_Vbici;
*(here->HICUMbaseBICollCIPtr +1) += -XQf_Vbici;
*(here->HICUMemitEIBaseBIPtr +1) += -XQf_Vbici;
if (nqs) {
*(here->HICUMbaseBIXfPtr +1) += XQf_Vxf;
*(here->HICUMemitEIXfPtr +1) += -XQf_Vxf;
}
//Qjci
*(here->HICUMbaseBIBaseBIPtr +1) += XQjci_Vbici;
*(here->HICUMcollCICollCIPtr +1) += XQjci_Vbici;
*(here->HICUMcollCIBaseBIPtr +1) += -XQjci_Vbici;
*(here->HICUMbaseBICollCIPtr +1) += -XQjci_Vbici;
//Qr f_bi = + f_ci=-
*(here->HICUMbaseBIBaseBIPtr +1) += XQr_Vbici;
*(here->HICUMcollCICollCIPtr +1) += XQr_Vbici;
*(here->HICUMcollCIBaseBIPtr +1) += -XQr_Vbici;
*(here->HICUMbaseBICollCIPtr +1) += -XQr_Vbici;
*(here->HICUMbaseBIBaseBIPtr +1) += XQr_Vbiei;
*(here->HICUMcollCIEmitEIPtr +1) += XQr_Vbiei;
*(here->HICUMcollCIBaseBIPtr +1) += -XQr_Vbiei;
*(here->HICUMbaseBIEmitEIPtr +1) += -XQr_Vbiei;
//Qjep
*(here->HICUMbaseBPBaseBPPtr +1) += XQjep_Vbpei;
*(here->HICUMemitEIEmitEIPtr +1) += XQjep_Vbpei;
*(here->HICUMbaseBPEmitEIPtr +1) += -XQjep_Vbpei;
*(here->HICUMemitEIBaseBPPtr +1) += -XQjep_Vbpei;
//Qjcx_i
*(here->HICUMbaseBasePtr +1) += Xqjcx0_t_i_Vbci;
*(here->HICUMcollCICollCIPtr +1) += Xqjcx0_t_i_Vbci;
*(here->HICUMbaseCollCIPtr +1) += -Xqjcx0_t_i_Vbci;
*(here->HICUMcollCIBasePtr +1) += -Xqjcx0_t_i_Vbci;
//Qjcx_ii
*(here->HICUMbaseBPBaseBPPtr +1) += Xqjcx0_t_ii_Vbpci;
*(here->HICUMcollCICollCIPtr +1) += Xqjcx0_t_ii_Vbpci;
*(here->HICUMbaseBPCollCIPtr +1) += -Xqjcx0_t_ii_Vbpci;
*(here->HICUMcollCIBaseBPPtr +1) += -Xqjcx0_t_ii_Vbpci;
//Qdsu f_bp=+ f_ci=-
*(here->HICUMbaseBPBaseBPPtr +1) += XQdsu_Vbpci;
*(here->HICUMcollCICollCIPtr +1) += XQdsu_Vbpci;
*(here->HICUMbaseBPCollCIPtr +1) += -XQdsu_Vbpci;
*(here->HICUMcollCIBaseBPPtr +1) += -XQdsu_Vbpci;
*(here->HICUMbaseBPSubsSIPtr +1) += XQdsu_Vsici;
*(here->HICUMcollCICollCIPtr +1) += XQdsu_Vsici;
*(here->HICUMbaseBPCollCIPtr +1) += -XQdsu_Vsici;
*(here->HICUMcollCISubsSIPtr +1) += -XQdsu_Vsici;
//Qjs
*(here->HICUMsubsSISubsSIPtr +1) += XQjs_Vsici;
*(here->HICUMcollCICollCIPtr +1) += XQjs_Vsici;
*(here->HICUMsubsSICollCIPtr +1) += -XQjs_Vsici;
*(here->HICUMcollCISubsSIPtr +1) += -XQjs_Vsici;
//Qscp
*(here->HICUMsubsSubsPtr + 1) += XQscp_Vsc;
*(here->HICUMcollCollPtr + 1) += XQscp_Vsc;
*(here->HICUMcollSubsPtr + 1) += -XQscp_Vsc;
*(here->HICUMsubsCollPtr + 1) += -XQscp_Vsc;
//Qbepar1
*(here->HICUMbaseBasePtr + 1) += XQbepar1_Vbe;
*(here->HICUMemitEmitPtr + 1) += XQbepar1_Vbe;
*(here->HICUMbaseEmitPtr + 1) += -XQbepar1_Vbe;
*(here->HICUMemitBasePtr + 1) += -XQbepar1_Vbe;
//Qbepar2
*(here->HICUMbaseBPBaseBPPtr + 1) += XQbepar2_Vbpe;
*(here->HICUMemitEmitPtr + 1) += XQbepar2_Vbpe;
*(here->HICUMemitBaseBPPtr + 1) += -XQbepar2_Vbpe;
*(here->HICUMbaseBPEmitPtr + 1) += -XQbepar2_Vbpe;
//Qbcpar1
*(here->HICUMbaseBasePtr + 1) += XQbcpar1_Vbci;
*(here->HICUMcollCICollCIPtr + 1) += XQbcpar1_Vbci;
*(here->HICUMbaseCollCIPtr + 1) += -XQbcpar1_Vbci;
*(here->HICUMcollCIBasePtr + 1) += -XQbcpar1_Vbci;
//Qbcpar2
*(here->HICUMbaseBPBaseBPPtr +1) += XQbcpar2_Vbpci;
*(here->HICUMcollCICollCIPtr +1) += XQbcpar2_Vbpci;
*(here->HICUMbaseBPCollCIPtr +1) += -XQbcpar2_Vbpci;
*(here->HICUMcollCIBaseBPPtr +1) += -XQbcpar2_Vbpci;
//Qsu
*(here->HICUMsubsSubsPtr + 1) += XQsu_Vsis;
*(here->HICUMsubsSISubsSIPtr + 1) += XQsu_Vsis;
*(here->HICUMsubsSISubsPtr + 1) += -XQsu_Vsis;
*(here->HICUMsubsSubsSIPtr + 1) += -XQsu_Vsis;
if (nqs) {
//Qxf1
*(here->HICUMxf1Xf1Ptr + 1) += +XQxf1_Vxf1;
//Qxf2
*(here->HICUMxf2Xf2Ptr + 1) += +XQxf2_Vxf2;
//Qxf
*(here->HICUMxfXfPtr + 1) += +XQxf_Vxf;
}
// Stamps with SH
if (selfheat) {
// Stamp element: Ibiei f_Bi = + f_Ei = -
*(here->HICUMbaseBItempPtr) += Ibiei_Vrth;
*(here->HICUMemitEItempPtr) += -Ibiei_Vrth;
// Stamp element: Ibpei f_Bp = + f_Ei = -
// with respect to Potential Vrth
*(here->HICUMbaseBPtempPtr) += Ibpei_Vrth;
*(here->HICUMemitEItempPtr) += -Ibpei_Vrth;
// Stamp element: Ibici f_Bi = + f_Ci = -
*(here->HICUMbaseBItempPtr) += Ibici_Vrth;
*(here->HICUMcollCItempPtr) += -Ibici_Vrth;
// Stamp element: Iciei f_Ci = + f_Ei = -
*(here->HICUMcollCItempPtr) += Iciei_Vrth;
*(here->HICUMemitEItempPtr) += -Iciei_Vrth;
// Stamp element: Ibpci f_Bp = + f_Ci = -
*(here->HICUMbaseBPtempPtr) += Ibpci_Vrth;
*(here->HICUMcollCItempPtr) += -Ibpci_Vrth;
// Stamp element: Rcx f_Ci = + f_C = -
*(here->HICUMcollCItempPtr) += Icic_Vrth;
*(here->HICUMcollTempPtr) += -Icic_Vrth;
// Stamp element: Rbx f_B = + f_Bp = -
*(here->HICUMbaseTempPtr) += Ibbp_Vrth;
*(here->HICUMbaseBPtempPtr) += -Ibbp_Vrth;
// Stamp element: Re f_Ei = + f_E = -
*(here->HICUMemitEItempPtr) += Ieie_Vrth;
*(here->HICUMemitTempPtr) += -Ieie_Vrth;
// Stamp element: Rbi f_Bp = + f_Bi = -
*(here->HICUMbaseBPtempPtr) += Ibpbi_Vrth;
*(here->HICUMbaseBItempPtr) += -Ibpbi_Vrth;
// Stamp element: Isici f_Si = + f_Ci = -
*(here->HICUMsubsSItempPtr) += Isici_Vrth;
*(here->HICUMcollCItempPtr) += -Isici_Vrth;
// Branch: bpsi, Stamp element: Its
*(here->HICUMbaseBPtempPtr) += Ibpsi_Vrth;
*(here->HICUMsubsSItempPtr) += -Ibpsi_Vrth;
if (nqs) {
// Stamp element: Ixf f_xf = +
*(here->HICUMxfTempPtr) += Ixf_Vrth;
// Stamp element: Ixf1 f_xf1 = +
*(here->HICUMxf1TempPtr) += Ixf1_Vrth;
// Stamp element: Ixf2 f_xf2 = +
*(here->HICUMxf2TempPtr) += Ixf2_Vrth;
}
// Stamp element: Rth f_T = +
*(here->HICUMtempTempPtr) += Irth_Vrth;
// Stamp element: Ith f_T = - Ith
// with respect to Potential Vrth
*(here->HICUMtempTempPtr) += -Ith_Vrth;
// with respect to Potential Vbiei
*(here->HICUMtempBaseBIPtr) += -Ith_Vbiei;
*(here->HICUMtempEmitEIPtr) += +Ith_Vbiei;
// with respect to Potential Vbici
*(here->HICUMtempBaseBIPtr) += -Ith_Vbici;
*(here->HICUMtempCollCIPtr) += +Ith_Vbici;
// with respect to Potential Vciei
*(here->HICUMtempCollCIPtr) += -Ith_Vciei;
*(here->HICUMtempEmitEIPtr) += +Ith_Vciei;
// with respect to Potential Vbpei
*(here->HICUMtempBaseBPPtr) += -Ith_Vbpei;
*(here->HICUMtempEmitEIPtr) += +Ith_Vbpei;
// with respect to Potential Vbpci
*(here->HICUMtempBaseBPPtr) += -Ith_Vbpci;
*(here->HICUMtempCollCIPtr) += +Ith_Vbpci;
// with respect to Potential Vsici
*(here->HICUMtempSubsSIPtr) += -Ith_Vsici;
*(here->HICUMtempCollCIPtr) += +Ith_Vsici;
// with respect to Potential Vbpbi
*(here->HICUMtempBaseBPPtr) += -Ith_Vbpbi;
*(here->HICUMtempBaseBIPtr) += +Ith_Vbpbi;
// with respect to Potential Vcic
*(here->HICUMtempCollCIPtr) += -Ith_Vcic;
*(here->HICUMtempCollPtr) += +Ith_Vcic;
// with respect to Potential Vbbp
*(here->HICUMtempBasePtr) += -Ith_Vbbp;
*(here->HICUMtempBaseBPPtr) += +Ith_Vbbp;
// with respect to Potential Veie
*(here->HICUMtempEmitEIPtr) += -Ith_Veie;
*(here->HICUMtempEmitPtr) += +Ith_Veie;
//the charges
*(here->HICUMbaseBItempPtr + 1) += +XQrbi_Vrth;
*(here->HICUMbaseBPtempPtr + 1) += -XQrbi_Vrth;
*(here->HICUMbaseBItempPtr + 1) += +XQjei_Vrth;
*(here->HICUMemitEItempPtr + 1) += -XQjei_Vrth;
*(here->HICUMbaseBItempPtr + 1) += +XQf_Vrth;
*(here->HICUMemitEItempPtr + 1) += -XQf_Vrth;
*(here->HICUMbaseBItempPtr + 1) += +XQr_Vrth;
*(here->HICUMcollCItempPtr + 1) += -XQr_Vrth;
*(here->HICUMbaseBItempPtr + 1) += +XQjci_Vrth;
*(here->HICUMcollCItempPtr + 1) += -XQjci_Vrth;
*(here->HICUMbaseBPtempPtr + 1) += +XQjep_Vrth;
*(here->HICUMemitEItempPtr + 1) += -XQjep_Vrth;
*(here->HICUMbaseTempPtr + 1) += +Xqjcx0_t_i_Vrth;
*(here->HICUMcollCItempPtr + 1) += -Xqjcx0_t_i_Vrth;
*(here->HICUMbaseBPtempPtr + 1) += +Xqjcx0_t_ii_Vrth;
*(here->HICUMcollCItempPtr + 1) += -Xqjcx0_t_ii_Vrth;
*(here->HICUMbaseBPtempPtr + 1) += +XQdsu_Vrth;
*(here->HICUMcollCItempPtr + 1) += -XQdsu_Vrth;
*(here->HICUMsubsSItempPtr + 1) += +XQjs_Vrth;
*(here->HICUMcollCItempPtr + 1) += -XQjs_Vrth;
*(here->HICUMsubsTempPtr + 1) += +XQscp_Vrth;
*(here->HICUMcollTempPtr + 1) += -XQscp_Vrth;
*(here->HICUMtempTempPtr + 1) += +XQcth_Vrth;
}
}
}
return(OK);
}