Jspice3
bjtask.c File Reference
#include "spice.h"
#include <math.h>
#include <stdio.h>
#include "bjtdefs.h"
#include "tskdefs.h"
#include "const.h"
#include "util.h"
#include "sperror.h"
Include dependency graph for bjtask.c:

Go to the source code of this file.

Functions

int BJTask (CKTcircuit *ckt, GENinstance *instPtr, int which, IFvalue *value, IFvalue *select)
 

Function Documentation

int BJTask ( CKTcircuit ckt,
GENinstance instPtr,
int  which,
IFvalue value,
IFvalue select 
)

Definition at line 25 of file bjtask.c.

32 {
33  BJTinstance *here = (BJTinstance*)instPtr;
34  double tmp;
35  static char *msg = "Current and power not available for ac analysis";
36 
37  switch (which) {
38 
39  case BJT_AREA:
40  value->rValue = here->BJTarea;
41  break;
42  case BJT_OFF:
43  value->iValue = here->BJToff;
44  break;
45  case BJT_IC_VBE:
46  value->rValue = here->BJTicVBE;
47  break;
48  case BJT_IC_VCE:
49  value->rValue = here->BJTicVCE;
50  break;
51  case BJT_TEMP:
52  value->rValue = here->BJTtemp - CONSTCtoK;
53  break;
54  case BJT_QUEST_FT:
55  if (ckt->CKTstate0) {
56  tmp = MAX(*(ckt->CKTstate0 + here->BJTcqbc),
57  *(ckt->CKTstate0 + here->BJTcqbx));
58  value->rValue = here->BJTgm/(2 * M_PI *
59  MAX(*(ckt->CKTstate0 + here->BJTcqbe),tmp));
60  }
61  break;
62  case BJT_QUEST_COLNODE:
63  value->iValue = here->BJTcolNode;
64  break;
65  case BJT_QUEST_BASENODE:
66  value->iValue = here->BJTbaseNode;
67  break;
68  case BJT_QUEST_EMITNODE:
69  value->iValue = here->BJTemitNode;
70  break;
72  value->iValue = here->BJTsubstNode;
73  break;
75  value->iValue = here->BJTcolPrimeNode;
76  break;
78  value->iValue = here->BJTbasePrimeNode;
79  break;
81  value->iValue = here->BJTemitPrimeNode;
82  break;
83  case BJT_QUEST_VBE:
84  if (ckt->CKTstate0)
85  value->rValue = *(ckt->CKTstate0 + here->BJTvbe);
86  break;
87  case BJT_QUEST_VBC:
88  if (ckt->CKTstate0)
89  value->rValue = *(ckt->CKTstate0 + here->BJTvbc);
90  break;
91  case BJT_QUEST_CC:
92  if (ckt->CKTstate0)
93  value->rValue = here->BJTcc;
94  break;
95  case BJT_QUEST_CB:
96  if (ckt->CKTstate0)
97  value->rValue = here->BJTcb;
98  break;
99  case BJT_QUEST_GPI:
100  if (ckt->CKTstate0)
101  value->rValue = here->BJTgpi;
102  break;
103  case BJT_QUEST_GMU:
104  if (ckt->CKTstate0)
105  value->rValue = here->BJTgmu;
106  break;
107  case BJT_QUEST_GM:
108  if (ckt->CKTstate0)
109  value->rValue = here->BJTgm;
110  break;
111  case BJT_QUEST_GO:
112  if (ckt->CKTstate0)
113  value->rValue = here->BJTgo;
114  break;
115  case BJT_QUEST_QBE:
116  if (ckt->CKTstate0)
117  value->rValue = *(ckt->CKTstate0 + here->BJTqbe);
118  break;
119  case BJT_QUEST_CQBE:
120  if (ckt->CKTstate0)
121  value->rValue = *(ckt->CKTstate0 + here->BJTcqbe);
122  break;
123  case BJT_QUEST_QBC:
124  if (ckt->CKTstate0)
125  value->rValue = *(ckt->CKTstate0 + here->BJTqbc);
126  break;
127  case BJT_QUEST_CQBC:
128  if (ckt->CKTstate0)
129  value->rValue = *(ckt->CKTstate0 + here->BJTcqbc);
130  break;
131  case BJT_QUEST_QCS:
132  if (ckt->CKTstate0)
133  value->rValue = *(ckt->CKTstate0 + here->BJTqcs);
134  break;
135  case BJT_QUEST_CQCS:
136  if (ckt->CKTstate0)
137  value->rValue = *(ckt->CKTstate0 + here->BJTcqcs);
138  break;
139  case BJT_QUEST_QBX:
140  if (ckt->CKTstate0)
141  value->rValue = *(ckt->CKTstate0 + here->BJTqbx);
142  break;
143  case BJT_QUEST_CQBX:
144  if (ckt->CKTstate0)
145  value->rValue = *(ckt->CKTstate0 + here->BJTcqbx);
146  break;
147  case BJT_QUEST_GX:
148  if (ckt->CKTstate0)
149  value->rValue = here->BJTgx;
150  break;
151  case BJT_QUEST_CEXBC:
152  if (ckt->CKTstate0)
153  value->rValue = *(ckt->CKTstate0 + here->BJTcexbc);
154  break;
155  case BJT_QUEST_GEQCB:
156  if (ckt->CKTstate0)
157  value->rValue = here->BJTgeqcb;
158  break;
159  case BJT_QUEST_GCCS:
160  if (ckt->CKTstate0)
161  value->rValue = here->BJTgccs;
162  break;
163  case BJT_QUEST_GEQBX:
164  if (ckt->CKTstate0)
165  value->rValue = here->BJTgeqbx;
166  break;
167  case BJT_QUEST_CE:
168  if (ckt->CKTcurrentAnalysis & DOING_AC) {
169  errMsg = MALLOC(strlen(msg)+1);
170  errRtn = "BJTask";
171  strcpy(errMsg,msg);
172  return (E_ASKCURRENT);
173  }
174  if (ckt->CKTstate0) {
175  value->rValue = -here->BJTcc;
176  value->rValue -= here->BJTcb;
177  if ((ckt->CKTcurrentAnalysis & DOING_TRAN) &&
178  !(ckt->CKTmode & MODETRANOP)) {
179  value->rValue += *(ckt->CKTstate0 + here->BJTcqcs);
180  }
181  }
182  break;
183  case BJT_QUEST_CS:
184  if (ckt->CKTcurrentAnalysis & DOING_AC) {
185  errMsg = MALLOC(strlen(msg)+1);
186  errRtn = "BJTask";
187  strcpy(errMsg,msg);
188  return (E_ASKCURRENT);
189  }
190  if (ckt->CKTcurrentAnalysis & DOING_TRAN) {
191  if (!(ckt->CKTmode & MODETRANOP)) {
192  if (ckt->CKTstate0)
193  value->rValue = -*(ckt->CKTstate0 + here->BJTcqcs);
194  }
195  }
196  break;
197  case BJT_QUEST_POWER:
198  if (ckt->CKTcurrentAnalysis & DOING_AC) {
199  errMsg = MALLOC(strlen(msg)+1);
200  errRtn = "BJTask";
201  strcpy(errMsg,msg);
202  return (E_ASKPOWER);
203  }
204  if (ckt->CKTstate0 && ckt->CKTrhsOld) {
205  value->rValue = here->BJTcc *
206  *(ckt->CKTrhsOld + here->BJTcolNode);
207  value->rValue += here->BJTcb *
208  *(ckt->CKTrhsOld + here->BJTbaseNode);
209  if ((ckt->CKTcurrentAnalysis & DOING_TRAN) &&
210  !(ckt->CKTmode & MODETRANOP)) {
211  value->rValue -= *(ckt->CKTstate0 + here->BJTcqcs) *
212  *(ckt->CKTrhsOld + here->BJTsubstNode);
213  }
214  tmp = -here->BJTcc;
215  tmp -= here->BJTcb;
216  if ((ckt->CKTcurrentAnalysis & DOING_TRAN) &&
217  !(ckt->CKTmode & MODETRANOP)) {
218  tmp += *(ckt->CKTstate0 + here->BJTcqcs);
219  }
220  value->rValue += tmp * *(ckt->CKTrhsOld +
221  here->BJTemitNode);
222  }
223  break;
224  case BJT_QUEST_CPI:
225  value->rValue = here->BJTcapbe;
226  break;
227  case BJT_QUEST_CMU:
228  value->rValue = here->BJTcapbc;
229  break;
230  case BJT_QUEST_CBX:
231  value->rValue = here->BJTcapbx;
232  break;
233  case BJT_QUEST_CCS:
234  value->rValue = here->BJTcapcs;
235  break;
236  default:
237  return (E_BADPARM);
238  }
239  return (OK);
240 }
#define BJT_QUEST_CQBE
Definition: bjtdefs.h:439
int BJTemitPrimeNode
Definition: bjtdefs.h:30
double BJTcc
Definition: bjtdefs.h:54
#define E_ASKCURRENT
Definition: sperror.h:26
#define BJT_QUEST_CQBX
Definition: bjtdefs.h:445
#define BJT_QUEST_GX
Definition: bjtdefs.h:446
char * strcpy()
#define BJT_AREA
Definition: bjtdefs.h:369
#define BJT_QUEST_GEQBX
Definition: bjtdefs.h:450
#define MAX(a, b)
Definition: spdefs.h:135
#define BJT_QUEST_VBE
Definition: bjtdefs.h:430
#define BJT_TEMP
Definition: bjtdefs.h:374
double BJTcapbc
Definition: bjtdefs.h:51
#define M_PI
Definition: spice.h:132
double BJTarea
Definition: bjtdefs.h:32
#define CONSTCtoK
Definition: const.h:11
char * errMsg
Definition: main.c:42
double BJTgccs
Definition: bjtdefs.h:62
#define BJT_QUEST_CEXBC
Definition: bjtdefs.h:447
double BJTtemp
Definition: bjtdefs.h:35
#define BJT_QUEST_GMU
Definition: bjtdefs.h:435
#define E_BADPARM
Definition: iferrmsg.h:26
#define BJT_QUEST_FT
Definition: bjtdefs.h:422
int BJTbasePrimeNode
Definition: bjtdefs.h:29
#define BJT_QUEST_GPI
Definition: bjtdefs.h:434
#define BJT_QUEST_CE
Definition: bjtdefs.h:451
int iValue
Definition: ifsim.h:232
double rValue
Definition: ifsim.h:233
#define DOING_AC
Definition: tskdefs.h:24
#define BJT_QUEST_CB
Definition: bjtdefs.h:433
#define BJT_QUEST_BASEPRIMENODE
Definition: bjtdefs.h:428
#define OK
Definition: iferrmsg.h:17
#define BJT_QUEST_QBX
Definition: bjtdefs.h:444
double * CKTrhsOld
Definition: cktdefs.h:98
double BJTcapbe
Definition: bjtdefs.h:50
#define BJT_QUEST_EMITNODE
Definition: bjtdefs.h:425
double BJTgmu
Definition: bjtdefs.h:57
#define BJT_QUEST_GEQCB
Definition: bjtdefs.h:448
int BJTcolPrimeNode
Definition: bjtdefs.h:28
#define MALLOC(x)
Definition: util.h:9
#define BJT_QUEST_CQBC
Definition: bjtdefs.h:441
#define BJT_QUEST_BASENODE
Definition: bjtdefs.h:424
double BJTgo
Definition: bjtdefs.h:59
#define BJT_QUEST_QCS
Definition: bjtdefs.h:442
double BJTgpi
Definition: bjtdefs.h:56
#define MODETRANOP
Definition: cktdefs.h:151
int BJTbaseNode
Definition: bjtdefs.h:25
double BJTgm
Definition: bjtdefs.h:58
#define DOING_TRAN
Definition: tskdefs.h:25
int BJTsubstNode
Definition: bjtdefs.h:27
#define BJT_QUEST_COLNODE
Definition: bjtdefs.h:423
#define BJT_QUEST_CCS
Definition: bjtdefs.h:457
double BJTcapcs
Definition: bjtdefs.h:52
#define BJT_QUEST_POWER
Definition: bjtdefs.h:453
#define BJT_QUEST_CC
Definition: bjtdefs.h:432
#define BJT_QUEST_VBC
Definition: bjtdefs.h:431
double BJTcapbx
Definition: bjtdefs.h:53
#define BJT_QUEST_QBE
Definition: bjtdefs.h:438
char * errRtn
Definition: main.c:41
double BJTicVBE
Definition: bjtdefs.h:33
#define BJT_OFF
Definition: bjtdefs.h:370
#define E_ASKPOWER
Definition: sperror.h:27
#define BJT_IC_VBE
Definition: bjtdefs.h:371
#define BJT_QUEST_QBC
Definition: bjtdefs.h:440
#define BJT_QUEST_SUBSTNODE
Definition: bjtdefs.h:426
double BJTgeqcb
Definition: bjtdefs.h:61
#define BJT_QUEST_CPI
Definition: bjtdefs.h:454
#define BJT_QUEST_CQCS
Definition: bjtdefs.h:443
int CKTcurrentAnalysis
Definition: cktdefs.h:130
#define BJT_QUEST_CS
Definition: bjtdefs.h:452
#define BJT_QUEST_GO
Definition: bjtdefs.h:437
double BJTcb
Definition: bjtdefs.h:55
#define BJT_QUEST_GM
Definition: bjtdefs.h:436
#define BJT_QUEST_COLPRIMENODE
Definition: bjtdefs.h:427
double BJTicVCE
Definition: bjtdefs.h:34
int BJTcolNode
Definition: bjtdefs.h:24
#define BJT_QUEST_CBX
Definition: bjtdefs.h:456
long CKTmode
Definition: cktdefs.h:139
#define BJT_QUEST_GCCS
Definition: bjtdefs.h:449
#define BJT_IC_VCE
Definition: bjtdefs.h:372
int BJTemitNode
Definition: bjtdefs.h:26
double BJTgx
Definition: bjtdefs.h:60
#define BJT_QUEST_EMITPRIMENODE
Definition: bjtdefs.h:429
double BJTgeqbx
Definition: bjtdefs.h:63
#define BJT_QUEST_CMU
Definition: bjtdefs.h:455
unsigned BJToff
Definition: bjtdefs.h:228