From 2ad97feb3129248c25a600bebe9317ef4bc3050d Mon Sep 17 00:00:00 2001 From: Giles Atkinson <“gatk555@gmail.com”> Date: Fri, 12 Jan 2024 17:14:05 +0000 Subject: [PATCH] A quick fix for a bug reported in the Help forum by Tom Hajjar on Jan 6 2024. Prevent the TRA device from requesting a breakpoint in the past, as that is a hard error. --- src/spicelib/devices/tra/traacct.c | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/src/spicelib/devices/tra/traacct.c b/src/spicelib/devices/tra/traacct.c index 5198df4ac..3e95b3f28 100644 --- a/src/spicelib/devices/tra/traacct.c +++ b/src/spicelib/devices/tra/traacct.c @@ -107,19 +107,16 @@ TRAaccept(CKTcircuit *ckt, GENmodel *inModel) here->TRAabstol) || (fabs(d3-d4) >= here->TRAreltol*MAX(fabs(d3),fabs(d4))+ here->TRAabstol) ) { - /* derivitive changing - need to schedule after delay */ - /*printf("%s: at %g set for %g\n",here->TRAname, - ckt->CKTtime, - *(here->TRAdelays+3*here->TRAsizeDelay-3)+here->TRAtd - );*/ - /*printf("%g, %g, %g -> %g, %g \n",v1,v2,v3,d1,d2);*/ - /*printf("%g, %g, %g -> %g, %g \n",v4,v5,v6,d3,d4);*/ - /* also set for break after PREVIOUS point */ - /*printf("setting break\n");*/ - error = CKTsetBreak(ckt, - *(here->TRAdelays+3*here->TRAsizeDelay -3) + - here->TRAtd); - if(error) return(error); + double when; + + /* Derivative changed - need to schedule after delay */ + + when = *(here->TRAdelays + 3 * here->TRAsizeDelay - 3) + + here->TRAtd; + if (when > ckt->CKTtime) { + error = CKTsetBreak(ckt, when); + if(error) return(error); + } } #endif /*NOTDEF*/ }