diff --git a/src/maths/ni/niconv.c b/src/maths/ni/niconv.c index 836594abd..48ed9a577 100644 --- a/src/maths/ni/niconv.c +++ b/src/maths/ni/niconv.c @@ -28,9 +28,10 @@ NIconvTest(CKTcircuit *ckt) double tol; #endif - size = SMPmatSize (ckt->CKTmatrix) ; + size = SMPmatSize(ckt->CKTmatrix); #ifndef KIRCHHOFF + node = ckt->CKTnodes; #ifdef STEPDEBUG for (i=1;i<=size;i++) { new = ckt->CKTrhs [i] ; @@ -38,8 +39,6 @@ NIconvTest(CKTcircuit *ckt) printf("chk for convergence: %s new: %g old: %g\n",CKTnodName(ckt,i),new,old); } #endif /* STEPDEBUG */ - - node = ckt->CKTnodes ; for (i=1;i<=size;i++) { node = node->next; new = ckt->CKTrhs [i] ; @@ -51,6 +50,18 @@ NIconvTest(CKTcircuit *ckt) #ifdef STEPDEBUG printf(" non-convergence at node (type=3) %s (fabs(new-old)>tol --> fabs(%g-%g)>%g)\n",CKTnodName(ckt,i),new,old,tol); printf(" reltol: %g voltTol: %g (tol=reltol*(MAX(fabs(old),fabs(new))) + voltTol)\n",ckt->CKTreltol,ckt->CKTvoltTol); +#endif /* STEPDEBUG */ + ckt->CKTtroubleNode = i; + ckt->CKTtroubleElt = NULL; + return(1); + } + } else { + tol = ckt->CKTreltol * (MAX(fabs(old),fabs(new))) + + ckt->CKTabstol; + if (fabs(new-old) >tol ) { +#ifdef STEPDEBUG + printf(" non-convergence at node (type=%d) %s (fabs(new-old)>tol --> fabs(%g-%g)>%g)\n",node->type,CKTnodName(ckt,i),new,old,tol); + printf(" reltol: %g abstol: %g (tol=reltol*(MAX(fabs(old),fabs(new))) + abstol)\n",ckt->CKTreltol,ckt->CKTabstol); #endif /* STEPDEBUG */ ckt->CKTtroubleNode = i; ckt->CKTtroubleElt = NULL;