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 evd;
|
||||||
double evrev;
|
double evrev;
|
||||||
double gd, gdb, gdsw, gen_fac, gen_fac_vd;
|
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 geq;
|
||||||
double gspr; /* area-scaled conductance */
|
double gspr; /* area-scaled conductance */
|
||||||
double sarg;
|
double sarg;
|
||||||
|
|
@ -235,15 +235,18 @@ next1: if (model->DIOsatSWCurGiven) { /* sidewall current */
|
||||||
evd = exp(vd/vte);
|
evd = exp(vd/vte);
|
||||||
cdb = csat*(evd-1);
|
cdb = csat*(evd-1);
|
||||||
gdb = csat*evd/vte;
|
gdb = csat*evd/vte;
|
||||||
evd_rec = exp(vd/(model->DIOrecEmissionCoeff*vt)); /* recombination current */
|
if (model->DIOrecSatCurGiven) { /* recombination current */
|
||||||
cdb_rec = here->DIOtRecSatCur*(evd_rec-1);
|
evd_rec = exp(vd/(model->DIOrecEmissionCoeff*vt));
|
||||||
gdb_rec = here->DIOtRecSatCur*evd_rec/vt;
|
cdb_rec = here->DIOtRecSatCur*(evd_rec-1);
|
||||||
gen_fac = pow((pow((1-vd/here->DIOtJctPot), 2) + 0.005), here->DIOtGradingCoeff/2);
|
gdb_rec = here->DIOtRecSatCur*evd_rec/vt;
|
||||||
gen_fac_vd = here->DIOtGradingCoeff * (1-vd/here->DIOtJctPot) * pow((pow((1-vd/here->DIOtJctPot), 2) + 0.005), here->DIOtGradingCoeff/2-1);
|
t1 = pow((1-vd/here->DIOtJctPot), 2) + 0.005;
|
||||||
cdb_rec = cdb_rec * gen_fac;
|
gen_fac = pow(t1, here->DIOtGradingCoeff/2);
|
||||||
gdb_rec = gdb_rec * gen_fac + cdb_rec * gen_fac_vd;
|
gen_fac_vd = here->DIOtGradingCoeff * (1-vd/here->DIOtJctPot) * pow(t1, (here->DIOtGradingCoeff/2-1));
|
||||||
cdb = cdb + cdb_rec;
|
cdb_rec = cdb_rec * gen_fac;
|
||||||
gdb = gdb + gdb_rec;
|
gdb_rec = gdb_rec * gen_fac + cdb_rec * gen_fac_vd;
|
||||||
|
cdb = cdb + cdb_rec;
|
||||||
|
gdb = gdb + gdb_rec;
|
||||||
|
}
|
||||||
|
|
||||||
} else if((!(model->DIObreakdownVoltageGiven)) ||
|
} else if((!(model->DIObreakdownVoltageGiven)) ||
|
||||||
vd >= -here->DIOtBrkdwnV) { /* reverse */
|
vd >= -here->DIOtBrkdwnV) { /* reverse */
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue