Jspice3
senssetp.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: UCB CAD Group
5  1993 Stephen R. Whiteley
6 ****************************************************************************/
7 
8 #include "spice.h"
9 #include <stdio.h>
10 #include "cktdefs.h"
11 #include "sensdefs.h"
12 #include "jobdefs.h"
13 #include "iferrmsg.h"
14 
15 
16 /* ARGSUSED */
17 int
18 SENSsetParm(cktp,anal,which,value)
19 
20 GENERIC *cktp;
21 GENERIC *anal;
22 int which;
23 IFvalue *value;
24 {
25  SENSAN *job = (SENSAN *) anal;
26 
27  switch (which) {
28 
29  case SENS_DEFTOL:
30  job->SENSdefTol = value->rValue;
31  break;
32 
33  case SENS_DEFPERTURB:
34  job->SENSdefPert = value->rValue;
35  break;
36 
37  case SENS_POS:
38  job->SENSoutPos = (CKTnode *) value->nValue;
39  break;
40 
41  case SENS_NEG:
42  job->SENSoutNeg = (CKTnode *) value->nValue;
43  break;
44 
45  case SENS_SRC:
46  job->SENSoutSrc = value->uValue;
47  break;
48 
49  case SENS_NAME:
50  job->SENSoutName = value->sValue;
51  break;
52 
53  default:
54  if (ACsetp(&job->AC,which,value) == OK)
55  return (OK);
56  if (DCTsetp(&job->DC,which,value) == OK)
57  return (OK);
58  return (E_BADPARM);
59  }
60  return (OK);
61 }
62 
63 
64 static IFparm SENSparms[] = {
65  { "deftol", SENS_DEFTOL, IFP|IF_REAL, "default tolerance" },
66  { "defperturb",SENS_DEFPERTURB, IFP|IF_REAL, "default perterbation" },
67  { "outpos", SENS_POS, IFP|IF_NODE, "output positive node" },
68  { "outneg", SENS_NEG, IFP|IF_NODE, "output negative node" },
69  { "outsrc", SENS_SRC, IFP|IF_INSTANCE, "output current" },
70  { "outname", SENS_NAME, IFP|IF_STRING, "output variable name" },
71  { "start", AC_START, IFP|IF_REAL, "starting frequency" },
72  { "stop", AC_STOP, IFP|IF_REAL, "ending frequency" },
73  { "numsteps", AC_STEPS, IFP|IF_INTEGER, "number of frequencies"},
74  { "dec", AC_DEC, IFP|IF_FLAG, "step by decades" },
75  { "oct", AC_OCT, IFP|IF_FLAG, "step by octaves" },
76  { "lin", AC_LIN, IFP|IF_FLAG, "step linearly" },
77  { "name1", DC_NAME1, IFP|IF_INSTANCE, "name of source to step" },
78  { "start1", DC_START1, IFP|IF_REAL, "starting voltage/current"},
79  { "stop1", DC_STOP1, IFP|IF_REAL, "ending voltage/current" },
80  { "step1", DC_STEP1, IFP|IF_REAL, "voltage/current step" },
81  { "name2", DC_NAME2, IFP|IF_INSTANCE, "name of source to step" },
82  { "start2", DC_START2, IFP|IF_REAL, "starting voltage/current"},
83  { "stop2", DC_STOP2, IFP|IF_REAL, "ending voltage/current" },
84  { "step2", DC_STEP2, IFP|IF_REAL, "voltage/current step" }
85 
86 #ifdef notdef
87  /* Future coding */
88  /* perturbation limits */
89  /* defaults for the analysis */
90  { "type", SENS_TYPE, IF_SET|IF_INTEGER,
91  "describe device, model or element parameters" },
92 
93  { "device", SENS_DEVICE, IF_STRING, "type of model or device" },
94  { "devdeftol", SENS_DEVDEFTOL, IF_SET|IF_REAL,
95  "default tolerance (device type)" },
96  { "devdefperturb",SENS_DEVDEFPERT, IF_SET|IF_REAL,
97  "default perturbation (device type)" },
98  { "moddeftol", SENS_DEVDEFTOL, IF_SET|IF_REAL,
99  "default tolerance (model)" },
100  { "moddefperturb",SENS_DEVDEFPERT, IF_SET|IF_REAL,
101  "default perturbation (model)" },
102 
103  /*{ "name", SENS_NAME, IF_SET|IF_STRING,
104  "name of model or element" }, */
105  { "param", SENS_PARAM,IF_SET|IF_STRING, "name of parameter" },
106  { "tol", SENS_TOL, IF_SET|IF_REAL, "tolerance" },
107  { "perturb", SENS_PERT, IF_SET|IF_REAL, "perturbation" }
108 #endif
109 
110 };
111 
113  {
114  "SENS",
115  "Sensitivity analysis",
116  sizeof(SENSparms)/sizeof(IFparm),
117  SENSparms
118  },
119  sizeof(SENSAN),
121  SENSparse,
122  SENSsetParm,
123  SENSaskQuest,
124  SENSan
125 };
#define AC_STOP
Definition: analysis.h:56
SPICEanalysis SENSinfo
Definition: senssetp.c:112
#define AC_START
Definition: analysis.h:55
#define DC_STOP1
Definition: analysis.h:19
#define DC_START1
Definition: analysis.h:18
#define SENS_DEVICE
Definition: sensdefs.h:92
double SENSdefPert
Definition: sensdefs.h:45
#define SENS_DEVDEFTOL
Definition: sensdefs.h:89
#define AC_OCT
Definition: analysis.h:53
char * SENSoutName
Definition: sensdefs.h:43
#define E_BADPARM
Definition: iferrmsg.h:26
#define SENS_DEVDEFPERT
Definition: sensdefs.h:90
#define IF_INSTANCE
Definition: ifsim.h:112
#define SENS_NAME
Definition: sensdefs.h:85
double rValue
Definition: ifsim.h:233
#define AC_LIN
Definition: analysis.h:54
int SENSaskQuest()
#define SENS_DEFPERTURB
Definition: sensdefs.h:88
int SENSan()
#define DC_NAME2
Definition: analysis.h:21
#define OK
Definition: iferrmsg.h:17
#define AC_STEPS
Definition: analysis.h:57
#define IFP
Definition: analysis.h:10
#define DC_STEP1
Definition: analysis.h:20
#define IF_SET
Definition: ifsim.h:135
CKTnode * SENSoutPos
Definition: sensdefs.h:39
IFnode nValue
Definition: ifsim.h:237
int ACsetp()
#define IF_INTEGER
Definition: ifsim.h:107
#define SENS_DEFTOL
Definition: sensdefs.h:86
#define SENS_POS
Definition: sensdefs.h:82
#define DC_NAME1
Definition: analysis.h:17
Definition: ifsim.h:54
struct sACprms AC
Definition: sensdefs.h:49
#define IF_REAL
Definition: ifsim.h:108
#define FREQUENCYDOMAIN
Definition: jobdefs.h:34
#define IF_FLAG
Definition: ifsim.h:106
#define AC_DEC
Definition: analysis.h:52
int SENSsetParm(GENERIC *cktp, GENERIC *anal, int which, IFvalue *value)
Definition: senssetp.c:18
int SENSparse()
#define SENS_PERT
Definition: sensdefs.h:95
CKTnode * SENSoutNeg
Definition: sensdefs.h:40
#define SENS_TOL
Definition: sensdefs.h:94
IFuid SENSoutSrc
Definition: sensdefs.h:41
char * sValue
Definition: ifsim.h:235
#define SENS_NEG
Definition: sensdefs.h:83
double SENSdefTol
Definition: sensdefs.h:44
#define DC_START2
Definition: analysis.h:22
static IFparm SENSparms[]
Definition: senssetp.c:64
#define DC_STOP2
Definition: analysis.h:23
#define SENS_SRC
Definition: sensdefs.h:84
#define IF_STRING
Definition: ifsim.h:111
#define DC_STEP2
Definition: analysis.h:24
struct sDCTprms DC
Definition: sensdefs.h:50
#define SENS_PARAM
Definition: sensdefs.h:93
#define IF_NODE
Definition: ifsim.h:110
char GENERIC
Definition: ifsim.h:27
IFuid uValue
Definition: ifsim.h:236
int DCTsetp()
#define SENS_TYPE
Definition: sensdefs.h:91