Jspice3
jfetdist.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: 1988 Jaijeet S Roychowdhury
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 <math.h>
15 #include <stdio.h>
16 #include "jfetdefs.h"
17 #include "distodef.h"
18 #include "util.h"
19 #include "sperror.h"
20 #include "distoext.h"
21 
22 int
23 JFETdisto(mode,genmodel,ckt)
24  GENmodel *genmodel;
25  register CKTcircuit *ckt;
26  int mode;
27 
28 /* assuming here that ckt->CKTomega has been initialised to
29  * the correct value
30  */
31 {
32  JFETmodel *model = (JFETmodel *) genmodel;
33  DISTOAN* job = (DISTOAN*) ckt->CKTcurJob;
34  DpassStr pass;
35  double r1h1x,i1h1x;
36  double r1h1y,i1h1y;
37  double r1h1z, i1h1z;
38  double r1h2x, i1h2x;
39  double r1h2y, i1h2y;
40  double r1h2z, i1h2z;
41  double r1hm2x,i1hm2x;
42  double r1hm2y,i1hm2y;
43  double r1hm2z, i1hm2z;
44  double r2h11x,i2h11x;
45  double r2h11y,i2h11y;
46  double r2h11z, i2h11z;
47  double r2h1m2x,i2h1m2x;
48  double r2h1m2y,i2h1m2y;
49  double r2h1m2z, i2h1m2z;
50  double temp, itemp;
51  register JFETinstance *here;
52 
53 if (mode == D_SETUP)
54  return(JFETdSetup(model,ckt));
55 
56 if ((mode == D_TWOF1) || (mode == D_THRF1) ||
57  (mode == D_F1PF2) || (mode == D_F1MF2) ||
58  (mode == D_2F1MF2)) {
59 
60  /* loop through all the JFET models */
61 for( ; model != NULL; model = model->JFETnextModel ) {
62 
63  /* loop through all the instances of the model */
64  for (here = model->JFETinstances; here != NULL ;
65  here=here->JFETnextInstance) {
66 
67 
68 
69  /* loading starts here */
70 
71  switch (mode) {
72  case D_TWOF1:
73  /* x = vgs, y = vds */
74 
75  /* getting first order (linear) Volterra kernel */
76  r1h1x = *(job->r1H1ptr + (here->JFETgateNode)) -
77  *(job->r1H1ptr + (here->JFETsourcePrimeNode));
78  i1h1x = *(job->i1H1ptr + (here->JFETgateNode)) -
79  *(job->i1H1ptr + (here->JFETsourcePrimeNode));
80 
81  r1h1y = *(job->r1H1ptr + (here->JFETdrainPrimeNode)) -
82  *(job->r1H1ptr + (here->JFETsourcePrimeNode));
83  i1h1y = *(job->i1H1ptr + (here->JFETdrainPrimeNode)) -
84  *(job->i1H1ptr + (here->JFETsourcePrimeNode));
85 
86 
87  /* loading starts here */
88  /* loading cdrain term */
89 
90  temp = DFn2F1(here->cdr_x2,
91  here->cdr_y2,
92  0.0,
93  here->cdr_xy,
94  0.0,
95  0.0,
96  r1h1x,
97  i1h1x,
98  r1h1y,
99  i1h1y,
100  0.0,
101  0.0);
102 
103  itemp = DFi2F1(here->cdr_x2,
104  here->cdr_y2,
105  0.0,
106  here->cdr_xy,
107  0.0,
108  0.0,
109  r1h1x,
110  i1h1x,
111  r1h1y,
112  i1h1y,
113  0.0,
114  0.0);
115 
116  *(ckt->CKTrhs + (here->JFETdrainPrimeNode)) -= temp;
117  *(ckt->CKTirhs + (here->JFETdrainPrimeNode)) -= itemp;
118  *(ckt->CKTrhs + (here->JFETsourcePrimeNode)) += temp;
119  *(ckt->CKTirhs + (here->JFETsourcePrimeNode)) += itemp;
120 
121  /* cdrain term over */
122 
123  /* loading ggs term */
124 
125  temp = D1n2F1(here->ggs2,
126  r1h1x,
127  i1h1x);
128 
129  itemp = D1i2F1(here->ggs2,
130  r1h1x,
131  i1h1x);
132 
133 
134  *(ckt->CKTrhs + (here->JFETgateNode)) -= temp;
135  *(ckt->CKTirhs + (here->JFETgateNode)) -= itemp;
136  *(ckt->CKTrhs + (here->JFETsourcePrimeNode)) += temp;
137  *(ckt->CKTirhs + (here->JFETsourcePrimeNode)) += itemp;
138 
139  /* ggs over */
140 
141  /* loading ggd term */
142 
143  temp = D1n2F1(here->ggd2,
144  r1h1x - r1h1y,
145  i1h1x - i1h1y);
146 
147  itemp = D1i2F1(here->ggd2,
148  r1h1x - r1h1y,
149  i1h1x - i1h1y);
150 
151 
152  *(ckt->CKTrhs + (here->JFETgateNode)) -= temp;
153  *(ckt->CKTirhs + (here->JFETgateNode)) -= itemp;
154  *(ckt->CKTrhs + (here->JFETdrainPrimeNode)) += temp;
155  *(ckt->CKTirhs + (here->JFETdrainPrimeNode)) += itemp;
156 
157  /* ggd over */
158 
159  /* loading capgs term */
160 
161  temp = -ckt->CKTomega *
162  D1i2F1(here->capgs2,
163  r1h1x,
164  i1h1x);
165 
166  itemp = ckt->CKTomega *
167  D1n2F1(here->capgs2,
168  r1h1x,
169  i1h1x);
170 
171 
172  *(ckt->CKTrhs + (here->JFETgateNode)) -= temp;
173  *(ckt->CKTirhs + (here->JFETgateNode)) -= itemp;
174  *(ckt->CKTrhs + (here->JFETsourcePrimeNode)) += temp;
175  *(ckt->CKTirhs + (here->JFETsourcePrimeNode)) += itemp;
176 
177  /* capgs over */
178 
179  /* loading capgd term */
180 
181  temp = -ckt->CKTomega *
182  D1i2F1(here->capgd2,
183  r1h1x - r1h1y,
184  i1h1x - i1h1y);
185 
186  itemp = ckt->CKTomega *
187  D1n2F1(here->capgd2,
188  r1h1x - r1h1y,
189  i1h1x - i1h1y);
190 
191 
192  *(ckt->CKTrhs + (here->JFETgateNode)) -= temp;
193  *(ckt->CKTirhs + (here->JFETgateNode)) -= itemp;
194  *(ckt->CKTrhs + (here->JFETdrainPrimeNode)) += temp;
195  *(ckt->CKTirhs + (here->JFETdrainPrimeNode)) += itemp;
196 
197  /* capgd over */
198 
199  /* all done */
200 
201  break;
202 
203  case D_THRF1:
204  /* x = vgs, y = vds */
205 
206  /* getting first order (linear) Volterra kernel */
207  r1h1x = *(job->r1H1ptr + (here->JFETgateNode)) -
208  *(job->r1H1ptr + (here->JFETsourcePrimeNode));
209  i1h1x = *(job->i1H1ptr + (here->JFETgateNode)) -
210  *(job->i1H1ptr + (here->JFETsourcePrimeNode));
211 
212  r1h1y = *(job->r1H1ptr + (here->JFETdrainPrimeNode)) -
213  *(job->r1H1ptr + (here->JFETsourcePrimeNode));
214  i1h1y = *(job->i1H1ptr + (here->JFETdrainPrimeNode)) -
215  *(job->i1H1ptr + (here->JFETsourcePrimeNode));
216 
217  r2h11x = *(job->r2H11ptr + (here->JFETgateNode)) -
218  *(job->r2H11ptr + (here->JFETsourcePrimeNode));
219  i2h11x = *(job->i2H11ptr + (here->JFETgateNode)) -
220  *(job->i2H11ptr + (here->JFETsourcePrimeNode));
221 
222  r2h11y = *(job->r2H11ptr + (here->JFETdrainPrimeNode)) -
223  *(job->r2H11ptr + (here->JFETsourcePrimeNode));
224  i2h11y = *(job->i2H11ptr + (here->JFETdrainPrimeNode)) -
225  *(job->i2H11ptr + (here->JFETsourcePrimeNode));
226 
227  /* loading starts here */
228  /* loading cdrain term */
229 
230  temp = DFn3F1(here->cdr_x2,
231  here->cdr_y2,
232  0.0,
233  here->cdr_xy,
234  0.0,
235  0.0,
236  here->cdr_x3,
237  here->cdr_y3,
238  0.0,
239  here->cdr_x2y,
240  0.0,
241  here->cdr_xy2,
242  0.0,
243  0.0,
244  0.0,
245  0.0,
246  r1h1x,
247  i1h1x,
248  r1h1y,
249  i1h1y,
250  0.0,
251  0.0,
252  r2h11x,
253  i2h11x,
254  r2h11y,
255  i2h11y,
256  0.0,
257  0.0);
258 
259  itemp = DFi3F1(here->cdr_x2,
260  here->cdr_y2,
261  0.0,
262  here->cdr_xy,
263  0.0,
264  0.0,
265  here->cdr_x3,
266  here->cdr_y3,
267  0.0,
268  here->cdr_x2y,
269  0.0,
270  here->cdr_xy2,
271  0.0,
272  0.0,
273  0.0,
274  0.0,
275  r1h1x,
276  i1h1x,
277  r1h1y,
278  i1h1y,
279  0.0,
280  0.0,
281  r2h11x,
282  i2h11x,
283  r2h11y,
284  i2h11y,
285  0.0,
286  0.0);
287 
288  *(ckt->CKTrhs + (here->JFETdrainPrimeNode)) -= temp;
289  *(ckt->CKTirhs + (here->JFETdrainPrimeNode)) -= itemp;
290  *(ckt->CKTrhs + (here->JFETsourcePrimeNode)) += temp;
291  *(ckt->CKTirhs + (here->JFETsourcePrimeNode)) += itemp;
292 
293  /* cdrain term over */
294 
295  /* loading ggs term */
296 
297  temp = D1n3F1(here->ggs2,
298  here->ggs3,
299  r1h1x,
300  i1h1x,
301  r2h11x,
302  i2h11x);
303 
304  itemp = D1i3F1(here->ggs2,
305  here->ggs3,
306  r1h1x,
307  i1h1x,
308  r2h11x,
309  i2h11x);
310 
311 
312  *(ckt->CKTrhs + (here->JFETgateNode)) -= temp;
313  *(ckt->CKTirhs + (here->JFETgateNode)) -= itemp;
314  *(ckt->CKTrhs + (here->JFETsourcePrimeNode)) += temp;
315  *(ckt->CKTirhs + (here->JFETsourcePrimeNode)) += itemp;
316 
317  /* ggs over */
318 
319  /* loading ggd term */
320 
321  temp = D1n3F1(here->ggd2,
322  here->ggd3,
323  r1h1x - r1h1y,
324  i1h1x - i1h1y,
325  r2h11x - r2h11y,
326  i2h11x - i2h11y);
327 
328  itemp = D1i3F1(here->ggd2,
329  here->ggd3,
330  r1h1x - r1h1y,
331  i1h1x - i1h1y,
332  r2h11x - r2h11y,
333  i2h11x - i2h11y);
334 
335 
336 
337  *(ckt->CKTrhs + (here->JFETgateNode)) -= temp;
338  *(ckt->CKTirhs + (here->JFETgateNode)) -= itemp;
339  *(ckt->CKTrhs + (here->JFETdrainPrimeNode)) += temp;
340  *(ckt->CKTirhs + (here->JFETdrainPrimeNode)) += itemp;
341 
342  /* ggd over */
343 
344  /* loading capgs term */
345 
346  temp = -ckt->CKTomega *
347  D1i3F1(here->capgs2,
348  here->capgs3,
349  r1h1x,
350  i1h1x,
351  r2h11x,
352  i2h11x);
353 
354  itemp = ckt->CKTomega *
355  D1n3F1(here->capgs2,
356  here->capgs3,
357  r1h1x,
358  i1h1x,
359  r2h11x,
360  i2h11x);
361 
362 
363  *(ckt->CKTrhs + (here->JFETgateNode)) -= temp;
364  *(ckt->CKTirhs + (here->JFETgateNode)) -= itemp;
365  *(ckt->CKTrhs + (here->JFETsourcePrimeNode)) += temp;
366  *(ckt->CKTirhs + (here->JFETsourcePrimeNode)) += itemp;
367 
368  /* capgs over */
369 
370  /* loading capgd term */
371 
372  temp = -ckt->CKTomega *
373  D1i3F1(here->capgd2,
374  here->capgd3,
375  r1h1x - r1h1y,
376  i1h1x - i1h1y,
377  r2h11x - r2h11y,
378  i2h11x - i2h11y);
379 
380  itemp = ckt->CKTomega *
381  D1n3F1(here->capgd2,
382  here->capgd3,
383  r1h1x - r1h1y,
384  i1h1x - i1h1y,
385  r2h11x - r2h11y,
386  i2h11x - i2h11y);
387 
388 
389  *(ckt->CKTrhs + (here->JFETgateNode)) -= temp;
390  *(ckt->CKTirhs + (here->JFETgateNode)) -= itemp;
391  *(ckt->CKTrhs + (here->JFETdrainPrimeNode)) += temp;
392  *(ckt->CKTirhs + (here->JFETdrainPrimeNode)) += itemp;
393 
394  /* capgd over */
395 
396  /* all done */
397 
398  break;
399  case D_F1PF2:
400  /* x = vgs, y = vds */
401 
402  /* getting first order (linear) Volterra kernel */
403  r1h1x = *(job->r1H1ptr + (here->JFETgateNode)) -
404  *(job->r1H1ptr + (here->JFETsourcePrimeNode));
405  i1h1x = *(job->i1H1ptr + (here->JFETgateNode)) -
406  *(job->i1H1ptr + (here->JFETsourcePrimeNode));
407 
408  r1h1y = *(job->r1H1ptr + (here->JFETdrainPrimeNode)) -
409  *(job->r1H1ptr + (here->JFETsourcePrimeNode));
410  i1h1y = *(job->i1H1ptr + (here->JFETdrainPrimeNode)) -
411  *(job->i1H1ptr + (here->JFETsourcePrimeNode));
412 
413  r1h2x = *(job->r1H2ptr + (here->JFETgateNode)) -
414  *(job->r1H2ptr + (here->JFETsourcePrimeNode));
415  i1h2x = *(job->i1H2ptr + (here->JFETgateNode)) -
416  *(job->i1H2ptr + (here->JFETsourcePrimeNode));
417 
418  r1h2y = *(job->r1H2ptr + (here->JFETdrainPrimeNode)) -
419  *(job->r1H2ptr + (here->JFETsourcePrimeNode));
420  i1h2y = *(job->i1H2ptr + (here->JFETdrainPrimeNode)) -
421  *(job->i1H2ptr + (here->JFETsourcePrimeNode));
422 
423  /* loading starts here */
424  /* loading cdrain term */
425 
426  temp = DFnF12(here->cdr_x2,
427  here->cdr_y2,
428  0.0,
429  here->cdr_xy,
430  0.0,
431  0.0,
432  r1h1x,
433  i1h1x,
434  r1h1y,
435  i1h1y,
436  0.0,
437  0.0,
438  r1h2x,
439  i1h2x,
440  r1h2y,
441  i1h2y,
442  0.0,
443  0.0);
444 
445  itemp = DFiF12(here->cdr_x2,
446  here->cdr_y2,
447  0.0,
448  here->cdr_xy,
449  0.0,
450  0.0,
451  r1h1x,
452  i1h1x,
453  r1h1y,
454  i1h1y,
455  0.0,
456  0.0,
457  r1h2x,
458  i1h2x,
459  r1h2y,
460  i1h2y,
461  0.0,
462  0.0);
463 
464  *(ckt->CKTrhs + (here->JFETdrainPrimeNode)) -= temp;
465  *(ckt->CKTirhs + (here->JFETdrainPrimeNode)) -= itemp;
466  *(ckt->CKTrhs + (here->JFETsourcePrimeNode)) += temp;
467  *(ckt->CKTirhs + (here->JFETsourcePrimeNode)) += itemp;
468 
469  /* cdrain term over */
470 
471  /* loading ggs term */
472 
473  temp = D1nF12(here->ggs2,
474  r1h1x,
475  i1h1x,
476  r1h2x,
477  i1h2x);
478 
479  itemp = D1iF12(here->ggs2,
480  r1h1x,
481  i1h1x,
482  r1h2x,
483  i1h2x);
484 
485 
486  *(ckt->CKTrhs + (here->JFETgateNode)) -= temp;
487  *(ckt->CKTirhs + (here->JFETgateNode)) -= itemp;
488  *(ckt->CKTrhs + (here->JFETsourcePrimeNode)) += temp;
489  *(ckt->CKTirhs + (here->JFETsourcePrimeNode)) += itemp;
490 
491  /* ggs over */
492 
493  /* loading ggd term */
494 
495  temp = D1nF12(here->ggd2,
496  r1h1x - r1h1y,
497  i1h1x - i1h1y,
498  r1h2x - r1h2y,
499  i1h2x - i1h2y);
500 
501  itemp = D1iF12(here->ggd2,
502  r1h1x - r1h1y,
503  i1h1x - i1h1y,
504  r1h2x - r1h2y,
505  i1h2x - i1h2y);
506 
507 
508  *(ckt->CKTrhs + (here->JFETgateNode)) -= temp;
509  *(ckt->CKTirhs + (here->JFETgateNode)) -= itemp;
510  *(ckt->CKTrhs + (here->JFETdrainPrimeNode)) += temp;
511  *(ckt->CKTirhs + (here->JFETdrainPrimeNode)) += itemp;
512 
513  /* ggd over */
514 
515  /* loading capgs term */
516 
517  temp = -ckt->CKTomega *
518  D1iF12(here->capgs2,
519  r1h1x,
520  i1h1x,
521  r1h2x,
522  i1h2x);
523 
524  itemp = ckt->CKTomega *
525  D1nF12(here->capgs2,
526  r1h1x,
527  i1h1x,
528  r1h2x,
529  i1h2x);
530 
531 
532  *(ckt->CKTrhs + (here->JFETgateNode)) -= temp;
533  *(ckt->CKTirhs + (here->JFETgateNode)) -= itemp;
534  *(ckt->CKTrhs + (here->JFETsourcePrimeNode)) += temp;
535  *(ckt->CKTirhs + (here->JFETsourcePrimeNode)) += itemp;
536 
537  /* capgs over */
538 
539  /* loading capgd term */
540 
541  temp = -ckt->CKTomega *
542  D1iF12(here->capgd2,
543  r1h1x - r1h1y,
544  i1h1x - i1h1y,
545  r1h2x - r1h2y,
546  i1h2x - i1h2y);
547 
548  itemp = ckt->CKTomega *
549  D1nF12(here->capgd2,
550  r1h1x - r1h1y,
551  i1h1x - i1h1y,
552  r1h2x - r1h2y,
553  i1h2x - i1h2y);
554 
555 
556  *(ckt->CKTrhs + (here->JFETgateNode)) -= temp;
557  *(ckt->CKTirhs + (here->JFETgateNode)) -= itemp;
558  *(ckt->CKTrhs + (here->JFETdrainPrimeNode)) += temp;
559  *(ckt->CKTirhs + (here->JFETdrainPrimeNode)) += itemp;
560 
561  /* capgd over */
562 
563  /* all done */
564 
565  break;
566  case D_F1MF2:
567  /* x = vgs, y = vds */
568 
569  /* getting first order (linear) Volterra kernel */
570  r1h1x = *(job->r1H1ptr + (here->JFETgateNode)) -
571  *(job->r1H1ptr + (here->JFETsourcePrimeNode));
572  i1h1x = *(job->i1H1ptr + (here->JFETgateNode)) -
573  *(job->i1H1ptr + (here->JFETsourcePrimeNode));
574 
575  r1h1y = *(job->r1H1ptr + (here->JFETdrainPrimeNode)) -
576  *(job->r1H1ptr + (here->JFETsourcePrimeNode));
577  i1h1y = *(job->i1H1ptr + (here->JFETdrainPrimeNode)) -
578  *(job->i1H1ptr + (here->JFETsourcePrimeNode));
579 
580  r1hm2x = *(job->r1H2ptr + (here->JFETgateNode)) -
581  *(job->r1H2ptr + (here->JFETsourcePrimeNode));
582  i1hm2x = -(*(job->i1H2ptr + (here->JFETgateNode)) -
583  *(job->i1H2ptr + (here->JFETsourcePrimeNode)));
584 
585  r1hm2y = *(job->r1H2ptr + (here->JFETdrainPrimeNode)) -
586  *(job->r1H2ptr + (here->JFETsourcePrimeNode));
587  i1hm2y = -(*(job->i1H2ptr + (here->JFETdrainPrimeNode)) -
588  *(job->i1H2ptr + (here->JFETsourcePrimeNode)));
589 
590  /* loading starts here */
591  /* loading cdrain term */
592 
593  temp = DFnF12(here->cdr_x2,
594  here->cdr_y2,
595  0.0,
596  here->cdr_xy,
597  0.0,
598  0.0,
599  r1h1x,
600  i1h1x,
601  r1h1y,
602  i1h1y,
603  0.0,
604  0.0,
605  r1hm2x,
606  i1hm2x,
607  r1hm2y,
608  i1hm2y,
609  0.0,
610  0.0);
611 
612  itemp = DFiF12(here->cdr_x2,
613  here->cdr_y2,
614  0.0,
615  here->cdr_xy,
616  0.0,
617  0.0,
618  r1h1x,
619  i1h1x,
620  r1h1y,
621  i1h1y,
622  0.0,
623  0.0,
624  r1hm2x,
625  i1hm2x,
626  r1hm2y,
627  i1hm2y,
628  0.0,
629  0.0);
630 
631  *(ckt->CKTrhs + (here->JFETdrainPrimeNode)) -= temp;
632  *(ckt->CKTirhs + (here->JFETdrainPrimeNode)) -= itemp;
633  *(ckt->CKTrhs + (here->JFETsourcePrimeNode)) += temp;
634  *(ckt->CKTirhs + (here->JFETsourcePrimeNode)) += itemp;
635 
636  /* cdrain term over */
637 
638  /* loading ggs term */
639 
640  temp = D1nF12(here->ggs2,
641  r1h1x,
642  i1h1x,
643  r1hm2x,
644  i1hm2x);
645 
646  itemp = D1iF12(here->ggs2,
647  r1h1x,
648  i1h1x,
649  r1hm2x,
650  i1hm2x);
651 
652 
653  *(ckt->CKTrhs + (here->JFETgateNode)) -= temp;
654  *(ckt->CKTirhs + (here->JFETgateNode)) -= itemp;
655  *(ckt->CKTrhs + (here->JFETsourcePrimeNode)) += temp;
656  *(ckt->CKTirhs + (here->JFETsourcePrimeNode)) += itemp;
657 
658  /* ggs over */
659 
660  /* loading ggd term */
661 
662  temp = D1nF12(here->ggd2,
663  r1h1x - r1h1y,
664  i1h1x - i1h1y,
665  r1hm2x - r1hm2y,
666  i1hm2x - i1hm2y);
667 
668  itemp = D1iF12(here->ggd2,
669  r1h1x - r1h1y,
670  i1h1x - i1h1y,
671  r1hm2x - r1hm2y,
672  i1hm2x - i1hm2y);
673 
674 
675  *(ckt->CKTrhs + (here->JFETgateNode)) -= temp;
676  *(ckt->CKTirhs + (here->JFETgateNode)) -= itemp;
677  *(ckt->CKTrhs + (here->JFETdrainPrimeNode)) += temp;
678  *(ckt->CKTirhs + (here->JFETdrainPrimeNode)) += itemp;
679 
680  /* ggd over */
681 
682  /* loading capgs term */
683 
684  temp = -ckt->CKTomega *
685  D1iF12(here->capgs2,
686  r1h1x,
687  i1h1x,
688  r1hm2x,
689  i1hm2x);
690 
691  itemp = ckt->CKTomega *
692  D1nF12(here->capgs2,
693  r1h1x,
694  i1h1x,
695  r1hm2x,
696  i1hm2x);
697 
698 
699  *(ckt->CKTrhs + (here->JFETgateNode)) -= temp;
700  *(ckt->CKTirhs + (here->JFETgateNode)) -= itemp;
701  *(ckt->CKTrhs + (here->JFETsourcePrimeNode)) += temp;
702  *(ckt->CKTirhs + (here->JFETsourcePrimeNode)) += itemp;
703 
704  /* capgs over */
705 
706  /* loading capgd term */
707 
708  temp = -ckt->CKTomega *
709  D1iF12(here->capgd2,
710  r1h1x - r1h1y,
711  i1h1x - i1h1y,
712  r1hm2x - r1hm2y,
713  i1hm2x - i1hm2y);
714 
715  itemp = ckt->CKTomega *
716  D1nF12(here->capgd2,
717  r1h1x - r1h1y,
718  i1h1x - i1h1y,
719  r1hm2x - r1hm2y,
720  i1hm2x - i1hm2y);
721 
722 
723  *(ckt->CKTrhs + (here->JFETgateNode)) -= temp;
724  *(ckt->CKTirhs + (here->JFETgateNode)) -= itemp;
725  *(ckt->CKTrhs + (here->JFETdrainPrimeNode)) += temp;
726  *(ckt->CKTirhs + (here->JFETdrainPrimeNode)) += itemp;
727 
728  /* capgd over */
729 
730  /* all done */
731 
732  break;
733  case D_2F1MF2:
734  /* x = vgs, y = vds */
735 
736  /* getting first order (linear) Volterra kernel */
737  r1h1x = *(job->r1H1ptr + (here->JFETgateNode)) -
738  *(job->r1H1ptr + (here->JFETsourcePrimeNode));
739  i1h1x = *(job->i1H1ptr + (here->JFETgateNode)) -
740  *(job->i1H1ptr + (here->JFETsourcePrimeNode));
741 
742  r1h1y = *(job->r1H1ptr + (here->JFETdrainPrimeNode)) -
743  *(job->r1H1ptr + (here->JFETsourcePrimeNode));
744  i1h1y = *(job->i1H1ptr + (here->JFETdrainPrimeNode)) -
745  *(job->i1H1ptr + (here->JFETsourcePrimeNode));
746 
747  r2h11x = *(job->r2H11ptr + (here->JFETgateNode)) -
748  *(job->r2H11ptr + (here->JFETsourcePrimeNode));
749  i2h11x = *(job->i2H11ptr + (here->JFETgateNode)) -
750  *(job->i2H11ptr + (here->JFETsourcePrimeNode));
751 
752  r2h11y = *(job->r2H11ptr + (here->JFETdrainPrimeNode)) -
753  *(job->r2H11ptr + (here->JFETsourcePrimeNode));
754  i2h11y = *(job->i2H11ptr + (here->JFETdrainPrimeNode)) -
755  *(job->i2H11ptr + (here->JFETsourcePrimeNode));
756 
757  r1hm2x = *(job->r1H2ptr + (here->JFETgateNode)) -
758  *(job->r1H2ptr + (here->JFETsourcePrimeNode));
759  i1hm2x = -(*(job->i1H2ptr + (here->JFETgateNode)) -
760  *(job->i1H2ptr + (here->JFETsourcePrimeNode)));
761 
762  r1hm2y = *(job->r1H2ptr + (here->JFETdrainPrimeNode)) -
763  *(job->r1H2ptr + (here->JFETsourcePrimeNode));
764 i1hm2y = -(*(job->i1H2ptr + (here->JFETdrainPrimeNode)) -
765  *(job->i1H2ptr + (here->JFETsourcePrimeNode)));
766 
767  r2h1m2x = *(job->r2H1m2ptr + (here->JFETgateNode)) -
768  *(job->r2H1m2ptr + (here->JFETsourcePrimeNode));
769  i2h1m2x = *(job->i2H1m2ptr + (here->JFETgateNode)) -
770  *(job->i2H1m2ptr + (here->JFETsourcePrimeNode));
771 
772  r2h1m2y = *(job->r2H1m2ptr + (here->JFETdrainPrimeNode)) -
773  *(job->r2H1m2ptr + (here->JFETsourcePrimeNode));
774 i2h1m2y = *(job->i2H1m2ptr + (here->JFETdrainPrimeNode))
775  - *(job->i2H1m2ptr + (here->JFETsourcePrimeNode));
776 
777  /* loading starts here */
778  /* loading cdrain term */
779 
780 pass.cxx = here->cdr_x2;
781 pass.cyy = here->cdr_y2;
782 pass.czz = 0.0;
783 pass.cxy = here->cdr_xy;
784 pass.cyz = 0.0;
785 pass.cxz = 0.0;
786 pass.cxxx = here->cdr_x3;
787 pass.cyyy = here->cdr_y3;
788 pass.czzz = 0.0;
789 pass.cxxy = here->cdr_x2y;
790 pass.cxxz = 0.0;
791 pass.cxyy = here->cdr_xy2;
792 pass.cyyz = 0.0;
793 pass.cxzz = 0.0;
794 pass.cyzz = 0.0;
795 pass.cxyz = 0.0;
796 pass.r1h1x = r1h1x;
797 pass.i1h1x = i1h1x;
798 pass.r1h1y = r1h1y;
799 pass.i1h1y = i1h1y;
800 pass.r1h1z = 0.0;
801 pass.i1h1z = 0.0;
802 pass.r1h2x = r1hm2x;
803 pass.i1h2x = i1hm2x;
804 pass.r1h2y = r1hm2y;
805 pass.i1h2y = i1hm2y;
806 pass.r1h2z = 0.0;
807 pass.i1h2z = 0.0;
808 pass.r2h11x = r2h11x;
809 pass.i2h11x = i2h11x;
810 pass.r2h11y = r2h11y;
811 pass.i2h11y = i2h11y;
812 pass.r2h11z = 0.0;
813 pass.i2h11z = 0.0;
814 pass.h2f1f2x = r2h1m2x;
815 pass.ih2f1f2x = i2h1m2x;
816 pass.h2f1f2y = r2h1m2y;
817 pass.ih2f1f2y = i2h1m2y;
818 pass.h2f1f2z = 0.0;
819 pass.ih2f1f2z = 0.0;
820  temp = DFn2F12(&pass);
821 
822  itemp = DFi2F12(&pass);
823 
824  *(ckt->CKTrhs + (here->JFETdrainPrimeNode)) -= temp;
825  *(ckt->CKTirhs + (here->JFETdrainPrimeNode)) -= itemp;
826  *(ckt->CKTrhs + (here->JFETsourcePrimeNode)) += temp;
827  *(ckt->CKTirhs + (here->JFETsourcePrimeNode)) += itemp;
828 
829  /* cdrain term over */
830 
831  /* loading ggs term */
832 
833  temp = D1n2F12(here->ggs2,
834  here->ggs3,
835  r1h1x,
836  i1h1x,
837  r1hm2x,
838  i1hm2x,
839  r2h11x,
840  i2h11x,
841  r2h1m2x,
842  i2h1m2x);
843 
844  itemp = D1i2F12(here->ggs2,
845  here->ggs3,
846  r1h1x,
847  i1h1x,
848  r1hm2x,
849  i1hm2x,
850  r2h11x,
851  i2h11x,
852  r2h1m2x,
853  i2h1m2x);
854 
855 
856  *(ckt->CKTrhs + (here->JFETgateNode)) -= temp;
857  *(ckt->CKTirhs + (here->JFETgateNode)) -= itemp;
858  *(ckt->CKTrhs + (here->JFETsourcePrimeNode)) += temp;
859  *(ckt->CKTirhs + (here->JFETsourcePrimeNode)) += itemp;
860 
861  /* ggs over */
862 
863  /* loading ggd term */
864 
865  temp = D1n2F12(here->ggd2,
866  here->ggd3,
867  r1h1x - r1h1y,
868  i1h1x - i1h1y,
869  r1hm2x - r1hm2y,
870  i1hm2x - i1hm2y,
871  r2h11x - r2h11y,
872  i2h11x - i2h11y,
873  r2h1m2x - r2h1m2y,
874  i2h1m2x - i2h1m2y);
875 
876  itemp = D1i2F12(here->ggd2,
877  here->ggd3,
878  r1h1x - r1h1y,
879  i1h1x - i1h1y,
880  r1hm2x - r1hm2y,
881  i1hm2x - i1hm2y,
882  r2h11x - r2h11y,
883  i2h11x - i2h11y,
884  r2h1m2x - r2h1m2y,
885  i2h1m2x - i2h1m2y);
886 
887 
888 
889  *(ckt->CKTrhs + (here->JFETgateNode)) -= temp;
890  *(ckt->CKTirhs + (here->JFETgateNode)) -= itemp;
891  *(ckt->CKTrhs + (here->JFETdrainPrimeNode)) += temp;
892  *(ckt->CKTirhs + (here->JFETdrainPrimeNode)) += itemp;
893 
894  /* ggd over */
895 
896  /* loading capgs term */
897 
898  temp = -ckt->CKTomega *
899  D1i2F12(here->capgs2,
900  here->capgs3,
901  r1h1x,
902  i1h1x,
903  r1hm2x,
904  i1hm2x,
905  r2h11x,
906  i2h11x,
907  r2h1m2x,
908  i2h1m2x);
909 
910  itemp = ckt->CKTomega *
911  D1n2F12(here->capgs2,
912  here->capgs3,
913  r1h1x,
914  i1h1x,
915  r1hm2x,
916  i1hm2x,
917  r2h11x,
918  i2h11x,
919  r2h1m2x,
920  i2h1m2x);
921 
922 
923  *(ckt->CKTrhs + (here->JFETgateNode)) -= temp;
924  *(ckt->CKTirhs + (here->JFETgateNode)) -= itemp;
925  *(ckt->CKTrhs + (here->JFETsourcePrimeNode)) += temp;
926  *(ckt->CKTirhs + (here->JFETsourcePrimeNode)) += itemp;
927 
928  /* capgs over */
929 
930  /* loading capgd term */
931 
932  temp = -ckt->CKTomega *
933  D1i2F12(here->capgd2,
934  here->capgd3,
935  r1h1x - r1h1y,
936  i1h1x - i1h1y,
937  r1hm2x - r1hm2y,
938  i1hm2x - i1hm2y,
939  r2h11x - r2h11y,
940  i2h11x - i2h11y,
941  r2h1m2x - r2h1m2y,
942  i2h1m2x - i2h1m2y);
943 
944  itemp = ckt->CKTomega *
945  D1n2F12(here->capgd2,
946  here->capgd3,
947  r1h1x - r1h1y,
948  i1h1x - i1h1y,
949  r1hm2x - r1hm2y,
950  i1hm2x - i1hm2y,
951  r2h11x - r2h11y,
952  i2h11x - i2h11y,
953  r2h1m2x - r2h1m2y,
954  i2h1m2x - i2h1m2y);
955 
956 
957  *(ckt->CKTrhs + (here->JFETgateNode)) -= temp;
958  *(ckt->CKTirhs + (here->JFETgateNode)) -= itemp;
959  *(ckt->CKTrhs + (here->JFETdrainPrimeNode)) += temp;
960  *(ckt->CKTirhs + (here->JFETdrainPrimeNode)) += itemp;
961 
962  /* capgd over */
963 
964  /* all done */
965 
966  break;
967  default:
968 ;
969  }
970  }
971 }
972 return(OK);
973 }
974  else
975  return(E_BADPARM);
976 }
double DFnF12()
#define D_SETUP
Definition: distodef.h:158
double D1n2F1()
double * i1H2ptr
Definition: distodef.h:116
if(TDesc==NULL)
Definition: cd.c:1326
double DFn2F12()
double D1n3F1()
#define E_BADPARM
Definition: iferrmsg.h:26
JFETinstance * JFETinstances
Definition: jfetdefs.h:169
double * r1H1ptr
Definition: distodef.h:109
double DFi2F1()
double DFn3F1()
double * r2H1m2ptr
Definition: distodef.h:119
double * r1H2ptr
Definition: distodef.h:115
#define OK
Definition: iferrmsg.h:17
#define D_2F1MF2
Definition: distodef.h:165
#define NULL
Definition: spdefs.h:121
double * i2H1m2ptr
Definition: distodef.h:120
double D1i2F12()
int JFETdisto(int mode, GENmodel *genmodel, CKTcircuit *ckt)
Definition: jfetdist.c:23
double D1i2F1()
double DFiF12()
double * r2H11ptr
Definition: distodef.h:111
double * i2H11ptr
Definition: distodef.h:112
struct sJFETmodel * JFETnextModel
Definition: jfetdefs.h:167
double DFi2F12()
static char model[32]
Definition: subckt.c:76
double D1iF12()
double DFi3F1()
double DFn2F1()
int JFETdSetup(GENmodel *inModel, CKTcircuit *ckt)
Definition: jfetdset.c:24
#define D_TWOF1
Definition: distodef.h:161
#define D_F1PF2
Definition: distodef.h:163
double * i1H1ptr
Definition: distodef.h:110
#define D_F1MF2
Definition: distodef.h:164
#define D_THRF1
Definition: distodef.h:162
double D1nF12()
double D1n2F12()
double D1i3F1()