Completed "m" support and fixed some bug introduced in the previous commit.

This commit is contained in:
pnenzi 2003-10-29 08:11:54 +00:00
parent ea26a7f6ff
commit e936ee783c
14 changed files with 162 additions and 111 deletions

View File

@ -19,7 +19,7 @@ IFparm BJT2pTable[] = { /* parameters */
IOPAU("icvbe", BJT2_IC_VBE, IF_REAL, "Initial B-E voltage"),
IOPAU("icvce", BJT2_IC_VCE, IF_REAL, "Initial C-E voltage"),
IOPU("area", BJT2_AREA, IF_REAL, "Area factor"),
IOPU("m", BJT_M, IF_REAL, "Parallel Multiplier"),
IOPU("m", BJT2_M, IF_REAL, "Parallel Multiplier"),
IP("ic", BJT2_IC, IF_REALVEC, "Initial condition vector"),
IP("sens_area",BJT2_AREA_SENS,IF_FLAG, "flag to request sensitivity WRT area"),
OPU("colnode", BJT2_QUEST_COLNODE, IF_INTEGER, "Number of collector node"),
@ -70,7 +70,7 @@ IFparm BJT2pTable[] = { /* parameters */
OPU("sens_ph", BJT2_QUEST_SENS_PH, IF_REAL, "sensitivity of ac phase"),
OPU("sens_cplx", BJT2_QUEST_SENS_CPLX, IF_COMPLEX, "ac sensitivity"),
IOPU("temp", BJT2_TEMP, IF_REAL, "instance temperature"),
IOPU("dtemp", BJT_DTEMP, IF_REAL, "instance temperature delta from circuit")
IOPU("dtemp", BJT2_DTEMP, IF_REAL, "instance temperature delta from circuit")
};
IFparm BJT2mPTable[] = { /* model parameters */

View File

@ -88,6 +88,7 @@ BJT2ask(CKTcircuit *ckt, GENinstance *instPtr, int which, IFvalue *value,
return(OK);
case BJT2_QUEST_CC:
value->rValue = *(ckt->CKTstate0 + here->BJT2cc);
value->rValue *= here->BJT2m;
return(OK);
case BJT2_QUEST_CB:
value->rValue = *(ckt->CKTstate0 + here->BJT2cb);
@ -98,60 +99,79 @@ BJT2ask(CKTcircuit *ckt, GENinstance *instPtr, int which, IFvalue *value,
value->rValue -= *(ckt->CKTstate0 + here->BJT2cqsub);
}
};
value->rValue *= here->BJT2m;
return(OK);
case BJT2_QUEST_GPI:
value->rValue = *(ckt->CKTstate0 + here->BJT2gpi);
value->rValue *= here->BJT2m;
return(OK);
case BJT2_QUEST_GMU:
value->rValue = *(ckt->CKTstate0 + here->BJT2gmu);
value->rValue *= here->BJT2m;
return(OK);
case BJT2_QUEST_GM:
value->rValue = *(ckt->CKTstate0 + here->BJT2gm);
value->rValue *= here->BJT2m;
return(OK);
case BJT2_QUEST_GO:
value->rValue = *(ckt->CKTstate0 + here->BJT2go);
value->rValue *= here->BJT2m;
return(OK);
case BJT2_QUEST_QBE:
value->rValue = *(ckt->CKTstate0 + here->BJT2qbe);
value->rValue *= here->BJT2m;
return(OK);
case BJT2_QUEST_CQBE:
value->rValue = *(ckt->CKTstate0 + here->BJT2cqbe);
value->rValue *= here->BJT2m;
return(OK);
case BJT2_QUEST_QBC:
value->rValue = *(ckt->CKTstate0 + here->BJT2qbc);
value->rValue *= here->BJT2m;
return(OK);
case BJT2_QUEST_CQBC:
value->rValue = *(ckt->CKTstate0 + here->BJT2cqbc);
value->rValue *= here->BJT2m;
return(OK);
case BJT2_QUEST_QSUB:
value->rValue = *(ckt->CKTstate0 + here->BJT2qsub);
value->rValue *= here->BJT2m;
return(OK);
case BJT2_QUEST_CQSUB:
value->rValue = *(ckt->CKTstate0 + here->BJT2cqsub);
value->rValue *= here->BJT2m;
return(OK);
case BJT2_QUEST_QBX:
value->rValue = *(ckt->CKTstate0 + here->BJT2qbx);
value->rValue *= here->BJT2m;
return(OK);
case BJT2_QUEST_CQBX:
value->rValue = *(ckt->CKTstate0 + here->BJT2cqbx);
value->rValue *= here->BJT2m;
return(OK);
case BJT2_QUEST_GX:
value->rValue = *(ckt->CKTstate0 + here->BJT2gx);
value->rValue *= here->BJT2m;
return(OK);
case BJT2_QUEST_CEXBC:
value->rValue = *(ckt->CKTstate0 + here->BJT2cexbc);
value->rValue *= here->BJT2m;
return(OK);
case BJT2_QUEST_GEQCB:
value->rValue = *(ckt->CKTstate0 + here->BJT2geqcb);
value->rValue *= here->BJT2m;
return(OK);
case BJT2_QUEST_GCSUB:
value->rValue = *(ckt->CKTstate0 + here->BJT2gcsub);
value->rValue *= here->BJT2m;
return(OK);
case BJT2_QUEST_GDSUB:
value->rValue = *(ckt->CKTstate0 + here->BJT2gdsub);
value->rValue *= here->BJT2m;
return(OK);
case BJT2_QUEST_GEQBX:
value->rValue = *(ckt->CKTstate0 + here->BJT2geqbx);
value->rValue *= here->BJT2m;
return(OK);
case BJT2_QUEST_SENS_DC:
if(ckt->CKTsenInfo){
@ -229,6 +249,7 @@ BJT2ask(CKTcircuit *ckt, GENinstance *instPtr, int which, IFvalue *value,
(*(ckt->CKTstate0 + here->BJT2cqsub) +
*(ckt->CKTstate0 + here->BJT2cdsub)));
}
value->rValue *= here->BJT2m;
return(OK);
case BJT2_QUEST_CE :
if (ckt->CKTcurrentAnalysis & DOING_AC) {
@ -247,6 +268,7 @@ BJT2ask(CKTcircuit *ckt, GENinstance *instPtr, int which, IFvalue *value,
}
}
}
value->rValue *= here->BJT2m;
return(OK);
case BJT2_QUEST_POWER :
if (ckt->CKTcurrentAnalysis & DOING_AC) {
@ -274,18 +296,23 @@ BJT2ask(CKTcircuit *ckt, GENinstance *instPtr, int which, IFvalue *value,
*(ckt->CKTrhsOld + here->BJT2substNode));
}
}
value->rValue *= here->BJT2m;
return(OK);
case BJT2_QUEST_CPI:
value->rValue = here->BJT2capbe;
value->rValue *= here->BJT2m;
return(OK);
case BJT2_QUEST_CMU:
value->rValue = here->BJT2capbc;
value->rValue *= here->BJT2m;
return(OK);
case BJT2_QUEST_CBX:
value->rValue = here->BJT2capbx;
value->rValue *= here->BJT2m;
return(OK);
case BJT2_QUEST_CSUB:
value->rValue = here->BJT2capsub;
value->rValue *= here->BJT2m;
return(OK);
default:
return(E_BADPARM);

View File

@ -37,11 +37,11 @@ typedef struct sBJT2instance {
* or collector prime depending on whether *
* the device is VERTICAL or LATERAL */
double BJT2area; /* area factor for the bjt2 */
double BJTm; /* parallel multiplier */
double BJT2m; /* parallel multiplier */
double BJT2icVBE; /* initial condition voltage B-E*/
double BJT2icVCE; /* initial condition voltage C-E*/
double BJT2temp; /* instance temperature */
double BJTdtemp; /* instance delta temperature from circuit */
double BJT2dtemp; /* instance delta temperature from circuit */
double BJT2tSatCur; /* temperature adjusted saturation current */
double BJT2tSubSatCur; /* temperature adjusted subst. saturation current */
double BJT2tEmitterConduct; /* emitter conductance */

View File

@ -155,16 +155,16 @@ for( ; model != NULL; model = model->BJT2nextModel ) {
/*
* dc model paramters
*/
csat=here->BJT2tSatCur*here->BJT2area;
rbpr=model->BJT2minBaseResist/here->BJT2area;
rbpi=model->BJT2baseResist/here->BJT2area-rbpr;
oik=model->BJT2invRollOffF/here->BJT2area;
c2=here->BJT2tBEleakCur*here->BJT2area;
csat=here->BJT2tSatCur*here->BJT2area * here->BJT2m;
rbpr=model->BJT2minBaseResist/(here->BJT2area * here->BJT2m);
rbpi=model->BJT2baseResist/(here->BJT2area * here->BJT2m) - rbpr;
oik=model->BJT2invRollOffF/(here->BJT2area * here->BJT2m);
c2=here->BJT2tBEleakCur*here->BJT2area * here->BJT2m;
vte=model->BJT2leakBEemissionCoeff*vt;
oikr=model->BJT2invRollOffR/here->BJT2area;
c4=here->BJT2tBCleakCur*here->BJT2area;
oikr=model->BJT2invRollOffR/(here->BJT2area * here->BJT2m);
c4=here->BJT2tBCleakCur*here->BJT2area * here->BJT2m;
vtc=model->BJT2leakBCemissionCoeff*vt;
xjrb=model->BJT2baseCurrentHalfResist*here->BJT2area;
xjrb=model->BJT2baseCurrentHalfResist*here->BJT2area * here->BJT2m;
/*
@ -481,22 +481,22 @@ d_ibb.d3_r3 = 6.0*gbb3;
*/
tf=model->BJT2transitTimeF;
tr=model->BJT2transitTimeR;
czbe=here->BJT2tBEcap*here->BJT2area;
czbe=here->BJT2tBEcap*here->BJT2area * here->BJT2m;
pe=here->BJT2tBEpot;
xme=model->BJT2junctionExpBE;
cdis=model->BJT2baseFractionBCcap;
ctot=here->BJT2tBCcap*here->BJT2area;
ctot=here->BJT2tBCcap*here->BJT2area * here->BJT2m;
czbc=ctot*cdis;
czbx=ctot-czbc;
pc=here->BJT2tBCpot;
xmc=model->BJT2junctionExpBC;
fcpe=here->BJT2tDepCap;
czcs=model->BJT2capSub*here->BJT2area; /* PN */
czcs=model->BJT2capSub*here->BJT2area * here->BJT2m; /* PN */
ps=model->BJT2potentialSubstrate;
xms=model->BJT2exponentialSubstrate;
xtf=model->BJT2transitTimeBiasCoeffF;
ovtf=model->BJT2transitTimeVBCFactor;
xjtf=model->BJT2transitTimeHighCurrentF*here->BJT2area;
xjtf=model->BJT2transitTimeHighCurrentF*here->BJT2area * here->BJT2m;
if(tf != 0 && vbe >0) {
EqualDeriv(&d_cbe, &d_p);
d_cbe.value = cbe;

View File

@ -134,6 +134,8 @@ BJT2load(GENmodel *inModel, CKTcircuit *ckt)
int ichk1;
int error;
int SenCond=0;
double m;
/* loop through all the models */
for( ; model != NULL; model = model->BJT2nextModel ) {
@ -738,6 +740,7 @@ next2:
if(SenCond)continue;
load:
m = here->BJT2m;
/*
* load current excitation vector
*/
@ -754,42 +757,42 @@ load:
(go - geqcb));
ceqbc=model->BJT2type * (-cc + vbe * (gm + go) - vbc * (gmu + go));
*(ckt->CKTrhs + here->BJT2baseNode) += (-ceqbx);
*(ckt->CKTrhs + here->BJT2baseNode) += m * (-ceqbx);
*(ckt->CKTrhs + here->BJT2colPrimeNode) +=
(ceqbx+ceqbc);
*(ckt->CKTrhs + here->BJT2substConNode) += ceqsub;
m * (ceqbx+ceqbc);
*(ckt->CKTrhs + here->BJT2substConNode) += m * ceqsub;
*(ckt->CKTrhs + here->BJT2basePrimeNode) +=
(-ceqbe-ceqbc);
*(ckt->CKTrhs + here->BJT2emitPrimeNode) += (ceqbe);
*(ckt->CKTrhs + here->BJT2substNode) += (-ceqsub);
m * (-ceqbe-ceqbc);
*(ckt->CKTrhs + here->BJT2emitPrimeNode) += m * (ceqbe);
*(ckt->CKTrhs + here->BJT2substNode) += m * (-ceqsub);
/*
* load y matrix
*/
*(here->BJT2colColPtr) += (gcpr);
*(here->BJT2baseBasePtr) += (gx+geqbx);
*(here->BJT2emitEmitPtr) += (gepr);
*(here->BJT2colPrimeColPrimePtr) += (gmu+go+gcpr+geqbx);
*(here->BJT2substConSubstConPtr) += (geqsub);
*(here->BJT2basePrimeBasePrimePtr) += (gx +gpi+gmu+geqcb);
*(here->BJT2emitPrimeEmitPrimePtr) += (gpi+gepr+gm+go);
*(here->BJT2colColPrimePtr) += (-gcpr);
*(here->BJT2baseBasePrimePtr) += (-gx);
*(here->BJT2emitEmitPrimePtr) += (-gepr);
*(here->BJT2colPrimeColPtr) += (-gcpr);
*(here->BJT2colPrimeBasePrimePtr) += (-gmu+gm);
*(here->BJT2colPrimeEmitPrimePtr) += (-gm-go);
*(here->BJT2basePrimeBasePtr) += (-gx);
*(here->BJT2basePrimeColPrimePtr) += (-gmu-geqcb);
*(here->BJT2basePrimeEmitPrimePtr) += (-gpi);
*(here->BJT2emitPrimeEmitPtr) += (-gepr);
*(here->BJT2emitPrimeColPrimePtr) += (-go+geqcb);
*(here->BJT2emitPrimeBasePrimePtr) += (-gpi-gm-geqcb);
*(here->BJT2substSubstPtr) += (geqsub);
*(here->BJT2substConSubstPtr) += (-geqsub);
*(here->BJT2substSubstConPtr) += (-geqsub);
*(here->BJT2baseColPrimePtr) += (-geqbx);
*(here->BJT2colPrimeBasePtr) += (-geqbx);
*(here->BJT2colColPtr) += m * (gcpr);
*(here->BJT2baseBasePtr) += m * (gx+geqbx);
*(here->BJT2emitEmitPtr) += m * (gepr);
*(here->BJT2colPrimeColPrimePtr) += m * (gmu+go+gcpr+geqbx);
*(here->BJT2substConSubstConPtr) += m * (geqsub);
*(here->BJT2basePrimeBasePrimePtr) += m * (gx +gpi+gmu+geqcb);
*(here->BJT2emitPrimeEmitPrimePtr) += m * (gpi+gepr+gm+go);
*(here->BJT2colColPrimePtr) += m * (-gcpr);
*(here->BJT2baseBasePrimePtr) += m * (-gx);
*(here->BJT2emitEmitPrimePtr) += m * (-gepr);
*(here->BJT2colPrimeColPtr) += m * (-gcpr);
*(here->BJT2colPrimeBasePrimePtr) += m * (-gmu+gm);
*(here->BJT2colPrimeEmitPrimePtr) += m * (-gm-go);
*(here->BJT2basePrimeBasePtr) += m * (-gx);
*(here->BJT2basePrimeColPrimePtr) += m * (-gmu-geqcb);
*(here->BJT2basePrimeEmitPrimePtr) += m * (-gpi);
*(here->BJT2emitPrimeEmitPtr) += m * (-gepr);
*(here->BJT2emitPrimeColPrimePtr) += m * (-go+geqcb);
*(here->BJT2emitPrimeBasePrimePtr) += m * (-gpi-gm-geqcb);
*(here->BJT2substSubstPtr) += m * (geqsub);
*(here->BJT2substConSubstPtr) += m * (-geqsub);
*(here->BJT2substSubstConPtr) += m * (-geqsub);
*(here->BJT2baseColPrimePtr) += m * (-geqbx);
*(here->BJT2colPrimeBasePtr) += m * (-geqbx);
}
}
return(OK);

View File

@ -117,28 +117,28 @@ if (!data->namelist) return(E_NOMEM);
case N_DENS:
NevalSrc(&noizDens[BJT2RCNOIZ],&lnNdens[BJT2RCNOIZ],
ckt,THERMNOISE,inst->BJT2colPrimeNode,inst->BJT2colNode,
model->BJT2collectorConduct * inst->BJT2area);
model->BJT2collectorConduct * inst->BJT2area * inst->BJT2m);
NevalSrc(&noizDens[BJT2RBNOIZ],&lnNdens[BJT2RBNOIZ],
ckt,THERMNOISE,inst->BJT2basePrimeNode,inst->BJT2baseNode,
*(ckt->CKTstate0 + inst->BJT2gx));
*(ckt->CKTstate0 + inst->BJT2gx) * inst->BJT2m);
NevalSrc(&noizDens[BJT2_RE_NOISE],&lnNdens[BJT2_RE_NOISE],
ckt,THERMNOISE,inst->BJT2emitPrimeNode,inst->BJT2emitNode,
model->BJT2emitterConduct * inst->BJT2area);
model->BJT2emitterConduct * inst->BJT2area * inst->BJT2m);
NevalSrc(&noizDens[BJT2ICNOIZ],&lnNdens[BJT2ICNOIZ],
ckt,SHOTNOISE,inst->BJT2colPrimeNode, inst->BJT2emitPrimeNode,
*(ckt->CKTstate0 + inst->BJT2cc));
*(ckt->CKTstate0 + inst->BJT2cc) * inst->BJT2m);
NevalSrc(&noizDens[BJT2IBNOIZ],&lnNdens[BJT2IBNOIZ],
ckt,SHOTNOISE,inst->BJT2basePrimeNode, inst->BJT2emitPrimeNode,
*(ckt->CKTstate0 + inst->BJT2cb));
*(ckt->CKTstate0 + inst->BJT2cb) * inst->BJT2m);
NevalSrc(&noizDens[BJT2FLNOIZ],(double*)NULL,ckt,
N_GAIN,inst->BJT2basePrimeNode, inst->BJT2emitPrimeNode,
(double)0.0);
noizDens[BJT2FLNOIZ] *= model->BJT2fNcoef *
noizDens[BJT2FLNOIZ] *= inst->BJT2m * model->BJT2fNcoef *
exp(model->BJT2fNexp *
log(MAX(fabs(*(ckt->CKTstate0 + inst->BJT2cb)),N_MINLOG))) /
data->freq;

View File

@ -32,11 +32,14 @@ BJT2pzLoad(GENmodel *inModel, CKTcircuit *ckt, SPcomplex *s)
double xcbx;
double xccs;
double xcmcb;
double m;
for( ; model != NULL; model = model->BJT2nextModel) {
for( here = model->BJT2instances; here!= NULL;
here = here->BJT2nextInstance) {
if (here->BJT2owner != ARCHme) continue;
m = here->BJT2m;
gcpr=model->BJT2collectorResist * here->BJT2area;
gepr=model->BJT2emitterResist * here->BJT2area;
@ -51,64 +54,66 @@ BJT2pzLoad(GENmodel *inModel, CKTcircuit *ckt, SPcomplex *s)
xcbx= *(ckt->CKTstate0 + here->BJT2cqbx);
xccs= *(ckt->CKTstate0 + here->BJT2cqsub); /* PN */
xcmcb= *(ckt->CKTstate0 + here->BJT2cexbc);
*(here->BJT2colColPtr) += (gcpr);
*(here->BJT2baseBasePtr) += (gx) + (xcbx) * (s->real);
*(here->BJT2baseBasePtr + 1) += (xcbx) * (s->imag);
*(here->BJT2emitEmitPtr) += (gepr);
*(here->BJT2colPrimeColPrimePtr) += (gmu+go+gcpr)
+ (xcmu+xccs+xcbx) * (s->real);
*(here->BJT2colPrimeColPrimePtr + 1) += (xcmu+xccs+xcbx)
* (s->imag);
*(here->BJT2basePrimeBasePrimePtr) += (gx+gpi+gmu)
+ (xcpi+xcmu+xcmcb) * (s->real);
*(here->BJT2basePrimeBasePrimePtr + 1) += (xcpi+xcmu+xcmcb)
* (s->imag);
*(here->BJT2emitPrimeEmitPrimePtr) += (gpi+gepr+gm+go)
+ (xcpi+xgm) * (s->real);
*(here->BJT2emitPrimeEmitPrimePtr + 1) += (xcpi+xgm)
* (s->imag);
*(here->BJT2colColPrimePtr) += (-gcpr);
*(here->BJT2baseBasePrimePtr) += (-gx);
*(here->BJT2emitEmitPrimePtr) += (-gepr);
*(here->BJT2colPrimeColPtr) += (-gcpr);
*(here->BJT2colPrimeBasePrimePtr) += (-gmu+gm)
+ (-xcmu+xgm) * (s->real);
*(here->BJT2colPrimeBasePrimePtr + 1) += (-xcmu+xgm)
* (s->imag);
*(here->BJT2colPrimeEmitPrimePtr) += (-gm-go)
+ (-xgm) * (s->real);
*(here->BJT2colPrimeEmitPrimePtr + 1) += (-xgm) *
(s->imag);
*(here->BJT2basePrimeBasePtr) += (-gx);
*(here->BJT2basePrimeColPrimePtr) += (-gmu)
+ (-xcmu-xcmcb) * (s->real);
*(here->BJT2basePrimeColPrimePtr + 1) += (-xcmu-xcmcb)
* (s->imag);
*(here->BJT2basePrimeEmitPrimePtr) += (-gpi)
+ (-xcpi) * (s->real);
*(here->BJT2basePrimeEmitPrimePtr + 1) += (-xcpi)
* (s->imag);
*(here->BJT2emitPrimeEmitPtr) += (-gepr);
*(here->BJT2emitPrimeColPrimePtr) += (-go)
+ (xcmcb) * (s->real);
*(here->BJT2emitPrimeColPrimePtr + 1) += (xcmcb)
* (s->imag);
*(here->BJT2emitPrimeBasePrimePtr) += (-gpi-gm)
+ (-xcpi-xgm-xcmcb) * (s->real);
*(here->BJT2emitPrimeBasePrimePtr + 1) += (-xcpi-xgm-xcmcb)
* (s->imag);
*(here->BJT2substSubstPtr) += (xccs) * (s->real);
*(here->BJT2substSubstPtr + 1) += (xccs) * (s->imag);
*(here->BJT2colColPtr) += m * (gcpr);
*(here->BJT2baseBasePtr) += m * ((gx) + (xcbx) * (s->real));
*(here->BJT2baseBasePtr + 1) += m * ((xcbx) * (s->imag));
*(here->BJT2emitEmitPtr) += m * (gepr);
*(here->BJT2colPrimeColPrimePtr) += m * ((gmu+go+gcpr)
+ (xcmu+xccs+xcbx) * (s->real));
*(here->BJT2colPrimeColPrimePtr + 1) += m * ((xcmu+xccs+xcbx)
* (s->imag));
*(here->BJT2basePrimeBasePrimePtr) += m * ((gx+gpi+gmu)
+ (xcpi+xcmu+xcmcb) * (s->real));
*(here->BJT2basePrimeBasePrimePtr + 1) += m * ((xcpi+xcmu+xcmcb)
* (s->imag));
*(here->BJT2emitPrimeEmitPrimePtr) += m * ((gpi+gepr+gm+go)
+ (xcpi+xgm) * (s->real));
*(here->BJT2emitPrimeEmitPrimePtr + 1) += m * ((xcpi+xgm)
* (s->imag));
*(here->BJT2colColPrimePtr) += m *(-gcpr);
*(here->BJT2baseBasePrimePtr) += m * (-gx);
*(here->BJT2emitEmitPrimePtr) += m * (-gepr);
*(here->BJT2colPrimeColPtr) += m * (-gcpr);
*(here->BJT2colPrimeBasePrimePtr) += m * ((-gmu+gm)
+ (-xcmu+xgm) * (s->real));
*(here->BJT2colPrimeBasePrimePtr + 1) += m * ((-xcmu+xgm)
* (s->imag));
*(here->BJT2colPrimeEmitPrimePtr) += m *b((-gm-go)
+ (-xgm) * (s->real));
*(here->BJT2colPrimeEmitPrimePtr + 1) += m * ((-xgm) *
(s->imag));
*(here->BJT2basePrimeBasePtr) += m * (-gx);
*(here->BJT2basePrimeColPrimePtr) += m * ((-gmu)
+ (-xcmu-xcmcb) * (s->real));
*(here->BJT2basePrimeColPrimePtr + 1) += m * ((-xcmu-xcmcb)
* (s->imag));
*(here->BJT2basePrimeEmitPrimePtr) += m * ((-gpi)
+ (-xcpi) * (s->real));
*(here->BJT2basePrimeEmitPrimePtr + 1) += m * ((-xcpi)
* (s->imag));
*(here->BJT2emitPrimeEmitPtr) += m * (-gepr);
*(here->BJT2emitPrimeColPrimePtr) += m * ((-go)
+ (xcmcb) * (s->real));
*(here->BJT2emitPrimeColPrimePtr + 1) += m * ((xcmcb)
* (s->imag));
*(here->BJT2emitPrimeBasePrimePtr) += m * ((-gpi-gm)
+ (-xcpi-xgm-xcmcb) * (s->real));
*(here->BJT2emitPrimeBasePrimePtr + 1) += m * ((-xcpi-xgm-xcmcb)
* (s->imag));
*(here->BJT2substSubstPtr) += m * ((xccs) * (s->real));
*(here->BJT2substSubstPtr + 1) += m * ((xccs) * (s->imag));
/*DW survived from bjt
*(here->BJT2colPrimeSubstPtr) += (-xccs) * (s->real);
*(here->BJT2colPrimeSubstPtr + 1) += (-xccs) * (s->imag);
*(here->BJT2substColPrimePtr) += (-xccs) * (s->real);
*(here->BJT2substColPrimePtr + 1) += (-xccs) * (s->imag);
*/
*(here->BJT2baseColPrimePtr) += (-xcbx) * (s->real);
*(here->BJT2baseColPrimePtr + 1) += (-xcbx) * (s->imag);
*(here->BJT2colPrimeBasePtr) += (-xcbx) * (s->real);
*(here->BJT2colPrimeBasePtr + 1) += (-xcbx) * (s->imag);
*(here->BJT2baseColPrimePtr) += m * ((-xcbx) * (s->real));
*(here->BJT2baseColPrimePtr + 1) += m * ((-xcbx) * (s->imag));
*(here->BJT2colPrimeBasePtr) += m * ((-xcbx) * (s->real));
*(here->BJT2colPrimeBasePtr + 1) += m * ((-xcbx) * (s->imag));
}
}
return(OK);

View File

@ -2,6 +2,8 @@
Copyright 1990 Regents of the University of California. All rights reserved.
Author: 1985 Thomas L. Quarles
Modified: Alan Gillespie
This function is obsolete (was used by an old sensitivity analysis)
**********/
/* actually load the current ac sensitivity

View File

@ -185,6 +185,18 @@ BJT2setup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states)
if(!here->BJT2areaGiven) {
here->BJT2area = 1;
}
if(!here->BJT2mGiven) {
here->BJT2m = 1.0;
}
here->BJT2state = *states;
*states += BJT2numStates;
if(ckt->CKTsenInfo && (ckt->CKTsenInfo->SENmode & TRANSEN) ){
*states += 8 * (ckt->CKTsenInfo->SENparms);
}
matrixpointers:
if(model->BJT2collectorResist == 0) {
here->BJT2colPrimeNode = here->BJT2colNode;
} else if(here->BJT2colPrimeNode == 0) {
@ -243,12 +255,6 @@ BJT2setup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states)
}
}
here->BJT2state = *states;
*states += BJT2numStates;
if(ckt->CKTsenInfo && (ckt->CKTsenInfo->SENmode & TRANSEN) ){
*states += 8 * (ckt->CKTsenInfo->SENparms);
}
/* macro to make elements with built in test for out of memory */
#define TSTALLOC(ptr,first,second) \
if((here->ptr = SMPmakeElt(matrix,here->first,here->second))==(double *)NULL){\

View File

@ -2,6 +2,8 @@
Copyright 1990 Regents of the University of California. All rights reserved.
Author: 1985 Thomas L. Quarles
Modified: Alan Gillespie
This function is obsolete (was used by an old sensitivity analysis)
**********/
/* actually load the current sensitivity

View File

@ -2,6 +2,8 @@
Copyright 1990 Regents of the University of California. All rights reserved.
Author: 1985 Thomas L. Quarles
Modified: Alan Gillespie
This function is obsolete (was used by an old sensitivity analysis)
**********/
/* Pretty print the sensitivity info for all

View File

@ -2,6 +2,8 @@
Copyright 1990 Regents of the University of California. All rights reserved.
Author: 1985 Thomas L. Quarles
Modified: Alan Gillespie
This function is obsolete (was used by an old sensitivity analysis)
**********/
/* loop through all the devices and

View File

@ -2,6 +2,8 @@
Copyright 1990 Regents of the University of California. All rights reserved.
Author: 1985 Thomas L. Quarles
Modified: Alan Gillespie
This function is obsolete (was used by an old sensitivity analysis)
**********/
/* update the charge sensitivities and their derivatives */

View File

@ -134,7 +134,7 @@ BJT2temp(GENmodel *inModel, CKTcircuit *ckt)
here=here->BJT2nextInstance) {
if (here->BJT2owner != ARCHme) continue;
if(!here->BJT2tempGiven) here->BJT2temp = ckt->CKTtemp + here->BJT2_dtemp;
if(!here->BJT2tempGiven) here->BJT2temp = ckt->CKTtemp + here->BJT2dtemp;
vt = here->BJT2temp * CONSTKoverQ;
fact2 = here->BJT2temp/REFTEMP;
egfet = 1.16-(7.02e-4*here->BJT2temp*here->BJT2temp)/