dioload.c, diosetup.c, correct knee current parameter defaults
This commit is contained in:
parent
a7ffb7d69f
commit
4a75ce744d
|
|
@ -188,7 +188,7 @@ next1: if (vd >= -3*vte) { /* forward */
|
||||||
cd = csat*(evd-1) + ckt->CKTgmin*vd;
|
cd = csat*(evd-1) + ckt->CKTgmin*vd;
|
||||||
gd = csat*evd/vte + ckt->CKTgmin;
|
gd = csat*evd/vte + ckt->CKTgmin;
|
||||||
|
|
||||||
if( (model->DIOforwardKneeCurrentGiven) && (model->DIOforwardKneeCurrent > 0.0) && (cd > 1.0e-18) ) {
|
if( (model->DIOforwardKneeCurrent > 0.0) && (cd > 1.0e-18) ) {
|
||||||
gd = gd-ckt->CKTgmin;
|
gd = gd-ckt->CKTgmin;
|
||||||
cd = cd-ckt->CKTgmin*vd;
|
cd = cd-ckt->CKTgmin*vd;
|
||||||
ikf_area_m = model->DIOforwardKneeCurrent*here->DIOarea*here->DIOm;
|
ikf_area_m = model->DIOforwardKneeCurrent*here->DIOarea*here->DIOm;
|
||||||
|
|
@ -205,7 +205,7 @@ next1: if (vd >= -3*vte) { /* forward */
|
||||||
cd = -csat*(1+arg) + ckt->CKTgmin*vd ;
|
cd = -csat*(1+arg) + ckt->CKTgmin*vd ;
|
||||||
gd = csat*3*arg/vd + ckt->CKTgmin;
|
gd = csat*3*arg/vd + ckt->CKTgmin;
|
||||||
|
|
||||||
if( (model->DIOreverseKneeCurrentGiven) && (model->DIOreverseKneeCurrent > 0.0) && (cd < -1.0e-18) ) {
|
if( (model->DIOreverseKneeCurrent > 0.0) && (cd < -1.0e-18) ) {
|
||||||
gd = gd-ckt->CKTgmin;
|
gd = gd-ckt->CKTgmin;
|
||||||
cd = cd-ckt->CKTgmin*vd;
|
cd = cd-ckt->CKTgmin*vd;
|
||||||
ikr_area_m = model->DIOreverseKneeCurrent*here->DIOarea*here->DIOm;
|
ikr_area_m = model->DIOreverseKneeCurrent*here->DIOarea*here->DIOm;
|
||||||
|
|
@ -214,19 +214,19 @@ next1: if (vd >= -3*vte) { /* forward */
|
||||||
cd = cd/(1+sqrt_ikr)+ckt->CKTgmin*vd;
|
cd = cd/(1+sqrt_ikr)+ckt->CKTgmin*vd;
|
||||||
}
|
}
|
||||||
|
|
||||||
} else { /* breakdown */
|
} else { /* breakdown */
|
||||||
|
|
||||||
evrev = exp(-(here->DIOtBrkdwnV+vd)/vte);
|
evrev = exp(-(here->DIOtBrkdwnV+vd)/vte);
|
||||||
cd = -csat*evrev + ckt->CKTgmin*vd;
|
cd = -csat*evrev + ckt->CKTgmin*vd;
|
||||||
gd = csat*evrev/vte + ckt->CKTgmin;
|
gd = csat*evrev/vte + ckt->CKTgmin;
|
||||||
|
|
||||||
if( (model->DIOreverseKneeCurrentGiven) && (model->DIOreverseKneeCurrent > 0.0) && (cd < -1.0e-18) ) {
|
if( (model->DIOreverseKneeCurrent > 0.0) && (cd < -1.0e-18) ) {
|
||||||
gd = gd-ckt->CKTgmin;
|
gd = gd-ckt->CKTgmin;
|
||||||
cd = cd-ckt->CKTgmin*vd;
|
cd = cd-ckt->CKTgmin*vd;
|
||||||
ikr_area_m = model->DIOreverseKneeCurrent*here->DIOarea*here->DIOm;
|
ikr_area_m = model->DIOreverseKneeCurrent*here->DIOarea*here->DIOm;
|
||||||
sqrt_ikr = sqrt(cd/(-ikr_area_m));
|
sqrt_ikr = sqrt(cd/(-ikr_area_m));
|
||||||
gd = ((1+sqrt_ikr)*gd + cd*gd/(2*sqrt_ikr*ikr_area_m))/(1+2*sqrt_ikr - cd/ikr_area_m);
|
gd = ((1+sqrt_ikr)*gd + cd*gd/(2*sqrt_ikr*ikr_area_m))/(1+2*sqrt_ikr - cd/ikr_area_m)+ckt->CKTgmin;
|
||||||
cd = cd/(1+sqrt_ikr);
|
cd = cd/(1+sqrt_ikr)+ckt->CKTgmin*vd;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -79,10 +79,10 @@ DIOsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states)
|
||||||
model->DIOgradingSWCoeff = .33;
|
model->DIOgradingSWCoeff = .33;
|
||||||
}
|
}
|
||||||
if(!model->DIOforwardKneeCurrentGiven) {
|
if(!model->DIOforwardKneeCurrentGiven) {
|
||||||
model->DIOforwardKneeCurrent = 1e-3;
|
model->DIOforwardKneeCurrent = 0.0;
|
||||||
}
|
}
|
||||||
if(!model->DIOreverseKneeCurrentGiven) {
|
if(!model->DIOreverseKneeCurrentGiven) {
|
||||||
model->DIOreverseKneeCurrent = 1e-3;
|
model->DIOreverseKneeCurrent = 0.0;
|
||||||
}
|
}
|
||||||
if(!model->DIOtlevGiven) {
|
if(!model->DIOtlevGiven) {
|
||||||
model->DIOtlev = 0;
|
model->DIOtlev = 0;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue