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 1993 Stephen R. Whiteley
6 ****************************************************************************/
7
8 #include "spice.h"
9 #include <stdio.h>
10 #include "cktdefs.h"
11 #include "tfdefs.h"
12 #include "jobdefs.h"
13 #include "iferrmsg.h"
14 #include "util.h"
15 #include "cktext.h"
16
17
18 /* ARGSUSED */
19 int
TFsetParm(cktp,anal,which,value)20 TFsetParm(cktp,anal,which,value)
21
22 GENERIC *cktp;
23 GENERIC *anal;
24 int which;
25 IFvalue *value;
26 {
27 TFAN *job = (TFAN *) anal;
28
29 switch (which) {
30
31 case TF_OUTPOS:
32 job->TFoutPos = (CKTnode *)value->nValue;
33 job->TFoutIsV = TRUE;
34 job->TFoutIsI = FALSE;
35 break;
36
37 case TF_OUTNEG:
38 job->TFoutNeg = (CKTnode *)value->nValue;
39 job->TFoutIsV = TRUE;
40 job->TFoutIsI = FALSE;
41 break;
42
43 case TF_OUTNAME:
44 job->TFoutName = value->sValue;
45 break;
46
47 case TF_OUTSRC:
48 job->TFoutSrc = value->uValue;
49 job->TFoutIsV = FALSE;
50 job->TFoutIsI = TRUE;
51 break;
52
53 case TF_INSRC:
54 job->TFinSrc = value->uValue;
55 break;
56
57 default:
58 if (ACsetp(&job->AC,which,value) == OK)
59 return (OK);
60 if (DCTsetp(&job->DC,which,value) == OK)
61 return (OK);
62 return (E_BADPARM);
63 }
64 return (OK);
65 }
66
67
68 static IFparm TFparms[] = {
69 { "outpos", TF_OUTPOS, IFP|IF_NODE, "Positive output node" },
70 { "outneg", TF_OUTNEG, IFP|IF_NODE, "Negative output node" },
71 { "outname", TF_OUTNAME, IFP|IF_STRING, "Name of output variable"},
72 { "outsrc", TF_OUTSRC, IFP|IF_INSTANCE, "Output source" },
73 { "insrc", TF_INSRC, IFP|IF_INSTANCE, "Input source" },
74 { "start", AC_START, IFP|IF_REAL, "starting frequency" },
75 { "stop", AC_STOP, IFP|IF_REAL, "ending frequency" },
76 { "numsteps", AC_STEPS, IFP|IF_INTEGER, "number of frequencies"},
77 { "dec", AC_DEC, IFP|IF_FLAG, "step by decades" },
78 { "oct", AC_OCT, IFP|IF_FLAG, "step by octaves" },
79 { "lin", AC_LIN, IFP|IF_FLAG, "step linearly" },
80 { "name1", DC_NAME1, IFP|IF_INSTANCE, "name of source to step" },
81 { "start1", DC_START1, IFP|IF_REAL, "starting voltage/current"},
82 { "stop1", DC_STOP1, IFP|IF_REAL, "ending voltage/current" },
83 { "step1", DC_STEP1, IFP|IF_REAL, "voltage/current step" },
84 { "name2", DC_NAME2, IFP|IF_INSTANCE, "name of source to step" },
85 { "start2", DC_START2, IFP|IF_REAL, "starting voltage/current"},
86 { "stop2", DC_STOP2, IFP|IF_REAL, "ending voltage/current" },
87 { "step2", DC_STEP2, IFP|IF_REAL, "voltage/current step" }
88 };
89
90 SPICEanalysis TFinfo = {
91 {
92 "TF",
93 "transfer function analysis",
94
95 sizeof(TFparms)/sizeof(IFparm),
96 TFparms
97 },
98 sizeof(TFAN),
99 NODOMAIN,
100 TFparse,
101 TFsetParm,
102 TFaskQuest,
103 TFan
104 };
105