From 4da3dc51fd25063c55811351ab5e3d73488c8050 Mon Sep 17 00:00:00 2001 From: Holger Vogt Date: Tue, 14 Nov 2023 16:56:31 +0100 Subject: [PATCH] =?UTF-8?q?If=20compatmode=20ps=20or=20lt:=20add=20a=20ser?= =?UTF-8?q?ies=20resistance=20(100=C2=B5Ohms)=20to=20diodes,=20when=20RS?= =?UTF-8?q?=20is=20not=20given=20or=200:=20Improves=20convergence=20in=20b?= =?UTF-8?q?ehavioural=20models=20for=20op=20evaluation.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/spicelib/devices/dio/diosetup.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/spicelib/devices/dio/diosetup.c b/src/spicelib/devices/dio/diosetup.c index 2cae77ca0..5373ec79e 100644 --- a/src/spicelib/devices/dio/diosetup.c +++ b/src/spicelib/devices/dio/diosetup.c @@ -16,6 +16,7 @@ Modified by Paolo Nenzi 2003 and Dietmar Warning 2012 #include "ngspice/sperror.h" #include "ngspice/suffix.h" #include "ngspice/fteext.h" +#include "ngspice/compatmode.h" int DIOsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states) @@ -195,7 +196,13 @@ DIOsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states) } if((!model->DIOresistGiven) || (model->DIOresist==0)) { - model->DIOconductance = 0.0; + if (newcompat.ps || newcompat.lt) { + model->DIOconductance = 1e4; /* improved convergence */ + if (ft_ngdebug) + fprintf(stderr, "Diode series resistance in model %s set to 100 ľOhm\n", model->gen.GENmodName); + } + else + model->DIOconductance = 0.0; } else { model->DIOconductance = 1/model->DIOresist; }