Enhanced model: m,dtemp.
This commit is contained in:
parent
858a227a57
commit
fa936c397f
|
|
@ -9,7 +9,6 @@ Author: 1985 Thomas L. Quarles
|
|||
*/
|
||||
|
||||
#include "ngspice.h"
|
||||
#include <stdio.h>
|
||||
#include "devdefs.h"
|
||||
#include "bjtdefs.h"
|
||||
#include "suffix.h"
|
||||
|
|
@ -19,6 +18,7 @@ IFparm BJTpTable[] = { /* parameters */
|
|||
IOPAU("icvbe", BJT_IC_VBE, IF_REAL, "Initial B-E voltage"),
|
||||
IOPAU("icvce", BJT_IC_VCE, IF_REAL, "Initial C-E voltage"),
|
||||
IOPU("area", BJT_AREA, IF_REAL, "Area factor"),
|
||||
IOPU("m", BJT_M, IF_REAL, "Parallel Multiplier"),
|
||||
IP("ic", BJT_IC, IF_REALVEC, "Initial condition vector"),
|
||||
IP("sens_area",BJT_AREA_SENS,IF_FLAG, "flag to request sensitivity WRT area"),
|
||||
OPU("colnode", BJT_QUEST_COLNODE, IF_INTEGER, "Number of collector node"),
|
||||
|
|
@ -68,7 +68,8 @@ IFparm BJTpTable[] = { /* parameters */
|
|||
OPU("sens_mag", BJT_QUEST_SENS_MAG, IF_REAL, "sensitivity of ac magnitude"),
|
||||
OPU("sens_ph", BJT_QUEST_SENS_PH, IF_REAL, "sensitivity of ac phase"),
|
||||
OPU("sens_cplx", BJT_QUEST_SENS_CPLX, IF_COMPLEX, "ac sensitivity"),
|
||||
IOPU("temp", BJT_TEMP, IF_REAL, "instance temperature")
|
||||
IOPU("temp", BJT_TEMP, IF_REAL, "instance temperature"),
|
||||
IOPU("dtemp", BJT_DTEMP, IF_REAL, "instance temperature delta from circuit")
|
||||
};
|
||||
|
||||
IFparm BJTmPTable[] = { /* model parameters */
|
||||
|
|
|
|||
|
|
@ -10,17 +10,13 @@ Author: 1985 Thomas L. Quarles
|
|||
*/
|
||||
|
||||
#include "ngspice.h"
|
||||
#include <stdio.h>
|
||||
#include "cktdefs.h"
|
||||
#include "bjtdefs.h"
|
||||
#include "sperror.h"
|
||||
#include "suffix.h"
|
||||
|
||||
int
|
||||
BJTacLoad(inModel,ckt)
|
||||
GENmodel *inModel;
|
||||
CKTcircuit *ckt;
|
||||
|
||||
BJTacLoad(GENmodel *inModel, CKTcircuit *ckt)
|
||||
{
|
||||
BJTinstance *here;
|
||||
BJTmodel *model = (BJTmodel*)inModel;
|
||||
|
|
@ -39,12 +35,15 @@ BJTacLoad(inModel,ckt)
|
|||
double xcbx;
|
||||
double xccs;
|
||||
double xcmcb;
|
||||
double m;
|
||||
|
||||
for( ; model != NULL; model = model->BJTnextModel) {
|
||||
for( here = model->BJTinstances; here!= NULL;
|
||||
here = here->BJTnextInstance) {
|
||||
if (here->BJTowner != ARCHme) continue;
|
||||
|
||||
m = here->BJTm;
|
||||
|
||||
gcpr=model->BJTcollectorConduct * here->BJTarea;
|
||||
gepr=model->BJTemitterConduct * here->BJTarea;
|
||||
gpi= *(ckt->CKTstate0 + here->BJTgpi);
|
||||
|
|
@ -65,39 +64,39 @@ BJTacLoad(inModel,ckt)
|
|||
xcbx= *(ckt->CKTstate0 + here->BJTcqbx) * ckt->CKTomega;
|
||||
xccs= *(ckt->CKTstate0 + here->BJTcqcs) * ckt->CKTomega;
|
||||
xcmcb= *(ckt->CKTstate0 + here->BJTcexbc) * ckt->CKTomega;
|
||||
*(here->BJTcolColPtr) += (gcpr);
|
||||
*(here->BJTbaseBasePtr) += (gx);
|
||||
*(here->BJTbaseBasePtr + 1) += (xcbx);
|
||||
*(here->BJTemitEmitPtr) += (gepr);
|
||||
*(here->BJTcolPrimeColPrimePtr) += (gmu+go+gcpr);
|
||||
*(here->BJTcolPrimeColPrimePtr + 1) += (xcmu+xccs+xcbx);
|
||||
*(here->BJTbasePrimeBasePrimePtr) += (gx+gpi+gmu);
|
||||
*(here->BJTbasePrimeBasePrimePtr + 1) += (xcpi+xcmu+xcmcb);
|
||||
*(here->BJTemitPrimeEmitPrimePtr) += (gpi+gepr+gm+go);
|
||||
*(here->BJTemitPrimeEmitPrimePtr + 1) += (xcpi+xgm);
|
||||
*(here->BJTcolColPrimePtr) += (-gcpr);
|
||||
*(here->BJTbaseBasePrimePtr) += (-gx);
|
||||
*(here->BJTemitEmitPrimePtr) += (-gepr);
|
||||
*(here->BJTcolPrimeColPtr) += (-gcpr);
|
||||
*(here->BJTcolPrimeBasePrimePtr) += (-gmu+gm);
|
||||
*(here->BJTcolPrimeBasePrimePtr + 1) += (-xcmu+xgm);
|
||||
*(here->BJTcolPrimeEmitPrimePtr) += (-gm-go);
|
||||
*(here->BJTcolPrimeEmitPrimePtr + 1) += (-xgm);
|
||||
*(here->BJTbasePrimeBasePtr) += (-gx);
|
||||
*(here->BJTbasePrimeColPrimePtr) += (-gmu);
|
||||
*(here->BJTbasePrimeColPrimePtr + 1) += (-xcmu-xcmcb);
|
||||
*(here->BJTbasePrimeEmitPrimePtr) += (-gpi);
|
||||
*(here->BJTbasePrimeEmitPrimePtr + 1) += (-xcpi);
|
||||
*(here->BJTemitPrimeEmitPtr) += (-gepr);
|
||||
*(here->BJTemitPrimeColPrimePtr) += (-go);
|
||||
*(here->BJTemitPrimeColPrimePtr + 1) += (xcmcb);
|
||||
*(here->BJTemitPrimeBasePrimePtr) += (-gpi-gm);
|
||||
*(here->BJTemitPrimeBasePrimePtr + 1) += (-xcpi-xgm-xcmcb);
|
||||
*(here->BJTsubstSubstPtr + 1) += (xccs);
|
||||
*(here->BJTcolPrimeSubstPtr + 1) += (-xccs);
|
||||
*(here->BJTsubstColPrimePtr + 1) += (-xccs);
|
||||
*(here->BJTbaseColPrimePtr + 1) += (-xcbx);
|
||||
*(here->BJTcolPrimeBasePtr + 1) += (-xcbx);
|
||||
*(here->BJTcolColPtr) += m * (gcpr);
|
||||
*(here->BJTbaseBasePtr) += m * (gx);
|
||||
*(here->BJTbaseBasePtr + 1) += m * (xcbx);
|
||||
*(here->BJTemitEmitPtr) += m * (gepr);
|
||||
*(here->BJTcolPrimeColPrimePtr) += m * (gmu+go+gcpr);
|
||||
*(here->BJTcolPrimeColPrimePtr + 1) += m * (xcmu+xccs+xcbx);
|
||||
*(here->BJTbasePrimeBasePrimePtr) += m * (gx+gpi+gmu);
|
||||
*(here->BJTbasePrimeBasePrimePtr + 1) += m * (xcpi+xcmu+xcmcb);
|
||||
*(here->BJTemitPrimeEmitPrimePtr) += m * (gpi+gepr+gm+go);
|
||||
*(here->BJTemitPrimeEmitPrimePtr + 1) += m * (xcpi+xgm);
|
||||
*(here->BJTcolColPrimePtr) += m * (-gcpr);
|
||||
*(here->BJTbaseBasePrimePtr) += m * (-gx);
|
||||
*(here->BJTemitEmitPrimePtr) += m * (-gepr);
|
||||
*(here->BJTcolPrimeColPtr) += m * (-gcpr);
|
||||
*(here->BJTcolPrimeBasePrimePtr) += m * (-gmu+gm);
|
||||
*(here->BJTcolPrimeBasePrimePtr + 1) += m * (-xcmu+xgm);
|
||||
*(here->BJTcolPrimeEmitPrimePtr) += m * (-gm-go);
|
||||
*(here->BJTcolPrimeEmitPrimePtr + 1) += m * (-xgm);
|
||||
*(here->BJTbasePrimeBasePtr) += m * (-gx);
|
||||
*(here->BJTbasePrimeColPrimePtr) += m * (-gmu);
|
||||
*(here->BJTbasePrimeColPrimePtr + 1) += m * (-xcmu-xcmcb);
|
||||
*(here->BJTbasePrimeEmitPrimePtr) += m * (-gpi);
|
||||
*(here->BJTbasePrimeEmitPrimePtr + 1) += m * (-xcpi);
|
||||
*(here->BJTemitPrimeEmitPtr) += m * (-gepr);
|
||||
*(here->BJTemitPrimeColPrimePtr) += m * (-go);
|
||||
*(here->BJTemitPrimeColPrimePtr + 1) += m * (xcmcb);
|
||||
*(here->BJTemitPrimeBasePrimePtr) += m * (-gpi-gm);
|
||||
*(here->BJTemitPrimeBasePrimePtr + 1) += m * (-xcpi-xgm-xcmcb);
|
||||
*(here->BJTsubstSubstPtr + 1) += m * (xccs);
|
||||
*(here->BJTcolPrimeSubstPtr + 1) += m * (-xccs);
|
||||
*(here->BJTsubstColPrimePtr + 1) += m * (-xccs);
|
||||
*(here->BJTbaseColPrimePtr + 1) += m * (-xcbx);
|
||||
*(here->BJTcolPrimeBasePtr + 1) += m * (-xcbx);
|
||||
}
|
||||
}
|
||||
return(OK);
|
||||
|
|
|
|||
|
|
@ -10,7 +10,6 @@ Author: 1985 Mathew Lew and Thomas L. Quarles
|
|||
|
||||
#include "ngspice.h"
|
||||
#include "const.h"
|
||||
#include <stdio.h>
|
||||
#include "cktdefs.h"
|
||||
#include "bjtdefs.h"
|
||||
#include "ifsim.h"
|
||||
|
|
@ -19,12 +18,7 @@ Author: 1985 Mathew Lew and Thomas L. Quarles
|
|||
|
||||
/*ARGSUSED*/
|
||||
int
|
||||
BJTask(ckt,instPtr,which,value,select)
|
||||
CKTcircuit *ckt;
|
||||
GENinstance *instPtr;
|
||||
int which;
|
||||
IFvalue *value;
|
||||
IFvalue *select;
|
||||
BJTask(CKTcircuit *ckt, GENinstance *instPtr, int which, IFvalue *value, IFvalue *select)
|
||||
{
|
||||
BJTinstance *here = (BJTinstance*)instPtr;
|
||||
double tmp;
|
||||
|
|
@ -45,9 +39,15 @@ BJTask(ckt,instPtr,which,value,select)
|
|||
case BJT_TEMP:
|
||||
value->rValue = here->BJTtemp - CONSTCtoK;
|
||||
return(OK);
|
||||
case BJT_DTEMP:
|
||||
value->rValue = here->BJTdtemp;
|
||||
return(OK);
|
||||
case BJT_AREA:
|
||||
value->rValue = here->BJTarea;
|
||||
return(OK);
|
||||
case BJT_M:
|
||||
value->rValue = here->BJTm;
|
||||
return(OK);
|
||||
case BJT_OFF:
|
||||
value->iValue = here->BJToff;
|
||||
return(OK);
|
||||
|
|
|
|||
|
|
@ -9,16 +9,13 @@ Author: 1985 Thomas L. Quarles
|
|||
*/
|
||||
|
||||
#include "ngspice.h"
|
||||
#include <stdio.h>
|
||||
#include "cktdefs.h"
|
||||
#include "bjtdefs.h"
|
||||
#include "sperror.h"
|
||||
#include "suffix.h"
|
||||
|
||||
int
|
||||
BJTconvTest(inModel,ckt)
|
||||
GENmodel *inModel;
|
||||
CKTcircuit *ckt;
|
||||
BJTconvTest(GENmodel *inModel, CKTcircuit *ckt)
|
||||
|
||||
{
|
||||
BJTinstance *here;
|
||||
|
|
|
|||
|
|
@ -31,10 +31,12 @@ typedef struct sBJTinstance {
|
|||
int BJTcolPrimeNode; /* number of internal collector node of bjt */
|
||||
int BJTbasePrimeNode; /* number of internal base node of bjt */
|
||||
int BJTemitPrimeNode; /* number of internal emitter node of bjt */
|
||||
double BJTarea; /* area factor for the bjt */
|
||||
double BJTarea; /* area factor for the bjt */
|
||||
double BJTm; /* parallel multiplier */
|
||||
double BJTicVBE; /* initial condition voltage B-E*/
|
||||
double BJTicVCE; /* initial condition voltage C-E*/
|
||||
double BJTtemp; /* instance temperature */
|
||||
double BJTdtemp; /* instance delta temperature from circuit */
|
||||
double BJTtSatCur; /* temperature adjusted saturation current */
|
||||
double BJTtBetaF; /* temperature adjusted forward beta */
|
||||
double BJTtBetaR; /* temperature adjusted reverse beta */
|
||||
|
|
@ -97,9 +99,11 @@ typedef struct sBJTinstance {
|
|||
double *BJTcolPrimeBasePtr; /* pointer to sparse matrix at
|
||||
* (collector prime,base) */
|
||||
|
||||
unsigned BJToff :1; /* 'off' flag for bjt */
|
||||
unsigned BJToff :1; /* 'off' flag for bjt */
|
||||
unsigned BJTtempGiven :1; /* temperature given for bjt instance*/
|
||||
unsigned BJTdtempGiven :1; /* delta temperature given for bjt instance*/
|
||||
unsigned BJTareaGiven :1; /* flag to indicate area was specified */
|
||||
unsigned BJTmGiven :1; /* flag to indicate m parameter specified */
|
||||
unsigned BJTicVBEGiven :1; /* flag to indicate VBE init. cond. given */
|
||||
unsigned BJTicVCEGiven :1; /* flag to indicate VCE init. cond. given */
|
||||
unsigned BJTsenPertFlag :1; /* indictes whether the the parameter of
|
||||
|
|
@ -403,6 +407,8 @@ typedef struct sBJTmodel { /* model structure for a bjt */
|
|||
#define BJT_IC 5
|
||||
#define BJT_AREA_SENS 6
|
||||
#define BJT_TEMP 7
|
||||
#define BJT_DTEMP 8
|
||||
#define BJT_M 9
|
||||
|
||||
/* model parameters */
|
||||
#define BJT_MOD_NPN 101
|
||||
|
|
|
|||
|
|
@ -9,17 +9,13 @@ Author: 1985 Thomas L. Quarles
|
|||
*/
|
||||
|
||||
#include "ngspice.h"
|
||||
#include <stdio.h>
|
||||
#include "bjtdefs.h"
|
||||
#include "sperror.h"
|
||||
#include "suffix.h"
|
||||
|
||||
|
||||
int
|
||||
BJTdelete(inModel,name,kill)
|
||||
GENmodel *inModel;
|
||||
IFuid name;
|
||||
GENinstance **kill;
|
||||
BJTdelete(GENmodel *inModel, IFuid name, GENinstance **kill)
|
||||
|
||||
{
|
||||
BJTmodel *model = (BJTmodel*)inModel;
|
||||
|
|
|
|||
|
|
@ -11,14 +11,12 @@ Author: 1985 Thomas L. Quarles
|
|||
*/
|
||||
|
||||
#include "ngspice.h"
|
||||
#include <stdio.h>
|
||||
#include "bjtdefs.h"
|
||||
#include "suffix.h"
|
||||
|
||||
|
||||
void
|
||||
BJTdestroy(inModel)
|
||||
GENmodel **inModel;
|
||||
BJTdestroy(GENmodel **inModel)
|
||||
|
||||
{
|
||||
|
||||
|
|
|
|||
|
|
@ -5,7 +5,6 @@ Modified: 2000 AlansFixes
|
|||
**********/
|
||||
|
||||
#include "ngspice.h"
|
||||
#include <stdio.h>
|
||||
#include "cktdefs.h"
|
||||
#include "bjtdefs.h"
|
||||
#include "sperror.h"
|
||||
|
|
|
|||
|
|
@ -4,7 +4,6 @@ Author: 1988 Jaijeet S Roychowdhury
|
|||
**********/
|
||||
|
||||
#include "ngspice.h"
|
||||
#include <stdio.h>
|
||||
#include "cktdefs.h"
|
||||
#include "bjtdefs.h"
|
||||
#include "const.h"
|
||||
|
|
@ -154,16 +153,16 @@ BJTdSetup(GENmodel *inModel, CKTcircuit *ckt)
|
|||
/*
|
||||
* dc model paramters
|
||||
*/
|
||||
csat=here->BJTtSatCur*here->BJTarea;
|
||||
rbpr=model->BJTminBaseResist/here->BJTarea;
|
||||
rbpi=model->BJTbaseResist/here->BJTarea-rbpr;
|
||||
oik=model->BJTinvRollOffF/here->BJTarea;
|
||||
c2=here->BJTtBEleakCur*here->BJTarea;
|
||||
csat=here->BJTtSatCur*here->BJTarea * here->BJTm;
|
||||
rbpr=model->BJTminBaseResist/(here->BJTarea * here->BJTm);
|
||||
rbpi=model->BJTbaseResist/(here->BJTarea * here->BJTm)-rbpr;
|
||||
oik=model->BJTinvRollOffF/(here->BJTarea * here->BJTm);
|
||||
c2=here->BJTtBEleakCur*here->BJTarea * here->BJTm;
|
||||
vte=model->BJTleakBEemissionCoeff*vt;
|
||||
oikr=model->BJTinvRollOffR/here->BJTarea;
|
||||
c4=here->BJTtBCleakCur*here->BJTarea;
|
||||
oikr=model->BJTinvRollOffR/(here->BJTarea * here->BJTm);
|
||||
c4=here->BJTtBCleakCur*here->BJTarea * here->BJTm;
|
||||
vtc=model->BJTleakBCemissionCoeff*vt;
|
||||
xjrb=model->BJTbaseCurrentHalfResist*here->BJTarea;
|
||||
xjrb=model->BJTbaseCurrentHalfResist*here->BJTarea * here->BJTm;
|
||||
|
||||
|
||||
/*
|
||||
|
|
@ -480,22 +479,22 @@ BJTdSetup(GENmodel *inModel, CKTcircuit *ckt)
|
|||
*/
|
||||
tf=model->BJTtransitTimeF;
|
||||
tr=model->BJTtransitTimeR;
|
||||
czbe=here->BJTtBEcap*here->BJTarea;
|
||||
czbe=here->BJTtBEcap*here->BJTarea * here->BJTm;
|
||||
pe=here->BJTtBEpot;
|
||||
xme=model->BJTjunctionExpBE;
|
||||
cdis=model->BJTbaseFractionBCcap;
|
||||
ctot=here->BJTtBCcap*here->BJTarea;
|
||||
ctot=here->BJTtBCcap*here->BJTarea * here->BJTm;
|
||||
czbc=ctot*cdis;
|
||||
czbx=ctot-czbc;
|
||||
pc=here->BJTtBCpot;
|
||||
xmc=model->BJTjunctionExpBC;
|
||||
fcpe=here->BJTtDepCap;
|
||||
czcs=model->BJTcapCS*here->BJTarea;
|
||||
czcs=model->BJTcapCS*here->BJTarea * here->BJTm;
|
||||
ps=model->BJTpotentialSubstrate;
|
||||
xms=model->BJTexponentialSubstrate;
|
||||
xtf=model->BJTtransitTimeBiasCoeffF;
|
||||
ovtf=model->BJTtransitTimeVBCFactor;
|
||||
xjtf=model->BJTtransitTimeHighCurrentF*here->BJTarea;
|
||||
xjtf=model->BJTtransitTimeHighCurrentF*here->BJTarea * here->BJTm;
|
||||
if(tf != 0 && vbe >0) {
|
||||
EqualDeriv(&d_cbe, &d_p);
|
||||
d_cbe.value = cbe;
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
/**********
|
||||
Copyright 1990 Regents of the University of California. All rights reserved.
|
||||
Author: 1985 Thomas L. Quarles
|
||||
Modified: 2000 AnalsFixes
|
||||
Modified: 2000 AlansFixes
|
||||
**********/
|
||||
#ifndef __BJTEXT_H
|
||||
#define __BJTEXT_H
|
||||
|
|
@ -30,7 +30,6 @@ extern int BJTtemp(GENmodel*,CKTcircuit*);
|
|||
extern int BJTtrunc(GENmodel*,CKTcircuit*,double*);
|
||||
extern int BJTdisto(int,GENmodel*,CKTcircuit*);
|
||||
extern int BJTnoise(int,int,GENmodel*,CKTcircuit*,Ndata*,double*);
|
||||
|
||||
extern int BJTdSetup(GENmodel*, register CKTcircuit*);
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -11,7 +11,6 @@ Author: 1985 Thomas L. Quarles
|
|||
*/
|
||||
|
||||
#include "ngspice.h"
|
||||
#include <stdio.h>
|
||||
#include "cktdefs.h"
|
||||
#include "bjtdefs.h"
|
||||
#include "sperror.h"
|
||||
|
|
@ -19,9 +18,7 @@ Author: 1985 Thomas L. Quarles
|
|||
|
||||
|
||||
int
|
||||
BJTgetic(inModel,ckt)
|
||||
GENmodel *inModel;
|
||||
CKTcircuit *ckt;
|
||||
BJTgetic(GENmodel *inModel, CKTcircuit *ckt)
|
||||
|
||||
{
|
||||
|
||||
|
|
|
|||
|
|
@ -10,7 +10,6 @@ Modified: 2000 AlansFixes
|
|||
*/
|
||||
|
||||
#include "ngspice.h"
|
||||
#include <stdio.h>
|
||||
#include "cktdefs.h"
|
||||
#include "bjtdefs.h"
|
||||
#include "const.h"
|
||||
|
|
@ -20,13 +19,10 @@ Modified: 2000 AlansFixes
|
|||
#include "suffix.h"
|
||||
|
||||
int
|
||||
BJTload(inModel,ckt)
|
||||
|
||||
GENmodel *inModel;
|
||||
CKTcircuit *ckt;
|
||||
BJTload(GENmodel *inModel, CKTcircuit *ckt)
|
||||
/* actually load the current resistance value into the
|
||||
* sparse matrix previously provided
|
||||
*/
|
||||
* sparse matrix previously provided
|
||||
*/
|
||||
{
|
||||
BJTmodel *model = (BJTmodel*)inModel;
|
||||
BJTinstance *here;
|
||||
|
|
@ -132,6 +128,8 @@ BJTload(inModel,ckt)
|
|||
int ichk1;
|
||||
int error;
|
||||
int SenCond=0;
|
||||
double m;
|
||||
|
||||
/* loop through all the models */
|
||||
for( ; model != NULL; model = model->BJTnextModel ) {
|
||||
|
||||
|
|
@ -141,7 +139,9 @@ BJTload(inModel,ckt)
|
|||
if (here->BJTowner != ARCHme) continue;
|
||||
|
||||
vt = here->BJTtemp * CONSTKoverQ;
|
||||
|
||||
|
||||
m = here->BJTm;
|
||||
|
||||
if(ckt->CKTsenInfo){
|
||||
#ifdef SENSDEBUG
|
||||
printf("BJTload \n");
|
||||
|
|
@ -314,7 +314,7 @@ BJTload(inModel,ckt)
|
|||
cbhat= *(ckt->CKTstate0 + here->BJTcb)+ *(ckt->CKTstate0 +
|
||||
here->BJTgpi)*delvbe+ *(ckt->CKTstate0 + here->BJTgmu)*
|
||||
delvbc;
|
||||
|
||||
#ifndef NOBYPASS
|
||||
/*
|
||||
* bypass if solution has not changed
|
||||
*/
|
||||
|
|
@ -355,7 +355,7 @@ BJTload(inModel,ckt)
|
|||
geqbx = *(ckt->CKTstate0 + here->BJTgeqbx);
|
||||
goto load;
|
||||
}
|
||||
|
||||
#endif /*NOBYPASS*/
|
||||
/*
|
||||
* limit nonlinear branch voltages
|
||||
*/
|
||||
|
|
@ -713,8 +713,8 @@ next2:
|
|||
if(SenCond)continue;
|
||||
load:
|
||||
/*
|
||||
* load current excitation vector
|
||||
*/
|
||||
* load current excitation vector
|
||||
*/
|
||||
ceqcs=model->BJTtype * (*(ckt->CKTstate0 + here->BJTcqcs) -
|
||||
vcs * gccs);
|
||||
ceqbx=model->BJTtype * (*(ckt->CKTstate0 + here->BJTcqbx) -
|
||||
|
|
@ -723,39 +723,39 @@ load:
|
|||
(go - geqcb));
|
||||
ceqbc=model->BJTtype * (-cc + vbe * (gm + go) - vbc * (gmu + go));
|
||||
|
||||
*(ckt->CKTrhs + here->BJTbaseNode) += (-ceqbx);
|
||||
*(ckt->CKTrhs + here->BJTbaseNode) += m * (-ceqbx);
|
||||
*(ckt->CKTrhs + here->BJTcolPrimeNode) +=
|
||||
(ceqcs+ceqbx+ceqbc);
|
||||
m * (ceqcs+ceqbx+ceqbc);
|
||||
*(ckt->CKTrhs + here->BJTbasePrimeNode) +=
|
||||
(-ceqbe-ceqbc);
|
||||
*(ckt->CKTrhs + here->BJTemitPrimeNode) += (ceqbe);
|
||||
*(ckt->CKTrhs + here->BJTsubstNode) += (-ceqcs);
|
||||
m * (-ceqbe-ceqbc);
|
||||
*(ckt->CKTrhs + here->BJTemitPrimeNode) += m * (ceqbe);
|
||||
*(ckt->CKTrhs + here->BJTsubstNode) += m * (-ceqcs);
|
||||
/*
|
||||
* load y matrix
|
||||
*/
|
||||
*(here->BJTcolColPtr) += (gcpr);
|
||||
*(here->BJTbaseBasePtr) += (gx+geqbx);
|
||||
*(here->BJTemitEmitPtr) += (gepr);
|
||||
*(here->BJTcolPrimeColPrimePtr) += (gmu+go+gcpr+gccs+geqbx);
|
||||
*(here->BJTbasePrimeBasePrimePtr) += (gx +gpi+gmu+geqcb);
|
||||
*(here->BJTemitPrimeEmitPrimePtr) += (gpi+gepr+gm+go);
|
||||
*(here->BJTcolColPrimePtr) += (-gcpr);
|
||||
*(here->BJTbaseBasePrimePtr) += (-gx);
|
||||
*(here->BJTemitEmitPrimePtr) += (-gepr);
|
||||
*(here->BJTcolPrimeColPtr) += (-gcpr);
|
||||
*(here->BJTcolPrimeBasePrimePtr) += (-gmu+gm);
|
||||
*(here->BJTcolPrimeEmitPrimePtr) += (-gm-go);
|
||||
*(here->BJTbasePrimeBasePtr) += (-gx);
|
||||
*(here->BJTbasePrimeColPrimePtr) += (-gmu-geqcb);
|
||||
*(here->BJTbasePrimeEmitPrimePtr) += (-gpi);
|
||||
*(here->BJTemitPrimeEmitPtr) += (-gepr);
|
||||
*(here->BJTemitPrimeColPrimePtr) += (-go+geqcb);
|
||||
*(here->BJTemitPrimeBasePrimePtr) += (-gpi-gm-geqcb);
|
||||
*(here->BJTsubstSubstPtr) += (gccs);
|
||||
*(here->BJTcolPrimeSubstPtr) += (-gccs);
|
||||
*(here->BJTsubstColPrimePtr) += (-gccs);
|
||||
*(here->BJTbaseColPrimePtr) += (-geqbx);
|
||||
*(here->BJTcolPrimeBasePtr) += (-geqbx);
|
||||
*(here->BJTcolColPtr) += m * (gcpr);
|
||||
*(here->BJTbaseBasePtr) += m * (gx+geqbx);
|
||||
*(here->BJTemitEmitPtr) += m * (gepr);
|
||||
*(here->BJTcolPrimeColPrimePtr) += m * (gmu+go+gcpr+gccs+geqbx);
|
||||
*(here->BJTbasePrimeBasePrimePtr) += m * (gx +gpi+gmu+geqcb);
|
||||
*(here->BJTemitPrimeEmitPrimePtr) += m * (gpi+gepr+gm+go);
|
||||
*(here->BJTcolColPrimePtr) += m * (-gcpr);
|
||||
*(here->BJTbaseBasePrimePtr) += m * (-gx);
|
||||
*(here->BJTemitEmitPrimePtr) += m * (-gepr);
|
||||
*(here->BJTcolPrimeColPtr) += m * (-gcpr);
|
||||
*(here->BJTcolPrimeBasePrimePtr) += m * (-gmu+gm);
|
||||
*(here->BJTcolPrimeEmitPrimePtr) += m * (-gm-go);
|
||||
*(here->BJTbasePrimeBasePtr) += m * (-gx);
|
||||
*(here->BJTbasePrimeColPrimePtr) += m * (-gmu-geqcb);
|
||||
*(here->BJTbasePrimeEmitPrimePtr) += m * (-gpi);
|
||||
*(here->BJTemitPrimeEmitPtr) += m * (-gepr);
|
||||
*(here->BJTemitPrimeColPrimePtr) += m * (-go+geqcb);
|
||||
*(here->BJTemitPrimeBasePrimePtr) += m * (-gpi-gm-geqcb);
|
||||
*(here->BJTsubstSubstPtr) += m * (gccs);
|
||||
*(here->BJTcolPrimeSubstPtr) += m * (-gccs);
|
||||
*(here->BJTsubstColPrimePtr) += m * (-gccs);
|
||||
*(here->BJTbaseColPrimePtr) += m * (-geqbx);
|
||||
*(here->BJTcolPrimeBasePtr) += m * (-geqbx);
|
||||
}
|
||||
}
|
||||
return(OK);
|
||||
|
|
|
|||
|
|
@ -6,7 +6,6 @@ Author: 1987 Mathew Lew and Thomas L. Quarles
|
|||
*/
|
||||
|
||||
#include "ngspice.h"
|
||||
#include <stdio.h>
|
||||
#include "const.h"
|
||||
#include "ifsim.h"
|
||||
#include "cktdefs.h"
|
||||
|
|
@ -18,11 +17,7 @@ Author: 1987 Mathew Lew and Thomas L. Quarles
|
|||
|
||||
/*ARGSUSED*/
|
||||
int
|
||||
BJTmAsk(ckt,instPtr,which,value)
|
||||
CKTcircuit *ckt;
|
||||
GENmodel *instPtr;
|
||||
int which;
|
||||
IFvalue *value;
|
||||
BJTmAsk(CKTcircuit *ckt, GENmodel *instPtr, int which, IFvalue *value)
|
||||
{
|
||||
BJTmodel *here = (BJTmodel*)instPtr;
|
||||
|
||||
|
|
|
|||
|
|
@ -12,18 +12,13 @@ Author: 1985 Thomas L. Quarles
|
|||
*/
|
||||
|
||||
#include "ngspice.h"
|
||||
#include <stdio.h>
|
||||
#include "bjtdefs.h"
|
||||
#include "sperror.h"
|
||||
#include "suffix.h"
|
||||
|
||||
|
||||
int
|
||||
BJTmDelete(inModels,modname,kill)
|
||||
GENmodel **inModels;
|
||||
IFuid modname;
|
||||
GENmodel *kill;
|
||||
|
||||
BJTmDelete(GENmodel **inModels, IFuid modname, GENmodel *kill)
|
||||
{
|
||||
BJTmodel **model = (BJTmodel**)inModels;
|
||||
BJTmodel *modfast = (BJTmodel*)kill;
|
||||
|
|
|
|||
|
|
@ -11,7 +11,6 @@ Author: 1985 Thomas L. Quarles
|
|||
*/
|
||||
|
||||
#include "ngspice.h"
|
||||
#include <stdio.h>
|
||||
#include "const.h"
|
||||
#include "ifsim.h"
|
||||
#include "bjtdefs.h"
|
||||
|
|
@ -20,10 +19,7 @@ Author: 1985 Thomas L. Quarles
|
|||
|
||||
|
||||
int
|
||||
BJTmParam(param,value,inModel)
|
||||
int param;
|
||||
IFvalue *value;
|
||||
GENmodel *inModel;
|
||||
BJTmParam(int param, IFvalue *value, GENmodel *inModel)
|
||||
{
|
||||
BJTmodel *mods = (BJTmodel*)inModel;
|
||||
|
||||
|
|
|
|||
|
|
@ -4,7 +4,6 @@ Author: 1987 Gary W. Ng
|
|||
**********/
|
||||
|
||||
#include "ngspice.h"
|
||||
#include <stdio.h>
|
||||
#include "bjtdefs.h"
|
||||
#include "cktdefs.h"
|
||||
#include "iferrmsg.h"
|
||||
|
|
@ -25,13 +24,8 @@ extern void NevalSrc();
|
|||
extern double Nintegrate();
|
||||
|
||||
int
|
||||
BJTnoise (mode, operation, genmodel, ckt, data, OnDens)
|
||||
GENmodel *genmodel;
|
||||
int mode;
|
||||
int operation;
|
||||
CKTcircuit *ckt;
|
||||
Ndata *data;
|
||||
double *OnDens;
|
||||
BJTnoise (int mode, int operation, GENmodel *genmodel, CKTcircuit *ckt,
|
||||
Ndata *data, double *OnDens)
|
||||
{
|
||||
BJTmodel *firstModel = (BJTmodel *) genmodel;
|
||||
BJTmodel *model;
|
||||
|
|
@ -124,7 +118,7 @@ if (!data->namelist) return(E_NOMEM);
|
|||
case N_DENS:
|
||||
NevalSrc(&noizDens[BJTRCNOIZ],&lnNdens[BJTRCNOIZ],
|
||||
ckt,THERMNOISE,inst->BJTcolPrimeNode,inst->BJTcolNode,
|
||||
model->BJTcollectorConduct * inst->BJTarea);
|
||||
model->BJTcollectorConduct * inst->BJTarea * inst->BJTm);
|
||||
|
||||
NevalSrc(&noizDens[BJTRBNOIZ],&lnNdens[BJTRBNOIZ],
|
||||
ckt,THERMNOISE,inst->BJTbasePrimeNode,inst->BJTbaseNode,
|
||||
|
|
@ -132,20 +126,20 @@ if (!data->namelist) return(E_NOMEM);
|
|||
|
||||
NevalSrc(&noizDens[BJT_RE_NOISE],&lnNdens[BJT_RE_NOISE],
|
||||
ckt,THERMNOISE,inst->BJTemitPrimeNode,inst->BJTemitNode,
|
||||
model->BJTemitterConduct * inst->BJTarea);
|
||||
model->BJTemitterConduct * inst->BJTarea * inst-> BJTm);
|
||||
|
||||
NevalSrc(&noizDens[BJTICNOIZ],&lnNdens[BJTICNOIZ],
|
||||
ckt,SHOTNOISE,inst->BJTcolPrimeNode, inst->BJTemitPrimeNode,
|
||||
*(ckt->CKTstate0 + inst->BJTcc));
|
||||
*(ckt->CKTstate0 + inst->BJTcc) * inst->BJTm);
|
||||
|
||||
NevalSrc(&noizDens[BJTIBNOIZ],&lnNdens[BJTIBNOIZ],
|
||||
ckt,SHOTNOISE,inst->BJTbasePrimeNode, inst->BJTemitPrimeNode,
|
||||
*(ckt->CKTstate0 + inst->BJTcb));
|
||||
*(ckt->CKTstate0 + inst->BJTcb) * inst->BJTm);
|
||||
|
||||
NevalSrc(&noizDens[BJTFLNOIZ],(double*)NULL,ckt,
|
||||
N_GAIN,inst->BJTbasePrimeNode, inst->BJTemitPrimeNode,
|
||||
(double)0.0);
|
||||
noizDens[BJTFLNOIZ] *= model->BJTfNcoef *
|
||||
noizDens[BJTFLNOIZ] *= inst->BJTm * model->BJTfNcoef *
|
||||
exp(model->BJTfNexp *
|
||||
log(MAX(fabs(*(ckt->CKTstate0 + inst->BJTcb)),N_MINLOG))) /
|
||||
data->freq;
|
||||
|
|
|
|||
|
|
@ -11,7 +11,6 @@ Author: 1985 Thomas L. Quarles
|
|||
*/
|
||||
|
||||
#include "ngspice.h"
|
||||
#include <stdio.h>
|
||||
#include "const.h"
|
||||
#include "ifsim.h"
|
||||
#include "bjtdefs.h"
|
||||
|
|
@ -21,11 +20,7 @@ Author: 1985 Thomas L. Quarles
|
|||
|
||||
/* ARGSUSED */
|
||||
int
|
||||
BJTparam(param,value,instPtr,select)
|
||||
int param;
|
||||
IFvalue *value;
|
||||
GENinstance *instPtr;
|
||||
IFvalue *select;
|
||||
BJTparam(int param, IFvalue *value, GENinstance *instPtr, IFvalue *select)
|
||||
{
|
||||
BJTinstance *here = (BJTinstance*)instPtr;
|
||||
|
||||
|
|
@ -34,10 +29,18 @@ BJTparam(param,value,instPtr,select)
|
|||
here->BJTarea = value->rValue;
|
||||
here->BJTareaGiven = TRUE;
|
||||
break;
|
||||
case BJT_M:
|
||||
here->BJTm = value->rValue;
|
||||
here->BJTmGiven = TRUE;
|
||||
break;
|
||||
case BJT_TEMP:
|
||||
here->BJTtemp = value->rValue+CONSTCtoK;
|
||||
here->BJTtemp = value->rValue + CONSTCtoK;
|
||||
here->BJTtempGiven = TRUE;
|
||||
break;
|
||||
case BJT_DTEMP:
|
||||
here->BJTdtemp = value->rValue;
|
||||
here->BJTdtempGiven = TRUE;
|
||||
break;
|
||||
case BJT_OFF:
|
||||
here->BJToff = value->iValue;
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -6,7 +6,6 @@ Author: 1985 Thomas L. Quarles
|
|||
*/
|
||||
|
||||
#include "ngspice.h"
|
||||
#include <stdio.h>
|
||||
#include "cktdefs.h"
|
||||
#include "complex.h"
|
||||
#include "bjtdefs.h"
|
||||
|
|
@ -15,11 +14,7 @@ Author: 1985 Thomas L. Quarles
|
|||
|
||||
|
||||
int
|
||||
BJTpzLoad(inModel,ckt,s)
|
||||
GENmodel *inModel;
|
||||
CKTcircuit *ckt;
|
||||
SPcomplex *s;
|
||||
|
||||
BJTpzLoad(GENmodel *inModel, CKTcircuit *ckt, SPcomplex *s)
|
||||
{
|
||||
BJTmodel *model = (BJTmodel*)inModel;
|
||||
BJTinstance *here;
|
||||
|
|
@ -36,12 +31,15 @@ BJTpzLoad(inModel,ckt,s)
|
|||
double xcbx;
|
||||
double xccs;
|
||||
double xcmcb;
|
||||
double m;
|
||||
|
||||
for( ; model != NULL; model = model->BJTnextModel) {
|
||||
for( here = model->BJTinstances; here!= NULL;
|
||||
here = here->BJTnextInstance) {
|
||||
if (here->BJTowner != ARCHme) continue;
|
||||
|
||||
m = here->BJTm;
|
||||
|
||||
gcpr=model->BJTcollectorResist * here->BJTarea;
|
||||
gepr=model->BJTemitterResist * here->BJTarea;
|
||||
gpi= *(ckt->CKTstate0 + here->BJTgpi);
|
||||
|
|
@ -55,62 +53,63 @@ BJTpzLoad(inModel,ckt,s)
|
|||
xcbx= *(ckt->CKTstate0 + here->BJTcqbx);
|
||||
xccs= *(ckt->CKTstate0 + here->BJTcqcs);
|
||||
xcmcb= *(ckt->CKTstate0 + here->BJTcexbc);
|
||||
*(here->BJTcolColPtr) += (gcpr);
|
||||
*(here->BJTbaseBasePtr) += (gx) + (xcbx) * (s->real);
|
||||
*(here->BJTbaseBasePtr + 1) += (xcbx) * (s->imag);
|
||||
*(here->BJTemitEmitPtr) += (gepr);
|
||||
*(here->BJTcolPrimeColPrimePtr) += (gmu+go+gcpr)
|
||||
+ (xcmu+xccs+xcbx) * (s->real);
|
||||
*(here->BJTcolPrimeColPrimePtr + 1) += (xcmu+xccs+xcbx)
|
||||
* (s->imag);
|
||||
*(here->BJTbasePrimeBasePrimePtr) += (gx+gpi+gmu)
|
||||
+ (xcpi+xcmu+xcmcb) * (s->real);
|
||||
*(here->BJTbasePrimeBasePrimePtr + 1) += (xcpi+xcmu+xcmcb)
|
||||
* (s->imag);
|
||||
*(here->BJTemitPrimeEmitPrimePtr) += (gpi+gepr+gm+go)
|
||||
+ (xcpi+xgm) * (s->real);
|
||||
*(here->BJTemitPrimeEmitPrimePtr + 1) += (xcpi+xgm)
|
||||
* (s->imag);
|
||||
*(here->BJTcolColPrimePtr) += (-gcpr);
|
||||
*(here->BJTbaseBasePrimePtr) += (-gx);
|
||||
*(here->BJTemitEmitPrimePtr) += (-gepr);
|
||||
*(here->BJTcolPrimeColPtr) += (-gcpr);
|
||||
*(here->BJTcolPrimeBasePrimePtr) += (-gmu+gm)
|
||||
+ (-xcmu+xgm) * (s->real);
|
||||
*(here->BJTcolPrimeBasePrimePtr + 1) += (-xcmu+xgm)
|
||||
* (s->imag);
|
||||
*(here->BJTcolPrimeEmitPrimePtr) += (-gm-go)
|
||||
+ (-xgm) * (s->real);
|
||||
*(here->BJTcolPrimeEmitPrimePtr + 1) += (-xgm) *
|
||||
(s->imag);
|
||||
*(here->BJTbasePrimeBasePtr) += (-gx);
|
||||
*(here->BJTbasePrimeColPrimePtr) += (-gmu)
|
||||
+ (-xcmu-xcmcb) * (s->real);
|
||||
*(here->BJTbasePrimeColPrimePtr + 1) += (-xcmu-xcmcb)
|
||||
* (s->imag);
|
||||
*(here->BJTbasePrimeEmitPrimePtr) += (-gpi)
|
||||
+ (-xcpi) * (s->real);
|
||||
*(here->BJTbasePrimeEmitPrimePtr + 1) += (-xcpi)
|
||||
* (s->imag);
|
||||
*(here->BJTemitPrimeEmitPtr) += (-gepr);
|
||||
*(here->BJTemitPrimeColPrimePtr) += (-go)
|
||||
+ (xcmcb) * (s->real);
|
||||
*(here->BJTemitPrimeColPrimePtr + 1) += (xcmcb)
|
||||
* (s->imag);
|
||||
*(here->BJTemitPrimeBasePrimePtr) += (-gpi-gm)
|
||||
+ (-xcpi-xgm-xcmcb) * (s->real);
|
||||
*(here->BJTemitPrimeBasePrimePtr + 1) += (-xcpi-xgm-xcmcb)
|
||||
* (s->imag);
|
||||
*(here->BJTsubstSubstPtr) += (xccs) * (s->real);
|
||||
*(here->BJTsubstSubstPtr + 1) += (xccs) * (s->imag);
|
||||
*(here->BJTcolPrimeSubstPtr) += (-xccs) * (s->real);
|
||||
*(here->BJTcolPrimeSubstPtr + 1) += (-xccs) * (s->imag);
|
||||
*(here->BJTsubstColPrimePtr) += (-xccs) * (s->real);
|
||||
*(here->BJTsubstColPrimePtr + 1) += (-xccs) * (s->imag);
|
||||
*(here->BJTbaseColPrimePtr) += (-xcbx) * (s->real);
|
||||
*(here->BJTbaseColPrimePtr + 1) += (-xcbx) * (s->imag);
|
||||
*(here->BJTcolPrimeBasePtr) += (-xcbx) * (s->real);
|
||||
*(here->BJTcolPrimeBasePtr + 1) += (-xcbx) * (s->imag);
|
||||
|
||||
*(here->BJTcolColPtr) += m * (gcpr);
|
||||
*(here->BJTbaseBasePtr) += m * ((gx) + (xcbx) * (s->real));
|
||||
*(here->BJTbaseBasePtr + 1) += m * ((xcbx) * (s->imag));
|
||||
*(here->BJTemitEmitPtr) += m * (gepr);
|
||||
*(here->BJTcolPrimeColPrimePtr) += m * ((gmu+go+gcpr)
|
||||
+ (xcmu+xccs+xcbx) * (s->real));
|
||||
*(here->BJTcolPrimeColPrimePtr + 1) += m * ((xcmu+xccs+xcbx)
|
||||
* (s->imag));
|
||||
*(here->BJTbasePrimeBasePrimePtr) += m * ((gx+gpi+gmu)
|
||||
+ (xcpi+xcmu+xcmcb) * (s->real));
|
||||
*(here->BJTbasePrimeBasePrimePtr + 1) += m * ((xcpi+xcmu+xcmcb)
|
||||
* (s->imag));
|
||||
*(here->BJTemitPrimeEmitPrimePtr) += m * ((gpi+gepr+gm+go)
|
||||
+ (xcpi+xgm) * (s->real));
|
||||
*(here->BJTemitPrimeEmitPrimePtr + 1) += m * ((xcpi+xgm)
|
||||
* (s->imag));
|
||||
*(here->BJTcolColPrimePtr) += m * (-gcpr);
|
||||
*(here->BJTbaseBasePrimePtr) += m * (-gx);
|
||||
*(here->BJTemitEmitPrimePtr) += m * (-gepr);
|
||||
*(here->BJTcolPrimeColPtr) += m * (-gcpr);
|
||||
*(here->BJTcolPrimeBasePrimePtr) += m * ((-gmu+gm)
|
||||
+ (-xcmu+xgm) * (s->real));
|
||||
*(here->BJTcolPrimeBasePrimePtr + 1) += m * ((-xcmu+xgm)
|
||||
* (s->imag));
|
||||
*(here->BJTcolPrimeEmitPrimePtr) += m * ((-gm-go)
|
||||
+ (-xgm) * (s->real));
|
||||
*(here->BJTcolPrimeEmitPrimePtr + 1) += m * ((-xgm) *
|
||||
(s->imag));
|
||||
*(here->BJTbasePrimeBasePtr) += m * (-gx);
|
||||
*(here->BJTbasePrimeColPrimePtr) += m * ((-gmu)
|
||||
+ (-xcmu-xcmcb) * (s->real));
|
||||
*(here->BJTbasePrimeColPrimePtr + 1) += m * ((-xcmu-xcmcb)
|
||||
* (s->imag));
|
||||
*(here->BJTbasePrimeEmitPrimePtr) += m * ((-gpi)
|
||||
+ (-xcpi) * (s->real));
|
||||
*(here->BJTbasePrimeEmitPrimePtr + 1) += m * ((-xcpi)
|
||||
* (s->imag));
|
||||
*(here->BJTemitPrimeEmitPtr) += m * (-gepr);
|
||||
*(here->BJTemitPrimeColPrimePtr) += m * ((-go)
|
||||
+ (xcmcb) * (s->real));
|
||||
*(here->BJTemitPrimeColPrimePtr + 1) += m * ((xcmcb)
|
||||
* (s->imag));
|
||||
*(here->BJTemitPrimeBasePrimePtr) += m * ((-gpi-gm)
|
||||
+ (-xcpi-xgm-xcmcb) * (s->real));
|
||||
*(here->BJTemitPrimeBasePrimePtr + 1) += m * ((-xcpi-xgm-xcmcb)
|
||||
* (s->imag));
|
||||
*(here->BJTsubstSubstPtr) += m * ((xccs) * (s->real));
|
||||
*(here->BJTsubstSubstPtr + 1) += m * ((xccs) * (s->imag));
|
||||
*(here->BJTcolPrimeSubstPtr) += m * ((-xccs) * (s->real));
|
||||
*(here->BJTcolPrimeSubstPtr + 1) += m * ((-xccs) * (s->imag));
|
||||
*(here->BJTsubstColPrimePtr) += m * ((-xccs) * (s->real));
|
||||
*(here->BJTsubstColPrimePtr + 1) += m * ((-xccs) * (s->imag));
|
||||
*(here->BJTbaseColPrimePtr) += m * ((-xcbx) * (s->real));
|
||||
*(here->BJTbaseColPrimePtr + 1) += m * ((-xcbx) * (s->imag));
|
||||
*(here->BJTcolPrimeBasePtr) += m * ((-xcbx) * (s->real));
|
||||
*(here->BJTcolPrimeBasePtr + 1) += m * ((-xcbx) * (s->imag));
|
||||
}
|
||||
}
|
||||
return(OK);
|
||||
|
|
|
|||
|
|
@ -1,6 +1,8 @@
|
|||
/**********
|
||||
Copyright 1990 Regents of the University of California. All rights reserved.
|
||||
Author: 1985 Thomas L. Quarles
|
||||
|
||||
This function is obsolete (was used by an old sensitivity analysis)
|
||||
**********/
|
||||
|
||||
/* actually load the current ac sensitivity
|
||||
|
|
@ -8,7 +10,6 @@ Author: 1985 Thomas L. Quarles
|
|||
*/
|
||||
|
||||
#include "ngspice.h"
|
||||
#include <stdio.h>
|
||||
#include "cktdefs.h"
|
||||
#include "smpdefs.h"
|
||||
#include "bjtdefs.h"
|
||||
|
|
@ -19,10 +20,7 @@ Author: 1985 Thomas L. Quarles
|
|||
|
||||
|
||||
int
|
||||
BJTsAcLoad(inModel,ckt)
|
||||
GENmodel *inModel;
|
||||
CKTcircuit *ckt;
|
||||
|
||||
BJTsAcLoad(GENmodel *inModel, CKTcircuit *ckt)
|
||||
{
|
||||
|
||||
BJTmodel *model = (BJTmodel*)inModel;
|
||||
|
|
|
|||
|
|
@ -12,7 +12,6 @@ Modified: 2000 AlansFixes
|
|||
*/
|
||||
|
||||
#include "ngspice.h"
|
||||
#include <stdio.h>
|
||||
#include "cktdefs.h"
|
||||
#include "smpdefs.h"
|
||||
#include "bjtdefs.h"
|
||||
|
|
@ -22,15 +21,10 @@ Modified: 2000 AlansFixes
|
|||
#include "suffix.h"
|
||||
|
||||
int
|
||||
BJTsetup(matrix,inModel,ckt,states)
|
||||
SMPmatrix *matrix;
|
||||
GENmodel *inModel;
|
||||
CKTcircuit *ckt;
|
||||
int *states;
|
||||
/* load the BJT structure with those pointers needed later
|
||||
* for fast matrix loading
|
||||
*/
|
||||
|
||||
BJTsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states)
|
||||
/* load the BJT structure with those pointers needed later
|
||||
* for fast matrix loading
|
||||
*/
|
||||
{
|
||||
BJTmodel *model = (BJTmodel*)inModel;
|
||||
BJTinstance *here;
|
||||
|
|
@ -158,6 +152,11 @@ BJTsetup(matrix,inModel,ckt,states)
|
|||
if(!here->BJTareaGiven) {
|
||||
here->BJTarea = 1;
|
||||
}
|
||||
|
||||
if(!here->BJTmGiven) {
|
||||
here->BJTm = 1.0;
|
||||
}
|
||||
|
||||
here->BJTstate = *states;
|
||||
*states += BJTnumStates;
|
||||
if(ckt->CKTsenInfo && (ckt->CKTsenInfo->SENmode & TRANSEN) ){
|
||||
|
|
|
|||
|
|
@ -1,6 +1,8 @@
|
|||
/**********
|
||||
Copyright 1990 Regents of the University of California. All rights reserved.
|
||||
Author: 1985 Thomas L. Quarles
|
||||
|
||||
This function is obsolete (was used by an old sensitivity analysis)
|
||||
**********/
|
||||
|
||||
/* actually load the current sensitivity
|
||||
|
|
@ -8,7 +10,6 @@ Author: 1985 Thomas L. Quarles
|
|||
*/
|
||||
|
||||
#include "ngspice.h"
|
||||
#include <stdio.h>
|
||||
#include "cktdefs.h"
|
||||
#include "smpdefs.h"
|
||||
#include "bjtdefs.h"
|
||||
|
|
@ -19,9 +20,7 @@ Author: 1985 Thomas L. Quarles
|
|||
|
||||
|
||||
int
|
||||
BJTsLoad(inModel,ckt)
|
||||
GENmodel *inModel;
|
||||
CKTcircuit *ckt;
|
||||
BJTsLoad(GENmodel *inModel, CKTcircuit *ckt)
|
||||
{
|
||||
BJTmodel *model = (BJTmodel*)inModel;
|
||||
BJTinstance *here;
|
||||
|
|
|
|||
|
|
@ -1,6 +1,8 @@
|
|||
/**********
|
||||
Copyright 1990 Regents of the University of California. All rights reserved.
|
||||
Author: 1985 Thomas L. Quarles
|
||||
|
||||
This function is obsolete (was used by an old sensitivity analysis)
|
||||
**********/
|
||||
|
||||
/* Pretty print the sensitivity info for all
|
||||
|
|
@ -8,7 +10,6 @@ Author: 1985 Thomas L. Quarles
|
|||
*/
|
||||
|
||||
#include "ngspice.h"
|
||||
#include <stdio.h>
|
||||
#include "cktdefs.h"
|
||||
#include "smpdefs.h"
|
||||
#include "bjtdefs.h"
|
||||
|
|
@ -19,10 +20,7 @@ Author: 1985 Thomas L. Quarles
|
|||
|
||||
|
||||
void
|
||||
BJTsPrint(inModel,ckt)
|
||||
|
||||
CKTcircuit *ckt;
|
||||
GENmodel *inModel;
|
||||
BJTsPrint(GENmodel *inModel, CKTcircuit *ckt)
|
||||
{
|
||||
BJTmodel *model = (BJTmodel*)inModel;
|
||||
BJTinstance *here;
|
||||
|
|
|
|||
|
|
@ -1,6 +1,8 @@
|
|||
/**********
|
||||
Copyright 1990 Regents of the University of California. All rights reserved.
|
||||
Author: 1985 Thomas L. Quarles
|
||||
|
||||
This function is obsolete (was used by an old sensitivity analysis)
|
||||
**********/
|
||||
|
||||
/* loop through all the devices and
|
||||
|
|
@ -8,7 +10,6 @@ Author: 1985 Thomas L. Quarles
|
|||
*/
|
||||
|
||||
#include "ngspice.h"
|
||||
#include <stdio.h>
|
||||
#include "cktdefs.h"
|
||||
#include "smpdefs.h"
|
||||
#include "bjtdefs.h"
|
||||
|
|
@ -19,9 +20,7 @@ Author: 1985 Thomas L. Quarles
|
|||
|
||||
|
||||
int
|
||||
BJTsSetup(info,inModel)
|
||||
SENstruct *info;
|
||||
GENmodel *inModel;
|
||||
BJTsSetup(SENstruct *info, GENmodel *inModel)
|
||||
{
|
||||
BJTmodel *model = (BJTmodel*)inModel;
|
||||
BJTinstance *here;
|
||||
|
|
|
|||
|
|
@ -1,12 +1,13 @@
|
|||
/**********
|
||||
Copyright 1990 Regents of the University of California. All rights reserved.
|
||||
Author: 1985 Thomas L. Quarles
|
||||
|
||||
This function is obsolete (was used by an old sensitivity analysis)
|
||||
**********/
|
||||
|
||||
/* update the charge sensitivities and their derivatives */
|
||||
|
||||
#include "ngspice.h"
|
||||
#include <stdio.h>
|
||||
#include "cktdefs.h"
|
||||
#include "smpdefs.h"
|
||||
#include "bjtdefs.h"
|
||||
|
|
@ -17,9 +18,7 @@ Author: 1985 Thomas L. Quarles
|
|||
|
||||
|
||||
int
|
||||
BJTsUpdate(inModel,ckt)
|
||||
GENmodel *inModel;
|
||||
CKTcircuit *ckt;
|
||||
BJTsUpdate(GENmodel *inModel, CKTcircuit *ckt)
|
||||
{
|
||||
BJTmodel *model = (BJTmodel*)inModel;
|
||||
BJTinstance *here;
|
||||
|
|
|
|||
|
|
@ -5,7 +5,6 @@ Modified: 2000 AlansFixes
|
|||
**********/
|
||||
|
||||
#include "ngspice.h"
|
||||
#include <stdio.h>
|
||||
#include "cktdefs.h"
|
||||
#include "smpdefs.h"
|
||||
#include "bjtdefs.h"
|
||||
|
|
@ -17,11 +16,9 @@ Modified: 2000 AlansFixes
|
|||
|
||||
/* ARGSUSED */
|
||||
int
|
||||
BJTtemp(inModel,ckt)
|
||||
GENmodel *inModel;
|
||||
CKTcircuit *ckt;
|
||||
BJTtemp(GENmodel *inModel, CKTcircuit *ckt)
|
||||
/* Pre-compute many useful parameters
|
||||
*/
|
||||
*/
|
||||
|
||||
{
|
||||
BJTmodel *model = (BJTmodel *)inModel;
|
||||
|
|
@ -135,7 +132,7 @@ BJTtemp(inModel,ckt)
|
|||
here=here->BJTnextInstance) {
|
||||
if (here->BJTowner != ARCHme) continue;
|
||||
|
||||
if(!here->BJTtempGiven) here->BJTtemp = ckt->CKTtemp;
|
||||
if(!here->BJTtempGiven) here->BJTtemp = ckt->CKTtemp + here->BJTdtemp;
|
||||
vt = here->BJTtemp * CONSTKoverQ;
|
||||
fact2 = here->BJTtemp/REFTEMP;
|
||||
egfet = 1.16-(7.02e-4*here->BJTtemp*here->BJTtemp)/
|
||||
|
|
|
|||
|
|
@ -11,7 +11,6 @@ Author: 1985 Thomas L. Quarles
|
|||
*/
|
||||
|
||||
#include "ngspice.h"
|
||||
#include <stdio.h>
|
||||
#include "cktdefs.h"
|
||||
#include "bjtdefs.h"
|
||||
#include "sperror.h"
|
||||
|
|
@ -19,10 +18,7 @@ Author: 1985 Thomas L. Quarles
|
|||
|
||||
|
||||
int
|
||||
BJTtrunc(inModel,ckt,timeStep)
|
||||
GENmodel *inModel;
|
||||
CKTcircuit *ckt;
|
||||
double *timeStep;
|
||||
BJTtrunc(GENmodel *inModel, CKTcircuit *ckt, double *timeStep)
|
||||
|
||||
{
|
||||
BJTmodel *model = (BJTmodel*)inModel;
|
||||
|
|
|
|||
Loading…
Reference in New Issue