From 4a75ce744d499f5f54ccaa1e8d551aefb346f5bc Mon Sep 17 00:00:00 2001 From: dwarning Date: Mon, 25 Jun 2012 07:43:27 +0200 Subject: [PATCH] dioload.c, diosetup.c, correct knee current parameter defaults --- src/spicelib/devices/dio/dioload.c | 12 ++++++------ src/spicelib/devices/dio/diosetup.c | 4 ++-- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/spicelib/devices/dio/dioload.c b/src/spicelib/devices/dio/dioload.c index 105d4b98b..a8842f1fb 100644 --- a/src/spicelib/devices/dio/dioload.c +++ b/src/spicelib/devices/dio/dioload.c @@ -188,7 +188,7 @@ next1: if (vd >= -3*vte) { /* forward */ cd = csat*(evd-1) + ckt->CKTgmin*vd; 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; cd = cd-ckt->CKTgmin*vd; 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 ; 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; cd = cd-ckt->CKTgmin*vd; 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; } - } else { /* breakdown */ + } else { /* breakdown */ evrev = exp(-(here->DIOtBrkdwnV+vd)/vte); cd = -csat*evrev + ckt->CKTgmin*vd; 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; cd = cd-ckt->CKTgmin*vd; ikr_area_m = model->DIOreverseKneeCurrent*here->DIOarea*here->DIOm; 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); - cd = cd/(1+sqrt_ikr); + 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)+ckt->CKTgmin*vd; } } diff --git a/src/spicelib/devices/dio/diosetup.c b/src/spicelib/devices/dio/diosetup.c index 2fc20229f..62d2a1444 100644 --- a/src/spicelib/devices/dio/diosetup.c +++ b/src/spicelib/devices/dio/diosetup.c @@ -79,10 +79,10 @@ DIOsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states) model->DIOgradingSWCoeff = .33; } if(!model->DIOforwardKneeCurrentGiven) { - model->DIOforwardKneeCurrent = 1e-3; + model->DIOforwardKneeCurrent = 0.0; } if(!model->DIOreverseKneeCurrentGiven) { - model->DIOreverseKneeCurrent = 1e-3; + model->DIOreverseKneeCurrent = 0.0; } if(!model->DIOtlevGiven) { model->DIOtlev = 0;