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