Jspice3
Main Page
Data Structures
Files
File List
Globals
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)
118
task->
TSKintegrateMethod
=
TRAPEZOIDAL
;
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
197
SPICEanalysis
OPTinfo
= {
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
};
OPT_MAXORD
#define OPT_MAXORD
Definition:
optdefs.h:58
OPT_LOADTIME
#define OPT_LOADTIME
Definition:
optdefs.h:67
TSKtask::TSKdefaultMosW
double TSKdefaultMosW
Definition:
tskdefs.h:49
OPT_DEFAD
#define OPT_DEFAD
Definition:
optdefs.h:55
TSKtask::TSKtryToCompact
unsigned int TSKtryToCompact
Definition:
tskdefs.h:54
cktdefs.h
OPT_BYPASS
#define OPT_BYPASS
Definition:
optdefs.h:57
OPT_PIVTOL
#define OPT_PIVTOL
Definition:
optdefs.h:44
TSKtask::TSKnumGminSteps
int TSKnumGminSteps
Definition:
tskdefs.h:33
OPT_ABSTOL
#define OPT_ABSTOL
Definition:
optdefs.h:40
TSKtask::TSKpivotAbsTol
double TSKpivotAbsTol
Definition:
tskdefs.h:36
TSKtask::TSKbypass
int TSKbypass
Definition:
tskdefs.h:27
OPT_ITL2
#define OPT_ITL2
Definition:
optdefs.h:49
OPT_TRYTOCOMPACT
#define OPT_TRYTOCOMPACT
Definition:
optdefs.h:84
TSKtask::TSKmaxOrder
int TSKmaxOrder
Definition:
tskdefs.h:17
NODOMAIN
#define NODOMAIN
Definition:
jobdefs.h:32
OPT_DECOMP
#define OPT_DECOMP
Definition:
optdefs.h:68
OPT_GMINSTEPS
#define OPT_GMINSTEPS
Definition:
optdefs.h:77
OPT_TRANPTS
#define OPT_TRANPTS
Definition:
optdefs.h:62
if
if(TDesc==NULL)
Definition:
cd.c:1326
TRAPEZOIDAL
#define TRAPEZOIDAL
Definition:
cktdefs.h:92
OPT_ITL4
#define OPT_ITL4
Definition:
optdefs.h:51
OPT_ITL1
#define OPT_ITL1
Definition:
optdefs.h:47
TSKtask::TSKtemp
double TSKtemp
Definition:
tskdefs.h:15
OPT_DEFL
#define OPT_DEFL
Definition:
optdefs.h:53
IF_ASK
#define IF_ASK
Definition:
ifsim.h:136
TSKtask::TSKdcMaxIter
int TSKdcMaxIter
Definition:
tskdefs.h:28
OPT_TRANIT
#define OPT_TRANIT
Definition:
optdefs.h:61
CONSTCtoK
#define CONSTCtoK
Definition:
const.h:11
OPT_SOLVE
#define OPT_SOLVE
Definition:
optdefs.h:69
OPT_VNTOL
#define OPT_VNTOL
Definition:
optdefs.h:41
OPT_TEMP
#define OPT_TEMP
Definition:
optdefs.h:73
E_BADPARM
#define E_BADPARM
Definition:
iferrmsg.h:26
OPT_TRANTIME
#define OPT_TRANTIME
Definition:
optdefs.h:66
OPTparse
int OPTparse()
uIFvalue::iValue
int iValue
Definition:
ifsim.h:232
jobdefs.h
uIFvalue::rValue
double rValue
Definition:
ifsim.h:233
OPTinfo
SPICEanalysis OPTinfo
Definition:
optsetp.c:197
optdefs.h
OK
#define OK
Definition:
iferrmsg.h:17
GEAR
#define GEAR
Definition:
cktdefs.h:93
TSKtask::TSKchgtol
double TSKchgtol
Definition:
tskdefs.h:39
OPT_PIVREL
#define OPT_PIVREL
Definition:
optdefs.h:45
OPT_TNOM
#define OPT_TNOM
Definition:
optdefs.h:46
OPT_DEFW
#define OPT_DEFW
Definition:
optdefs.h:54
OPT_TRANSOLVE
#define OPT_TRANSOLVE
Definition:
optdefs.h:72
TSKtask::TSKdefaultMosAD
double TSKdefaultMosAD
Definition:
tskdefs.h:50
OPT_MINBREAK
#define OPT_MINBREAK
Definition:
optdefs.h:78
OPT_GMIN
#define OPT_GMIN
Definition:
optdefs.h:38
TSKtask::TSKtrtol
double TSKtrtol
Definition:
tskdefs.h:47
TSKtask::TSKfixLimit
unsigned int TSKfixLimit
Definition:
tskdefs.h:52
OPT_ITL5
#define OPT_ITL5
Definition:
optdefs.h:52
OPT_DEFAS
#define OPT_DEFAS
Definition:
optdefs.h:56
OPTaskQuest
int OPTaskQuest()
TSKtask::TSKdefaultMosL
double TSKdefaultMosL
Definition:
tskdefs.h:48
IF_SET
#define IF_SET
Definition:
ifsim.h:135
sperror.h
OPT_TRANACCPT
#define OPT_TRANACCPT
Definition:
optdefs.h:63
OPT_MATSIZ
#define OPT_MATSIZ
Definition:
optdefs.h:85
NULL
#define NULL
Definition:
spdefs.h:121
TSKtask::TSKnoOpIter
unsigned int TSKnoOpIter
Definition:
tskdefs.h:53
OPT_EQNS
#define OPT_EQNS
Definition:
optdefs.h:80
IF_INTEGER
#define IF_INTEGER
Definition:
ifsim.h:107
OPT_NONZ
#define OPT_NONZ
Definition:
optdefs.h:86
OPT_SRCSTEPS
#define OPT_SRCSTEPS
Definition:
optdefs.h:76
OPTcount
int OPTcount
Definition:
optsetp.c:195
OPT_REORDTIME
#define OPT_REORDTIME
Definition:
optdefs.h:82
TSKtask::TSKnumSrcSteps
int TSKnumSrcSteps
Definition:
tskdefs.h:32
OPT_ITERS
#define OPT_ITERS
Definition:
optdefs.h:60
spice.h
iferrmsg.h
OPT_METHOD
#define OPT_METHOD
Definition:
optdefs.h:83
tskdefs.h
OPTsetParm
int OPTsetParm(GENERIC *cktp, GENERIC *anal, int which, IFvalue *value)
Definition:
optsetp.c:27
sIFparm
Definition:
ifsim.h:54
IF_REAL
#define IF_REAL
Definition:
ifsim.h:108
const.h
OPT_TRTOL
#define OPT_TRTOL
Definition:
optdefs.h:42
return
return(True)
IF_FLAG
#define IF_FLAG
Definition:
ifsim.h:106
OPT_CHGTOL
#define OPT_CHGTOL
Definition:
optdefs.h:43
OPT_ITL3
#define OPT_ITL3
Definition:
optdefs.h:50
TSKtask::TSKreltol
double TSKreltol
Definition:
tskdefs.h:38
TSKtask::TSKdcTrcvMaxIter
int TSKdcTrcvMaxIter
Definition:
tskdefs.h:29
uIFvalue
Definition:
ifsim.h:231
OPT_FILLIN
#define OPT_FILLIN
Definition:
optdefs.h:87
TSKtask::TSKintegrateMethod
int TSKintegrateMethod
Definition:
tskdefs.h:18
OPT_OLDLIMIT
#define OPT_OLDLIMIT
Definition:
optdefs.h:74
OPT_TRANRJCT
#define OPT_TRANRJCT
Definition:
optdefs.h:64
OPT_TRANCURITER
#define OPT_TRANCURITER
Definition:
optdefs.h:75
OPT_TRANDECOMP
#define OPT_TRANDECOMP
Definition:
optdefs.h:71
TSKtask::TSKpivotRelTol
double TSKpivotRelTol
Definition:
tskdefs.h:37
uIFvalue::sValue
char * sValue
Definition:
ifsim.h:235
TSKtask::TSKvoltTol
double TSKvoltTol
Definition:
tskdefs.h:40
TSKtask::TSKnomTemp
double TSKnomTemp
Definition:
tskdefs.h:16
TSKtask
Definition:
tskdefs.h:11
OPT_RELTOL
#define OPT_RELTOL
Definition:
optdefs.h:39
E_METHOD
#define E_METHOD
Definition:
sperror.h:20
OPTtbl
static IFparm OPTtbl[]
Definition:
optsetp.c:131
TSKtask::TSKgmin
double TSKgmin
Definition:
tskdefs.h:45
SPICEanalysis
Definition:
jobdefs.h:11
IF_STRING
#define IF_STRING
Definition:
ifsim.h:111
TSKtask::TSKminBreak
double TSKminBreak
Definition:
tskdefs.h:34
TSKtask::TSKtranMaxIter
int TSKtranMaxIter
Definition:
tskdefs.h:30
OPT_NOOPITER
#define OPT_NOOPITER
Definition:
optdefs.h:79
TSKtask::TSKabstol
double TSKabstol
Definition:
tskdefs.h:35
GENERIC
char GENERIC
Definition:
ifsim.h:27
OPT_TOTANALTIME
#define OPT_TOTANALTIME
Definition:
optdefs.h:65
src
lib
analysis
optsetp.c
Generated by
1.8.11