Jspice3
bjtconv.c File Reference
#include "spice.h"
#include <stdio.h>
#include "bjtdefs.h"
#include "sperror.h"
#include "util.h"
Include dependency graph for bjtconv.c:

Go to the source code of this file.

Functions

int BJTconvTest (GENmodel *inModel, CKTcircuit *ckt)
 

Function Documentation

int BJTconvTest ( GENmodel inModel,
CKTcircuit ckt 
)

Definition at line 21 of file bjtconv.c.

25 {
26  BJTinstance *here;
27  BJTmodel *model = (BJTmodel *) inModel;
28  double tol;
29  double c0;
30  double chat;
31  double vbe;
32  double vbc;
33  double delvbe;
34  double delvbc;
35  double A1, A2;
36 
37  for ( ; model != NULL; model = model->BJTnextModel) {
38  for (here = model->BJTinstances; here != NULL;
39  here = here->BJTnextInstance) {
40 
41  if (model->BJTtype > 0) {
42  vbe = *(ckt->CKTrhsOld + here->BJTbasePrimeNode) -
43  *(ckt->CKTrhsOld + here->BJTemitPrimeNode);
44  vbc = *(ckt->CKTrhsOld + here->BJTbasePrimeNode) -
45  *(ckt->CKTrhsOld + here->BJTcolPrimeNode);
46  }
47  else {
48  vbe = *(ckt->CKTrhsOld + here->BJTemitPrimeNode) -
49  *(ckt->CKTrhsOld + here->BJTbasePrimeNode);
50  vbc = *(ckt->CKTrhsOld + here->BJTcolPrimeNode) -
51  *(ckt->CKTrhsOld + here->BJTbasePrimeNode);
52  }
53  delvbe = vbe - *(ckt->CKTstate0 + here->BJTvbe);
54  delvbc = vbc - *(ckt->CKTstate0 + here->BJTvbc);
55 
56  /*
57  * check convergence, collector current
58  */
59  c0 = here->BJTcc;
60  chat = c0 +
61  (here->BJTgm + here->BJTgo)*delvbe -
62  (here->BJTgo + here->BJTgmu)*delvbc;
63 
64  A1 = FABS(chat);
65  A2 = FABS(c0);
66  tol = ckt->CKTreltol*MAX(A1,A2) + ckt->CKTabstol;
67 
68  A1 = chat - c0;
69  if (FABS(A1) > tol) {
70  ckt->CKTnoncon++;
71  ckt->CKTtroubleElt = (GENinstance *) here;
72  return (OK); /* no reason to continue - we've failed... */
73  }
74 
75  /*
76  * check convergence, base current
77  */
78  c0 = here->BJTcb;
79  chat = c0 +
80  here->BJTgpi*delvbe +
81  here->BJTgmu*delvbc;
82 
83  A1 = FABS(chat);
84  A2 = FABS(c0);
85  tol = ckt->CKTreltol*MAX(A1,A2) + ckt->CKTabstol;
86 
87  A1 = chat - c0;
88  if (FABS(A1) > tol) {
89  ckt->CKTnoncon++;
90  ckt->CKTtroubleElt = (GENinstance *) here;
91  return (OK); /* no reason to continue - we've failed... */
92  }
93  }
94  }
95  return (OK);
96 }
BJTinstance * BJTinstances
Definition: bjtdefs.h:259
int BJTemitPrimeNode
Definition: bjtdefs.h:30
double BJTcc
Definition: bjtdefs.h:54
GENinstance * CKTtroubleElt
Definition: cktdefs.h:229
int BJTtype
Definition: bjtdefs.h:262
struct sBJTmodel * BJTnextModel
Definition: bjtdefs.h:257
#define MAX(a, b)
Definition: spdefs.h:135
double CKTreltol
Definition: cktdefs.h:183
int BJTbasePrimeNode
Definition: bjtdefs.h:29
struct sBJTinstance * BJTnextInstance
Definition: bjtdefs.h:20
double CKTabstol
Definition: cktdefs.h:180
#define OK
Definition: iferrmsg.h:17
double * CKTrhsOld
Definition: cktdefs.h:98
double BJTgmu
Definition: bjtdefs.h:57
int BJTcolPrimeNode
Definition: bjtdefs.h:28
#define NULL
Definition: spdefs.h:121
double BJTgo
Definition: bjtdefs.h:59
double BJTgpi
Definition: bjtdefs.h:56
double BJTgm
Definition: bjtdefs.h:58
static char model[32]
Definition: subckt.c:76
#define FABS(a)
Definition: util.h:41
double BJTcb
Definition: bjtdefs.h:55
int CKTnoncon
Definition: cktdefs.h:203