Jspice3
jfetask.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: 1987 Mathew Lew and Thomas L. Quarles
5  1993 Stephen R. Whiteley
6 ****************************************************************************/
7 /********** new in 3f2
8 Sydney University mods Copyright(c) 1989 Anthony E. Parker, David J. Skellern
9  Laboratory for Communication Science Engineering
10  Sydney University Department of Electrical Engineering, Australia
11 **********/
12 
13 #include "spice.h"
14 #include <stdio.h>
15 #include "jfetdefs.h"
16 #include "tskdefs.h"
17 #include "sperror.h"
18 #include "const.h"
19 #include "util.h"
20 
21 
22 /*ARGSUSED*/
23 int
24 JFETask(ckt,inst,which,value,select)
25 
26 CKTcircuit *ckt;
27 GENinstance *inst;
28 int which;
29 IFvalue *value;
30 IFvalue *select;
31 {
32  JFETinstance *here = (JFETinstance*)inst;
33  static char *msg = "Current and power not available for ac analysis";
34 
35  switch (which) {
36 
37  case JFET_AREA:
38  value->rValue = here->JFETarea;
39  break;
40  case JFET_IC_VDS:
41  value->rValue = here->JFETicVDS;
42  break;
43  case JFET_IC_VGS:
44  value->rValue = here->JFETicVGS;
45  break;
46  case JFET_OFF:
47  value->iValue = here->JFEToff;
48  break;
49  case JFET_TEMP:
50  value->rValue = here->JFETtemp-CONSTCtoK;
51  break;
52  case JFET_DRAINNODE:
53  value->iValue = here->JFETdrainNode;
54  break;
55  case JFET_GATENODE:
56  value->iValue = here->JFETgateNode;
57  break;
58  case JFET_SOURCENODE:
59  value->iValue = here->JFETsourceNode;
60  break;
62  value->iValue = here->JFETdrainPrimeNode;
63  break;
65  value->iValue = here->JFETsourcePrimeNode;
66  break;
67  case JFET_VGS:
68  if (ckt->CKTstate0)
69  value->rValue = *(ckt->CKTstate0 + here->JFETvgs);
70  break;
71  case JFET_VGD:
72  if (ckt->CKTstate0)
73  value->rValue = *(ckt->CKTstate0 + here->JFETvgd);
74  break;
75  case JFET_CG:
76  if (ckt->CKTstate0)
77  value->rValue = *(ckt->CKTstate0 + here->JFETcg);
78  break;
79  case JFET_CD:
80  if (ckt->CKTstate0)
81  value->rValue = *(ckt->CKTstate0 + here->JFETcd);
82  break;
83  case JFET_CGD:
84  if (ckt->CKTstate0)
85  value->rValue = *(ckt->CKTstate0 + here->JFETcgd);
86  break;
87  case JFET_GM:
88  if (ckt->CKTstate0)
89  value->rValue = *(ckt->CKTstate0 + here->JFETgm);
90  break;
91  case JFET_GDS:
92  if (ckt->CKTstate0)
93  value->rValue = *(ckt->CKTstate0 + here->JFETgds);
94  break;
95  case JFET_GGS:
96  if (ckt->CKTstate0)
97  value->rValue = *(ckt->CKTstate0 + here->JFETggs);
98  break;
99  case JFET_GGD:
100  if (ckt->CKTstate0)
101  value->rValue = *(ckt->CKTstate0 + here->JFETggd);
102  break;
103  case JFET_QGS:
104  if (ckt->CKTstate0)
105  value->rValue = *(ckt->CKTstate0 + here->JFETqgs);
106  break;
107  case JFET_CQGS:
108  if (ckt->CKTstate0)
109  value->rValue = *(ckt->CKTstate0 + here->JFETcqgs);
110  break;
111  case JFET_QGD:
112  if (ckt->CKTstate0)
113  value->rValue = *(ckt->CKTstate0 + here->JFETqgd);
114  break;
115  case JFET_CQGD:
116  if (ckt->CKTstate0)
117  value->rValue = *(ckt->CKTstate0 + here->JFETcqgd);
118  break;
119  case JFET_CS :
120  if (ckt->CKTcurrentAnalysis & DOING_AC) {
121  errMsg = MALLOC(strlen(msg)+1);
122  errRtn = "JFETask";
123  strcpy(errMsg,msg);
124  return (E_ASKCURRENT);
125  }
126  if (ckt->CKTstate0) {
127  value->rValue = -*(ckt->CKTstate0 + here->JFETcd);
128  value->rValue -= *(ckt->CKTstate0 + here->JFETcg);
129  }
130  break;
131  case JFET_POWER :
132  if (ckt->CKTcurrentAnalysis & DOING_AC) {
133  errMsg = MALLOC(strlen(msg)+1);
134  errRtn = "JFETask";
135  strcpy(errMsg,msg);
136  return (E_ASKPOWER);
137  }
138  if (ckt->CKTstate0 && ckt->CKTrhsOld) {
139  value->rValue = *(ckt->CKTstate0 + here->JFETcd) *
140  *(ckt->CKTrhsOld + here->JFETdrainNode);
141  value->rValue += *(ckt->CKTstate0 + here->JFETcg) *
142  *(ckt->CKTrhsOld + here->JFETgateNode);
143  value->rValue -= (*(ckt->CKTstate0 + here->JFETcd) +
144  *(ckt->CKTstate0 + here->JFETcg)) *
145  *(ckt->CKTrhsOld + here->JFETsourceNode);
146  }
147  break;
148  default:
149  return (E_BADPARM);
150  }
151  return (OK);
152 }
153 
#define JFET_GGS
Definition: jfetdefs.h:267
#define JFET_SOURCEPRIMENODE
Definition: jfetdefs.h:259
#define E_ASKCURRENT
Definition: sperror.h:26
#define JFET_IC_VDS
Definition: jfetdefs.h:227
#define JFET_AREA
Definition: jfetdefs.h:226
char * strcpy()
#define JFET_VGD
Definition: jfetdefs.h:261
#define CONSTCtoK
Definition: const.h:11
char * errMsg
Definition: main.c:42
#define JFET_CS
Definition: jfetdefs.h:273
int JFETdrainPrimeNode
Definition: jfetdefs.h:32
int JFETgateNode
Definition: jfetdefs.h:30
#define E_BADPARM
Definition: iferrmsg.h:26
#define JFET_CQGD
Definition: jfetdefs.h:272
int iValue
Definition: ifsim.h:232
double rValue
Definition: ifsim.h:233
double JFETarea
Definition: jfetdefs.h:134
#define JFET_IC_VGS
Definition: jfetdefs.h:228
#define DOING_AC
Definition: tskdefs.h:24
double JFETtemp
Definition: jfetdefs.h:137
#define OK
Definition: iferrmsg.h:17
#define MALLOC(x)
Definition: util.h:9
#define JFET_CGD
Definition: jfetdefs.h:264
double JFETicVGS
Definition: jfetdefs.h:136
#define JFET_CQGS
Definition: jfetdefs.h:270
#define JFET_OFF
Definition: jfetdefs.h:230
#define JFET_POWER
Definition: jfetdefs.h:274
double JFETicVDS
Definition: jfetdefs.h:135
#define JFET_VGS
Definition: jfetdefs.h:260
#define JFET_QGD
Definition: jfetdefs.h:271
#define JFET_GATENODE
Definition: jfetdefs.h:256
#define JFET_GM
Definition: jfetdefs.h:265
int JFETdrainNode
Definition: jfetdefs.h:29
int JFETask(CKTcircuit *ckt, GENinstance *inst, int which, IFvalue *value, IFvalue *select)
Definition: jfetask.c:24
#define JFET_SOURCENODE
Definition: jfetdefs.h:257
char * errRtn
Definition: main.c:41
#define JFET_QGS
Definition: jfetdefs.h:269
int JFETsourcePrimeNode
Definition: jfetdefs.h:33
#define E_ASKPOWER
Definition: sperror.h:27
unsigned JFEToff
Definition: jfetdefs.h:127
#define JFET_CG
Definition: jfetdefs.h:262
#define JFET_GDS
Definition: jfetdefs.h:266
#define JFET_DRAINPRIMENODE
Definition: jfetdefs.h:258
int JFETsourceNode
Definition: jfetdefs.h:31
#define JFET_DRAINNODE
Definition: jfetdefs.h:255
#define JFET_TEMP
Definition: jfetdefs.h:231
#define JFET_GGD
Definition: jfetdefs.h:268
#define JFET_CD
Definition: jfetdefs.h:263