1 /**********
2 Copyright 1990 Regents of the University of California.  All rights reserved.
3 Author: 1985 Thomas L. Quarles
4 **********/
5 
6 
7 #include "ngspice/ngspice.h"
8 #include "ngspice/ifsim.h"
9 #include "ngspice/iferrmsg.h"
10 #include "ngspice/pzdefs.h"
11 #include "ngspice/cktdefs.h"
12 
13 #include "analysis.h"
14 
15 /* ARGSUSED */
16 int
PZsetParm(CKTcircuit * ckt,JOB * anal,int which,IFvalue * value)17 PZsetParm(CKTcircuit *ckt, JOB *anal, int which, IFvalue *value)
18 {
19     PZAN *job = (PZAN *) anal;
20 
21     NG_IGNORE(ckt);
22 
23     switch(which) {
24 
25     case PZ_NODEI:
26         job->PZin_pos = value->nValue->number;
27         break;
28 
29     case PZ_NODEG:
30         job->PZin_neg = value->nValue->number;
31         break;
32 
33     case PZ_NODEJ:
34         job->PZout_pos = value->nValue->number;
35         break;
36 
37     case PZ_NODEK:
38         job->PZout_neg = value->nValue->number;
39         break;
40 
41     case PZ_V:
42         if(value->iValue) {
43             job->PZinput_type = PZ_IN_VOL;
44         }
45         break;
46 
47     case PZ_I:
48         if(value->iValue) {
49             job->PZinput_type = PZ_IN_CUR;
50         }
51         break;
52 
53     case PZ_POL:
54         if(value->iValue) {
55             job->PZwhich = PZ_DO_POLES;
56         }
57         break;
58 
59     case PZ_ZER:
60         if(value->iValue) {
61             job->PZwhich = PZ_DO_ZEROS;
62         }
63         break;
64 
65     case PZ_PZ:
66         if(value->iValue) {
67             job->PZwhich = PZ_DO_POLES | PZ_DO_ZEROS;
68         }
69         break;
70 
71     default:
72         return(E_BADPARM);
73     }
74     return(OK);
75 }
76 
77 
78 static IFparm PZparms[] = {
79     { "nodei",  PZ_NODEI,   IF_SET|IF_ASK|IF_NODE,  "" },
80     { "nodeg",  PZ_NODEG,   IF_SET|IF_ASK|IF_NODE,  "" },
81     { "nodej",  PZ_NODEJ,   IF_SET|IF_ASK|IF_NODE,  "" },
82     { "nodek",  PZ_NODEK,   IF_SET|IF_ASK|IF_NODE,  "" },
83     { "vol",    PZ_V,       IF_SET|IF_ASK|IF_FLAG,  "" },
84     { "cur",    PZ_I,       IF_SET|IF_ASK|IF_FLAG,  "" },
85     { "pol",    PZ_POL,     IF_SET|IF_ASK|IF_FLAG,  "" },
86     { "zer",    PZ_ZER,     IF_SET|IF_ASK|IF_FLAG,  "" },
87     { "pz",     PZ_PZ,      IF_SET|IF_ASK|IF_FLAG,  "" }
88 };
89 
90 SPICEanalysis PZinfo  = {
91     {
92         "PZ",
93         "pole-zero analysis",
94 
95         NUMELEMS(PZparms),
96         PZparms
97     },
98     sizeof(PZAN),
99     NODOMAIN,
100     1,
101     PZsetParm,
102     PZaskQuest,
103     NULL,
104     PZan
105 };
106