diff --git a/src/spicelib/devices/dio/diosetup.c b/src/spicelib/devices/dio/diosetup.c index ed4bd560a..e23e2644f 100644 --- a/src/spicelib/devices/dio/diosetup.c +++ b/src/spicelib/devices/dio/diosetup.c @@ -79,7 +79,20 @@ DIOsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states) model->DIOtranTimeTemp2 = 0.0; } if(!model->DIOjunctionCapGiven) { - model->DIOjunctionCap = 0; + if (newcompat.ps || newcompat.lt) { + double cdiode = 0.; + /* to improve convergence (sometimes) */ + if (cp_getvar("diode_cj0", CP_REAL, &cdiode, 0) && cdiode > 0) { + model->DIOjunctionCap = cdiode; + if (ft_ngdebug) + fprintf(stderr, "Diode junction capacitance in model %s set to %e F\n", model->gen.GENmodName, cdiode); + } + else + model->DIOjunctionCap = 0.0; + } + else { + model->DIOjunctionCap = 0.0; + } } if(!model->DIOjunctionSWCapGiven) { model->DIOjunctionSWCap = 0; @@ -210,10 +223,12 @@ DIOsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states) if((!model->DIOresistGiven) || (model->DIOresist==0)) { if (newcompat.ps || newcompat.lt) { double rsdiode = 0.; - if (cp_getvar("rsdiode", CP_REAL, &rsdiode, 0) && rsdiode > 0) { - model->DIOconductance = 1./rsdiode; /* sometimes improves convergence */ + /* to improve convergence (sometimes) */ + if (cp_getvar("diode_rser", CP_REAL, &rsdiode, 0) && rsdiode > 0) { + model->DIOconductance = 1./rsdiode; + model->DIOresist = rsdiode; if (ft_ngdebug) - fprintf(stderr, "Diode series resistance in model %s set to 100 microOhm\n", model->gen.GENmodName); + fprintf(stderr, "Diode series resistance in model %s set to %e Ohm\n", model->gen.GENmodName, rsdiode); } else model->DIOconductance = 0.0;