Jspice3
optsetp.c
Go to the documentation of this file.
1 /***************************************************************************
2 JSPICE3 adaptation of Spice3f2 - 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 /*
9  * OPTsetParm(ckt,opt,value)
10  * set the specified 'opt' to have value 'value' in the
11  * given circuit 'ckt'.
12  */
13 
14 #include "spice.h"
15 #include <stdio.h>
16 #include "cktdefs.h"
17 #include "optdefs.h"
18 #include "tskdefs.h"
19 #include "jobdefs.h"
20 #include "const.h"
21 #include "sperror.h"
22 #include "iferrmsg.h"
23 
24 
25 /* ARGSUSED */
26 int
27 OPTsetParm(cktp,anal,which,value)
28 
29 GENERIC *cktp;
30 GENERIC *anal;
31 int which;
32 IFvalue *value;
33 {
34  TSKtask *task = (TSKtask *)anal;
35 
36  switch (which) {
37 
38  case OPT_NOOPITER:
39  task->TSKnoOpIter = value->iValue;
40  break;
41  case OPT_GMIN:
42  task->TSKgmin = value->rValue;
43  break;
44  case OPT_RELTOL:
45  task->TSKreltol = value->rValue;
46  break;
47  case OPT_ABSTOL:
48  task->TSKabstol = value->rValue;
49  break;
50  case OPT_VNTOL:
51  task->TSKvoltTol = value->rValue;
52  break;
53  case OPT_TRTOL:
54  task->TSKtrtol = value->rValue;
55  break;
56  case OPT_CHGTOL:
57  task->TSKchgtol = value->rValue;
58  break;
59  case OPT_PIVTOL:
60  task->TSKpivotAbsTol = value->rValue;
61  break;
62  case OPT_PIVREL:
63  task->TSKpivotRelTol = value->rValue;
64  break;
65  case OPT_TNOM:
66  task->TSKnomTemp = value->rValue + CONSTCtoK;
67  /* Centegrade to Kelvin */
68  break;
69  case OPT_TEMP:
70  task->TSKtemp = value->rValue + CONSTCtoK;
71  /* Centegrade to Kelvin */
72  break;
73  case OPT_ITL1:
74  task->TSKdcMaxIter = value->iValue;
75  break;
76  case OPT_ITL2:
77  task->TSKdcTrcvMaxIter = value->iValue;
78  break;
79  case OPT_ITL3:
80  break;
81  case OPT_ITL4:
82  task->TSKtranMaxIter = value->iValue;
83  break;
84  case OPT_ITL5:
85  break;
86  case OPT_SRCSTEPS:
87  task->TSKnumSrcSteps = value->iValue;
88  break;
89  case OPT_GMINSTEPS:
90  task->TSKnumGminSteps = value->iValue;
91  break;
92  case OPT_DEFL:
93  task->TSKdefaultMosL = value->rValue;
94  break;
95  case OPT_DEFW:
96  task->TSKdefaultMosW = value->rValue;
97  break;
98  case OPT_DEFAD:
99  task->TSKdefaultMosAD = value->rValue;
100  break;
101  case OPT_DEFAS:
102  task->TSKdefaultMosAD = value->rValue;
103  break;
104  case OPT_BYPASS:
105  task->TSKbypass = value->iValue;
106  break;
107  case OPT_MAXORD:
108  task->TSKmaxOrder = value->iValue;
109  break;
110  case OPT_OLDLIMIT:
111  task->TSKfixLimit = value->iValue;
112  break;
113  case OPT_MINBREAK:
114  task->TSKminBreak = value->rValue;
115  break;
116  case OPT_METHOD:
117  if (strncmp(value->sValue,"trap", 4) == 0)
119  else if (strcmp(value->sValue,"gear") == 0)
120  task->TSKintegrateMethod = GEAR;
121  else return (E_METHOD);
122  break;
123  case OPT_TRYTOCOMPACT:
124  task->TSKtryToCompact = 1;
125  break;
126  default:
127  return (E_BADPARM);
128  }
129  return (OK);
130 }
131 static IFparm OPTtbl[] = {
132  { "noopiter", OPT_NOOPITER,IF_SET|IF_FLAG,"Go directly to gmin stepping" },
133  { "gmin", OPT_GMIN,IF_SET|IF_REAL,"Minimum conductance" },
134  { "reltol", OPT_RELTOL,IF_SET|IF_REAL ,"Relative error tolerence"},
135  { "abstol", OPT_ABSTOL,IF_SET|IF_REAL,"Absolute error tolerence" },
136  { "vntol", OPT_VNTOL,IF_SET|IF_REAL,"Voltage error tolerence" },
137  { "trtol", OPT_TRTOL,IF_SET|IF_REAL,"Truncation error overestimation factor" },
138  { "chgtol", OPT_CHGTOL,IF_SET|IF_REAL, "Charge error tolerence" },
139  { "pivtol", OPT_PIVTOL,IF_SET|IF_REAL, "Minimum acceptable pivot" },
140  { "pivrel", OPT_PIVREL,IF_SET|IF_REAL, "Minimum acceptable ratio of pivot" },
141  { "tnom", OPT_TNOM,IF_SET|IF_ASK|IF_REAL, "Nominal temperature" },
142  { "temp", OPT_TEMP,IF_SET|IF_ASK|IF_REAL, "Operating temperature" },
143  { "itl1", OPT_ITL1,IF_SET|IF_INTEGER,"DC iteration limit" },
144  { "itl2", OPT_ITL2,IF_SET|IF_INTEGER,"DC transfer curve iteration limit" },
145  { "itl3", OPT_ITL3, IF_INTEGER,"Lower transient iteration limit"},
146  { "itl4", OPT_ITL4,IF_SET|IF_INTEGER,"Upper transient iteration limit" },
147  { "itl5", OPT_ITL5, IF_INTEGER,"Total transient iteration limit"},
148  { "itl6", OPT_SRCSTEPS, IF_SET|IF_INTEGER,"Number of source steps"},
149  { "srcsteps", OPT_SRCSTEPS, IF_SET|IF_INTEGER,"Number of source steps"},
150  { "gminsteps", OPT_GMINSTEPS, IF_SET|IF_INTEGER,"Number of Gmin steps"},
151  { "acct", 0, IF_FLAG ,"Print accounting"},
152  { "list", 0, IF_FLAG, "Print a listing" },
153  { "nomod", 0, IF_FLAG, "Don't print a model summary" },
154  { "nopage", 0, IF_FLAG, "Don't insert page breaks" },
155  { "node", 0, IF_FLAG,"Print a node connection summary" },
156  { "opts", 0, IF_FLAG, "Print a list of the options" },
157  { "oldlimit", OPT_OLDLIMIT, IF_SET|IF_FLAG, "Use SPICE2 MOSfet limiting" },
158  { "numdgt", 0, IF_INTEGER, "Set number of digits printed"},
159  { "cptime", 0, IF_REAL, "Total cpu time in seconds" },
160  { "limtim", 0, IF_INTEGER, "Time to reserve for output" },
161  { "limpts", 0,IF_INTEGER,"Maximum points per analysis"},
162  { "lvlcod", 0, IF_INTEGER,"Generate machine code" },
163  { "lvltim", 0, IF_INTEGER,"Type of timestep control" },
164  { "method", OPT_METHOD, IF_SET|IF_STRING,"Integration method" },
165  { "maxord", OPT_MAXORD, IF_SET|IF_INTEGER,"Maximum integration order" },
166  { "defl", OPT_DEFL,IF_SET|IF_REAL,"Default MOSfet length" },
167  { "defw", OPT_DEFW,IF_SET|IF_REAL,"Default MOSfet width" },
168  { "minbreak", OPT_MINBREAK,IF_SET|IF_REAL,"Minimum time between breakpoints" },
169  { "defad", OPT_DEFAD,IF_SET|IF_REAL,"Default MOSfet area of drain" },
170  { "defas", OPT_DEFAS,IF_SET|IF_REAL,"Default MOSfet area of source" },
171  { "bypass",OPT_BYPASS,IF_SET|IF_INTEGER,"Allow bypass of unchanging elements"},
172  { "totiter", OPT_ITERS, IF_ASK|IF_INTEGER,"Total iterations" },
173  { "traniter", OPT_TRANIT, IF_ASK|IF_INTEGER ,"Transient iterations"},
174  { "equations", OPT_EQNS, IF_ASK|IF_INTEGER,"Circuit Equations" },
175  { "tranpoints", OPT_TRANPTS, IF_ASK|IF_INTEGER,"Transient timepoints" },
176  { "accept", OPT_TRANACCPT, IF_ASK|IF_INTEGER,"Accepted timepoints" },
177  { "rejected", OPT_TRANRJCT, IF_ASK|IF_INTEGER,"Rejected timepoints" },
178  { "time", OPT_TOTANALTIME, IF_ASK|IF_REAL,"Total Analysis Time" },
179  { "trantime", OPT_TRANTIME, IF_ASK|IF_REAL,"Transient time" },
180  { "reordertime", OPT_REORDTIME, IF_ASK|IF_REAL,"Matrix reordering time" },
181  { "lutime", OPT_DECOMP, IF_ASK|IF_REAL,"L-U decomposition time" },
182  { "solvetime", OPT_SOLVE, IF_ASK|IF_REAL,"Matrix solve time" },
183  { "tranlutime", OPT_TRANDECOMP,IF_ASK|IF_REAL,"Transient L-U decomp time"},
184  { "transolvetime", OPT_TRANSOLVE, IF_ASK|IF_REAL,"Transient solve time" },
185  { "trancuriters", OPT_TRANCURITER, IF_ASK|IF_INTEGER,
186  "Transient iters at last time point" },
187  { "loadtime", OPT_LOADTIME, IF_ASK|IF_REAL,"Load time" },
188  { "trytocompact", OPT_TRYTOCOMPACT, IF_SET|IF_FLAG,
189  "Try compaction for LTRA lines" },
190  { "matsize",OPT_MATSIZ, IF_ASK|IF_INTEGER,"Matrix size"},
191  { "nonzero",OPT_NONZ, IF_ASK|IF_INTEGER,"Number of nonzero matrix entries"},
192  { "fillin",OPT_FILLIN,IF_ASK|IF_INTEGER,"Fill-in terms from decomposition"}
193 };
194 
195 int OPTcount = sizeof(OPTtbl)/sizeof(IFparm);
196 
198  {
199  "options",
200  "Task option selection",
201  sizeof(OPTtbl)/sizeof(IFparm),
202  OPTtbl
203  },
204  0, /* no size associated with options */
205  NODOMAIN,
206  OPTparse,
207  OPTsetParm,
208  OPTaskQuest,
209  NULL
210 };
#define OPT_MAXORD
Definition: optdefs.h:58
#define OPT_LOADTIME
Definition: optdefs.h:67
double TSKdefaultMosW
Definition: tskdefs.h:49
#define OPT_DEFAD
Definition: optdefs.h:55
unsigned int TSKtryToCompact
Definition: tskdefs.h:54
#define OPT_BYPASS
Definition: optdefs.h:57
#define OPT_PIVTOL
Definition: optdefs.h:44
int TSKnumGminSteps
Definition: tskdefs.h:33
#define OPT_ABSTOL
Definition: optdefs.h:40
double TSKpivotAbsTol
Definition: tskdefs.h:36
int TSKbypass
Definition: tskdefs.h:27
#define OPT_ITL2
Definition: optdefs.h:49
#define OPT_TRYTOCOMPACT
Definition: optdefs.h:84
int TSKmaxOrder
Definition: tskdefs.h:17
#define NODOMAIN
Definition: jobdefs.h:32
#define OPT_DECOMP
Definition: optdefs.h:68
#define OPT_GMINSTEPS
Definition: optdefs.h:77
#define OPT_TRANPTS
Definition: optdefs.h:62
if(TDesc==NULL)
Definition: cd.c:1326
#define TRAPEZOIDAL
Definition: cktdefs.h:92
#define OPT_ITL4
Definition: optdefs.h:51
#define OPT_ITL1
Definition: optdefs.h:47
double TSKtemp
Definition: tskdefs.h:15
#define OPT_DEFL
Definition: optdefs.h:53
#define IF_ASK
Definition: ifsim.h:136
int TSKdcMaxIter
Definition: tskdefs.h:28
#define OPT_TRANIT
Definition: optdefs.h:61
#define CONSTCtoK
Definition: const.h:11
#define OPT_SOLVE
Definition: optdefs.h:69
#define OPT_VNTOL
Definition: optdefs.h:41
#define OPT_TEMP
Definition: optdefs.h:73
#define E_BADPARM
Definition: iferrmsg.h:26
#define OPT_TRANTIME
Definition: optdefs.h:66
int OPTparse()
int iValue
Definition: ifsim.h:232
double rValue
Definition: ifsim.h:233
SPICEanalysis OPTinfo
Definition: optsetp.c:197
#define OK
Definition: iferrmsg.h:17
#define GEAR
Definition: cktdefs.h:93
double TSKchgtol
Definition: tskdefs.h:39
#define OPT_PIVREL
Definition: optdefs.h:45
#define OPT_TNOM
Definition: optdefs.h:46
#define OPT_DEFW
Definition: optdefs.h:54
#define OPT_TRANSOLVE
Definition: optdefs.h:72
double TSKdefaultMosAD
Definition: tskdefs.h:50
#define OPT_MINBREAK
Definition: optdefs.h:78
#define OPT_GMIN
Definition: optdefs.h:38
double TSKtrtol
Definition: tskdefs.h:47
unsigned int TSKfixLimit
Definition: tskdefs.h:52
#define OPT_ITL5
Definition: optdefs.h:52
#define OPT_DEFAS
Definition: optdefs.h:56
int OPTaskQuest()
double TSKdefaultMosL
Definition: tskdefs.h:48
#define IF_SET
Definition: ifsim.h:135
#define OPT_TRANACCPT
Definition: optdefs.h:63
#define OPT_MATSIZ
Definition: optdefs.h:85
#define NULL
Definition: spdefs.h:121
unsigned int TSKnoOpIter
Definition: tskdefs.h:53
#define OPT_EQNS
Definition: optdefs.h:80
#define IF_INTEGER
Definition: ifsim.h:107
#define OPT_NONZ
Definition: optdefs.h:86
#define OPT_SRCSTEPS
Definition: optdefs.h:76
int OPTcount
Definition: optsetp.c:195
#define OPT_REORDTIME
Definition: optdefs.h:82
int TSKnumSrcSteps
Definition: tskdefs.h:32
#define OPT_ITERS
Definition: optdefs.h:60
#define OPT_METHOD
Definition: optdefs.h:83
int OPTsetParm(GENERIC *cktp, GENERIC *anal, int which, IFvalue *value)
Definition: optsetp.c:27
Definition: ifsim.h:54
#define IF_REAL
Definition: ifsim.h:108
#define OPT_TRTOL
Definition: optdefs.h:42
return(True)
#define IF_FLAG
Definition: ifsim.h:106
#define OPT_CHGTOL
Definition: optdefs.h:43
#define OPT_ITL3
Definition: optdefs.h:50
double TSKreltol
Definition: tskdefs.h:38
int TSKdcTrcvMaxIter
Definition: tskdefs.h:29
#define OPT_FILLIN
Definition: optdefs.h:87
int TSKintegrateMethod
Definition: tskdefs.h:18
#define OPT_OLDLIMIT
Definition: optdefs.h:74
#define OPT_TRANRJCT
Definition: optdefs.h:64
#define OPT_TRANCURITER
Definition: optdefs.h:75
#define OPT_TRANDECOMP
Definition: optdefs.h:71
double TSKpivotRelTol
Definition: tskdefs.h:37
char * sValue
Definition: ifsim.h:235
double TSKvoltTol
Definition: tskdefs.h:40
double TSKnomTemp
Definition: tskdefs.h:16
#define OPT_RELTOL
Definition: optdefs.h:39
#define E_METHOD
Definition: sperror.h:20
static IFparm OPTtbl[]
Definition: optsetp.c:131
double TSKgmin
Definition: tskdefs.h:45
#define IF_STRING
Definition: ifsim.h:111
double TSKminBreak
Definition: tskdefs.h:34
int TSKtranMaxIter
Definition: tskdefs.h:30
#define OPT_NOOPITER
Definition: optdefs.h:79
double TSKabstol
Definition: tskdefs.h:35
char GENERIC
Definition: ifsim.h:27
#define OPT_TOTANALTIME
Definition: optdefs.h:65