1 /*************************************************************************** 2 JSPICE3 adaptation of Spice3e2 - Copyright (c) Stephen R. Whiteley 1992 3 Copyright 1990 Regents of the University of California. All rights reserved. 4 Authors: 1985 Thomas L. Quarles 5 1987 Kanwar Jit Singh 6 1992 Stephen R. Whiteley 7 ****************************************************************************/ 8 9 #include "spice.h" 10 #include <stdio.h> 11 #include "misc.h" 12 #include "srcdefs.h" 13 #include "sperror.h" 14 #include "util.h" 15 16 17 int SRCconvTest(inModel,ckt)18SRCconvTest(inModel, ckt) 19 20 GENmodel *inModel; 21 CKTcircuit *ckt; 22 { 23 SRCmodel *model = (SRCmodel *)inModel; 24 SRCinstance *here; 25 int i; 26 double diff; 27 double prev; 28 double tol; 29 double rhs; 30 31 for ( ; model != NULL; model = model->SRCnextModel) { 32 for (here = model->SRCinstances; here != NULL; 33 here = here->SRCnextInstance) { 34 35 if (!here->SRCtree || !here->SRCtree->numVars) continue; 36 37 for (i = 0; i < here->SRCtree->numVars; i++) { 38 here->SRCvalues[i] = *(ckt->CKTrhsOld + here->SRCeqns[i]); 39 } 40 41 if ((*(here->SRCtree->IFeval)) 42 (here->SRCtree, ckt->CKTgmin,&rhs,here->SRCvalues, 43 here->SRCderivs,&ckt->CKTtime) == OK) { 44 /* !! last arg bogus if ft_sim->specSigs changed !! */ 45 46 prev = here->SRCprev; 47 diff = FABS(prev - rhs); 48 if (here->SRCtype == SRC_V) { 49 tol = ckt->CKTreltol * 50 MAX(FABS(rhs),FABS(prev)) + ckt->CKTvoltTol; 51 } 52 else { 53 tol = ckt->CKTreltol * 54 MAX(FABS(rhs),FABS(prev)) + ckt->CKTabstol; 55 } 56 57 if (diff > tol) { 58 ckt->CKTnoncon++; 59 ckt->CKTtroubleElt = (GENinstance *) here; 60 return (OK); 61 } 62 } 63 else { 64 return (E_BADPARM); 65 } 66 } 67 } 68 return (OK); 69 } 70