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