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 "mos2defs.h"
9 #include "ngspice/sperror.h"
10 #include "ngspice/distodef.h"
11 #include "ngspice/suffix.h"
12 
13 int
MOS2disto(int mode,GENmodel * genmodel,CKTcircuit * ckt)14 MOS2disto(int mode,GENmodel *genmodel, CKTcircuit *ckt)
15 /* assuming here that ckt->CKTomega has been initialised to
16  * the correct value
17  */
18 {
19  MOS2model *model = (MOS2model *) genmodel;
20  DISTOAN* job = (DISTOAN*) ckt->CKTcurJob;
21  DpassStr pass;
22  double r1h1x,i1h1x;
23  double r1h1y,i1h1y;
24  double r1h1z, i1h1z;
25  double r1h2x, i1h2x;
26  double r1h2y, i1h2y;
27  double r1h2z, i1h2z;
28  double r1hm2x,i1hm2x;
29  double r1hm2y,i1hm2y;
30  double r1hm2z, i1hm2z;
31  double r2h11x,i2h11x;
32  double r2h11y,i2h11y;
33  double r2h11z, i2h11z;
34  double r2h1m2x,i2h1m2x;
35  double r2h1m2y,i2h1m2y;
36  double r2h1m2z, i2h1m2z;
37  double temp, itemp;
38  MOS2instance *here;
39 
40 if (mode == D_SETUP)
41  return(MOS2dSetup(genmodel,ckt));
42 
43 if ((mode == D_TWOF1) || (mode == D_THRF1) ||
44  (mode == D_F1PF2) || (mode == D_F1MF2) ||
45  (mode == D_2F1MF2)) {
46 
47  /* loop through all the MOS2 models */
48 for( ; model != NULL; model = MOS2nextModel(model)) {
49 
50   /* loop through all the instances of the model */
51   for (here = MOS2instances(model); here != NULL ;
52        here=MOS2nextInstance(here)) {
53 
54     /* loading starts here */
55 
56     switch (mode) {
57     case D_TWOF1:
58 	/* x = vgs, y = vbs z = vds */
59 
60 	    /* getting first order (linear) Volterra kernel */
61 	    r1h1x = *(job->r1H1ptr + (here->MOS2gNode)) -
62 			*(job->r1H1ptr + (here->MOS2sNodePrime));
63 	    i1h1x = *(job->i1H1ptr + (here->MOS2gNode)) -
64 			*(job->i1H1ptr + (here->MOS2sNodePrime));
65 
66 	    r1h1y = *(job->r1H1ptr + (here->MOS2bNode)) -
67 			*(job->r1H1ptr + (here->MOS2sNodePrime));
68 	    i1h1y = *(job->i1H1ptr + (here->MOS2bNode)) -
69 			*(job->i1H1ptr + (here->MOS2sNodePrime));
70 
71 	    r1h1z = *(job->r1H1ptr + (here->MOS2dNodePrime)) -
72 			*(job->r1H1ptr + (here->MOS2sNodePrime));
73 	    i1h1z = *(job->i1H1ptr + (here->MOS2dNodePrime)) -
74 			*(job->i1H1ptr + (here->MOS2sNodePrime));
75 
76 	    /* loading starts here */
77 	    /* loading cdrain term  */
78 
79 	    temp = DFn2F1(here->cdr_x2,
80 					here->cdr_y2,
81 					here->cdr_z2,
82 					here->cdr_xy,
83 					here->cdr_yz,
84 					here->cdr_xz,
85 					r1h1x,
86 					i1h1x,
87 					r1h1y,
88 					i1h1y,
89 					r1h1z,
90 					i1h1z);
91 
92 	    itemp = DFi2F1(here->cdr_x2,
93 					here->cdr_y2,
94 					here->cdr_z2,
95 					here->cdr_xy,
96 					here->cdr_yz,
97 					here->cdr_xz,
98 					r1h1x,
99 					i1h1x,
100 					r1h1y,
101 					i1h1y,
102 					r1h1z,
103 					i1h1z);
104 
105 	    *(ckt->CKTrhs + (here->MOS2dNodePrime)) -= temp;
106 	    *(ckt->CKTirhs + (here->MOS2dNodePrime)) -= itemp;
107 	    *(ckt->CKTrhs + (here->MOS2sNodePrime)) += temp;
108 	    *(ckt->CKTirhs + (here->MOS2sNodePrime)) += itemp;
109 
110 	    /* cdrain term over */
111 
112 		/* loading gbs term */
113 
114 		temp = D1n2F1(here->gbs2,
115 						r1h1y,
116 						i1h1y);
117 
118 		itemp = D1i2F1(here->gbs2,
119 						r1h1y,
120 						i1h1y);
121 
122 
123 	    *(ckt->CKTrhs + (here->MOS2bNode)) -= temp;
124 	    *(ckt->CKTirhs + (here->MOS2bNode)) -= itemp;
125 	    *(ckt->CKTrhs + (here->MOS2sNodePrime)) += temp;
126 	    *(ckt->CKTirhs + (here->MOS2sNodePrime)) += itemp;
127 
128 		/* gbs over */
129 
130 		/* loading gbd term */
131 
132 		temp = D1n2F1(here->gbd2,
133 						r1h1y - r1h1z,
134 						i1h1y - i1h1z);
135 
136 		itemp = D1i2F1(here->gbd2,
137 						r1h1y - r1h1z,
138 						i1h1y - i1h1z);
139 
140 
141 	    *(ckt->CKTrhs + (here->MOS2bNode)) -= temp;
142 	    *(ckt->CKTirhs + (here->MOS2bNode)) -= itemp;
143 	    *(ckt->CKTrhs + (here->MOS2dNodePrime)) += temp;
144 	    *(ckt->CKTirhs + (here->MOS2dNodePrime)) += itemp;
145 
146 		/* gbd over */
147 
148 		/* loading capgs term */
149 
150 		temp = -ckt->CKTomega *
151 				D1i2F1(here->capgs2,
152 						r1h1x,
153 						i1h1x);
154 
155 		itemp = ckt->CKTomega *
156 				D1n2F1(here->capgs2,
157 						r1h1x,
158 						i1h1x);
159 
160 	    *(ckt->CKTrhs + (here->MOS2gNode)) -= temp;
161 	    *(ckt->CKTirhs + (here->MOS2gNode)) -= itemp;
162 	    *(ckt->CKTrhs + (here->MOS2sNodePrime)) += temp;
163 	    *(ckt->CKTirhs + (here->MOS2sNodePrime)) += itemp;
164 
165 		/* capgs over */
166 
167 		/* loading capgd term */
168 
169 		temp = -ckt->CKTomega *
170 				D1i2F1(here->capgd2,
171 						r1h1x - r1h1z,
172 						i1h1x - i1h1z);
173 
174 		itemp = ckt->CKTomega *
175 				D1n2F1(here->capgd2,
176 						r1h1x - r1h1z,
177 						i1h1x - i1h1z);
178 
179 
180 	    *(ckt->CKTrhs + (here->MOS2gNode)) -= temp;
181 	    *(ckt->CKTirhs + (here->MOS2gNode)) -= itemp;
182 	    *(ckt->CKTrhs + (here->MOS2dNodePrime)) += temp;
183 	    *(ckt->CKTirhs + (here->MOS2dNodePrime)) += itemp;
184 
185 		/* capgd over */
186 		/* loading capgb term */
187 
188 		temp = -ckt->CKTomega *
189 				D1i2F1(here->capgb2,
190 						r1h1x - r1h1y,
191 						i1h1x - i1h1y);
192 
193 		itemp = ckt->CKTomega *
194 				D1n2F1(here->capgb2,
195 						r1h1x - r1h1y,
196 						i1h1x - i1h1y);
197 
198 	    *(ckt->CKTrhs + (here->MOS2gNode)) -= temp;
199 	    *(ckt->CKTirhs + (here->MOS2gNode)) -= itemp;
200 	    *(ckt->CKTrhs + (here->MOS2bNode)) += temp;
201 	    *(ckt->CKTirhs + (here->MOS2bNode)) += itemp;
202 
203 		/* capgb over */
204 
205 		/* loading capbs term */
206 
207 		temp = -ckt->CKTomega *
208 				D1i2F1(here->capbs2,
209 						r1h1y,
210 						i1h1y);
211 
212 		itemp = ckt->CKTomega *
213 				D1n2F1(here->capbs2,
214 						r1h1y,
215 						i1h1y);
216 
217 
218 	    *(ckt->CKTrhs + (here->MOS2bNode)) -= temp;
219 	    *(ckt->CKTirhs + (here->MOS2bNode)) -= itemp;
220 	    *(ckt->CKTrhs + (here->MOS2sNodePrime)) += temp;
221 	    *(ckt->CKTirhs + (here->MOS2sNodePrime)) += itemp;
222 
223 		/* capbs over */
224 
225 		/* loading capbd term */
226 
227 		temp = -ckt->CKTomega *
228 				D1i2F1(here->capbd2,
229 						r1h1y - r1h1z,
230 						i1h1y - i1h1z);
231 
232 		itemp = ckt->CKTomega *
233 				D1n2F1(here->capbd2,
234 						r1h1y - r1h1z,
235 						i1h1y - i1h1z);
236 
237 
238 	    *(ckt->CKTrhs + (here->MOS2bNode)) -= temp;
239 	    *(ckt->CKTirhs + (here->MOS2bNode)) -= itemp;
240 	    *(ckt->CKTrhs + (here->MOS2dNodePrime)) += temp;
241 	    *(ckt->CKTirhs + (here->MOS2dNodePrime)) += itemp;
242 
243 		/* capbd over */
244 	/* all done */
245 
246       break;
247 
248     case D_THRF1:
249 	/* x = vgs, y = vbs z = vds */
250 
251 	    /* getting first order (linear) Volterra kernel */
252 	    r1h1x = *(job->r1H1ptr + (here->MOS2gNode)) -
253 			*(job->r1H1ptr + (here->MOS2sNodePrime));
254 	    i1h1x = *(job->i1H1ptr + (here->MOS2gNode)) -
255 			*(job->i1H1ptr + (here->MOS2sNodePrime));
256 
257 	    r1h1y = *(job->r1H1ptr + (here->MOS2bNode)) -
258 			*(job->r1H1ptr + (here->MOS2sNodePrime));
259 	    i1h1y = *(job->i1H1ptr + (here->MOS2bNode)) -
260 			*(job->i1H1ptr + (here->MOS2sNodePrime));
261 
262 	    r1h1z = *(job->r1H1ptr + (here->MOS2dNodePrime)) -
263 			*(job->r1H1ptr + (here->MOS2sNodePrime));
264 	    i1h1z = *(job->i1H1ptr + (here->MOS2dNodePrime)) -
265 			*(job->i1H1ptr + (here->MOS2sNodePrime));
266 
267 	r2h11x = *(job->r2H11ptr + (here->MOS2gNode)) -
268 		    *(job->r2H11ptr + (here->MOS2sNodePrime));
269 	i2h11x = *(job->i2H11ptr + (here->MOS2gNode)) -
270 		    *(job->i2H11ptr + (here->MOS2sNodePrime));
271 
272 	r2h11y = *(job->r2H11ptr + (here->MOS2bNode)) -
273 		    *(job->r2H11ptr + (here->MOS2sNodePrime));
274 	i2h11y = *(job->i2H11ptr + (here->MOS2bNode)) -
275 		    *(job->i2H11ptr + (here->MOS2sNodePrime));
276 
277 	r2h11z = *(job->r2H11ptr + (here->MOS2dNodePrime)) -
278 		    *(job->r2H11ptr + (here->MOS2sNodePrime));
279 	i2h11z = *(job->i2H11ptr + (here->MOS2dNodePrime)) -
280 		    *(job->i2H11ptr + (here->MOS2sNodePrime));
281 		/* loading starts here */
282 		/* loading cdrain term  */
283 
284 		temp = DFn3F1(here->cdr_x2,
285 					    here->cdr_y2,
286 					    here->cdr_z2,
287 					    here->cdr_xy,
288 					    here->cdr_yz,
289 					    here->cdr_xz,
290 					    here->cdr_x3,
291 					    here->cdr_y3,
292 					    here->cdr_z3,
293 					here->cdr_x2y,
294 					here->cdr_x2z,
295 					here->cdr_xy2,
296 					here->cdr_y2z,
297 					here->cdr_xz2,
298 					here->cdr_yz2,
299 				    here->cdr_xyz,
300 					r1h1x,
301 					i1h1x,
302 					r1h1y,
303 					i1h1y,
304 					r1h1z,
305 					i1h1z,
306 					r2h11x,
307 					i2h11x,
308 					r2h11y,
309 					i2h11y,
310 					r2h11z,
311 					i2h11z);
312 		itemp = DFi3F1(here->cdr_x2,
313 					    here->cdr_y2,
314 					    here->cdr_z2,
315 					    here->cdr_xy,
316 					here->cdr_yz,
317 					here->cdr_xz,
318 					here->cdr_x3,
319 					here->cdr_y3,
320 					here->cdr_z3,
321 					here->cdr_x2y,
322 					here->cdr_x2z,
323 					here->cdr_xy2,
324 					here->cdr_y2z,
325 					here->cdr_xz2,
326 					here->cdr_yz2,
327 				    here->cdr_xyz,
328 					r1h1x,
329 					i1h1x,
330 					r1h1y,
331 					i1h1y,
332 					r1h1z,
333 					i1h1z,
334 					r2h11x,
335 					i2h11x,
336 					r2h11y,
337 					i2h11y,
338 					r2h11z,
339 					i2h11z);
340 
341 
342 	    *(ckt->CKTrhs + (here->MOS2dNodePrime)) -= temp;
343 	    *(ckt->CKTirhs + (here->MOS2dNodePrime)) -= itemp;
344 	    *(ckt->CKTrhs + (here->MOS2sNodePrime)) += temp;
345 	    *(ckt->CKTirhs + (here->MOS2sNodePrime)) += itemp;
346 
347 	    /* cdrain term over */
348 
349 		/* loading gbs term */
350 
351 		temp = D1n3F1(here->gbs2,
352 						here->gbs3,
353 						r1h1y,
354 						i1h1y,
355 						r2h11y,
356 						i2h11y);
357 
358 
359 		itemp = D1i3F1(here->gbs2,
360 						here->gbs3,
361 						r1h1y,
362 						i1h1y,
363 						r2h11y,
364 						i2h11y);
365 
366 
367 	    *(ckt->CKTrhs + (here->MOS2bNode)) -= temp;
368 	    *(ckt->CKTirhs + (here->MOS2bNode)) -= itemp;
369 	    *(ckt->CKTrhs + (here->MOS2sNodePrime)) += temp;
370 	    *(ckt->CKTirhs + (here->MOS2sNodePrime)) += itemp;
371 
372 		/* gbs over */
373 
374 		/* loading gbd term */
375 
376 		temp = D1n3F1(here->gbd2,
377 						here->gbd3,
378 						r1h1y - r1h1z,
379 						i1h1y - i1h1z,
380 						r2h11y - r2h11z,
381 						i2h11y - i2h11z);
382 
383 		itemp = D1i3F1(here->gbd2,
384 						here->gbd3,
385 						r1h1y - r1h1z,
386 						i1h1y - i1h1z,
387 						r2h11y - r2h11z,
388 						i2h11y - i2h11z);
389 
390 	    *(ckt->CKTrhs + (here->MOS2bNode)) -= temp;
391 	    *(ckt->CKTirhs + (here->MOS2bNode)) -= itemp;
392 	    *(ckt->CKTrhs + (here->MOS2dNodePrime)) += temp;
393 	    *(ckt->CKTirhs + (here->MOS2dNodePrime)) += itemp;
394 
395 		/* gbd over */
396 
397 		/* loading capgs term */
398 
399 		temp = -ckt->CKTomega *
400 			    D1i3F1(here->capgs2,
401 						here->capgs3,
402 						r1h1x,
403 						i1h1x,
404 						r2h11x,
405 						i2h11x);
406 
407 		itemp = ckt->CKTomega *
408 			    D1n3F1(here->capgs2,
409 						here->capgs3,
410 						r1h1x,
411 						i1h1x,
412 						r2h11x,
413 						i2h11x);
414 
415 	    *(ckt->CKTrhs + (here->MOS2gNode)) -= temp;
416 	    *(ckt->CKTirhs + (here->MOS2gNode)) -= itemp;
417 	    *(ckt->CKTrhs + (here->MOS2sNodePrime)) += temp;
418 	    *(ckt->CKTirhs + (here->MOS2sNodePrime)) += itemp;
419 
420 		/* capgs over */
421 
422 		/* loading capgd term */
423 
424 		temp = -ckt->CKTomega *
425 			    D1i3F1(here->capgd2,
426 						here->capgd3,
427 						r1h1x - r1h1z,
428 						i1h1x - i1h1z,
429 						r2h11x - r2h11z,
430 						i2h11x - i2h11z);
431 
432 		itemp = ckt->CKTomega *
433 			    D1n3F1(here->capgd2,
434 						here->capgd3,
435 						r1h1x - r1h1z,
436 						i1h1x - i1h1z,
437 						r2h11x - r2h11z,
438 						i2h11x - i2h11z);
439 
440 
441 	    *(ckt->CKTrhs + (here->MOS2gNode)) -= temp;
442 	    *(ckt->CKTirhs + (here->MOS2gNode)) -= itemp;
443 	    *(ckt->CKTrhs + (here->MOS2dNodePrime)) += temp;
444 	    *(ckt->CKTirhs + (here->MOS2dNodePrime)) += itemp;
445 
446 		/* capgd over */
447 		/* loading capgb term */
448 
449 		temp = -ckt->CKTomega *
450 			    D1i3F1(here->capgb2,
451 						here->capgb3,
452 						r1h1x - r1h1y,
453 						i1h1x - i1h1y,
454 						r2h11x - r2h11y,
455 						i2h11x - i2h11y);
456 
457 		itemp = ckt->CKTomega *
458 			    D1n3F1(here->capgb2,
459 						here->capgb3,
460 						r1h1x - r1h1y,
461 						i1h1x - i1h1y,
462 						r2h11x - r2h11y,
463 						i2h11x - i2h11y);
464 
465 	    *(ckt->CKTrhs + (here->MOS2gNode)) -= temp;
466 	    *(ckt->CKTirhs + (here->MOS2gNode)) -= itemp;
467 	    *(ckt->CKTrhs + (here->MOS2bNode)) += temp;
468 	    *(ckt->CKTirhs + (here->MOS2bNode)) += itemp;
469 
470 		/* capgb over */
471 
472 		/* loading capbs term */
473 
474 		temp = -ckt->CKTomega *
475 			    D1i3F1(here->capbs2,
476 						here->capbs3,
477 						r1h1y,
478 						i1h1y,
479 						r2h11y,
480 						i2h11y);
481 
482 		itemp = ckt->CKTomega *
483 			    D1n3F1(here->capbs2,
484 						here->capbs3,
485 						r1h1y,
486 						i1h1y,
487 						r2h11y,
488 						i2h11y);
489 
490 
491 	    *(ckt->CKTrhs + (here->MOS2bNode)) -= temp;
492 	    *(ckt->CKTirhs + (here->MOS2bNode)) -= itemp;
493 	    *(ckt->CKTrhs + (here->MOS2sNodePrime)) += temp;
494 	    *(ckt->CKTirhs + (here->MOS2sNodePrime)) += itemp;
495 
496 		/* capbs over */
497 
498 		/* loading capbd term */
499 
500 		temp = -ckt->CKTomega *
501 			    D1i3F1(here->capbd2,
502 						here->capbd3,
503 						r1h1y - r1h1z,
504 						i1h1y - i1h1z,
505 						r2h11y - r2h11z,
506 						i2h11y - i2h11z);
507 
508 		itemp = ckt->CKTomega *
509 			    D1n3F1(here->capbd2,
510 						here->capbd3,
511 						r1h1y - r1h1z,
512 						i1h1y - i1h1z,
513 						r2h11y - r2h11z,
514 						i2h11y - i2h11z);
515 
516 
517 	    *(ckt->CKTrhs + (here->MOS2bNode)) -= temp;
518 	    *(ckt->CKTirhs + (here->MOS2bNode)) -= itemp;
519 	    *(ckt->CKTrhs + (here->MOS2dNodePrime)) += temp;
520 	    *(ckt->CKTirhs + (here->MOS2dNodePrime)) += itemp;
521 
522 		/* capbd over */
523 	/* all done */
524 
525       break;
526     case D_F1PF2:
527 	/* x = vgs, y = vbs z = vds */
528 
529 	    /* getting first order (linear) Volterra kernel */
530 	    r1h1x = *(job->r1H1ptr + (here->MOS2gNode)) -
531 			*(job->r1H1ptr + (here->MOS2sNodePrime));
532 	    i1h1x = *(job->i1H1ptr + (here->MOS2gNode)) -
533 			*(job->i1H1ptr + (here->MOS2sNodePrime));
534 
535 	    r1h1y = *(job->r1H1ptr + (here->MOS2bNode)) -
536 			*(job->r1H1ptr + (here->MOS2sNodePrime));
537 	    i1h1y = *(job->i1H1ptr + (here->MOS2bNode)) -
538 			*(job->i1H1ptr + (here->MOS2sNodePrime));
539 
540 	    r1h1z = *(job->r1H1ptr + (here->MOS2dNodePrime)) -
541 			*(job->r1H1ptr + (here->MOS2sNodePrime));
542 	    i1h1z = *(job->i1H1ptr + (here->MOS2dNodePrime)) -
543 			*(job->i1H1ptr + (here->MOS2sNodePrime));
544 
545 	    r1h2x = *(job->r1H2ptr + (here->MOS2gNode)) -
546 			*(job->r1H2ptr + (here->MOS2sNodePrime));
547 	    i1h2x = *(job->i1H2ptr + (here->MOS2gNode)) -
548 			*(job->i1H2ptr + (here->MOS2sNodePrime));
549 
550 	    r1h2y = *(job->r1H2ptr + (here->MOS2bNode)) -
551 			*(job->r1H2ptr + (here->MOS2sNodePrime));
552 	    i1h2y = *(job->i1H2ptr + (here->MOS2bNode)) -
553 			*(job->i1H2ptr + (here->MOS2sNodePrime));
554 
555 	    r1h2z = *(job->r1H2ptr + (here->MOS2dNodePrime)) -
556 			*(job->r1H2ptr + (here->MOS2sNodePrime));
557 	    i1h2z = *(job->i1H2ptr + (here->MOS2dNodePrime)) -
558 			*(job->i1H2ptr + (here->MOS2sNodePrime));
559 
560 	    /* loading starts here */
561 	    /* loading cdrain term  */
562 
563 	    temp = DFnF12(here->cdr_x2,
564 					here->cdr_y2,
565 					here->cdr_z2,
566 					here->cdr_xy,
567 					here->cdr_yz,
568 					here->cdr_xz,
569 					r1h1x,
570 					i1h1x,
571 					r1h1y,
572 					i1h1y,
573 					r1h1z,
574 					i1h1z,
575 					r1h2x,
576 					i1h2x,
577 					r1h2y,
578 					i1h2y,
579 					r1h2z,
580 					i1h2z);
581 
582 	    itemp = DFiF12(here->cdr_x2,
583 					here->cdr_y2,
584 					here->cdr_z2,
585 					here->cdr_xy,
586 					here->cdr_yz,
587 					here->cdr_xz,
588 					r1h1x,
589 					i1h1x,
590 					r1h1y,
591 					i1h1y,
592 					r1h1z,
593 					i1h1z,
594 					r1h2x,
595 					i1h2x,
596 					r1h2y,
597 					i1h2y,
598 					r1h2z,
599 					i1h2z);
600 
601 	    *(ckt->CKTrhs + (here->MOS2dNodePrime)) -= temp;
602 	    *(ckt->CKTirhs + (here->MOS2dNodePrime)) -= itemp;
603 	    *(ckt->CKTrhs + (here->MOS2sNodePrime)) += temp;
604 	    *(ckt->CKTirhs + (here->MOS2sNodePrime)) += itemp;
605 
606 	    /* cdrain term over */
607 
608 		/* loading gbs term */
609 
610 		temp = D1nF12(here->gbs2,
611 						r1h1y,
612 						i1h1y,
613 						r1h2y,
614 						i1h2y);
615 
616 		itemp = D1iF12(here->gbs2,
617 						r1h1y,
618 						i1h1y,
619 						r1h2y,
620 						i1h2y);
621 
622 
623 	    *(ckt->CKTrhs + (here->MOS2bNode)) -= temp;
624 	    *(ckt->CKTirhs + (here->MOS2bNode)) -= itemp;
625 	    *(ckt->CKTrhs + (here->MOS2sNodePrime)) += temp;
626 	    *(ckt->CKTirhs + (here->MOS2sNodePrime)) += itemp;
627 
628 		/* gbs over */
629 
630 		/* loading gbd term */
631 
632 		temp = D1nF12(here->gbd2,
633 						r1h1y - r1h1z,
634 						i1h1y - i1h1z,
635 						r1h2y - r1h2z,
636 						i1h2y - i1h2z);
637 
638 		itemp = D1iF12(here->gbd2,
639 						r1h1y - r1h1z,
640 						i1h1y - i1h1z,
641 						r1h2y - r1h2z,
642 						i1h2y - i1h2z);
643 
644 
645 	    *(ckt->CKTrhs + (here->MOS2bNode)) -= temp;
646 	    *(ckt->CKTirhs + (here->MOS2bNode)) -= itemp;
647 	    *(ckt->CKTrhs + (here->MOS2dNodePrime)) += temp;
648 	    *(ckt->CKTirhs + (here->MOS2dNodePrime)) += itemp;
649 
650 		/* gbd over */
651 
652 		/* loading capgs term */
653 
654 		temp = -ckt->CKTomega *
655 			    D1iF12(here->capgs2,
656 						r1h1x,
657 						i1h1x,
658 						r1h2x,
659 						i1h2x);
660 
661 		itemp = ckt->CKTomega *
662 			    D1nF12(here->capgs2,
663 						r1h1x,
664 						i1h1x,
665 						r1h2x,
666 						i1h2x);
667 
668 	    *(ckt->CKTrhs + (here->MOS2gNode)) -= temp;
669 	    *(ckt->CKTirhs + (here->MOS2gNode)) -= itemp;
670 	    *(ckt->CKTrhs + (here->MOS2sNodePrime)) += temp;
671 	    *(ckt->CKTirhs + (here->MOS2sNodePrime)) += itemp;
672 
673 		/* capgs over */
674 
675 		/* loading capgd term */
676 
677 		temp = -ckt->CKTomega *
678 			    D1iF12(here->capgd2,
679 						r1h1x - r1h1z,
680 						i1h1x - i1h1z,
681 						r1h2x - r1h2z,
682 						i1h2x - i1h2z);
683 
684 		itemp = ckt->CKTomega *
685 			    D1nF12(here->capgd2,
686 						r1h1x - r1h1z,
687 						i1h1x - i1h1z,
688 						r1h2x - r1h2z,
689 						i1h2x - i1h2z);
690 
691 
692 	    *(ckt->CKTrhs + (here->MOS2gNode)) -= temp;
693 	    *(ckt->CKTirhs + (here->MOS2gNode)) -= itemp;
694 	    *(ckt->CKTrhs + (here->MOS2dNodePrime)) += temp;
695 	    *(ckt->CKTirhs + (here->MOS2dNodePrime)) += itemp;
696 
697 		/* capgd over */
698 		/* loading capgb term */
699 
700 		temp = -ckt->CKTomega *
701 			    D1iF12(here->capgb2,
702 						r1h1x - r1h1y,
703 						i1h1x - i1h1y,
704 						r1h2x - r1h2y,
705 						i1h2x - i1h2y);
706 
707 		itemp = ckt->CKTomega *
708 			    D1nF12(here->capgb2,
709 						r1h1x - r1h1y,
710 						i1h1x - i1h1y,
711 						r1h2x - r1h2y,
712 						i1h2x - i1h2y);
713 
714 	    *(ckt->CKTrhs + (here->MOS2gNode)) -= temp;
715 	    *(ckt->CKTirhs + (here->MOS2gNode)) -= itemp;
716 	    *(ckt->CKTrhs + (here->MOS2bNode)) += temp;
717 	    *(ckt->CKTirhs + (here->MOS2bNode)) += itemp;
718 
719 		/* capgb over */
720 
721 		/* loading capbs term */
722 
723 		temp = -ckt->CKTomega *
724 			    D1iF12(here->capbs2,
725 						r1h1y,
726 						i1h1y,
727 						r1h2y,
728 						i1h2y);
729 
730 		itemp = ckt->CKTomega *
731 			    D1nF12(here->capbs2,
732 						r1h1y,
733 						i1h1y,
734 						r1h2y,
735 						i1h2y);
736 
737 
738 	    *(ckt->CKTrhs + (here->MOS2bNode)) -= temp;
739 	    *(ckt->CKTirhs + (here->MOS2bNode)) -= itemp;
740 	    *(ckt->CKTrhs + (here->MOS2sNodePrime)) += temp;
741 	    *(ckt->CKTirhs + (here->MOS2sNodePrime)) += itemp;
742 
743 		/* capbs over */
744 
745 		/* loading capbd term */
746 
747 		temp = -ckt->CKTomega *
748 			    D1iF12(here->capbd2,
749 						r1h1y - r1h1z,
750 						i1h1y - i1h1z,
751 						r1h2y - r1h2z,
752 						i1h2y - i1h2z);
753 
754 		itemp = ckt->CKTomega *
755 			    D1nF12(here->capbd2,
756 						r1h1y - r1h1z,
757 						i1h1y - i1h1z,
758 						r1h2y - r1h2z,
759 						i1h2y - i1h2z);
760 
761 
762 	    *(ckt->CKTrhs + (here->MOS2bNode)) -= temp;
763 	    *(ckt->CKTirhs + (here->MOS2bNode)) -= itemp;
764 	    *(ckt->CKTrhs + (here->MOS2dNodePrime)) += temp;
765 	    *(ckt->CKTirhs + (here->MOS2dNodePrime)) += itemp;
766 
767 		/* capbd over */
768 	/* all done */
769 
770       break;
771     case D_F1MF2:
772 	/* x = vgs, y = vbs z = vds */
773 
774 	    /* getting first order (linear) Volterra kernel */
775 	    r1h1x = *(job->r1H1ptr + (here->MOS2gNode)) -
776 			*(job->r1H1ptr + (here->MOS2sNodePrime));
777 	    i1h1x = *(job->i1H1ptr + (here->MOS2gNode)) -
778 			*(job->i1H1ptr + (here->MOS2sNodePrime));
779 
780 	    r1h1y = *(job->r1H1ptr + (here->MOS2bNode)) -
781 			*(job->r1H1ptr + (here->MOS2sNodePrime));
782 	    i1h1y = *(job->i1H1ptr + (here->MOS2bNode)) -
783 			*(job->i1H1ptr + (here->MOS2sNodePrime));
784 
785 	    r1h1z = *(job->r1H1ptr + (here->MOS2dNodePrime)) -
786 			*(job->r1H1ptr + (here->MOS2sNodePrime));
787 	    i1h1z = *(job->i1H1ptr + (here->MOS2dNodePrime)) -
788 			*(job->i1H1ptr + (here->MOS2sNodePrime));
789 
790 	    r1hm2x = *(job->r1H2ptr + (here->MOS2gNode)) -
791 			*(job->r1H2ptr + (here->MOS2sNodePrime));
792 	    i1hm2x = -(*(job->i1H2ptr + (here->MOS2gNode)) -
793 			*(job->i1H2ptr + (here->MOS2sNodePrime)));
794 
795 	    r1hm2y = *(job->r1H2ptr + (here->MOS2bNode)) -
796 			*(job->r1H2ptr + (here->MOS2sNodePrime));
797 	    i1hm2y = -(*(job->i1H2ptr + (here->MOS2bNode)) -
798 			*(job->i1H2ptr + (here->MOS2sNodePrime)));
799 
800 	    r1hm2z = *(job->r1H2ptr + (here->MOS2dNodePrime)) -
801 			*(job->r1H2ptr + (here->MOS2sNodePrime));
802 	i1hm2z = -(*(job->i1H2ptr + (here->MOS2dNodePrime)) -
803 			*(job->i1H2ptr + (here->MOS2sNodePrime)));
804 
805 	    /* loading starts here */
806 	    /* loading cdrain term  */
807 
808 	    temp = DFnF12(here->cdr_x2,
809 					here->cdr_y2,
810 					here->cdr_z2,
811 					here->cdr_xy,
812 					here->cdr_yz,
813 					here->cdr_xz,
814 					r1h1x,
815 					i1h1x,
816 					r1h1y,
817 					i1h1y,
818 					r1h1z,
819 					i1h1z,
820 					r1hm2x,
821 					i1hm2x,
822 					r1hm2y,
823 					i1hm2y,
824 					r1hm2z,
825 					i1hm2z);
826 
827 	    itemp = DFiF12(here->cdr_x2,
828 					here->cdr_y2,
829 					here->cdr_z2,
830 					here->cdr_xy,
831 					here->cdr_yz,
832 					here->cdr_xz,
833 					r1h1x,
834 					i1h1x,
835 					r1h1y,
836 					i1h1y,
837 					r1h1z,
838 					i1h1z,
839 					r1hm2x,
840 					i1hm2x,
841 					r1hm2y,
842 					i1hm2y,
843 					r1hm2z,
844 					i1hm2z);
845 
846 	    *(ckt->CKTrhs + (here->MOS2dNodePrime)) -= temp;
847 	    *(ckt->CKTirhs + (here->MOS2dNodePrime)) -= itemp;
848 	    *(ckt->CKTrhs + (here->MOS2sNodePrime)) += temp;
849 	    *(ckt->CKTirhs + (here->MOS2sNodePrime)) += itemp;
850 
851 	    /* cdrain term over */
852 
853 		/* loading gbs term */
854 
855 		temp = D1nF12(here->gbs2,
856 						r1h1y,
857 						i1h1y,
858 						r1hm2y,
859 						i1hm2y);
860 
861 		itemp = D1iF12(here->gbs2,
862 						r1h1y,
863 						i1h1y,
864 						r1hm2y,
865 						i1hm2y);
866 
867 
868 	    *(ckt->CKTrhs + (here->MOS2bNode)) -= temp;
869 	    *(ckt->CKTirhs + (here->MOS2bNode)) -= itemp;
870 	    *(ckt->CKTrhs + (here->MOS2sNodePrime)) += temp;
871 	    *(ckt->CKTirhs + (here->MOS2sNodePrime)) += itemp;
872 
873 		/* gbs over */
874 
875 		/* loading gbd term */
876 
877 		temp = D1nF12(here->gbd2,
878 						r1h1y - r1h1z,
879 						i1h1y - i1h1z,
880 						r1hm2y - r1hm2z,
881 						i1hm2y - i1hm2z);
882 
883 		itemp = D1iF12(here->gbd2,
884 						r1h1y - r1h1z,
885 						i1h1y - i1h1z,
886 						r1hm2y - r1hm2z,
887 						i1hm2y - i1hm2z);
888 
889 
890 	    *(ckt->CKTrhs + (here->MOS2bNode)) -= temp;
891 	    *(ckt->CKTirhs + (here->MOS2bNode)) -= itemp;
892 	    *(ckt->CKTrhs + (here->MOS2dNodePrime)) += temp;
893 	    *(ckt->CKTirhs + (here->MOS2dNodePrime)) += itemp;
894 
895 		/* gbd over */
896 
897 		/* loading capgs term */
898 
899 		temp = -ckt->CKTomega *
900 			    D1iF12(here->capgs2,
901 						r1h1x,
902 						i1h1x,
903 						r1hm2x,
904 						i1hm2x);
905 
906 		itemp = ckt->CKTomega *
907 			    D1nF12(here->capgs2,
908 						r1h1x,
909 						i1h1x,
910 						r1hm2x,
911 						i1hm2x);
912 
913 	    *(ckt->CKTrhs + (here->MOS2gNode)) -= temp;
914 	    *(ckt->CKTirhs + (here->MOS2gNode)) -= itemp;
915 	    *(ckt->CKTrhs + (here->MOS2sNodePrime)) += temp;
916 	    *(ckt->CKTirhs + (here->MOS2sNodePrime)) += itemp;
917 
918 		/* capgs over */
919 
920 		/* loading capgd term */
921 
922 		temp = -ckt->CKTomega *
923 			    D1iF12(here->capgd2,
924 						r1h1x - r1h1z,
925 						i1h1x - i1h1z,
926 						r1hm2x - r1hm2z,
927 						i1hm2x - i1hm2z);
928 
929 		itemp = ckt->CKTomega *
930 			    D1nF12(here->capgd2,
931 						r1h1x - r1h1z,
932 						i1h1x - i1h1z,
933 						r1hm2x - r1hm2z,
934 						i1hm2x - i1hm2z);
935 
936 
937 	    *(ckt->CKTrhs + (here->MOS2gNode)) -= temp;
938 	    *(ckt->CKTirhs + (here->MOS2gNode)) -= itemp;
939 	    *(ckt->CKTrhs + (here->MOS2dNodePrime)) += temp;
940 	    *(ckt->CKTirhs + (here->MOS2dNodePrime)) += itemp;
941 
942 		/* capgd over */
943 		/* loading capgb term */
944 
945 		temp = -ckt->CKTomega *
946 			    D1iF12(here->capgb2,
947 						r1h1x - r1h1y,
948 						i1h1x - i1h1y,
949 						r1hm2x - r1hm2y,
950 						i1hm2x - i1hm2y);
951 
952 		itemp = ckt->CKTomega *
953 			    D1nF12(here->capgb2,
954 						r1h1x - r1h1y,
955 						i1h1x - i1h1y,
956 						r1hm2x - r1hm2y,
957 						i1hm2x - i1hm2y);
958 
959 	    *(ckt->CKTrhs + (here->MOS2gNode)) -= temp;
960 	    *(ckt->CKTirhs + (here->MOS2gNode)) -= itemp;
961 	    *(ckt->CKTrhs + (here->MOS2bNode)) += temp;
962 	    *(ckt->CKTirhs + (here->MOS2bNode)) += itemp;
963 
964 		/* capgb over */
965 
966 		/* loading capbs term */
967 
968 		temp = -ckt->CKTomega *
969 			    D1iF12(here->capbs2,
970 						r1h1y,
971 						i1h1y,
972 						r1hm2y,
973 						i1hm2y);
974 
975 		itemp = ckt->CKTomega *
976 			    D1nF12(here->capbs2,
977 						r1h1y,
978 						i1h1y,
979 						r1hm2y,
980 						i1hm2y);
981 
982 
983 	    *(ckt->CKTrhs + (here->MOS2bNode)) -= temp;
984 	    *(ckt->CKTirhs + (here->MOS2bNode)) -= itemp;
985 	    *(ckt->CKTrhs + (here->MOS2sNodePrime)) += temp;
986 	    *(ckt->CKTirhs + (here->MOS2sNodePrime)) += itemp;
987 
988 		/* capbs over */
989 
990 		/* loading capbd term */
991 
992 		temp = -ckt->CKTomega *
993 			    D1iF12(here->capbd2,
994 						r1h1y - r1h1z,
995 						i1h1y - i1h1z,
996 						r1hm2y - r1hm2z,
997 						i1hm2y - i1hm2z);
998 
999 		itemp = ckt->CKTomega *
1000 			    D1nF12(here->capbd2,
1001 						r1h1y - r1h1z,
1002 						i1h1y - i1h1z,
1003 						r1hm2y - r1hm2z,
1004 						i1hm2y - i1hm2z);
1005 
1006 
1007 	    *(ckt->CKTrhs + (here->MOS2bNode)) -= temp;
1008 	    *(ckt->CKTirhs + (here->MOS2bNode)) -= itemp;
1009 	    *(ckt->CKTrhs + (here->MOS2dNodePrime)) += temp;
1010 	    *(ckt->CKTirhs + (here->MOS2dNodePrime)) += itemp;
1011 
1012 		/* capbd over */
1013 	/* all done */
1014 
1015       break;
1016     case D_2F1MF2:
1017 	/* x = vgs, y = vbs z = vds */
1018 
1019 	    /* getting first order (linear) Volterra kernel */
1020 	    r1h1x = *(job->r1H1ptr + (here->MOS2gNode)) -
1021 			*(job->r1H1ptr + (here->MOS2sNodePrime));
1022 	    i1h1x = *(job->i1H1ptr + (here->MOS2gNode)) -
1023 			*(job->i1H1ptr + (here->MOS2sNodePrime));
1024 
1025 	    r1h1y = *(job->r1H1ptr + (here->MOS2bNode)) -
1026 			*(job->r1H1ptr + (here->MOS2sNodePrime));
1027 	    i1h1y = *(job->i1H1ptr + (here->MOS2bNode)) -
1028 			*(job->i1H1ptr + (here->MOS2sNodePrime));
1029 
1030 	    r1h1z = *(job->r1H1ptr + (here->MOS2dNodePrime)) -
1031 			*(job->r1H1ptr + (here->MOS2sNodePrime));
1032 	    i1h1z = *(job->i1H1ptr + (here->MOS2dNodePrime)) -
1033 			*(job->i1H1ptr + (here->MOS2sNodePrime));
1034 
1035 	    r1hm2x = *(job->r1H2ptr + (here->MOS2gNode)) -
1036 			*(job->r1H2ptr + (here->MOS2sNodePrime));
1037 	    i1hm2x = -(*(job->i1H2ptr + (here->MOS2gNode)) -
1038 			*(job->i1H2ptr + (here->MOS2sNodePrime)));
1039 
1040 	    r1hm2y = *(job->r1H2ptr + (here->MOS2bNode)) -
1041 			*(job->r1H2ptr + (here->MOS2sNodePrime));
1042 	    i1hm2y = -(*(job->i1H2ptr + (here->MOS2bNode)) -
1043 			*(job->i1H2ptr + (here->MOS2sNodePrime)));
1044 
1045 	    r1hm2z = *(job->r1H2ptr + (here->MOS2dNodePrime)) -
1046 			*(job->r1H2ptr + (here->MOS2sNodePrime));
1047 	i1hm2z = -(*(job->i1H2ptr + (here->MOS2dNodePrime)) -
1048 			*(job->i1H2ptr + (here->MOS2sNodePrime)));
1049 
1050 	    r2h11x = *(job->r1H1ptr + (here->MOS2gNode)) -
1051 			*(job->r1H1ptr + (here->MOS2sNodePrime));
1052 	    i2h11x = *(job->i1H1ptr + (here->MOS2gNode)) -
1053 			*(job->i1H1ptr + (here->MOS2sNodePrime));
1054 
1055 	    r2h11y = *(job->r1H1ptr + (here->MOS2bNode)) -
1056 			*(job->r1H1ptr + (here->MOS2sNodePrime));
1057 	    i2h11y = *(job->i1H1ptr + (here->MOS2bNode)) -
1058 			*(job->i1H1ptr + (here->MOS2sNodePrime));
1059 
1060 	    r2h11z = *(job->r1H1ptr + (here->MOS2dNodePrime)) -
1061 			*(job->r1H1ptr + (here->MOS2sNodePrime));
1062 	    i2h11z = *(job->i1H1ptr + (here->MOS2dNodePrime)) -
1063 			*(job->i1H1ptr + (here->MOS2sNodePrime));
1064 
1065     r2h1m2x = *(job->r2H1m2ptr + (here->MOS2gNode)) -
1066 		*(job->r2H1m2ptr + (here->MOS2sNodePrime));
1067     i2h1m2x = *(job->i2H1m2ptr + (here->MOS2gNode)) -
1068 		*(job->i2H1m2ptr + (here->MOS2sNodePrime));
1069 
1070     r2h1m2y = *(job->r2H1m2ptr + (here->MOS2bNode)) -
1071 		*(job->r2H1m2ptr + (here->MOS2sNodePrime));
1072     i2h1m2y = *(job->i2H1m2ptr + (here->MOS2bNode)) -
1073 		*(job->i2H1m2ptr + (here->MOS2sNodePrime));
1074 
1075 r2h1m2z = *(job->r2H1m2ptr + (here->MOS2dNodePrime)) -
1076 		*(job->r2H1m2ptr + (here->MOS2sNodePrime));
1077 i2h1m2z = *(job->i2H1m2ptr + (here->MOS2dNodePrime)) -
1078 		*(job->i2H1m2ptr + (here->MOS2sNodePrime));
1079 
1080 		/* loading starts here */
1081 		/* loading cdrain term  */
1082 
1083 pass.cxx = here->cdr_x2;
1084 pass.cyy = here->cdr_y2;
1085 pass.czz = here->cdr_z2;
1086 pass.cxy = here->cdr_xy;
1087 pass.cyz = here->cdr_yz;
1088 pass.cxz = here->cdr_xz;
1089 pass.cxxx = here->cdr_x3;
1090 pass.cyyy = here->cdr_y3;
1091 pass.czzz = here->cdr_z3;
1092 pass.cxxy = here->cdr_x2y;
1093 pass.cxxz = here->cdr_x2z;
1094 pass.cxyy = here->cdr_xy2;
1095 pass.cyyz = here->cdr_y2z;
1096 pass.cxzz = here->cdr_xz2;
1097 pass.cyzz = here->cdr_yz2;
1098 pass.cxyz = here->cdr_xyz;
1099 pass.r1h1x = r1h1x;
1100 pass.i1h1x = i1h1x;
1101 pass.r1h1y = r1h1y;
1102 pass.i1h1y = i1h1y;
1103 pass.r1h1z = r1h1z;
1104 pass.i1h1z = i1h1z;
1105 pass.r1h2x = r1hm2x;
1106 pass.i1h2x = i1hm2x;
1107 pass.r1h2y = r1hm2y;
1108 pass.i1h2y = i1hm2y;
1109 pass.r1h2z = r1hm2z;
1110 pass.i1h2z = i1hm2z;
1111 pass.r2h11x = r2h11x;
1112 pass.i2h11x = i2h11x;
1113 pass.r2h11y = r2h11y;
1114 pass.i2h11y = i2h11y;
1115 pass.r2h11z = r2h11z;
1116 pass.i2h11z = i2h11z;
1117 pass.h2f1f2x = r2h1m2x;
1118 pass.ih2f1f2x = i2h1m2x;
1119 pass.h2f1f2y = r2h1m2y;
1120 pass.ih2f1f2y = i2h1m2y;
1121 pass.h2f1f2z = r2h1m2z;
1122 pass.ih2f1f2z = i2h1m2z;
1123 	temp = DFn2F12(&pass);
1124 
1125 	itemp = DFi2F12(&pass);
1126 
1127 
1128 	    *(ckt->CKTrhs + (here->MOS2dNodePrime)) -= temp;
1129 	    *(ckt->CKTirhs + (here->MOS2dNodePrime)) -= itemp;
1130 	    *(ckt->CKTrhs + (here->MOS2sNodePrime)) += temp;
1131 	    *(ckt->CKTirhs + (here->MOS2sNodePrime)) += itemp;
1132 
1133 	    /* cdrain term over */
1134 
1135 		/* loading gbs term */
1136 
1137 		temp = D1n2F12(here->gbs2,
1138 						here->gbs3,
1139 						r1h1y,
1140 						i1h1y,
1141 						r1hm2y,
1142 						i1hm2y,
1143 						r2h11y,
1144 						i2h11y,
1145 						r2h1m2y,
1146 						i2h1m2y);
1147 
1148 
1149 
1150 		itemp = D1i2F12(here->gbs2,
1151 						here->gbs3,
1152 						r1h1y,
1153 						i1h1y,
1154 						r1hm2y,
1155 						i1hm2y,
1156 						r2h11y,
1157 						i2h11y,
1158 						r2h1m2y,
1159 						i2h1m2y);
1160 
1161 
1162 	    *(ckt->CKTrhs + (here->MOS2bNode)) -= temp;
1163 	    *(ckt->CKTirhs + (here->MOS2bNode)) -= itemp;
1164 	    *(ckt->CKTrhs + (here->MOS2sNodePrime)) += temp;
1165 	    *(ckt->CKTirhs + (here->MOS2sNodePrime)) += itemp;
1166 
1167 		/* gbs over */
1168 
1169 		/* loading gbd term */
1170 
1171 		temp = D1n2F12(here->gbd2,
1172 						here->gbd3,
1173 						r1h1y - r1h1z,
1174 						i1h1y - i1h1z,
1175 						r1hm2y - r1hm2z,
1176 						i1hm2y - i1hm2z,
1177 						r2h11y - r2h11z,
1178 						i2h11y - i2h11z,
1179 					    r2h1m2y - r2h1m2z,
1180 					i2h1m2y - i2h1m2z);
1181 
1182 		itemp = D1i2F12(here->gbd2,
1183 						here->gbd3,
1184 						r1h1y - r1h1z,
1185 						i1h1y - i1h1z,
1186 						r1hm2y - r1hm2z,
1187 					    i1hm2y - i1hm2z,
1188 						r2h11y - r2h11z,
1189 						i2h11y - i2h11z,
1190 					    r2h1m2y - r2h1m2z,
1191 					i2h1m2y - i2h1m2z);
1192 
1193 	    *(ckt->CKTrhs + (here->MOS2bNode)) -= temp;
1194 	    *(ckt->CKTirhs + (here->MOS2bNode)) -= itemp;
1195 	    *(ckt->CKTrhs + (here->MOS2dNodePrime)) += temp;
1196 	    *(ckt->CKTirhs + (here->MOS2dNodePrime)) += itemp;
1197 
1198 		/* gbd over */
1199 
1200 		/* loading capgs term */
1201 
1202 		temp = -ckt->CKTomega *
1203 			D1i2F12(here->capgs2,
1204 						here->capgs3,
1205 						r1h1x,
1206 						i1h1x,
1207 						r1hm2x,
1208 						i1hm2x,
1209 						r2h11x,
1210 						i2h11x,
1211 						r2h1m2x,
1212 						i2h1m2x);
1213 
1214 		itemp = ckt->CKTomega *
1215 			D1n2F12(here->capgs2,
1216 						here->capgs3,
1217 						r1h1x,
1218 						i1h1x,
1219 						r1hm2x,
1220 						i1hm2x,
1221 						r2h11x,
1222 						i2h11x,
1223 						r2h1m2x,
1224 						i2h1m2x);
1225 
1226 	    *(ckt->CKTrhs + (here->MOS2gNode)) -= temp;
1227 	    *(ckt->CKTirhs + (here->MOS2gNode)) -= itemp;
1228 	    *(ckt->CKTrhs + (here->MOS2sNodePrime)) += temp;
1229 	    *(ckt->CKTirhs + (here->MOS2sNodePrime)) += itemp;
1230 
1231 		/* capgs over */
1232 
1233 		/* loading capgd term */
1234 
1235 		temp = -ckt->CKTomega *
1236 			D1i2F12(here->capgd2,
1237 						here->capgd3,
1238 						r1h1x - r1h1z,
1239 						i1h1x - i1h1z,
1240 						r1hm2x - r1hm2z,
1241 					    i1hm2x - i1hm2z,
1242 						r2h11x - r2h11z,
1243 						i2h11x - i2h11z,
1244 					    r2h1m2x - r2h1m2z,
1245 					i2h1m2x - i2h1m2z);
1246 
1247 		itemp = ckt->CKTomega *
1248 			D1n2F12(here->capgd2,
1249 						here->capgd3,
1250 						r1h1x - r1h1z,
1251 						i1h1x - i1h1z,
1252 						r1hm2x - r1hm2z,
1253 					    i1hm2x - i1hm2z,
1254 						r2h11x - r2h11z,
1255 						i2h11x - i2h11z,
1256 					    r2h1m2x - r2h1m2z,
1257 					i2h1m2x - i2h1m2z);
1258 
1259 
1260 	    *(ckt->CKTrhs + (here->MOS2gNode)) -= temp;
1261 	    *(ckt->CKTirhs + (here->MOS2gNode)) -= itemp;
1262 	    *(ckt->CKTrhs + (here->MOS2dNodePrime)) += temp;
1263 	    *(ckt->CKTirhs + (here->MOS2dNodePrime)) += itemp;
1264 
1265 		/* capgd over */
1266 		/* loading capgb term */
1267 
1268 		temp = -ckt->CKTomega *
1269 			D1i2F12(here->capgb2,
1270 						here->capgb3,
1271 						r1h1x - r1h1y,
1272 						i1h1x - i1h1y,
1273 						r1hm2x - r1hm2y,
1274 					    i1hm2x - i1hm2y,
1275 						r2h11x - r2h11y,
1276 						i2h11x - i2h11y,
1277 					    r2h1m2x - r2h1m2y,
1278 					i2h1m2x - i2h1m2y);
1279 
1280 		itemp = ckt->CKTomega *
1281 			D1n2F12(here->capgb2,
1282 						here->capgb3,
1283 						r1h1x - r1h1y,
1284 						i1h1x - i1h1y,
1285 						r1hm2x - r1hm2y,
1286 					    i1hm2x - i1hm2y,
1287 						r2h11x - r2h11y,
1288 						i2h11x - i2h11y,
1289 					    r2h1m2x - r2h1m2y,
1290 					i2h1m2x - i2h1m2y);
1291 
1292 	    *(ckt->CKTrhs + (here->MOS2gNode)) -= temp;
1293 	    *(ckt->CKTirhs + (here->MOS2gNode)) -= itemp;
1294 	    *(ckt->CKTrhs + (here->MOS2bNode)) += temp;
1295 	    *(ckt->CKTirhs + (here->MOS2bNode)) += itemp;
1296 
1297 		/* capgb over */
1298 
1299 		/* loading capbs term */
1300 
1301 		temp = -ckt->CKTomega *
1302 			D1i2F12(here->capbs2,
1303 						here->capbs3,
1304 						r1h1y,
1305 						i1h1y,
1306 						r1hm2y,
1307 						i1hm2y,
1308 						r2h11y,
1309 						i2h11y,
1310 						r2h1m2y,
1311 						i2h1m2y);
1312 
1313 		itemp = ckt->CKTomega *
1314 			D1n2F12(here->capbs2,
1315 						here->capbs3,
1316 						r1h1y,
1317 						i1h1y,
1318 						r1hm2y,
1319 						i1hm2y,
1320 						r2h11y,
1321 						i2h11y,
1322 						r2h1m2y,
1323 						i2h1m2y);
1324 
1325 
1326 	    *(ckt->CKTrhs + (here->MOS2bNode)) -= temp;
1327 	    *(ckt->CKTirhs + (here->MOS2bNode)) -= itemp;
1328 	    *(ckt->CKTrhs + (here->MOS2sNodePrime)) += temp;
1329 	    *(ckt->CKTirhs + (here->MOS2sNodePrime)) += itemp;
1330 
1331 		/* capbs over */
1332 
1333 		/* loading capbd term */
1334 
1335 		temp = -ckt->CKTomega *
1336 			D1i2F12(here->capbd2,
1337 						here->capbd3,
1338 						r1h1y - r1h1z,
1339 						i1h1y - i1h1z,
1340 						r1hm2y - r1hm2z,
1341 					    i1hm2y - i1hm2z,
1342 						r2h11y - r2h11z,
1343 						i2h11y - i2h11z,
1344 					    r2h1m2y - r2h1m2z,
1345 					i2h1m2y - i2h1m2z);
1346 
1347 		itemp = ckt->CKTomega *
1348 			D1n2F12(here->capbd2,
1349 						here->capbd3,
1350 						r1h1y - r1h1z,
1351 						i1h1y - i1h1z,
1352 						r1hm2y - r1hm2z,
1353 					    i1hm2y - i1hm2z,
1354 						r2h11y - r2h11z,
1355 						i2h11y - i2h11z,
1356 					    r2h1m2y - r2h1m2z,
1357 					i2h1m2y - i2h1m2z);
1358 
1359 
1360 	    *(ckt->CKTrhs + (here->MOS2bNode)) -= temp;
1361 	    *(ckt->CKTirhs + (here->MOS2bNode)) -= itemp;
1362 	    *(ckt->CKTrhs + (here->MOS2dNodePrime)) += temp;
1363 	    *(ckt->CKTirhs + (here->MOS2dNodePrime)) += itemp;
1364 
1365 		/* capbd over */
1366 	/* all done */
1367 
1368       break;
1369     default:
1370 ;
1371     }
1372   }
1373 }
1374 return(OK);
1375 }
1376   else
1377     return(E_BADPARM);
1378 }
1379