1 /**********
2 Copyright 1990 Regents of the University of California.  All rights reserved.
3 **********/
4 
5 #include "spice.h"
6 #define CONFIG
7 
8 #include <stdio.h>
9 #include "devdefs.h"
10 #include "cktext.h"
11 
12 #include "jobdefs.h"
13 #include "acdefs.h"
14 #include "distodef.h"
15 #include "dcodefs.h"
16 #include "optdefs.h"
17 #include "noisedef.h"
18 #include "pzdefs.h"
19 #include "tfdefs.h"
20 #include "trandefs.h"
21 #include "dctdefs.h"
22 
23 #ifndef AN_dc
24 
25 #ifdef AN_ac
26 #define AN_dc
27 #endif
28 #ifdef AN_pz
29 #define AN_dc
30 #endif
31 #ifdef AN_tran
32 #define AN_dc
33 #endif
34 #ifdef AN_noise
35 #define AN_dc
36 #endif
37 #ifdef AN_disto
38 #define AN_dc
39 #endif
40 #ifdef AN_sense
41 #define AN_dc
42 #endif
43 
44 #endif
45 
46 extern SPICEanalysis OPTinfo;
47 extern SPICEanalysis ACinfo;
48 extern SPICEanalysis DCTinfo;
49 extern SPICEanalysis DCOinfo;
50 extern SPICEanalysis TRANinfo;
51 extern SPICEanalysis PZinfo;
52 extern SPICEanalysis SENSinfo;
53 extern SPICEanalysis TFinfo;
54 extern SPICEanalysis DISTOinfo;
55 extern SPICEanalysis NOISEinfo;
56 
57 SPICEanalysis *analInfo[] = {
58     &OPTinfo,
59 #ifdef AN_ac
60     &ACinfo,
61 #endif
62 #ifdef AN_dc
63     &DCTinfo,
64 #endif
65 #ifdef AN_op
66     &DCOinfo,
67 #endif
68 #ifdef AN_tran
69     &TRANinfo,
70 #endif
71 #ifdef AN_pz
72     &PZinfo,
73 #endif
74 #ifdef AN_sense
75     &SENSinfo,
76 #endif
77 #ifdef AN_tf
78     &TFinfo,
79 #endif
80 #ifdef AN_disto
81     &DISTOinfo,
82 #endif
83 #ifdef AN_noise
84     &NOISEinfo,
85 #endif
86 };
87 
88 int ANALmaxnum = sizeof(analInfo)/sizeof(SPICEanalysis*);
89 
90 extern SPICEdev BJTinfo;
91 extern SPICEdev B1info;
92 extern SPICEdev B2info;
93 extern SPICEdev CAPinfo;
94 extern SPICEdev DIOinfo;
95 extern SPICEdev INDinfo;
96 extern SPICEdev JFETinfo;
97 extern SPICEdev JJinfo;
98 extern SPICEdev LTRAinfo;
99 extern SPICEdev MESinfo;
100 extern SPICEdev MOSinfo;
101 extern SPICEdev MUTinfo;
102 extern SPICEdev RESinfo;
103 extern SPICEdev SRCinfo;
104 extern SPICEdev SWinfo;
105 extern SPICEdev TRAinfo;
106 extern SPICEdev URCinfo;
107 extern SPICEdev SFFTinfo;
108 
109 SPICEdev *DEVices[] = {
110 
111 #ifdef DEV_bjt
112         &BJTinfo,
113 #endif
114 #ifdef DEV_bsim1
115         &B1info,
116 #endif
117 #ifdef DEV_bsim2
118         &B2info,
119 #endif
120 #ifdef DEV_cap
121         &CAPinfo,
122 #endif
123 #ifdef DEV_dio
124         &DIOinfo,
125 #endif
126 #ifdef DEV_ind
127         &INDinfo,
128         &MUTinfo,
129 #endif
130 #ifdef DEV_jfet
131         &JFETinfo,
132 #endif
133 #ifdef DEV_jj
134         &JJinfo,
135 #endif
136 #ifdef DEV_ltra
137         &LTRAinfo,
138 #endif
139 #ifdef DEV_mes
140         &MESinfo,
141 #endif
142 #ifdef DEV_mos
143         &MOSinfo,
144 #endif
145 #ifdef DEV_res
146         &RESinfo,
147 #endif
148 #ifdef DEV_src
149         &SRCinfo,
150 #endif
151 #ifdef DEV_sw
152         &SWinfo,
153 #endif
154 #ifdef DEV_tra
155         &TRAinfo,
156 #endif
157 #ifdef DEV_urc
158         &URCinfo,
159 #endif
160 #ifdef DEV_sfft
161         &SFFTinfo,
162 #endif
163 };
164 
165 /* my internal global constant for number of device types */
166 int DEVmaxnum = sizeof(DEVices)/sizeof(SPICEdev *);
167 
168 static char * specSigList[] = {
169     "time"
170 };
171 
172 static IFparm nodeParms[] = {
173     IP( "nodeset",PARM_NS ,IF_REAL,"suggested initial voltage"),
174     IP( "ic",PARM_IC ,IF_REAL,"initial voltage"),
175     IP( "type",PARM_NODETYPE ,IF_INTEGER,"output type of equation")
176 };
177 
178 IFsimulator SIMinfo = {
179     "jspice3",        /* name */
180     "jspice3 circuit level simulation program",  /* more about me */
181     Spice_Version,  /* version */
182 
183     CKTinit,        /* newCircuit function */
184     CKTdestroy,     /* deleteCircuit function */
185 
186     CKTnewNode,     /* newNode function */
187     CKTground,      /* groundNode function */
188     CKTbindNode,    /* bindNode function */
189     CKTfndNode,     /* findNode function */
190     CKTinst2Node,   /* instToNode function */
191     CKTsetNodPm,    /* setNodeParm function */
192     CKTaskNodQst,   /* askNodeQuest function */
193     CKTdltNod,      /* deleteNode function */
194 
195     CKTcrtElt,      /* newInstance function */
196     CKTparam,       /* setInstanceParm function */
197     CKTask,         /* askInstanceQuest function */
198     CKTfndDev,      /* findInstance funciton */
199     CKTdltInst,     /* deleteInstance function */
200 
201     CKTmodCrt,      /* newModel function */
202     CKTmodParam,    /* setModelParm function */
203     CKTmodAsk,      /* askModelQuest function */
204     CKTfndMod,      /* findModel function */
205     CKTdltMod,      /* deleteModel function */
206 
207     CKTnewTask,     /* newTask function */
208     CKTnewAnal,     /* newAnalysis function */
209     CKTsetAnalPm,   /* setAnalysisParm function */
210     CKTaskAnalQ,    /* askAnalysisQuest function */
211     CKTfndAnal,     /* findAnalysis function */
212     CKTfndTask,     /* findTask function */
213     CKTdelTask,     /* deleteTask function */
214 
215     CKTdoJob,       /* doAnalyses function */
216     CKTtrouble,     /* non-convergence message function */
217 
218     sizeof(DEVices)/sizeof(SPICEdev *),
219     (IFdevice**)DEVices,
220 
221     sizeof(analInfo)/sizeof(SPICEanalysis *),
222     (IFanalysis **)analInfo,
223 
224     sizeof(nodeParms)/sizeof(IFparm),
225     nodeParms,
226 
227     sizeof(specSigList)/sizeof(char *),
228     specSigList,
229 
230 };
231