Jspice3
jfetset.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 Thomas L. Quarles
5  1993 Stephen R. Whiteley
6 ****************************************************************************/
7 /********** new in 3f2
8 Sydney University mods Copyright(c) 1989 Anthony E. Parker, David J. Skellern
9  Laboratory for Communication Science Engineering
10  Sydney University Department of Electrical Engineering, Australia
11 **********/
12 
13 #include "spice.h"
14 #include <stdio.h>
15 #include "jfetdefs.h"
16 #include "util.h"
17 #include "const.h"
18 #include "sperror.h"
19 #include "cktext.h"
20 
21 
22 int
23 JFETsetup(matrix,inModel,ckt,states)
24 
25 /* load the JFET structure with those pointers needed later
26  * for fast matrix loading
27  */
28 SMPmatrix *matrix;
29 GENmodel *inModel;
30 CKTcircuit *ckt;
31 int *states;
32 {
33  JFETmodel *model = (JFETmodel*)inModel;
34  JFETinstance *here;
35  int error;
36  CKTnode *tmp;
37 
38  /* loop through all the diode models */
39  for ( ; model != NULL; model = model->JFETnextModel) {
40 
41  if ( (model->JFETtype != NJF) && (model->JFETtype != PJF) ) {
42  model->JFETtype = NJF;
43  }
44  if (!model->JFETthresholdGiven) {
45  model->JFETthreshold = -2;
46  }
47  if (!model->JFETbetaGiven) {
48  model->JFETbeta = 1e-4;
49  }
50  if (!model->JFETlModulationGiven) {
51  model->JFETlModulation = 0;
52  }
53  if (!model->JFETdrainResistGiven) {
54  model->JFETdrainResist = 0;
55  }
56  if (!model->JFETsourceResistGiven) {
57  model->JFETsourceResist = 0;
58  }
59  if (!model->JFETcapGSGiven) {
60  model->JFETcapGS = 0;
61  }
62  if (!model->JFETcapGDGiven) {
63  model->JFETcapGD = 0;
64  }
65  if (!model->JFETgatePotentialGiven) {
66  model->JFETgatePotential = 1;
67  }
68  if (!model->JFETgateSatCurrentGiven) {
69  model->JFETgateSatCurrent = 1e-14;
70  }
71  if (!model->JFETdepletionCapCoeffGiven) {
72  model->JFETdepletionCapCoeff = .5;
73  }
74  if (!model->JFETfNcoefGiven) {
75  model->JFETfNcoef = 0;
76  }
77  if (!model->JFETfNexpGiven) {
78  model->JFETfNexp = 1;
79  }
80 
81  /* Modification for Sydney University JFET model */
82  if (!model->JFETbGiven) {
83  model->JFETb = 1.0;
84  }
85 
86  if (model->JFETdrainResist != 0) {
87  model->JFETdrainConduct = 1/model->JFETdrainResist;
88  }
89  else {
90  model->JFETdrainConduct = 0;
91  }
92  if (model->JFETsourceResist != 0) {
93  model->JFETsourceConduct = 1/model->JFETsourceResist;
94  }
95  else {
96  model->JFETsourceConduct = 0;
97  }
98 
99  /* loop through all the instances of the model */
100  for (here = model->JFETinstances; here != NULL;
101  here = here->JFETnextInstance) {
102 
103  if (!here->JFETareaGiven) {
104  here->JFETarea = 1;
105  }
106  here->JFETstate = *states;
107  *states += 13;
108 
109  if (model->JFETsourceResist != 0 &&
110  here->JFETsourcePrimeNode == 0) {
111  error = CKTmkVolt(ckt,&tmp,here->JFETname,"source");
112  if (error) return (error);
113  here->JFETsourcePrimeNode = tmp->number;
114  }
115  else {
116  here->JFETsourcePrimeNode = here->JFETsourceNode;
117  }
118  if (model->JFETdrainResist != 0 &&
119  here->JFETdrainPrimeNode == 0) {
120  error = CKTmkVolt(ckt,&tmp,here->JFETname,"drain");
121  if (error) return (error);
122  here->JFETdrainPrimeNode = tmp->number;
123  }
124  else {
125  here->JFETdrainPrimeNode = here->JFETdrainNode;
126  }
127 
128  TSTALLOC(JFETdrainDrainPrimePtr,JFETdrainNode,JFETdrainPrimeNode)
129  TSTALLOC(JFETgateDrainPrimePtr,JFETgateNode,JFETdrainPrimeNode)
130  TSTALLOC(JFETgateSourcePrimePtr,JFETgateNode,JFETsourcePrimeNode)
131  TSTALLOC(JFETsourceSourcePrimePtr,JFETsourceNode,
132  JFETsourcePrimeNode)
133  TSTALLOC(JFETdrainPrimeDrainPtr,JFETdrainPrimeNode,JFETdrainNode)
134  TSTALLOC(JFETdrainPrimeGatePtr,JFETdrainPrimeNode,JFETgateNode)
135  TSTALLOC(JFETdrainPrimeSourcePrimePtr,JFETdrainPrimeNode,
136  JFETsourcePrimeNode)
137  TSTALLOC(JFETsourcePrimeGatePtr,JFETsourcePrimeNode,JFETgateNode)
138  TSTALLOC(JFETsourcePrimeSourcePtr,JFETsourcePrimeNode,
139  JFETsourceNode)
140  TSTALLOC(JFETsourcePrimeDrainPrimePtr,JFETsourcePrimeNode,
141  JFETdrainPrimeNode)
142  TSTALLOC(JFETdrainDrainPtr,JFETdrainNode,JFETdrainNode)
143  TSTALLOC(JFETgateGatePtr,JFETgateNode,JFETgateNode)
144  TSTALLOC(JFETsourceSourcePtr,JFETsourceNode,JFETsourceNode)
145  TSTALLOC(JFETdrainPrimeDrainPrimePtr,JFETdrainPrimeNode,
146  JFETdrainPrimeNode)
147  TSTALLOC(JFETsourcePrimeSourcePrimePtr,JFETsourcePrimeNode,
148  JFETsourcePrimeNode)
149  }
150  }
151  return (OK);
152 }
int JFETsetup(SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states)
Definition: jfetset.c:23
double JFETcapGS
Definition: jfetdefs.h:179
double JFETgatePotential
Definition: jfetdefs.h:181
double JFETbeta
Definition: jfetdefs.h:175
unsigned JFETareaGiven
Definition: jfetdefs.h:128
double JFETthreshold
Definition: jfetdefs.h:174
int JFETtype
Definition: jfetdefs.h:172
unsigned JFETfNcoefGiven
Definition: jfetdefs.h:212
unsigned JFETbetaGiven
Definition: jfetdefs.h:199
double JFETdrainConduct
Definition: jfetdefs.h:188
static double e
Definition: vectors.c:17
int JFETdrainPrimeNode
Definition: jfetdefs.h:32
JFETinstance * JFETinstances
Definition: jfetdefs.h:169
double JFETdepletionCapCoeff
Definition: jfetdefs.h:183
int JFETstate
Definition: jfetdefs.h:28
unsigned JFETgateSatCurrentGiven
Definition: jfetdefs.h:206
double JFETarea
Definition: jfetdefs.h:134
unsigned JFETfNexpGiven
Definition: jfetdefs.h:213
#define TSTALLOC(ptr, first, second)
Definition: devdefs.h:124
#define OK
Definition: iferrmsg.h:17
double JFETfNexp
Definition: jfetdefs.h:185
#define NJF
Definition: jfetdefs.h:220
#define NULL
Definition: spdefs.h:121
double JFETsourceConduct
Definition: jfetdefs.h:189
unsigned JFETdepletionCapCoeffGiven
Definition: jfetdefs.h:207
double JFETgateSatCurrent
Definition: jfetdefs.h:182
int number
Definition: cktdefs.h:39
struct sJFETmodel * JFETnextModel
Definition: jfetdefs.h:167
unsigned JFETsourceResistGiven
Definition: jfetdefs.h:202
static char model[32]
Definition: subckt.c:76
unsigned JFETcapGSGiven
Definition: jfetdefs.h:203
unsigned JFETthresholdGiven
Definition: jfetdefs.h:198
int JFETdrainNode
Definition: jfetdefs.h:29
double JFETfNcoef
Definition: jfetdefs.h:184
double JFETb
Definition: jfetdefs.h:193
struct sJFETinstance * JFETnextInstance
Definition: jfetdefs.h:25
unsigned JFETcapGDGiven
Definition: jfetdefs.h:204
double JFETsourceResist
Definition: jfetdefs.h:178
double JFETcapGD
Definition: jfetdefs.h:180
int JFETsourcePrimeNode
Definition: jfetdefs.h:33
unsigned JFETdrainResistGiven
Definition: jfetdefs.h:201
unsigned JFETbGiven
Definition: jfetdefs.h:209
int CKTmkVolt()
double JFETdrainResist
Definition: jfetdefs.h:177
#define SMPmatrix
Definition: smpdefs.h:11
#define PJF
Definition: jfetdefs.h:221
int JFETsourceNode
Definition: jfetdefs.h:31
unsigned JFETlModulationGiven
Definition: jfetdefs.h:200
unsigned JFETgatePotentialGiven
Definition: jfetdefs.h:205
double JFETlModulation
Definition: jfetdefs.h:176
IFuid JFETname
Definition: jfetdefs.h:27