Jspice3
cktdojob.c
Go to the documentation of this file.
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  1992 Stephen R. Whiteley
6 ****************************************************************************/
7 
8 #include "spice.h"
9 #include <stdio.h>
10 #include "cktdefs.h"
11 #include "optdefs.h"
12 #include "jobdefs.h"
13 #include "tskdefs.h"
14 #include "sperror.h"
15 #include "util.h"
16 #include "cktext.h"
17 
18 extern int ANALmaxnum;
19 extern FILE *cp_err;
20 
21 
22 int
23 CKTdoJob(inCkt,reset,inTask)
24 
25 GENERIC *inCkt;
26 int reset;
27 GENERIC *inTask;
28 {
29  CKTcircuit *ckt = (CKTcircuit *)inCkt;
30  TSKtask *task = (TSKtask *)inTask;
31  JOB *job;
32  double startTime;
33  int error, i;
34 
35  startTime = (*(SPfrontEnd->IFseconds))( );
36 
37  ckt->CKTtemp = task->TSKtemp;
38  ckt->CKTnomTemp = task->TSKnomTemp;
39  ckt->CKTmaxOrder = task->TSKmaxOrder;
41  ckt->CKTbypass = task->TSKbypass;
42  ckt->CKTdcMaxIter = task->TSKdcMaxIter;
44  ckt->CKTtranMaxIter = task->TSKtranMaxIter;
45  ckt->CKTnumSrcSteps = task->TSKnumSrcSteps;
46  ckt->CKTnumGminSteps = task->TSKnumGminSteps;
47  ckt->CKTminBreak = task->TSKminBreak;
48  ckt->CKTabstol = task->TSKabstol;
49  ckt->CKTpivotAbsTol = task->TSKpivotAbsTol;
50  ckt->CKTpivotRelTol = task->TSKpivotRelTol;
51  ckt->CKTreltol = task->TSKreltol;
52  ckt->CKTchgtol = task->TSKchgtol;
53  ckt->CKTvoltTol = task->TSKvoltTol;
54  ckt->CKTgmin = task->TSKgmin;
55  ckt->CKTdelmin = task->TSKdelmin;
56  ckt->CKTtrtol = task->TSKtrtol;
57  ckt->CKTdefaultMosL = task->TSKdefaultMosL;
58  ckt->CKTdefaultMosW = task->TSKdefaultMosW;
59  ckt->CKTdefaultMosAD = task->TSKdefaultMosAD;
60  ckt->CKTdefaultMosAS = task->TSKdefaultMosAS;
61  ckt->CKTfixLimit = task->TSKfixLimit;
62  ckt->CKTnoOpIter = task->TSKnoOpIter;
63  ckt->CKTtryToCompact = task->TSKtryToCompact;
64  ckt->CKTtroubleNode = 0;
65  ckt->CKTtroubleElt = NULL;
66 #ifdef NEWTRUNC
67  ckt->CKTlteReltol = task->TSKlteReltol;
68  ckt->CKTlteAbstol = task->TSKlteAbstol;
69 #endif /* NEWTRUNC */
70 
71 
72  if (ckt->CKTmaxEqNum <= 1)
73  /* Circuit has nothing in it! Just return. */
74  return (OK);
75 
76  for (i = 0; i < ANALmaxnum; i++) {
77 
78  for (job = task->jobs; job; job = job->JOBnextJob) {
79 
80  if (job->JOBtype == i) {
81 
82  if (reset) {
83 
84  ckt->CKTdelta = 0.0;
85  ckt->CKTtime = 0.0;
86  ckt->CKTcurrentAnalysis = 0;
87  ckt->CKTjjPresent = 0;
88 
89  ckt->CKTpreload = 1; /* do preload */
90  /* normal reset */
91  error = CKTsetup(ckt);
92  if (error) return (error);
93  error = CKTtemp(ckt);
94  if (error) return (error);
95 
96  spRtoI((char*)ckt->CKTmatrix);
97 
98  /* The unchanging (real) constants in the matrix
99  * are preloaded during setup. For DC and TRAN
100  * analysis (including operating point for AC), we
101  * copy the real part of the matrix into an
102  * otherwise unused field. The (dc) load
103  * function, rather than clearing the real matrix,
104  * loads it with this field. This saves a
105  * bit of computation.
106  */
107 
108  ckt->CKTcurJob = job;
109  }
110  else {
111  if (ckt->CKTcurJob != job)
112  continue;
113  }
114  error = (*(analInfo[i]->an_func))((GENERIC*)ckt, reset);
115  if (error) {
116  ((STATistics*)ckt->CKTstat)->STATtotAnalTime +=
117  (*(SPfrontEnd->IFseconds))( ) - startTime;
118  return (error);
119  }
120  if (!reset)
121  reset = TRUE;
122  }
123  }
124  }
125 
126  ((STATistics*)ckt->CKTstat)->STATtotAnalTime +=
127  (*(SPfrontEnd->IFseconds))( ) - startTime;
128 
129  return (OK);
130 }
double CKTtime
Definition: cktdefs.h:77
double CKTdefaultMosW
Definition: cktdefs.h:205
double TSKdefaultMosW
Definition: tskdefs.h:49
unsigned int TSKtryToCompact
Definition: tskdefs.h:54
int CKTtranMaxIter
Definition: cktdefs.h:173
int TSKnumGminSteps
Definition: tskdefs.h:33
double TSKpivotAbsTol
Definition: tskdefs.h:36
double CKTminBreak
Definition: cktdefs.h:178
int TSKbypass
Definition: tskdefs.h:27
unsigned int CKTfixLimit
Definition: cktdefs.h:209
GENinstance * CKTtroubleElt
Definition: cktdefs.h:229
int TSKmaxOrder
Definition: tskdefs.h:17
double CKTdelta
Definition: cktdefs.h:78
int CKTnumSrcSteps
Definition: cktdefs.h:201
int CKTtroubleNode
Definition: cktdefs.h:228
SMPmatrix * CKTmatrix
Definition: cktdefs.h:95
double CKTtemp
Definition: cktdefs.h:80
double TSKtemp
Definition: tskdefs.h:15
double CKTnomTemp
Definition: cktdefs.h:81
int TSKdcMaxIter
Definition: tskdefs.h:28
int CKTnumGminSteps
Definition: cktdefs.h:202
IFfrontEnd * SPfrontEnd
Definition: main.c:917
void spRtoI()
double CKTreltol
Definition: cktdefs.h:183
#define TRUE
Definition: util.h:27
GENERIC * CKTstat
Definition: cktdefs.h:67
int CKTmaxOrder
Definition: cktdefs.h:88
Definition: cktdefs.h:23
double TSKdelmin
Definition: tskdefs.h:46
SPICEanalysis * analInfo[]
Definition: sconfig.c:57
int CKTpreload
Definition: cktdefs.h:170
double CKTabstol
Definition: cktdefs.h:180
#define OK
Definition: iferrmsg.h:17
double TSKchgtol
Definition: tskdefs.h:39
double TSKdefaultMosAD
Definition: tskdefs.h:50
double TSKtrtol
Definition: tskdefs.h:47
unsigned int TSKfixLimit
Definition: tskdefs.h:52
double TSKdefaultMosL
Definition: tskdefs.h:48
#define NULL
Definition: spdefs.h:121
unsigned int TSKnoOpIter
Definition: tskdefs.h:53
int(* an_func)()
Definition: jobdefs.h:24
int TSKnumSrcSteps
Definition: tskdefs.h:32
int CKTjjPresent
Definition: cktdefs.h:168
int CKTmaxEqNum
Definition: cktdefs.h:129
int CKTdoJob(GENERIC *inCkt, int reset, GENERIC *inTask)
Definition: cktdojob.c:23
double CKTchgtol
Definition: cktdefs.h:184
double CKTtrtol
Definition: cktdefs.h:192
int CKTbypass
Definition: cktdefs.h:169
double CKTdefaultMosAD
Definition: cktdefs.h:206
int CKTdcTrcvMaxIter
Definition: cktdefs.h:172
double CKTpivotRelTol
Definition: cktdefs.h:182
unsigned int CKTnoOpIter
Definition: cktdefs.h:211
int ANALmaxnum
Definition: sconfig.c:88
JOB * jobs
Definition: tskdefs.h:13
double TSKreltol
Definition: tskdefs.h:38
int TSKdcTrcvMaxIter
Definition: tskdefs.h:29
FILE * cp_err
Definition: help.c:101
double TSKdefaultMosAS
Definition: tskdefs.h:51
unsigned int CKTtryToCompact
Definition: cktdefs.h:226
int TSKintegrateMethod
Definition: tskdefs.h:18
struct sJOB * JOBnextJob
Definition: cktdefs.h:25
double CKTvoltTol
Definition: cktdefs.h:185
double CKTgmin
Definition: cktdefs.h:190
double TSKpivotRelTol
Definition: tskdefs.h:37
double TSKvoltTol
Definition: tskdefs.h:40
double TSKnomTemp
Definition: tskdefs.h:16
double CKTdefaultMosAS
Definition: cktdefs.h:207
int CKTcurrentAnalysis
Definition: cktdefs.h:130
double CKTdefaultMosL
Definition: cktdefs.h:204
double CKTdelmin
Definition: cktdefs.h:191
double TSKgmin
Definition: tskdefs.h:45
int JOBtype
Definition: cktdefs.h:24
JOB * CKTcurJob
Definition: cktdefs.h:216
double CKTpivotAbsTol
Definition: cktdefs.h:181
double TSKminBreak
Definition: tskdefs.h:34
int CKTtemp()
int CKTdcMaxIter
Definition: cktdefs.h:171
int TSKtranMaxIter
Definition: tskdefs.h:30
double TSKabstol
Definition: tskdefs.h:35
char GENERIC
Definition: ifsim.h:27
int CKTsetup()
int CKTintegrateMethod
Definition: cktdefs.h:89