minor cleaning

This commit is contained in:
Markus Mueller 2020-06-10 18:17:44 +02:00
parent 5d28b97fb5
commit b401428cdd
5 changed files with 377 additions and 8 deletions

View File

@ -185,7 +185,7 @@ HICUMacLoad(GENmodel *inModel, CKTcircuit *ckt)
*(here->HICUMcollCICollCIPtr) += -Iciei_Vbici;
*(here->HICUMemitEIBaseBIPtr) += -Iciei_Vbici;
// Stamp element: Ibici (missing Ibici_Vbiei)
// Stamp element: Ibici
*(here->HICUMbaseBIBaseBIPtr) += Ibici_Vbici;
*(here->HICUMcollCICollCIPtr) += Ibici_Vbici;
*(here->HICUMcollCIBaseBIPtr) += -Ibici_Vbici;
@ -326,7 +326,7 @@ HICUMacLoad(GENmodel *inModel, CKTcircuit *ckt)
*(here->HICUMemitEIEmitEIPtr + 1) += XQjei_Vbiei;
*(here->HICUMbaseBIEmitEIPtr + 1) += -XQjei_Vbiei;
*(here->HICUMemitEIBaseBIPtr + 1) += -XQjei_Vbiei;
//Qf
//Qf f_Bi=+ f_Ei =-
*(here->HICUMbaseBIBaseBIPtr +1) += XQf_Vbiei;
*(here->HICUMemitEIEmitEIPtr +1) += XQf_Vbiei;
*(here->HICUMbaseBIEmitEIPtr +1) += -XQf_Vbiei;

View File

@ -0,0 +1,361 @@
/**********
Copyright 1990 Regents of the University of California. All rights reserved.
Author: 1985 Thomas L. Quarles
Model Author: 1990 Michael Schröter TU Dresden
Spice3 Implementation: 2019 Dietmar Warning
**********/
/*
* 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_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 Ibpbi_Vbpbi;
double Ibpbi_Vciei;
double Ibpbi_Vbiei;
double Ibpbi_Vrth;
double Isis_Vsis;
double Icic_Vcic;
double Ieie_Veie;
double Ibbp_Vbbp;
double Ibpsi_Vbpci;
double Ibpsi_Vsici;
double Ibpsi_Vrth;
double XQrbi_Vbpbi;
// double XQrbi_Vbiei;
// double XQrbi_Vbici;
double XQdeix_Vbiei;
double XQjei_Vbiei;
double XQdci_Vbici;
double XQjci_Vbici;
double XQjep_Vbpei;
double Xqjcx0_t_i_Vbci;
double Xqjcx0_t_ii_Vbpci;
double XQdsu_Vbpci;
// double XQdsu_Vsici;
double XQjs_Vsici;
double XQscp_Vsc;
double XQbepar1_Vbe;
double XQbepar2_Vbpe;
double XQbcpar1_Vbci;
double XQbcpar2_Vbpci;
double XQsu_Vsis;
/* loop through all the models */
for( ; model != NULL; model = HICUMnextModel(model)) {
/* loop through all the instances of the model */
for( here = HICUMinstances(model); here!= NULL;
here = HICUMnextInstance(here)) {
//todo: temperature derivatives
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;
Ibiei_Vbiei = *(ckt->CKTstate0 + here->HICUMibiei_Vbiei);
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);
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_Vciei = *(ckt->CKTstate0 + here->HICUMibpbi_Vbici);
Ibpbi_Vrth = *(ckt->CKTstate0 + here->HICUMibpbi_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);
Ibpci_Vbpci = *(ckt->CKTstate0 + here->HICUMibpci_Vbpci);
Ibpci_Vrth = *(ckt->CKTstate0 + here->HICUMibpci_Vrth);
/*
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;
/*
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
*/
//todo: Complete with partial dervatives e.g. Qjs_Vsici, Qrbi_Vbici
XQrbi_Vbpbi = *(ckt->CKTstate0 + here->HICUMcqrbi) * ckt->CKTomega;
XQdeix_Vbiei = *(ckt->CKTstate0 + here->HICUMcqf) * ckt->CKTomega;
XQjei_Vbiei = *(ckt->CKTstate0 + here->HICUMcqjei) * ckt->CKTomega;
XQdci_Vbici = *(ckt->CKTstate0 + here->HICUMcqr) * ckt->CKTomega;
XQjci_Vbici = *(ckt->CKTstate0 + here->HICUMcqjci) * ckt->CKTomega;
XQjep_Vbpei = *(ckt->CKTstate0 + here->HICUMcqjep) * ckt->CKTomega;
Xqjcx0_t_i_Vbci = *(ckt->CKTstate0 + here->HICUMcqcx0_t_i) * ckt->CKTomega;
Xqjcx0_t_ii_Vbpci = *(ckt->CKTstate0 + here->HICUMcqcx0_t_ii) * ckt->CKTomega;
XQdsu_Vbpci = *(ckt->CKTstate0 + here->HICUMcqdsu) * ckt->CKTomega;
XQjs_Vsici = *(ckt->CKTstate0 + here->HICUMcqjs) * ckt->CKTomega;
XQscp_Vsc = *(ckt->CKTstate0 + here->HICUMcqscp) * ckt->CKTomega;
XQbepar1_Vbe = *(ckt->CKTstate0 + here->HICUMcqbepar1) * ckt->CKTomega;
XQbepar2_Vbpe = *(ckt->CKTstate0 + here->HICUMcqbepar2) * ckt->CKTomega;
XQbcpar1_Vbci = *(ckt->CKTstate0 + here->HICUMcqbcpar1) * ckt->CKTomega;
XQbcpar2_Vbpci = *(ckt->CKTstate0 + here->HICUMcqbcpar2) * ckt->CKTomega;
XQsu_Vsis = *(ckt->CKTstate0 + here->HICUMcqsu) * ckt->CKTomega;
/*
c Stamp element: Qbepar1
*/
*(here->HICUMbaseBasePtr + 1) += XQbepar1_Vbe;
*(here->HICUMbaseEmitPtr + 1) += -XQbepar1_Vbe;
*(here->HICUMemitBasePtr + 1) += -XQbepar1_Vbe;
*(here->HICUMemitEmitPtr + 1) += XQbepar1_Vbe;
/*
c Stamp element: Qbepar2
*/
*(here->HICUMbaseBPBaseBPPtr + 1) += XQbepar2_Vbpe;
*(here->HICUMemitBaseBPPtr + 1) += -XQbepar2_Vbpe;
*(here->HICUMemitEmitPtr + 1) += -XQbepar2_Vbpe;
*(here->HICUMbaseBPEmitPtr + 1) += XQbepar2_Vbpe;
/*
c Stamp element: Qdeix, Qjei
*/
*(here->HICUMbaseBIBaseBIPtr + 1) += XQdeix_Vbiei;
*(here->HICUMbaseBIEmitEIPtr + 1) += -XQdeix_Vbiei;
*(here->HICUMemitEIBaseBIPtr + 1) += -XQdeix_Vbiei;
*(here->HICUMemitEIEmitEIPtr + 1) += XQdeix_Vbiei;
*(here->HICUMbaseBIBaseBIPtr + 1) += XQjei_Vbiei;
*(here->HICUMbaseBIEmitEIPtr + 1) += -XQjei_Vbiei;
*(here->HICUMemitEIBaseBIPtr + 1) += -XQjei_Vbiei;
*(here->HICUMemitEIEmitEIPtr + 1) += XQjei_Vbiei;
/*
c Stamp element: Qjep
*/
*(here->HICUMbaseBPBaseBPPtr + 1) += XQjep_Vbpei;
*(here->HICUMbaseBPEmitEIPtr + 1) += -XQjep_Vbpei;
*(here->HICUMemitEIBaseBPPtr + 1) += -XQjep_Vbpei;
*(here->HICUMemitEIEmitEIPtr + 1) += XQjep_Vbpei;
/*
c Stamp element: Qdci, Qjci
*/
*(here->HICUMbaseBIBaseBIPtr + 1) += XQdci_Vbici;
*(here->HICUMbaseBICollCIPtr + 1) += -XQdci_Vbici;
*(here->HICUMcollCIBaseBIPtr + 1) += -XQdci_Vbici;
*(here->HICUMcollCICollCIPtr + 1) += XQdci_Vbici;
*(here->HICUMbaseBIBaseBIPtr + 1) += XQjci_Vbici;
*(here->HICUMbaseBICollCIPtr + 1) += -XQjci_Vbici;
*(here->HICUMcollCIBaseBIPtr + 1) += -XQjci_Vbici;
*(here->HICUMcollCICollCIPtr + 1) += XQjci_Vbici;
/*
c Stamp element: Qbcpar1, qjcx0_i
*/
*(here->HICUMbaseBasePtr + 1) += XQbcpar1_Vbci;
*(here->HICUMbaseCollCIPtr + 1) += -XQbcpar1_Vbci;
*(here->HICUMcollCIBasePtr + 1) += -XQbcpar1_Vbci;
*(here->HICUMcollCICollCIPtr + 1) += XQbcpar1_Vbci;
*(here->HICUMbaseBasePtr + 1) += Xqjcx0_t_i_Vbci;
*(here->HICUMbaseCollCIPtr + 1) += -Xqjcx0_t_i_Vbci;
*(here->HICUMcollCIBasePtr + 1) += -Xqjcx0_t_i_Vbci;
*(here->HICUMcollCICollCIPtr + 1) += Xqjcx0_t_i_Vbci;
/*
c Stamp element: Qbcpar2, qjcx0_ii, Qdsu
*/
*(here->HICUMbaseBPBaseBPPtr + 1) += XQbcpar2_Vbpci;
*(here->HICUMcollCICollCIPtr + 1) += XQbcpar2_Vbpci;
*(here->HICUMbaseBPCollCIPtr + 1) += -XQbcpar2_Vbpci;
*(here->HICUMcollCIBaseBPPtr + 1) += -XQbcpar2_Vbpci;
*(here->HICUMbaseBPCollCIPtr + 1) += Xqjcx0_t_ii_Vbpci;
*(here->HICUMbaseBPBaseBPPtr + 1) += -Xqjcx0_t_ii_Vbpci;
*(here->HICUMcollCIBaseBPPtr + 1) += -Xqjcx0_t_ii_Vbpci;
*(here->HICUMcollCICollCIPtr + 1) += Xqjcx0_t_ii_Vbpci;
*(here->HICUMbaseBPCollCIPtr + 1) += XQdsu_Vbpci;
*(here->HICUMbaseBPBaseBPPtr + 1) += -XQdsu_Vbpci;
*(here->HICUMcollCIBaseBPPtr + 1) += -XQdsu_Vbpci;
*(here->HICUMcollCICollCIPtr + 1) += XQdsu_Vbpci;
/*
c Stamp element: Qrbi
*/
*(here->HICUMbaseBPBaseBPPtr + 1) += XQrbi_Vbpbi;
*(here->HICUMbaseBPBaseBIPtr + 1) += -XQrbi_Vbpbi;
*(here->HICUMbaseBIBaseBPPtr + 1) += -XQrbi_Vbpbi;
*(here->HICUMbaseBIBaseBIPtr + 1) += XQrbi_Vbpbi;
//todo:
// *(here->HICUMbaseBPBaseBIPtr + 1) += XQrbi_Vbiei;
// *(here->HICUMbaseBPEmitEIPtr + 1) += -XQrbi_Vbiei;
// *(here->HICUMbaseBIBaseBIPtr + 1) += -XQrbi_Vbiei;
// *(here->HICUMbaseBIEmitEIPtr + 1) += XQrbi_Vbiei;
// *(here->HICUMbaseBPCollCIPtr + 1) += XQrbi_Vbici;
// *(here->HICUMbaseBPEmitEIPtr + 1) += -XQrbi_Vbici;
// *(here->HICUMbaseBICollCIPtr + 1) += -XQrbi_Vbici;
// *(here->HICUMbaseBIEmitEIPtr + 1) += XQrbi_Vbici;
/*
c Stamp element: Cscp
*/
*(here->HICUMsubsSubsPtr + 1) += XQscp_Vsc;
*(here->HICUMcollSubsPtr + 1) += -XQscp_Vsc;
*(here->HICUMcollCollPtr + 1) += -XQscp_Vsc;
*(here->HICUMsubsCollPtr + 1) += XQscp_Vsc;
/*
c Stamp element: Cjs
*/
*(here->HICUMsubsSISubsSIPtr + 1) += XQjs_Vsici;
*(here->HICUMsubsSICollCIPtr + 1) += -XQjs_Vsici;
*(here->HICUMcollCISubsSIPtr + 1) += -XQjs_Vsici;
*(here->HICUMcollCICollCIPtr + 1) += XQjs_Vsici;
/*
c Stamp element: Csu
*/
*(here->HICUMsubsSubsPtr + 1) += XQsu_Vsis;
*(here->HICUMsubsSISubsPtr + 1) += -XQsu_Vsis;
*(here->HICUMsubsSubsSIPtr + 1) += -XQsu_Vsis;
*(here->HICUMsubsSISubsSIPtr + 1) += XQsu_Vsis;
}
}
return(OK);
}

View File

@ -647,7 +647,7 @@ do { if((here->ptr = SMPmakeElt(matrix, here->first, here->second)) == NULL){\
// TSTALLOC(HICUMxf1Xf1Ptr,HICUMxf1Node,HICUMxf1Node);
// TSTALLOC(HICUMxf2Xf2Ptr,HICUMxf2Node,HICUMxf2Node);
if (model->HICUMflsh) {
if (model->HICUMflsh && model->HICUMrth>0.001) {
TSTALLOC(HICUMcollTempPtr,HICUMcollNode,HICUMtempNode);
TSTALLOC(HICUMbaseTempPtr,HICUMbaseNode,HICUMtempNode);
TSTALLOC(HICUMemitTempPtr,HICUMemitNode,HICUMtempNode);

View File

@ -2624,6 +2624,7 @@ HICUMload(GENmodel *inModel, CKTcircuit *ckt)
Ibiei_Vbiei += ckt->CKTgmin;
Ibici += ckt->CKTgmin*Vbici;
Ibici_Vbici += ckt->CKTgmin;
Ibici_Vbiei += ckt->CKTgmin;
Iciei += ckt->CKTgmin*Vciei;
Iciei_Vbiei += ckt->CKTgmin;
Iciei_Vbici += ckt->CKTgmin;

View File

@ -31,14 +31,21 @@ pins coll base emit subs therm
float therm
checkPolarity n
test noise_npn_cornoise_ac
test ypara_npn_full_sh_ac
temperature 27
biases V(emit)=0 V(subs)=0 V(coll)=1.000000
biasSweep V(base)=0.700000,1.100000,0.100000
freq dec 2 1000 1e+011
outputs N(coll)
modelParameters parameters/npn_cornoise
biasSweep V(base)=0.800000,0.950000,0.050000
freq dec 5 1e+008 1e+011
outputs G(base,base) G(base,coll) G(coll,base) G(coll,coll) C(base,base) C(base,coll) C(coll,base) C(coll,coll)
modelParameters parameters/npn_full_sh
test ypara_npn_full_ac
temperature 27
biases V(emit)=0 V(subs)=0 V(coll)=1.000000
biasSweep V(base)=0.800000,0.950000,0.050000
freq dec 5 1e+008 1e+011
outputs G(base,base) G(base,coll) G(coll,base) G(coll,coll) C(base,base) C(base,coll) C(coll,base) C(coll,coll)
modelParameters parameters/npn_full
`ifdef NOT_USED
`endif