Jspice3
cktdefs.h
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 #ifndef CKT
9 #define CKT
10 
11 #define MAXNUMDEVS 32
12 extern int DEVmaxnum;
13 #define MAXNUMDEVNODES 4
14 
15 #include "ifsim.h"
16 #include "gendefs.h"
17 #include "smpdefs.h"
18 #include "tabdefs.h"
19 
20 /* number of noise state variables stored for each generator */
21 #define NSTATVARS 3
22 
23 typedef struct sJOB{
24  int JOBtype; /* type of job */
25  struct sJOB *JOBnextJob; /* next job in list */
26  IFuid JOBname; /* name of this job */
27 
28 } JOB;
29 
30 typedef struct sCKTnode {
32  int type;
33 
34 #define SP_VOLTAGE 3
35 #define SP_CURRENT 4
36 #define NODE_VOLTAGE SP_VOLTAGE
37 #define NODE_CURRENT SP_CURRENT
38 
39  int number;
40  double ic;
41  double nodeset;
42  double *ptr;
43  struct sCKTnode *next;
44  unsigned int icGiven:1;
45  unsigned int nsGiven:1;
46 } CKTnode;
47 
48 /* defines for node parameters */
49 #define PARM_NS 1
50 #define PARM_IC 2
51 #define PARM_NODETYPE 3
52 
53 
54 /* SRW - Keep track of models actually used in linked list. */
55 struct sCKTmodHead {
56  int type; /* device type number */
57  GENmodel *head; /* model list head */
58  struct sCKTmodHead *next;
59 };
60 
61 
62 typedef struct {
64  GENmodel *CKThead[MAXNUMDEVS];
65  /* SRW - for .table */
67  GENERIC *CKTstat; /* STATistics */
68  double *(CKTstates[8]);
69 #define CKTstate0 CKTstates[0]
70 #define CKTstate1 CKTstates[1]
71 #define CKTstate2 CKTstates[2]
72 #define CKTstate3 CKTstates[3]
73 #define CKTstate4 CKTstates[4]
74 #define CKTstate5 CKTstates[5]
75 #define CKTstate6 CKTstates[6]
76 #define CKTstate7 CKTstates[7]
77  double CKTtime;
78  double CKTdelta;
79  double CKTdeltaOld[7];
80  double CKTtemp;
81  double CKTnomTemp;
82  double CKTvt;
83  double CKTag[7]; /* the gear variable coefficient matrix */
84 #ifdef PREDICTOR
85  double CKTagp[7]; /* the gear predictor variable coefficient matrix */
86 #endif /*PREDICTOR*/
87  int CKTorder; /* the integration method order */
88  int CKTmaxOrder; /* maximum integration method order */
89  int CKTintegrateMethod; /* the integration method to be used */
90 
91 /* known integration methods */
92 #define TRAPEZOIDAL 1
93 #define GEAR 2
94 
95  SMPmatrix *CKTmatrix; /* pointer to sparse matrix */
96  int CKTniState; /* internal state */
97  double *CKTrhs; /* current rhs value - being loaded */
98  double *CKTrhsOld; /* previous rhs value for convergence testing */
99  double *CKTrhsSpare; /* spare rhs value for reordering */
100  double *CKTirhs; /* current rhs value - being loaded (imag) */
101  double *CKTirhsOld; /* previous rhs value (imaginary)*/
102  double *CKTirhsSpare; /* spare rhs value (imaginary)*/
103 
104  /* SRW - my predictor */
105  double CKTpred[4]; /* factors used to predict new values */
106  double *CKTsols[8]; /* previous 8 rhs solutions */
107 
108 #ifdef PREDICTOR
109  double *CKTpred; /* predicted solution vector */
110  double *CKTsols[8]; /* previous 8 solutions */
111 #endif /* PREDICTOR */
112 
113  double *CKTrhsOp; /* opearating point values */
114 
115 /*
116  * symbolic constants for CKTniState
117  * Note that they are bitwise disjoint
118  */
119 
120 #define NISHOULDREORDER 0x1
121 #define NIREORDERED 0x2
122 #define NIUNINITIALIZED 0x4
123 #define NIACSHOULDREORDER 0x10
124 #define NIACREORDERED 0x20
125 #define NIACUNINITIALIZED 0x40
126 #define NIDIDPREORDER 0x100
127 #define NIPZSHOULDREORDER 0x200
128 
130  int CKTcurrentAnalysis; /* the analysis in progress (if any) */
131 
132 /* defines for the value of CKTcurrentAnalysis */
133 /* are in TSKdefs.h */
134 
137 #define NODENAME(ckt,nodenum) CKTnodName(ckt,nodenum)
139  long CKTmode;
140 
141 /* defines for CKTmode */
142 
143 /* old 'mode' parameters */
144 #define MODE 0x3
145 #define MODETRAN 0x1
146 #define MODEAC 0x2
147 
148 /* old 'modedc' parameters */
149 #define MODEDC 0x70
150 #define MODEDCOP 0x10
151 #define MODETRANOP 0x20
152 #define MODEDCTRANCURVE 0x40
153 
154 /* old 'initf' parameters */
155 #define INITF 0x7f00
156 #define MODEINITFLOAT 0x100
157 #define MODEINITJCT 0x200
158 #define MODEINITFIX 0x400
159 #define MODEINITSMSIG 0x800
160 #define MODEINITTRAN 0x1000
161 #define MODEINITPRED 0x2000
162 /* new parameter */
163 #define MODETRANUPD 0x4000
164 
165 /* old 'nosolv' paramater */
166 #define MODEUIC 0x10000l
167 
168  int CKTjjPresent; /* Josephson junctions are in circuit */
169  int CKTbypass; /* use bypass */
170  int CKTpreload; /* preload constants in matrix during setup */
171  int CKTdcMaxIter; /* iteration limit for dc op. (itl1) */
172  int CKTdcTrcvMaxIter; /* iteration limit for dc tran. curv (itl2) */
173  int CKTtranMaxIter; /* iteration limit for each timepoint for tran */
174  /* (itl4) */
176  int CKTbreak;
177  double CKTsaveDelta;
178  double CKTminBreak;
179  double *CKTbreaks;
180  double CKTabstol;
183  double CKTreltol;
184  double CKTchgtol;
185  double CKTvoltTol;
186 #ifdef NEWTRUNC
187  double CKTlteReltol;
188  double CKTlteAbstol;
189 #endif /* NEWTRUNC */
190  double CKTgmin;
191  double CKTdelmin;
192  double CKTtrtol;
193  double CKTfinalTime;
194  double CKTstep;
195  double CKTmaxStep;
196  double CKTinitTime;
197  double CKTinitDelta; /* SRW - initial timestep */
198  double CKTomega;
199  double CKTsrcFact;
200  double CKTdiagGmin;
208  unsigned int CKThadNodeset:1;
209  unsigned int CKTfixLimit:1; /* flag to indicate that the limiting of
210  * MOSFETs should be done as in SPICE2 */
211  unsigned int CKTnoOpIter:1; /* flag to indicate not to try the operating
212  * point brute force, but to use gmin stepping
213  * first */
214  unsigned int CKTkeepOpInfo:1; /* flag for small signal analyses */
215  unsigned int CKTisSetup:1; /* flag to indicate if CKTsetup done */
217 
218  double *CKTtimePoints; /* list of all accepted timepoints in the
219  current transient simulation */
220  double *CKTdeltaList; /* list of all timesteps in the current
221  transient simulation */
222  int CKTtimeListSize; /* size of above lists */
223  int CKTtimeIndex; /* current position in above lists */
224  int CKTsizeIncr; /* amount to increment size of above arrays
225  when you run out of space */
226  unsigned int CKTtryToCompact:1; /* try to compact past history for LTRA
227  lines */
228  int CKTtroubleNode; /* Non-convergent node number */
229  GENinstance *CKTtroubleElt; /* Non-convergent device instance */
230 
231 } CKTcircuit;
232 
233 
234 extern IFfrontEnd *SPfrontEnd;
235 
236 #endif /*CKT*/
double CKTtime
Definition: cktdefs.h:77
double CKTdefaultMosW
Definition: cktdefs.h:205
int CKTtranMaxIter
Definition: cktdefs.h:173
double CKTvt
Definition: cktdefs.h:82
unsigned int nsGiven
Definition: cktdefs.h:45
double CKTsaveDelta
Definition: cktdefs.h:177
int DEVmaxnum
Definition: sconfig.c:166
IFuid JOBname
Definition: cktdefs.h:26
double * CKTirhs
Definition: cktdefs.h:100
double * CKTrhsSpare
Definition: cktdefs.h:99
double CKTminBreak
Definition: cktdefs.h:178
int CKTbreak
Definition: cktdefs.h:176
IFuid name
Definition: cktdefs.h:31
GENinstance * CKTtroubleElt
Definition: cktdefs.h:229
struct sCKTmodHead * next
Definition: cktdefs.h:58
double CKTdelta
Definition: cktdefs.h:78
int CKTnumSrcSteps
Definition: cktdefs.h:201
int CKTtroubleNode
Definition: cktdefs.h:228
unsigned int icGiven
Definition: cktdefs.h:44
int CKTsizeIncr
Definition: cktdefs.h:224
struct sJOB JOB
SMPmatrix * CKTmatrix
Definition: cktdefs.h:95
double CKTtemp
Definition: cktdefs.h:80
double CKTnomTemp
Definition: cktdefs.h:81
double CKTdiagGmin
Definition: cktdefs.h:200
int CKTnumGminSteps
Definition: cktdefs.h:202
double nodeset
Definition: cktdefs.h:41
double CKTinitTime
Definition: cktdefs.h:196
struct sCKTnode CKTnode
double CKTreltol
Definition: cktdefs.h:183
double CKTsrcFact
Definition: cktdefs.h:199
GENERIC * CKTstat
Definition: cktdefs.h:67
int CKTmaxOrder
Definition: cktdefs.h:88
Definition: cktdefs.h:23
int CKTorder
Definition: cktdefs.h:87
int CKTpreload
Definition: cktdefs.h:170
double CKTabstol
Definition: cktdefs.h:180
double CKTstep
Definition: cktdefs.h:194
double * CKTrhsOld
Definition: cktdefs.h:98
double * CKTirhsSpare
Definition: cktdefs.h:102
double * CKTdeltaList
Definition: cktdefs.h:220
GENERIC * IFuid
Definition: ifsim.h:72
double * CKTrhsOp
Definition: cktdefs.h:113
struct sCKTmodHead * CKTheadList
Definition: cktdefs.h:63
IFfrontEnd * SPfrontEnd
Definition: main.c:917
int CKTtimeIndex
Definition: cktdefs.h:223
int type
Definition: cktdefs.h:32
#define MAXNUMDEVS
Definition: cktdefs.h:11
int CKTniState
Definition: cktdefs.h:96
struct sCKTnode * next
Definition: cktdefs.h:43
double CKTomega
Definition: cktdefs.h:198
int number
Definition: cktdefs.h:39
CKTnode * CKTnodes
Definition: cktdefs.h:135
CKTnode * CKTlastNode
Definition: cktdefs.h:136
int CKTjjPresent
Definition: cktdefs.h:168
double * ptr
Definition: cktdefs.h:42
int CKTmaxEqNum
Definition: cktdefs.h:129
double CKTfinalTime
Definition: cktdefs.h:193
int CKTtimeListSize
Definition: cktdefs.h:222
int CKTnumStates
Definition: cktdefs.h:138
double CKTchgtol
Definition: cktdefs.h:184
double * CKTirhsOld
Definition: cktdefs.h:101
double CKTtrtol
Definition: cktdefs.h:192
int CKTbypass
Definition: cktdefs.h:169
double CKTdefaultMosAD
Definition: cktdefs.h:206
int CKTdcTrcvMaxIter
Definition: cktdefs.h:172
int type
Definition: cktdefs.h:56
double CKTpivotRelTol
Definition: cktdefs.h:182
double * CKTtimePoints
Definition: cktdefs.h:218
struct sCKTtable * CKTtableHead
Definition: cktdefs.h:66
double CKTinitDelta
Definition: cktdefs.h:197
double * CKTbreaks
Definition: cktdefs.h:179
struct sJOB * JOBnextJob
Definition: cktdefs.h:25
double CKTvoltTol
Definition: cktdefs.h:185
GENmodel * head
Definition: cktdefs.h:57
double CKTgmin
Definition: cktdefs.h:190
double CKTdefaultMosAS
Definition: cktdefs.h:207
int CKTcurrentAnalysis
Definition: cktdefs.h:130
int CKTbreakSize
Definition: cktdefs.h:175
double CKTdefaultMosL
Definition: cktdefs.h:204
double CKTdelmin
Definition: cktdefs.h:191
#define SMPmatrix
Definition: smpdefs.h:11
int CKTnoncon
Definition: cktdefs.h:203
int JOBtype
Definition: cktdefs.h:24
JOB * CKTcurJob
Definition: cktdefs.h:216
long CKTmode
Definition: cktdefs.h:139
double CKTpivotAbsTol
Definition: cktdefs.h:181
double * CKTrhs
Definition: cktdefs.h:97
double ic
Definition: cktdefs.h:40
int CKTdcMaxIter
Definition: cktdefs.h:171
char GENERIC
Definition: ifsim.h:27
double CKTmaxStep
Definition: cktdefs.h:195
int CKTintegrateMethod
Definition: cktdefs.h:89