Jspice3
b1cvtest.c
Go to the documentation of this file.
1 /***************************************************************************
2 JSPICE3 adaptation of Spice3f2 - Copyright (c) Stephen R. Whiteley 1992
3 Copyright 1990 Regents of the University of California. All rights reserved.
4 Authors: 1985 Hong J. Park, Thomas L. Quarles
5  1993 Stephen R. Whiteley
6 ****************************************************************************/
7 
8 #include "spice.h"
9 #include <stdio.h>
10 #include <math.h>
11 #include "bsim1def.h"
12 #include "const.h"
13 #include "sperror.h"
14 #include "util.h"
15 
16 
17 int
18 B1convTest(inModel,ckt)
19 
20  GENmodel *inModel;
21  register CKTcircuit *ckt;
22 
23  /* actually load the current value into the
24  * sparse matrix previously provided
25  */
26 {
27  register B1model *model = (B1model*)inModel;
28  register B1instance *here;
29  double cbd;
30  double cbhat;
31  double cbs;
32  double cd;
33  double cdhat;
34  double delvbd;
35  double delvbs;
36  double delvds;
37  double delvgd;
38  double delvgs;
39  double tol;
40  double vbd;
41  double vbs;
42  double vds;
43  double vgd;
44  double vgdo;
45  double vgs;
46 
47 
48  /* loop through all the B1 device models */
49  for( ; model != NULL; model = model->B1nextModel ) {
50 
51  /* loop through all the instances of the model */
52  for (here = model->B1instances; here != NULL ;
53  here=here->B1nextInstance) {
54 
55  vbs = model->B1type * (
56  *(ckt->CKTrhsOld+here->B1bNode) -
57  *(ckt->CKTrhsOld+here->B1sNodePrime));
58  vgs = model->B1type * (
59  *(ckt->CKTrhsOld+here->B1gNode) -
60  *(ckt->CKTrhsOld+here->B1sNodePrime));
61  vds = model->B1type * (
62  *(ckt->CKTrhsOld+here->B1dNodePrime) -
63  *(ckt->CKTrhsOld+here->B1sNodePrime));
64  vbd=vbs-vds;
65  vgd=vgs-vds;
66  vgdo = *(ckt->CKTstate0 + here->B1vgs) -
67  *(ckt->CKTstate0 + here->B1vds);
68  delvbs = vbs - *(ckt->CKTstate0 + here->B1vbs);
69  delvbd = vbd - *(ckt->CKTstate0 + here->B1vbd);
70  delvgs = vgs - *(ckt->CKTstate0 + here->B1vgs);
71  delvds = vds - *(ckt->CKTstate0 + here->B1vds);
72  delvgd = vgd-vgdo;
73 
74  if (here->B1mode >= 0) {
75  cdhat=
76  *(ckt->CKTstate0 + here->B1cd) -
77  *(ckt->CKTstate0 + here->B1gbd) * delvbd +
78  *(ckt->CKTstate0 + here->B1gmbs) * delvbs +
79  *(ckt->CKTstate0 + here->B1gm) * delvgs +
80  *(ckt->CKTstate0 + here->B1gds) * delvds ;
81  } else {
82  cdhat=
83  *(ckt->CKTstate0 + here->B1cd) -
84  ( *(ckt->CKTstate0 + here->B1gbd) -
85  *(ckt->CKTstate0 + here->B1gmbs)) * delvbd -
86  *(ckt->CKTstate0 + here->B1gm) * delvgd +
87  *(ckt->CKTstate0 + here->B1gds) * delvds;
88  }
89  cbhat=
90  *(ckt->CKTstate0 + here->B1cbs) +
91  *(ckt->CKTstate0 + here->B1cbd) +
92  *(ckt->CKTstate0 + here->B1gbd) * delvbd +
93  *(ckt->CKTstate0 + here->B1gbs) * delvbs ;
94 
95  cd = *(ckt->CKTstate0 + here->B1cd);
96  cbs = *(ckt->CKTstate0 + here->B1cbs);
97  cbd = *(ckt->CKTstate0 + here->B1cbd);
98  /*
99  * check convergence
100  */
101  /* troubldElts new in 3f2 */
102  if ( (here->B1off == 0) || (!(ckt->CKTmode & MODEINITFIX)) ){
103  tol=ckt->CKTreltol*MAX(FABS(cdhat),FABS(cd))+ckt->CKTabstol;
104  if (FABS(cdhat-cd) >= tol) {
105  ckt->CKTnoncon++;
106  ckt->CKTtroubleElt = (GENinstance *) here;
107  return(OK);
108  }
109  tol=ckt->CKTreltol*MAX(FABS(cbhat),FABS(cbs+cbd))+
110  ckt->CKTabstol;
111  if (FABS(cbhat-(cbs+cbd)) > tol) {
112  ckt->CKTnoncon++;
113  ckt->CKTtroubleElt = (GENinstance *) here;
114  return(OK);
115  }
116  }
117  }
118  }
119  return(OK);
120 }
121 
#define MAX(a, b)
Definition: spdefs.h:135
int B1type
Definition: bsim1def.h:306
int B1sNodePrime
Definition: bsim1def.h:32
#define OK
Definition: iferrmsg.h:17
#define NULL
Definition: spdefs.h:121
B1instance * B1instances
Definition: bsim1def.h:303
static char model[32]
Definition: subckt.c:76
#define MODEINITFIX
Definition: cktdefs.h:158
int B1convTest(GENmodel *inModel, CKTcircuit *ckt)
Definition: b1cvtest.c:18
#define FABS(a)
Definition: util.h:41
struct sBSIM1model * B1nextModel
Definition: bsim1def.h:301
struct sBSIM1instance * B1nextInstance
Definition: bsim1def.h:22
int B1dNodePrime
Definition: bsim1def.h:31