Jspice3
mosdist.c File Reference
#include "spice.h"
#include <math.h>
#include <stdio.h>
#include "mosdefs.h"
#include "distodef.h"
#include "sperror.h"
#include "util.h"
#include "distoext.h"
Include dependency graph for mosdist.c:

Go to the source code of this file.

Functions

int MOSdisto (int mode, GENmodel *genmodel, CKTcircuit *ckt)
 

Function Documentation

int MOSdisto ( int  mode,
GENmodel genmodel,
CKTcircuit ckt 
)

Definition at line 18 of file mosdist.c.

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