few optimizations for diode recombination current calculation

This commit is contained in:
dwarning 2018-07-22 10:18:52 +02:00
parent 8930690cd2
commit 60a35725f5
1 changed files with 13 additions and 10 deletions

View File

@ -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 */