diff --git a/src/spicelib/devices/bjt2/bjt2.c b/src/spicelib/devices/bjt2/bjt2.c index df1bd970a..e46fb64ce 100644 --- a/src/spicelib/devices/bjt2/bjt2.c +++ b/src/spicelib/devices/bjt2/bjt2.c @@ -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 */ diff --git a/src/spicelib/devices/bjt2/bjt2ask.c b/src/spicelib/devices/bjt2/bjt2ask.c index b430f7e65..6a147f6bf 100644 --- a/src/spicelib/devices/bjt2/bjt2ask.c +++ b/src/spicelib/devices/bjt2/bjt2ask.c @@ -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); diff --git a/src/spicelib/devices/bjt2/bjt2defs.h b/src/spicelib/devices/bjt2/bjt2defs.h index 490959381..a1cbfcfe6 100644 --- a/src/spicelib/devices/bjt2/bjt2defs.h +++ b/src/spicelib/devices/bjt2/bjt2defs.h @@ -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 */ diff --git a/src/spicelib/devices/bjt2/bjt2dset.c b/src/spicelib/devices/bjt2/bjt2dset.c index 7f3b7360c..b8c0a5c6c 100644 --- a/src/spicelib/devices/bjt2/bjt2dset.c +++ b/src/spicelib/devices/bjt2/bjt2dset.c @@ -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; diff --git a/src/spicelib/devices/bjt2/bjt2load.c b/src/spicelib/devices/bjt2/bjt2load.c index 213b44fd0..b22193b7d 100644 --- a/src/spicelib/devices/bjt2/bjt2load.c +++ b/src/spicelib/devices/bjt2/bjt2load.c @@ -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); diff --git a/src/spicelib/devices/bjt2/bjt2noise.c b/src/spicelib/devices/bjt2/bjt2noise.c index 16a9d5252..a76d9ffa9 100644 --- a/src/spicelib/devices/bjt2/bjt2noise.c +++ b/src/spicelib/devices/bjt2/bjt2noise.c @@ -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; diff --git a/src/spicelib/devices/bjt2/bjt2pzld.c b/src/spicelib/devices/bjt2/bjt2pzld.c index 4016a9359..be6f0063b 100644 --- a/src/spicelib/devices/bjt2/bjt2pzld.c +++ b/src/spicelib/devices/bjt2/bjt2pzld.c @@ -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); diff --git a/src/spicelib/devices/bjt2/bjt2sacl.c b/src/spicelib/devices/bjt2/bjt2sacl.c index 957bbdaba..1ad603f64 100644 --- a/src/spicelib/devices/bjt2/bjt2sacl.c +++ b/src/spicelib/devices/bjt2/bjt2sacl.c @@ -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 diff --git a/src/spicelib/devices/bjt2/bjt2setup.c b/src/spicelib/devices/bjt2/bjt2setup.c index fe0416493..e89c4e857 100644 --- a/src/spicelib/devices/bjt2/bjt2setup.c +++ b/src/spicelib/devices/bjt2/bjt2setup.c @@ -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){\ diff --git a/src/spicelib/devices/bjt2/bjt2sload.c b/src/spicelib/devices/bjt2/bjt2sload.c index ba19d4a77..15239407a 100644 --- a/src/spicelib/devices/bjt2/bjt2sload.c +++ b/src/spicelib/devices/bjt2/bjt2sload.c @@ -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 diff --git a/src/spicelib/devices/bjt2/bjt2sprt.c b/src/spicelib/devices/bjt2/bjt2sprt.c index d567d1ea4..29299bc3c 100644 --- a/src/spicelib/devices/bjt2/bjt2sprt.c +++ b/src/spicelib/devices/bjt2/bjt2sprt.c @@ -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 diff --git a/src/spicelib/devices/bjt2/bjt2sset.c b/src/spicelib/devices/bjt2/bjt2sset.c index 776c5326e..53937edff 100644 --- a/src/spicelib/devices/bjt2/bjt2sset.c +++ b/src/spicelib/devices/bjt2/bjt2sset.c @@ -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 diff --git a/src/spicelib/devices/bjt2/bjt2supd.c b/src/spicelib/devices/bjt2/bjt2supd.c index 80705f796..4a17a0f8f 100644 --- a/src/spicelib/devices/bjt2/bjt2supd.c +++ b/src/spicelib/devices/bjt2/bjt2supd.c @@ -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 */ diff --git a/src/spicelib/devices/bjt2/bjt2temp.c b/src/spicelib/devices/bjt2/bjt2temp.c index f85a5ab59..4a0a785bc 100644 --- a/src/spicelib/devices/bjt2/bjt2temp.c +++ b/src/spicelib/devices/bjt2/bjt2temp.c @@ -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)/