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)18 SRCconvTest(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