Jspice3
mesask.c File Reference
#include "spice.h"
#include <stdio.h>
#include "mesdefs.h"
#include "tskdefs.h"
#include "sperror.h"
#include "util.h"
Include dependency graph for mesask.c:

Go to the source code of this file.

Functions

int MESask (CKTcircuit *ckt, GENinstance *inst, int which, IFvalue *value, IFvalue *select)
 

Function Documentation

int MESask ( CKTcircuit ckt,
GENinstance inst,
int  which,
IFvalue value,
IFvalue select 
)

Definition at line 18 of file mesask.c.

25 {
26  MESinstance *here = (MESinstance*)inst;
27  static char *msg = "Current and power not available in ac analysis";
28 
29  switch (which) {
30 
31  case MES_AREA:
32  value->rValue = here->MESarea;
33  break;
34  case MES_IC_VDS:
35  value->rValue = here->MESicVDS;
36  break;
37  case MES_IC_VGS:
38  value->rValue = here->MESicVGS;
39  break;
40  case MES_OFF:
41  value->iValue = here->MESoff;
42  break;
43  case MES_CS :
44  if (ckt->CKTcurrentAnalysis & DOING_AC) {
45  errMsg = MALLOC(strlen(msg)+1);
46  errRtn = "MESask";
47  strcpy(errMsg,msg);
48  return (E_ASKCURRENT);
49  }
50  if (ckt->CKTstate0) {
51  value->rValue = -*(ckt->CKTstate0 + here->MEScd);
52  value->rValue -= *(ckt->CKTstate0 + here->MEScg);
53  }
54  break;
55  case MES_POWER :
56  if (ckt->CKTcurrentAnalysis & DOING_AC) {
57  errMsg = MALLOC(strlen(msg)+1);
58  errRtn = "MESask";
59  strcpy(errMsg,msg);
60  return (E_ASKPOWER);
61  }
62  if (ckt->CKTstate0 && ckt->CKTrhsOld) {
63  value->rValue = *(ckt->CKTstate0 + here->MEScd) *
64  *(ckt->CKTrhsOld + here->MESdrainNode);
65  value->rValue += *(ckt->CKTstate0 + here->MEScg) *
66  *(ckt->CKTrhsOld + here->MESgateNode);
67  value->rValue -= (*(ckt->CKTstate0+here->MEScd) +
68  *(ckt->CKTstate0 + here->MEScg)) *
69  *(ckt->CKTrhsOld + here->MESsourceNode);
70  }
71  break;
72  case MES_DRAINNODE:
73  value->iValue = here->MESdrainNode;
74  break;
75  case MES_GATENODE:
76  value->iValue = here->MESgateNode;
77  break;
78  case MES_SOURCENODE:
79  value->iValue = here->MESsourceNode;
80  break;
81  case MES_DRAINPRIMENODE:
82  value->iValue = here->MESdrainPrimeNode;
83  break;
84  case MES_VGS:
85  if (ckt->CKTstate0)
86  value->rValue = *(ckt->CKTstate0 + here->MESvgs);
87  break;
88  case MES_VGD:
89  if (ckt->CKTstate0)
90  value->rValue = *(ckt->CKTstate0 + here->MESvgd);
91  break;
92  case MES_CG:
93  if (ckt->CKTstate0)
94  value->rValue = *(ckt->CKTstate0 + here->MEScg);
95  break;
96  case MES_CD:
97  if (ckt->CKTstate0)
98  value->rValue = *(ckt->CKTstate0 + here->MEScd);
99  break;
100  case MES_CGD:
101  if (ckt->CKTstate0)
102  value->rValue = *(ckt->CKTstate0 + here->MEScgd);
103  break;
104  case MES_GM:
105  if (ckt->CKTstate0)
106  value->rValue = *(ckt->CKTstate0 + here->MESgm);
107  break;
108  case MES_GDS:
109  if (ckt->CKTstate0)
110  value->rValue = *(ckt->CKTstate0 + here->MESgds);
111  break;
112  case MES_GGS:
113  if (ckt->CKTstate0)
114  value->rValue = *(ckt->CKTstate0 + here->MESggs);
115  break;
116  case MES_GGD:
117  if (ckt->CKTstate0)
118  value->rValue = *(ckt->CKTstate0 + here->MESggd);
119  break;
120  case MES_QGS:
121  if (ckt->CKTstate0)
122  value->rValue = *(ckt->CKTstate0 + here->MESqgs);
123  break;
124  case MES_CQGS:
125  if (ckt->CKTstate0)
126  value->rValue = *(ckt->CKTstate0 + here->MEScqgs);
127  break;
128  case MES_QGD:
129  if (ckt->CKTstate0)
130  value->rValue = *(ckt->CKTstate0 + here->MESqgd);
131  break;
132  case MES_CQGD:
133  if (ckt->CKTstate0)
134  value->rValue = *(ckt->CKTstate0 + here->MEScqgd);
135  break;
136  default:
137  return (E_BADPARM);
138  }
139  return (OK);
140 }
#define MES_OFF
Definition: mesdefs.h:221
#define E_ASKCURRENT
Definition: sperror.h:26
#define MES_CQGS
Definition: mesdefs.h:260
char * strcpy()
#define MES_AREA
Definition: mesdefs.h:217
char * errMsg
Definition: main.c:42
#define MES_VGS
Definition: mesdefs.h:250
#define E_BADPARM
Definition: iferrmsg.h:26
#define MES_GATENODE
Definition: mesdefs.h:246
int iValue
Definition: ifsim.h:232
double rValue
Definition: ifsim.h:233
#define MES_IC_VGS
Definition: mesdefs.h:219
#define DOING_AC
Definition: tskdefs.h:24
#define MES_CS
Definition: mesdefs.h:222
#define MES_VGD
Definition: mesdefs.h:251
#define MES_GGS
Definition: mesdefs.h:257
#define MES_CD
Definition: mesdefs.h:253
#define OK
Definition: iferrmsg.h:17
double * CKTrhsOld
Definition: cktdefs.h:98
int MESgateNode
Definition: mesdefs.h:28
#define MES_SOURCENODE
Definition: mesdefs.h:247
#define MALLOC(x)
Definition: util.h:9
int MESdrainPrimeNode
Definition: mesdefs.h:30
#define MES_GGD
Definition: mesdefs.h:258
#define MES_CGD
Definition: mesdefs.h:254
#define MES_DRAINPRIMENODE
Definition: mesdefs.h:248
double MESarea
Definition: mesdefs.h:32
#define MES_IC_VDS
Definition: mesdefs.h:218
#define MES_DRAINNODE
Definition: mesdefs.h:245
#define MES_GM
Definition: mesdefs.h:255
#define MES_QGD
Definition: mesdefs.h:261
int MESsourceNode
Definition: mesdefs.h:29
#define MES_GDS
Definition: mesdefs.h:256
#define MES_CQGD
Definition: mesdefs.h:262
#define MES_QGS
Definition: mesdefs.h:259
double MESicVGS
Definition: mesdefs.h:34
#define MES_CG
Definition: mesdefs.h:252
char * errRtn
Definition: main.c:41
int MESdrainNode
Definition: mesdefs.h:27
#define E_ASKPOWER
Definition: sperror.h:27
double MESicVDS
Definition: mesdefs.h:33
int CKTcurrentAnalysis
Definition: cktdefs.h:130
int MESoff
Definition: mesdefs.h:66
#define MES_POWER
Definition: mesdefs.h:223