Qucs-core  0.0.18
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
jfet.cpp
Go to the documentation of this file.
1 /*
2  * jfet.cpp - jfet class implementation
3  *
4  * Copyright (C) 2004, 2005, 2006, 2008 Stefan Jahn <stefan@lkcc.org>
5  *
6  * This is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2, or (at your option)
9  * any later version.
10  *
11  * This software is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this package; see the file COPYING. If not, write to
18  * the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
19  * Boston, MA 02110-1301, USA.
20  *
21  * $Id$
22  *
23  */
24 
25 #if HAVE_CONFIG_H
26 # include <config.h>
27 #endif
28 
29 #include "component.h"
30 #include "device.h"
31 #include "jfet.h"
32 
33 #define NODE_G 0 /* gate node */
34 #define NODE_D 1 /* drain node */
35 #define NODE_S 2 /* source node */
36 
37 using namespace qucs;
38 using namespace qucs::device;
39 
40 jfet::jfet () : circuit (3) {
41  rs = rd = NULL;
42  type = CIR_JFET;
43 }
44 
45 void jfet::calcSP (nr_double_t frequency) {
46  setMatrixS (ytos (calcMatrixY (frequency)));
47 }
48 
49 matrix jfet::calcMatrixY (nr_double_t frequency) {
50 
51  // fetch computed operating points
52  nr_double_t Cgd = getOperatingPoint ("Cgd");
53  nr_double_t Cgs = getOperatingPoint ("Cgs");
54  nr_double_t ggs = getOperatingPoint ("ggs");
55  nr_double_t ggd = getOperatingPoint ("ggd");
56  nr_double_t gds = getOperatingPoint ("gds");
57  nr_double_t gm = getOperatingPoint ("gm");
58 
59  // compute the models admittances
60  nr_complex_t Ygd = nr_complex_t (ggd, 2.0 * M_PI * frequency * Cgd);
61  nr_complex_t Ygs = nr_complex_t (ggs, 2.0 * M_PI * frequency * Cgs);
62  nr_complex_t Yds = gds;
63 
64  // build admittance matrix and convert it to S-parameter matrix
65  matrix y (3);
66  y.set (NODE_G, NODE_G, Ygd + Ygs);
67  y.set (NODE_G, NODE_D, -Ygd);
68  y.set (NODE_G, NODE_S, -Ygs);
69  y.set (NODE_D, NODE_G, gm - Ygd);
70  y.set (NODE_D, NODE_D, Ygd + Yds);
71  y.set (NODE_D, NODE_S, -Yds - gm);
72  y.set (NODE_S, NODE_G, -Ygs - gm);
73  y.set (NODE_S, NODE_D, -Yds);
74  y.set (NODE_S, NODE_S, Ygs + Yds + gm);
75  return y;
76 }
77 
78 void jfet::calcNoiseSP (nr_double_t frequency) {
79  setMatrixN (cytocs (calcMatrixCy (frequency) * z0, getMatrixS ()));
80 }
81 
82 matrix jfet::calcMatrixCy (nr_double_t frequency) {
83  /* get operating points and noise properties */
84  nr_double_t Kf = getPropertyDouble ("Kf");
85  nr_double_t Af = getPropertyDouble ("Af");
86  nr_double_t Ffe = getPropertyDouble ("Ffe");
87  nr_double_t gm = fabs (getOperatingPoint ("gm"));
88  nr_double_t Ids = fabs (getOperatingPoint ("Id"));
89  nr_double_t T = getPropertyDouble ("Temp");
90 
91  /* compute channel noise and flicker noise generated by the DC
92  transconductance and current flow from drain to source */
93  nr_double_t i = 8 * kelvin (T) / T0 * gm / 3 +
94  Kf * qucs::pow (Ids, Af) / qucs::pow (frequency, Ffe) / kB / T0;
95 
96  /* build noise current correlation matrix and convert it to
97  noise-wave correlation matrix */
98  matrix cy = matrix (3);
99  cy.set (NODE_D, NODE_D, +i);
100  cy.set (NODE_S, NODE_S, +i);
101  cy.set (NODE_D, NODE_S, -i);
102  cy.set (NODE_S, NODE_D, -i);
103  return cy;
104 }
105 
106 void jfet::initModel (void) {
107  // fetch necessary device properties
108  nr_double_t T = getPropertyDouble ("Temp");
109  nr_double_t Tn = getPropertyDouble ("Tnom");
110  nr_double_t A = getPropertyDouble ("Area");
111 
112  // compute Is temperature and area dependency
113  nr_double_t Is = getPropertyDouble ("Is");
114  nr_double_t N = getPropertyDouble ("N");
115  nr_double_t Xti = getPropertyDouble ("Xti");
116  nr_double_t T1, T2, Eg;
117  T2 = kelvin (T);
118  T1 = kelvin (Tn);
119  Eg = Egap (300);
120  Is = pnCurrent_T (T1, T2, Is, Eg, N, Xti);
121  setScaledProperty ("Is", Is * A);
122 
123  // compute Isr temperature and area dependency
124  nr_double_t Isr = getPropertyDouble ("Isr");
125  nr_double_t Nr = getPropertyDouble ("Nr");
126  Isr = pnCurrent_T (T1, T2, Isr, Eg, Nr, Xti);
127  setScaledProperty ("Isr", Isr * A);
128 
129  // compute Pb temperature dependency
130  nr_double_t Pb = getPropertyDouble ("Pb");
131  nr_double_t PbT;
132  PbT = pnPotential_T (T1,T2, Pb);
133  setScaledProperty ("Pb", PbT);
134 
135  // compute Cgs and Cgd temperature and area dependency
136  nr_double_t Cgs = getPropertyDouble ("Cgs");
137  nr_double_t Cgd = getPropertyDouble ("Cgd");
138  nr_double_t M = getPropertyDouble ("M");
139  nr_double_t F;
140  F = A * pnCapacitance_F (T1, T2, M, PbT / Pb);
141  setScaledProperty ("Cgs", Cgs * F);
142  setScaledProperty ("Cgd", Cgd * F);
143 
144  // compute Vth temperature dependency
145  nr_double_t Vt0 = getPropertyDouble ("Vt0");
146  nr_double_t Vt0tc = getPropertyDouble ("Vt0tc");
147  nr_double_t DT = T2 - T1;
148  Vt0 = Vt0 + Vt0tc * DT;
149  setScaledProperty ("Vt0", Vt0);
150 
151  // compute Beta temperature and area dependency
152  nr_double_t Beta = getPropertyDouble ("Beta");
153  nr_double_t Betatce = getPropertyDouble ("Betatce");
154  Beta = Beta * qucs::exp (Betatce * DT * qucs::log (1.01));
155  setScaledProperty ("Beta", Beta * A);
156 
157  // compute Rs and Rd area dependency
158  nr_double_t Rs = getPropertyDouble ("Rs");
159  nr_double_t Rd = getPropertyDouble ("Rd");
160  setScaledProperty ("Rs", Rs / A);
161  setScaledProperty ("Rd", Rd / A);
162 }
163 
164 void jfet::restartDC (void) {
165  // apply starting values to previous iteration values
166  UgdPrev = real (getV (NODE_G) - getV (NODE_D));
167  UgsPrev = real (getV (NODE_G) - getV (NODE_S));
168 }
169 
170 void jfet::initDC (void) {
171 
172  // allocate MNA matrices
173  allocMatrixMNA ();
174 
175  // initialize scalability
176  initModel ();
177 
178  // initialize starting values
179  restartDC ();
180 
181  // apply polarity of JFET
182  char * type = getPropertyString ("Type");
183  pol = !strcmp (type, "pfet") ? -1 : 1;
184 
185  // get device temperature
186  nr_double_t T = getPropertyDouble ("Temp");
187 
188  // possibly insert series resistance at source
189  nr_double_t Rs = getScaledProperty ("Rs");
190  if (Rs != 0.0) {
191  // create additional circuit if necessary and reassign nodes
192  rs = splitResistor (this, rs, "Rs", "source", NODE_S);
193  rs->setProperty ("Temp", T);
194  rs->setProperty ("R", Rs);
195  rs->setProperty ("Controlled", getName ());
196  rs->initDC ();
197  }
198  // no series resistance at source
199  else {
200  disableResistor (this, rs, NODE_S);
201  }
202 
203  // possibly insert series resistance at drain
204  nr_double_t Rd = getScaledProperty ("Rd");
205  if (Rd != 0.0) {
206  // create additional circuit if necessary and reassign nodes
207  rd = splitResistor (this, rd, "Rd", "drain", NODE_D);
208  rd->setProperty ("Temp", T);
209  rd->setProperty ("R", Rd);
210  rd->setProperty ("Controlled", getName ());
211  rd->initDC ();
212  }
213  // no series resistance at drain
214  else {
215  disableResistor (this, rd, NODE_D);
216  }
217 }
218 
219 void jfet::calcDC (void) {
220 
221  // fetch device model parameters
222  nr_double_t Is = getScaledProperty ("Is");
223  nr_double_t n = getPropertyDouble ("N");
224  nr_double_t Isr = getScaledProperty ("Isr");
225  nr_double_t nr = getPropertyDouble ("Nr");
226  nr_double_t Vt0 = getScaledProperty ("Vt0");
227  nr_double_t l = getPropertyDouble ("Lambda");
228  nr_double_t beta = getScaledProperty ("Beta");
229  nr_double_t T = getPropertyDouble ("Temp");
230 
231  nr_double_t Ut, IeqG, IeqD, IeqS, UgsCrit, UgdCrit;
232  nr_double_t Igs, Igd, gtiny;
233 
234  T = kelvin (T);
235  Ut = T * kBoverQ;
236  Ugd = real (getV (NODE_G) - getV (NODE_D)) * pol;
237  Ugs = real (getV (NODE_G) - getV (NODE_S)) * pol;
238 
239  // critical voltage necessary for bad start values
240  UgsCrit = pnCriticalVoltage (Is, Ut * n);
241  UgdCrit = pnCriticalVoltage (Is, Ut * n);
242  UgsPrev = Ugs = pnVoltage (Ugs, UgsPrev, Ut * n, UgsCrit);
243  UgdPrev = Ugd = pnVoltage (Ugd, UgdPrev, Ut * n, UgdCrit);
244 
245  Uds = Ugs - Ugd;
246 
247  // gate-source diode
248  gtiny = Ugs < - 10 * Ut * n ? (Is + Isr) : 0;
249  ggs = pnConductance (Ugs, Is, Ut * n) +
250  pnConductance (Ugs, Isr, Ut * nr) + gtiny;
251  Igs = pnCurrent (Ugs, Is, Ut * n) +
252  pnCurrent (Ugs, Isr, Ut * nr) + gtiny * Ugs;
253 
254  // gate-drain diode
255  gtiny = Ugd < - 10 * Ut * n ? (Is + Isr) : 0;
256  ggd = pnConductance (Ugd, Is, Ut * n) +
257  pnConductance (Ugd, Isr, Ut * nr) + gtiny;
258  Igd = pnCurrent (Ugd, Is, Ut * n) +
259  pnCurrent (Ugd, Isr, Ut * nr) + gtiny * Ugd;
260 
261  // normal (forward) mode of operation
262  if (Uds >= 0) {
263  nr_double_t Ugst = Ugs - Vt0;
264  // normal mode, cutoff region
265  if (Ugst <= 0) {
266  Ids = 0;
267  gm = 0;
268  gds = 0;
269  }
270  else {
271  nr_double_t b = beta * (1 + l * Uds);
272  // normal mode, saturation region
273  if (Ugst <= Uds) {
274  Ids = b * Ugst * Ugst;
275  gm = b * 2 * Ugst;
276  gds = l * beta * Ugst * Ugst;
277  }
278  // normal mode, linear region
279  else {
280  Ids = b * Uds * (2 * Ugst - Uds);
281  gm = b * 2 * Uds;
282  gds = b * 2 * (Ugst - Uds) + l * beta * Uds * (2 * Ugst - Uds);
283  }
284  }
285  }
286  // inverse (backward) mode of operation
287  else {
288  nr_double_t Ugdt = Ugd - Vt0;
289  // inverse mode, cutoff region
290  if (Ugdt <= 0) {
291  Ids = 0;
292  gm = 0;
293  gds = 0;
294  }
295  else {
296  nr_double_t b = beta * (1 - l * Uds);
297  // inverse mode, saturation region
298  if (Ugdt <= -Uds) {
299  Ids = - b * Ugdt * Ugdt;
300  gm = - b * 2 * Ugdt;
301  gds = beta * l * Ugdt * Ugdt + b * 2 * Ugdt;
302  }
303  // inverse mode, linear region
304  else {
305  Ids = b * Uds * (2 * Ugdt + Uds);
306  gm = b * 2 * Uds;
307  gds = 2 * b * Ugdt - beta * l * Uds * (2 * Ugdt + Uds);
308  }
309  }
310  }
311 
312  // compute autonomic current sources
313  IeqG = Igs - ggs * Ugs;
314  IeqD = Igd - ggd * Ugd;
315  IeqS = Ids - gm * Ugs - gds * Uds;
316  setI (NODE_G, (-IeqG - IeqD) * pol);
317  setI (NODE_D, (+IeqD - IeqS) * pol);
318  setI (NODE_S, (+IeqG + IeqS) * pol);
319 
320  // apply admittance matrix elements
321  setY (NODE_G, NODE_G, ggs + ggd);
322  setY (NODE_G, NODE_D, -ggd);
323  setY (NODE_G, NODE_S, -ggs);
324  setY (NODE_D, NODE_G, -ggd + gm);
325  setY (NODE_D, NODE_D, gds + ggd);
326  setY (NODE_D, NODE_S, -gm - gds);
327  setY (NODE_S, NODE_G, -ggs - gm);
328  setY (NODE_S, NODE_D, -gds);
329  setY (NODE_S, NODE_S, ggs + gds + gm);
330 }
331 
333  Ugs = getOperatingPoint ("Vgs");
334  Ugd = getOperatingPoint ("Vgd");
335  Uds = getOperatingPoint ("Vds");
336 }
337 
339  nr_double_t Vgs, Vgd;
340  Vgd = real (getV (NODE_G) - getV (NODE_D)) * pol;
341  Vgs = real (getV (NODE_G) - getV (NODE_S)) * pol;
342  setOperatingPoint ("Vgs", Vgs);
343  setOperatingPoint ("Vgd", Vgd);
344  setOperatingPoint ("Vds", Vgs - Vgd);
345 }
346 
348 
349  // fetch device model parameters
350  nr_double_t z = getPropertyDouble ("M");
351  nr_double_t Cgd0 = getScaledProperty ("Cgd");
352  nr_double_t Cgs0 = getScaledProperty ("Cgs");
353  nr_double_t Pb = getScaledProperty ("Pb");
354  nr_double_t Fc = getPropertyDouble ("Fc");
355 
356  nr_double_t Cgs, Cgd;
357 
358  // capacitance of gate-drain diode
359  Cgd = pnCapacitance (Ugd, Cgd0, Pb, z, Fc);
360  Qgd = pnCharge (Ugd, Cgd0, Pb, z, Fc);
361 
362  // capacitance of gate-source diode
363  Cgs = pnCapacitance (Ugs, Cgs0, Pb, z, Fc);
364  Qgs = pnCharge (Ugs, Cgs0, Pb, z, Fc);
365 
366  // save operating points
367  setOperatingPoint ("ggs", ggs);
368  setOperatingPoint ("ggd", ggd);
369  setOperatingPoint ("gds", gds);
370  setOperatingPoint ("gm", gm);
371  setOperatingPoint ("Id", Ids);
372  setOperatingPoint ("Cgd", Cgd);
373  setOperatingPoint ("Cgs", Cgs);
374 }
375 
376 void jfet::initAC (void) {
377  allocMatrixMNA ();
378  clearI ();
379 }
380 
381 void jfet::calcAC (nr_double_t frequency) {
382  setMatrixY (calcMatrixY (frequency));
383 }
384 
385 void jfet::calcNoiseAC (nr_double_t frequency) {
386  setMatrixN (calcMatrixCy (frequency));
387 }
388 
389 #define qgdState 0 // gate-drain charge state
390 #define cgdState 1 // gate-drain current state
391 #define qgsState 2 // gate-source charge state
392 #define cgsState 3 // gate-source current state
393 
394 void jfet::initTR (void) {
395  setStates (4);
396  initDC ();
397 }
398 
399 void jfet::calcTR (nr_double_t) {
400  calcDC ();
404 
405  nr_double_t Cgs = getOperatingPoint ("Cgs");
406  nr_double_t Cgd = getOperatingPoint ("Cgd");
407 
410 }
411 
412 // properties
413 PROP_REQ [] = {
414  { "Is", PROP_REAL, { 1e-14, PROP_NO_STR }, PROP_POS_RANGE },
415  { "N", PROP_REAL, { 1, PROP_NO_STR }, PROP_RNGII (1, 100) },
416  { "Vt0", PROP_REAL, { -2, PROP_NO_STR }, PROP_NEG_RANGE },
417  { "Lambda", PROP_REAL, { 0, PROP_NO_STR }, PROP_POS_RANGE },
418  { "Beta", PROP_REAL, { 1e-4, PROP_NO_STR }, PROP_POS_RANGE },
419  { "M", PROP_REAL, { 0.5, PROP_NO_STR }, PROP_RNGII (0, 1) },
420  { "Pb", PROP_REAL, { 1.0, PROP_NO_STR }, PROP_RNGXI (0, 10) },
421  { "Fc", PROP_REAL, { 0.5, PROP_NO_STR }, PROP_RNGIX (0, 1) },
422  { "Cgs", PROP_REAL, { 0, PROP_NO_STR }, PROP_POS_RANGE },
423  { "Cgd", PROP_REAL, { 0, PROP_NO_STR }, PROP_POS_RANGE },
424  PROP_NO_PROP };
425 PROP_OPT [] = {
426  { "Rd", PROP_REAL, { 0, PROP_NO_STR }, PROP_POS_RANGE },
427  { "Rs", PROP_REAL, { 0, PROP_NO_STR }, PROP_POS_RANGE },
428  { "Isr", PROP_REAL, { 1e-14, PROP_NO_STR }, PROP_POS_RANGE },
429  { "Nr", PROP_REAL, { 2, PROP_NO_STR }, PROP_RNGII (1, 100) },
430  { "Kf", PROP_REAL, { 0, PROP_NO_STR }, PROP_POS_RANGE },
431  { "Af", PROP_REAL, { 1, PROP_NO_STR }, PROP_POS_RANGE },
432  { "Ffe", PROP_REAL, { 1, PROP_NO_STR }, PROP_POS_RANGE },
433  { "Temp", PROP_REAL, { 26.85, PROP_NO_STR }, PROP_MIN_VAL (K) },
434  { "Type", PROP_STR, { PROP_NO_VAL, "nfet" }, PROP_RNG_FET },
435  { "Xti", PROP_REAL, { 3, PROP_NO_STR }, PROP_POS_RANGE },
436  { "Vt0tc", PROP_REAL, { 0, PROP_NO_STR }, PROP_NO_RANGE },
437  { "Betatce", PROP_REAL, { 0, PROP_NO_STR }, PROP_NO_RANGE },
438  { "Tnom", PROP_REAL, { 26.85, PROP_NO_STR }, PROP_MIN_VAL (K) },
439  { "Area", PROP_REAL, { 1, PROP_NO_STR }, PROP_POS_RANGEX },
440  PROP_NO_PROP };
441 struct define_t jfet::cirdef =
void setProperty(const char *, char *)
Definition: object.cpp:104
std::complex< nr_double_t > nr_complex_t
Definition: complex.h:31
nr_double_t getOperatingPoint(const char *)
Definition: circuit.cpp:525
#define PROP_POS_RANGE
Definition: netdefs.h:129
l
Definition: parse_vcd.y:213
matrix ytos(matrix y, qucs::vector z0)
Admittance matrix to scattering parameters.
Definition: matrix.cpp:1133
matrix real(matrix a)
Real part matrix.
Definition: matrix.cpp:568
#define T0
standard temperature
Definition: constants.h:61
#define PROP_RNGII(f, t)
Definition: netdefs.h:138
#define N(n)
Definition: equation.cpp:58
void initTR(void)
Definition: jfet.cpp:394
#define kelvin(x)
Definition: constants.h:108
nr_double_t UgsPrev
Definition: jfet.h:52
#define PROP_DEF
Definition: netdefs.h:189
nr_double_t pnConductance(nr_double_t Upn, nr_double_t Iss, nr_double_t Ute)
Definition: device.cpp:181
circuit * splitResistor(circuit *base, circuit *res, const char *c, const char *n, int internal)
Definition: device.cpp:56
nr_double_t getPropertyDouble(const char *)
Definition: object.cpp:176
nr_complex_t pow(const nr_complex_t z, const nr_double_t d)
Compute power function with real exponent.
Definition: complex.cpp:238
#define PROP_REAL
Definition: netdefs.h:174
void calcOperatingPoints(void)
Definition: jfet.cpp:347
qucs::matrix calcMatrixY(nr_double_t)
Definition: jfet.cpp:49
void setStates(int n)
Definition: states.h:52
qucs::circuit * rs
Definition: jfet.h:54
#define PROP_NO_PROP
Definition: netdefs.h:122
#define K
Absolute 0 in centigrade.
Definition: constants.h:59
#define PROP_NO_RANGE
Definition: netdefs.h:126
nr_double_t gm
Definition: jfet.h:53
#define PROP_NO_STR
Definition: netdefs.h:125
nr_double_t gds
Definition: jfet.h:53
nr_double_t getScaledProperty(const char *)
Definition: object.cpp:185
#define NODE_D
Definition: jfet.cpp:34
n
Definition: parse_citi.y:147
static const nr_double_t z0
Definition: circuit.h:320
#define qgdState
Definition: jfet.cpp:389
PROP_REQ[]
Definition: jfet.cpp:413
nr_double_t pnCapacitance(nr_double_t Uj, nr_double_t Cj, nr_double_t Vj, nr_double_t Mj, nr_double_t Fc)
Definition: device.cpp:187
void setScaledProperty(const char *, nr_double_t)
Definition: object.cpp:133
virtual void initDC(void)
Definition: circuit.h:113
qucs::matrix calcMatrixCy(nr_double_t)
Definition: jfet.cpp:82
void clearI(void)
Definition: circuit.cpp:730
i
Definition: parse_mdl.y:516
nr_double_t Uds
Definition: jfet.h:52
nr_double_t ggd
Definition: jfet.h:53
void transientCapacitance(int, int, int, nr_double_t, nr_double_t, nr_double_t)
Definition: circuit.cpp:759
nr_double_t Egap(nr_double_t T, nr_double_t Eg0=Eg0Si)
Definition: device.cpp:367
PROP_OPT[]
Definition: jfet.cpp:425
nr_double_t pnCurrent_T(nr_double_t T1, nr_double_t T2, nr_double_t Is, nr_double_t Eg, nr_double_t N=1, nr_double_t Xti=0)
Definition: device.cpp:384
qucs::circuit * rd
Definition: jfet.h:55
#define kBoverQ
Boltzmann constant over Elementary charge ( )
Definition: constants.h:68
#define PROP_COMPONENT
Definition: netdefs.h:116
void calcAC(nr_double_t)
Definition: jfet.cpp:381
nr_double_t Ugs
Definition: jfet.h:52
#define kB
Boltzmann constant ( )
Definition: constants.h:64
void initModel(void)
Definition: jfet.cpp:106
void setMatrixY(matrix)
Definition: circuit.cpp:685
void disableResistor(circuit *base, circuit *res, int internal)
Definition: device.cpp:77
#define M_PI
Archimedes' constant ( )
Definition: consts.h:47
void calcTR(nr_double_t)
Definition: jfet.cpp:399
nr_double_t pnCapacitance_F(nr_double_t T1, nr_double_t T2, nr_double_t M, nr_double_t VR)
Definition: device.cpp:413
void setI(int, nr_complex_t)
Definition: circuit.cpp:397
void calcNoiseAC(nr_double_t)
Definition: jfet.cpp:385
nr_double_t pnPotential_T(nr_double_t T1, nr_double_t T2, nr_double_t Vj, nr_double_t Eg0=Eg0Si)
Definition: device.cpp:394
void initDC(void)
Definition: jfet.cpp:170
nr_double_t UgdPrev
Definition: jfet.h:52
void loadOperatingPoints(void)
Definition: jfet.cpp:332
void setMatrixS(matrix)
Definition: circuit.cpp:643
type
Definition: parse_vcd.y:164
matrix getMatrixS(void)
Definition: circuit.cpp:654
PROP_NONLINEAR
Definition: jfet.cpp:442
nr_double_t pnCharge(nr_double_t Uj, nr_double_t Cj, nr_double_t Vj, nr_double_t Mj, nr_double_t Fc)
Definition: device.cpp:199
void setY(int, int, nr_complex_t)
Definition: circuit.cpp:452
#define PROP_MIN_VAL(k)
Definition: netdefs.h:133
nr_double_t ggs
Definition: jfet.h:53
matrix cytocs(matrix cy, matrix s)
Admittance noise correlation matrix to S-parameter noise correlation matrix.
Definition: matrix.cpp:1404
void initAC(void)
Definition: jfet.cpp:376
void restartDC(void)
Definition: jfet.cpp:164
nr_double_t Ids
Definition: jfet.h:53
void allocMatrixMNA(void)
Definition: circuit.cpp:267
#define PROP_POS_RANGEX
Definition: netdefs.h:131
#define PROP_RNGIX(f, t)
Definition: netdefs.h:140
void calcDC(void)
Definition: jfet.cpp:219
#define PROP_STR
Definition: netdefs.h:175
#define A(a)
Definition: eqndefined.cpp:72
void calcSP(nr_double_t)
Definition: jfet.cpp:45
nr_double_t getV(int, nr_double_t)
Definition: circuit.cpp:941
y
Definition: parse_mdl.y:499
#define NODE_S
Definition: jfet.cpp:35
#define NODE_G
Definition: jfet.cpp:33
#define qgsState
Definition: jfet.cpp:391
void setMatrixN(matrix)
Definition: circuit.cpp:664
Definition: jfet.cpp:441
nr_complex_t exp(const nr_complex_t z)
Compute complex exponential.
Definition: complex.cpp:205
char * getName(void)
Definition: object.cpp:84
nr_double_t Qgs
Definition: jfet.h:53
void setOperatingPoint(const char *, nr_double_t)
Definition: circuit.cpp:533
#define PROP_NO_VAL
Definition: netdefs.h:124
nr_double_t Ugd
Definition: jfet.h:52
#define PROP_NEG_RANGE
Definition: netdefs.h:130
nr_double_t pnCriticalVoltage(nr_double_t Iss, nr_double_t Ute)
Definition: device.cpp:255
#define PROP_RNGXI(f, t)
Definition: netdefs.h:139
void saveOperatingPoints(void)
Definition: jfet.cpp:338
char * getPropertyString(const char *)
Definition: object.cpp:159
#define M(con)
Definition: evaluate.cpp:64
nr_complex_t log(const nr_complex_t z)
Compute principal value of natural logarithm of z.
Definition: complex.cpp:215
#define PROP_RNG_FET
Definition: netdefs.h:160
void calcNoiseSP(nr_double_t)
Definition: jfet.cpp:78
nr_double_t Qgd
Definition: jfet.h:53
nr_double_t pnCurrent(nr_double_t Upn, nr_double_t Iss, nr_double_t Ute)
Definition: device.cpp:175
#define PROP_NO_SUBSTRATE
Definition: netdefs.h:118
nr_double_t pnVoltage(nr_double_t Ud, nr_double_t Uold, nr_double_t Ut, nr_double_t Ucrit)
Definition: device.cpp:121