68 double absold, absdvj, maxvj;
82 temp = *(ckt->CKTstate0 + here->JJvoltage);
83 absold = temp < 0 ? -temp : temp;
84 maxvj =
MAX(absvj,absold);
86 absdvj = temp < 0 ? -temp : temp;
89 temp = model->
JJdelv * 0.5;
94 maxvj =
MAX(absvj,absold);
96 *(ckt->CKTstate0 + here->JJvoltage);
97 absdvj = temp < 0 ? -temp : temp;
112 js.
js_phi = *(ckt->CKTstate1 + here->JJphase);
115 temp += *(ckt->CKTstate1 + here->JJvoltage);
127 if (absvj < model->JJvless)
129 else if (absvj < model->JJvmore) {
142 jj_iv(model,here,&js);
145 jj_ic(model,here,&js);
154 double y0, y1, y2, y3, rag0, *dtfac;
164 y1 = *(ckt->CKTstate1 + here->JJdvdt);
165 y2 = *(ckt->CKTstate2 + here->JJdvdt);
166 y3 = *(ckt->CKTstate3 + here->JJdvdt);
168 y0 = y1*dtfac[0] + y2*dtfac[1] + y3*dtfac[2]
169 + *(ckt->CKTstate0 + here->JJdvdt)*dtfac[3];
171 temp = *(ckt->CKTstate1 + here->JJvoltage);
174 js.
js_vj = temp + rag0*y0;
176 js.
js_phi = *(ckt->CKTstate1 + here->JJphase);
179 temp += *(ckt->CKTstate1 + here->JJvoltage);
184 y1 = *(ckt->CKTstate1 + here->JJconI);
185 y2 = *(ckt->CKTstate2 + here->JJconI);
186 y3 = *(ckt->CKTstate3 + here->JJconI);
188 js.
js_ci = y1*dtfac[0] + y2*dtfac[1] + y3*dtfac[2]
189 + *(ckt->CKTstate0 + here->JJconI)*dtfac[3];
204 if (absvj < model->JJvless)
206 else if (absvj < model->JJvmore) {
219 jj_iv(model,here,&js);
222 jj_ic(model,here,&js);
237 js.
js_vj = here->JJinitVoltage;
238 js.
js_phi = here->JJinitPhase;
241 *(ckt->CKTstate1 + here->JJvoltage) = js.
js_vj;
242 *(ckt->CKTstate1 + here->JJphase) = js.
js_phi;
243 *(ckt->CKTstate1 + here->JJconI) = js.
js_ci;
254 if (absvj < model->JJvless)
256 else if (absvj < model->JJvmore) {
269 jj_iv(model,here,&js);
272 jj_ic(model,here,&js);
297 vprev = *(ckt->CKTstate0 + here->JJvoltage);
298 absold = vprev < 0 ? -vprev : vprev;
300 vtop = vprev + js->
js_ddv;
301 vbot = vprev - js->
js_ddv;
302 if (absold < model->JJvless) {
306 else if (vprev > model->
JJvmore) {
310 else if (vprev < -model->JJvmore) {
314 if (js->
js_vj > vtop)
316 else if (js->
js_vj < vbot)
332 absvj = vj < 0 ? -vj : vj;
334 if (model->JJrtype == 3) {
336 if (absvj < model->JJvmore) {
340 double temp1 = vj*vj;
341 double temp2 = temp1*temp1;
343 5.0*here->
JJg2*temp2;
352 else if (model->JJrtype == 2) {
353 double avj, gam, expgam, exngam, xp, xn;
355 avj = absvj / model->JJdelv;
356 gam = avj - model->JJvg/model->JJdelv;
357 if (gam > 30.0) gam = 30.0;
358 if (gam < -30.0) gam = -30.0;
360 exngam = 1.0 / expgam;
364 js->
js_gqt = here->
JJgn*(xn + avj*exngam)/(xn*xn) +
365 here->
JJg0*(xp - avj*expgam)/(xp*xp);
369 else if (model->JJrtype == 4) {
370 double vless, vmore, vg, gs;
375 if (temp > 1) temp = 1;
377 gs = here->
JJgs*temp;
380 vg = model->JJvg*temp;
381 temp = .5*model->JJdelv;
388 else if (absvj < vmore) {
401 if (model->JJictype > 1) model->JJictype = 0;
425 if (model->JJictype == 2) {
428 double ang, xx = js->
js_crt;
429 ang =
M_PI * ci / model->JJccsens;
435 else if (model->JJictype == 3) {
437 temp = ci < 0 ? -ci : ci;
438 if (temp < model->JJccsens) {
440 js->
js_crt *= (1.0 - temp/model->JJccsens);
442 if (ci == 0.0) js->
js_dcrt = 0.0;
447 else if (model->JJictype == 4) {
449 temp = ci < 0 ? -ci : ci;
450 if (temp < model->JJccsens) {
451 temp = model->JJccsens + model->JJccsens;
453 js->
js_crt *= (model->JJccsens - ci)/temp;
454 if (ci == 0.0) js->
js_dcrt = 0.0;
483 *(ckt->CKTstate0 + here->JJvoltage) = js->
js_vj;
484 *(ckt->CKTstate0 + here->JJphase) = js->
js_phi;
485 *(ckt->CKTstate0 + here->JJconI) = js->
js_ci;
488 asm(
"fsincos" :
"=t" (temp),
"=u" (si) :
"0" (js->
js_phi));
499 crhs += crt - gcs*js->
js_vj;
500 gqt += gcs + ckt->CKTag[0]*here->
JJcap;
506 (2*
M_PI)* *(
int*)(ckt->CKTstate1 + here->JJphsInt);
511 *(ckt->CKTrhs + here->
JJposNode) -= crhs;
516 crhs -= temp*js->
js_ci;
517 *(ckt->CKTrhs + here->
JJposNode) -= crhs;
523 *(ckt->CKTrhs + here->
JJnegNode) += crhs;
528 crhs -= temp*js->
js_ci;
529 *(ckt->CKTrhs + here->
JJnegNode) += crhs;
538 *(ckt->CKTrhs + here->
JJposNode) -= crhs;
539 *(ckt->CKTrhs + here->
JJnegNode) += crhs;
545 crhs -= temp*js->
js_ci;
546 *(ckt->CKTrhs + here->
JJposNode) -= crhs;
547 *(ckt->CKTrhs + here->
JJnegNode) += crhs;
#define NI_SUM(ckt, ceq, qcap)
static void jj_limiting()
struct sJJmodel * JJnextModel
struct sJJinstance * JJnextInstance
int JJload(GENmodel *inModel, CKTcircuit *ckt)