few optimizations for diode recombination current calculation
This commit is contained in:
parent
8930690cd2
commit
60a35725f5
|
|
@ -46,7 +46,7 @@ DIOload(GENmodel *inModel, CKTcircuit *ckt)
|
|||
double evd;
|
||||
double evrev;
|
||||
double gd, gdb, gdsw, gen_fac, gen_fac_vd;
|
||||
double evd_rec, cdb_rec, gdb_rec;
|
||||
double t1, evd_rec, cdb_rec, gdb_rec;
|
||||
double geq;
|
||||
double gspr; /* area-scaled conductance */
|
||||
double sarg;
|
||||
|
|
@ -235,15 +235,18 @@ next1: if (model->DIOsatSWCurGiven) { /* sidewall current */
|
|||
evd = exp(vd/vte);
|
||||
cdb = csat*(evd-1);
|
||||
gdb = csat*evd/vte;
|
||||
evd_rec = exp(vd/(model->DIOrecEmissionCoeff*vt)); /* recombination current */
|
||||
cdb_rec = here->DIOtRecSatCur*(evd_rec-1);
|
||||
gdb_rec = here->DIOtRecSatCur*evd_rec/vt;
|
||||
gen_fac = pow((pow((1-vd/here->DIOtJctPot), 2) + 0.005), here->DIOtGradingCoeff/2);
|
||||
gen_fac_vd = here->DIOtGradingCoeff * (1-vd/here->DIOtJctPot) * pow((pow((1-vd/here->DIOtJctPot), 2) + 0.005), here->DIOtGradingCoeff/2-1);
|
||||
cdb_rec = cdb_rec * gen_fac;
|
||||
gdb_rec = gdb_rec * gen_fac + cdb_rec * gen_fac_vd;
|
||||
cdb = cdb + cdb_rec;
|
||||
gdb = gdb + gdb_rec;
|
||||
if (model->DIOrecSatCurGiven) { /* recombination current */
|
||||
evd_rec = exp(vd/(model->DIOrecEmissionCoeff*vt));
|
||||
cdb_rec = here->DIOtRecSatCur*(evd_rec-1);
|
||||
gdb_rec = here->DIOtRecSatCur*evd_rec/vt;
|
||||
t1 = pow((1-vd/here->DIOtJctPot), 2) + 0.005;
|
||||
gen_fac = pow(t1, here->DIOtGradingCoeff/2);
|
||||
gen_fac_vd = here->DIOtGradingCoeff * (1-vd/here->DIOtJctPot) * pow(t1, (here->DIOtGradingCoeff/2-1));
|
||||
cdb_rec = cdb_rec * gen_fac;
|
||||
gdb_rec = gdb_rec * gen_fac + cdb_rec * gen_fac_vd;
|
||||
cdb = cdb + cdb_rec;
|
||||
gdb = gdb + gdb_rec;
|
||||
}
|
||||
|
||||
} else if((!(model->DIObreakdownVoltageGiven)) ||
|
||||
vd >= -here->DIOtBrkdwnV) { /* reverse */
|
||||
|
|
|
|||
Loading…
Reference in New Issue