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

Go to the source code of this file.

Functions

int JJsetup (SMPmatrix *matrix, GENmodel *inModel, CKTcircuit *ckt, int *states)
 

Variables

static double def_vm = 0.03
 
static double def_icr = 0.0017
 

Function Documentation

int JJsetup ( SMPmatrix matrix,
GENmodel inModel,
CKTcircuit ckt,
int *  states 
)

Definition at line 17 of file jjsetup.c.

23 {
24  JJmodel *model = (JJmodel *)inModel;
25  JJinstance *here;
26  int error;
27  char *emsg, *name;
28  double temp;
29 
30  /* loop through all the junction models */
31  for ( ; model != NULL; model = model->JJnextModel) {
32 
33  if (!model->JJrtypeGiven) model->JJrtype = 1;
34  if (!model->JJictypeGiven) model->JJictype = 1;
35  if (!model->JJvgGiven) model->JJvg = 3e-3;
36  if (!model->JJdelvGiven) model->JJdelv = 1e-4;
37  if (!model->JJccsensGiven) model->JJccsens = 1e-2;
38  if (!model->JJcritiGiven) model->JJcriti = 1e-3;
39  if (!model->JJcapGiven) model->JJcap = 1e-12;
40 
41  if (model->JJdelv <= 0) {
42  (*(SPfrontEnd->IFerror))(ERR_WARNING,
43  "Warning: delv entry was <= 0, reset to 1e-5\n",
44  (IFuid *)NULL);
45  model->JJdelv = 1e-5;
46  }
47  if (model->JJccsens <= 0) {
48  (*(SPfrontEnd->IFerror))(ERR_WARNING,
49  "Warning: icon entry was <= 0, reset to 1e3\n",
50  (IFuid *)NULL);
51  model->JJccsens = 1e3;
52  }
53 
54  if (!model->JJr0Given) {
55  if (model->JJcriti)
56  model->JJr0 = def_vm/model->JJcriti;
57  else
58  model->JJr0 = def_vm/1e-3;
59  }
60  if (!model->JJrnGiven) {
61  if (model->JJcriti)
62  model->JJrn = def_icr/model->JJcriti;
63  else
64  model->JJrn = def_icr/1e-3;
65  }
66 
67  if (model->JJrn > model->JJr0)
68  model->JJrn = model->JJr0;
69 
70  temp = model->JJdelv/2.0;
71  if (model->JJvg < temp) {
72  (*(SPfrontEnd->IFerror))(ERR_WARNING,
73  "Warning: vg entry was < delv/2, reset to delv/2\n",
74  (IFuid *)NULL);
75  model->JJvg = temp;
76  }
77  model->JJvless = model->JJvg - temp;
78  model->JJvmore = model->JJvg + temp;
79 
80  temp = model->JJvg/2;
81  if (model->JJcap != 0.0) {
82  model->JJvdpbak = sqrt(3.291e-16 * model->JJcriti / model->JJcap);
83  if (model->JJvdpbak > temp) model->JJvdpbak = temp;
84  }
85  else
86  model->JJvdpbak = temp;
87 
88  /* loop through all the instances of the model */
89  for (here = model->JJinstances; here != NULL;
90  here = here->JJnextInstance) {
91 
92  if (!here->JJareaGiven) here->JJarea = 1;
93 
94  here->JJg0 = here->JJarea / model->JJr0;
95  here->JJgn = here->JJarea / model->JJrn;
96  here->JJgs = (here->JJgn * model->JJvmore -
97  here->JJg0 * model->JJvless) / model->JJdelv;
98 
99  if (model->JJrtype == 3) {
100 
101  /* 5th order polynomial model for NbN.
102  *
103  * cj = g0*vj + g1*vj**3 + g2*vj**5,
104  * gj = dcj/dvj = g0 + 3*g1*vj**2 + 5*g2*vj**4.
105  *
106  * Required:
107  * (1) cj(vmore) = g0*vmore + g1*vmore**3 + g2*vmore**5
108  * = gn*vmore.
109  * (2) gj(vmore)
110  * = g0 + 3*g1*vmore**2 + 5*g2*vmore**4
111  * = gs.
112  * (3) gj(0) = g0 (trivially satisfied).
113  *
114  * thus: -4*g0 - 2*g1*vmore**2 = (gs - 5*gn), or
115  * g1 = (5*gn - gs - 4*g0)/(2*vmore**2),
116  *
117  * and -2*g0 + 2*g2*vmore**4 = (gs - 3*gn), or
118  * g2 = (gs - 3*gn + 2*g0)/(2*vmore**4).
119  *
120  */
121 
122  here->JJg1 = 2.5*here->JJgn - 0.5*here->JJgs - 2.0*here->JJg0;
123 
124  temp = 1.0/model->JJvmore;
125  temp *= temp;
126  here->JJg1 *= temp;
127 
128  here->JJg2 = 0.5*here->JJgs - 1.5*here->JJgn + here->JJg0;
129 
130  temp *= temp;
131  here->JJg2 *= temp;
132  }
133  else {
134  here->JJg1 = 0;
135  here->JJg2 = 0;
136  }
137 
138  here->JJcriti = model->JJcriti * here->JJarea;
139  here->JJcap = model->JJcap * here->JJarea;
140 
141  /* jj's are "present" only if one has critical current */
142  if (here->JJcriti > 0 && model->JJictype != 0)
143  ckt->CKTjjPresent = 1;
144 
145  here->JJstate = *states;
146 
147  /* state vector size */
148  *states += 7;
149 
150  here->JJinitControl = 0;
151  if (here->JJcontrolGiven) {
152  here->JJbranch = CKTfndBranch(ckt,here->JJcontrol);
153 
154  if (here->JJbranch == 0) {
155  emsg = MALLOC(200);
156  (void) sprintf(emsg,
157 "Warning: %s control current modulated by non-existent\n\
158 or non-branch device %s, ignored.",here->JJname,here->JJcontrol);
159  (*(SPfrontEnd->IFerror))(ERR_WARNING,emsg,(IFuid *)NULL);
160  FREE(emsg);
161  here->JJcontrol = NULL;
162  }
163  }
164 
165  TSTALLOC(JJposPosPtr,JJposNode,JJposNode)
166  TSTALLOC(JJnegNegPtr,JJnegNode,JJnegNode)
167  TSTALLOC(JJnegPosPtr,JJnegNode,JJposNode)
168  TSTALLOC(JJposNegPtr,JJposNode,JJnegNode)
169  if (here->JJcontrol) {
170  TSTALLOC(JJposIbrPtr,JJposNode,JJbranch)
171  TSTALLOC(JJnegIbrPtr,JJnegNode,JJbranch)
172  }
173  if (here->JJphsNode) {
174  TSTALLOC(JJphsPhsPtr,JJphsNode,JJphsNode)
175  /* preload constant */
176  if (ckt->CKTpreload)
177  *(here->JJphsPhsPtr) = 1;
178  }
179  }
180  }
181 
182  return (OK);
183 }
double JJg1
Definition: jjdefs.h:44
double JJarea
Definition: jjdefs.h:28
double JJrn
Definition: jjdefs.h:95
unsigned JJictypeGiven
Definition: jjdefs.h:101
IFuid JJcontrol
Definition: jjdefs.h:27
double JJr0
Definition: jjdefs.h:94
double JJcap
Definition: jjdefs.h:40
double JJcriti
Definition: jjdefs.h:92
double JJinitControl
Definition: jjdefs.h:34
unsigned JJcapGiven
Definition: jjdefs.h:108
unsigned JJareaGiven
Definition: jjdefs.h:62
double JJdelv
Definition: jjdefs.h:91
if(TDesc==NULL)
Definition: cd.c:1326
double JJccsens
Definition: jjdefs.h:96
static double def_icr
Definition: jjsetup.c:14
unsigned JJcontrolGiven
Definition: jjdefs.h:65
double JJvless
Definition: jjdefs.h:97
static double def_vm
Definition: jjsetup.c:13
static double e
Definition: vectors.c:17
IFfrontEnd * SPfrontEnd
Definition: main.c:917
double JJcap
Definition: jjdefs.h:93
#define FREE(ptr)
Definition: spdefs.h:436
unsigned JJr0Given
Definition: jjdefs.h:105
IFuid JJname
Definition: jjdefs.h:19
JJinstance * JJinstances
Definition: jjdefs.h:84
#define TSTALLOC(ptr, first, second)
Definition: devdefs.h:124
unsigned JJrtypeGiven
Definition: jjdefs.h:100
#define OK
Definition: iferrmsg.h:17
double JJg0
Definition: jjdefs.h:41
double JJvmore
Definition: jjdefs.h:98
GENERIC * IFuid
Definition: ifsim.h:72
double JJcriti
Definition: jjdefs.h:39
double JJg2
Definition: jjdefs.h:45
#define MALLOC(x)
Definition: util.h:9
int JJstate
Definition: jjdefs.h:21
#define NULL
Definition: spdefs.h:121
double JJgs
Definition: jjdefs.h:43
#define ERR_WARNING
Definition: ifsim.h:517
int CKTjjPresent
Definition: cktdefs.h:168
double JJvdpbak
Definition: jjdefs.h:99
unsigned JJccsensGiven
Definition: jjdefs.h:104
static char model[32]
Definition: subckt.c:76
return(True)
double JJvg
Definition: jjdefs.h:90
int JJictype
Definition: jjdefs.h:89
struct sJJmodel * JJnextModel
Definition: jjdefs.h:82
unsigned JJcritiGiven
Definition: jjdefs.h:107
int JJrtype
Definition: jjdefs.h:88
int CKTfndBranch()
struct sJJinstance * JJnextInstance
Definition: jjdefs.h:17
unsigned JJdelvGiven
Definition: jjdefs.h:103
unsigned JJrnGiven
Definition: jjdefs.h:106
double JJgn
Definition: jjdefs.h:42
unsigned JJvgGiven
Definition: jjdefs.h:102
int JJbranch
Definition: jjdefs.h:26

Variable Documentation

double def_icr = 0.0017
static

Definition at line 14 of file jjsetup.c.

double def_vm = 0.03
static

Definition at line 13 of file jjsetup.c.