1 /**********
2 Copyright 1990 Regents of the University of California.  All rights reserved.
3 Author: 1985 Hong J. Park, Thomas L. Quarles
4 **********/
5 
6 #include "ngspice/ngspice.h"
7 #include "ngspice/cktdefs.h"
8 #include "bsim1def.h"
9 #include "ngspice/suffix.h"
10 
11 /* routine to calculate equivalent conductance and total terminal
12  * charges
13  */
14 
15 void
B1mosCap(CKTcircuit * ckt,double vgd,double vgs,double vgb,double args[8],double cbgb,double cbdb,double cbsb,double cdgb,double cddb,double cdsb,double * gcggbPointer,double * gcgdbPointer,double * gcgsbPointer,double * gcbgbPointer,double * gcbdbPointer,double * gcbsbPointer,double * gcdgbPointer,double * gcddbPointer,double * gcdsbPointer,double * gcsgbPointer,double * gcsdbPointer,double * gcssbPointer,double * qGatePointer,double * qBulkPointer,double * qDrainPointer,double * qSourcePointer)16 B1mosCap(
17     CKTcircuit *ckt,
18     double vgd,
19     double vgs,
20     double vgb,
21     double args[8],
22      /*
23     double GateDrainOverlapCap,
24     double GateSourceOverlapCap,
25     double GateBulkOverlapCap,
26     double capbd,
27     double capbs,
28     double cggb,
29     double cgdb,
30     double cgsb,
31      */
32     double cbgb,
33     double cbdb,
34     double cbsb,
35     double cdgb,
36     double cddb,
37     double cdsb,
38     double *gcggbPointer,
39     double *gcgdbPointer,
40     double *gcgsbPointer,
41     double *gcbgbPointer,
42     double *gcbdbPointer,
43     double *gcbsbPointer,
44     double *gcdgbPointer,
45     double *gcddbPointer,
46     double *gcdsbPointer,
47     double *gcsgbPointer,
48     double *gcsdbPointer,
49     double *gcssbPointer,
50     double *qGatePointer,
51     double *qBulkPointer,
52     double *qDrainPointer,
53     double *qSourcePointer)
54 {
55     double qgd;
56     double qgs;
57     double qgb;
58     double ag0;
59 
60     ag0 = ckt->CKTag[0];
61     /* compute equivalent conductance */
62     *gcdgbPointer = (cdgb - args[0]) * ag0;
63     *gcddbPointer = (cddb + args[3] + args[0]) * ag0;
64     *gcdsbPointer = cdsb * ag0;
65     *gcsgbPointer = -(args[5] + cbgb + cdgb + args[1]) * ag0;
66     *gcsdbPointer = -(args[6] + cbdb + cddb ) * ag0;
67     *gcssbPointer = (args[4] + args[1] -
68         (args[7] + cbsb + cdsb )) * ag0;
69     *gcggbPointer = (args[5] + args[0] +
70         args[1] + args[2] ) * ag0;
71     *gcgdbPointer = (args[6] - args[0]) * ag0;
72     *gcgsbPointer = (args[7] - args[1]) * ag0;
73     *gcbgbPointer = (cbgb - args[2]) * ag0;
74     *gcbdbPointer = (cbdb - args[3]) * ag0;
75     *gcbsbPointer = (cbsb - args[4]) * ag0;
76 
77     /* compute total terminal charge */
78     qgd = args[0] * vgd;
79     qgs = args[1] * vgs;
80     qgb = args[2] * vgb;
81     *qGatePointer = *qGatePointer + qgd + qgs + qgb;
82     *qBulkPointer = *qBulkPointer - qgb;
83     *qDrainPointer = *qDrainPointer - qgd;
84     *qSourcePointer = -(*qGatePointer + *qBulkPointer + *qDrainPointer);
85 
86 }
87 
88 
89