diode fix current reporting for soft recovery model
This commit is contained in:
parent
0937dd4cec
commit
a61fee4aa3
|
|
@ -75,6 +75,8 @@ DIOask (CKTcircuit *ckt, GENinstance *inst, int which, IFvalue *value,
|
|||
return(OK);
|
||||
case DIO_CURRENT:
|
||||
value->rValue = *(ckt->CKTstate0+here->DIOcurrent);
|
||||
if ((here->DIOqpNode > 0) && (here->DIOtTransitTime!=0))
|
||||
value->rValue += here->DIOqpGain * *(ckt->CKTstate0 + here->DIOcqcsr);
|
||||
return(OK);
|
||||
case DIO_CAP:
|
||||
value->rValue = here->DIOcap;
|
||||
|
|
|
|||
|
|
@ -94,6 +94,8 @@ typedef struct sDIOinstance {
|
|||
double DIOcap; /* stores the diode capacitance */
|
||||
double DIOcapSW; /* stores the diode Sw capacitance */
|
||||
|
||||
double DIOqpGain;/* converts iterated diffcharge current */
|
||||
|
||||
double *DIOsens; /* stores the perturbed values of geq and ceq in ac
|
||||
sensitivity analyis */
|
||||
|
||||
|
|
|
|||
|
|
@ -839,7 +839,7 @@ next2: *(ckt->CKTstate0 + here->DIOvoltage) = vd;
|
|||
|
||||
if (revrec) {
|
||||
double fac, ceqrr, dcrrdvd, grr;
|
||||
double gain, ceqrrd, geqrrd;
|
||||
double ceqrrd, geqrrd;
|
||||
/* QP subcircuit */
|
||||
fac = here->DIOtTransitTime / model->DIOsoftRevRecParam;
|
||||
dcrrdvd = fac*gdres;
|
||||
|
|
@ -850,10 +850,10 @@ next2: *(ckt->CKTstate0 + here->DIOvoltage) = vd;
|
|||
*(here->DIOqpPosPrimePtr) += -dcrrdvd;
|
||||
*(here->DIOqpNegPtr) += dcrrdvd;
|
||||
/* Contribution to diode current */
|
||||
gain = (1 - model->DIOsoftRevRecParam) / here->DIOtTransitTime;
|
||||
here->DIOqpGain = (1 - model->DIOsoftRevRecParam) / here->DIOtTransitTime;
|
||||
/* Linear contribution -(1-vp)/tau*ddt(Qp) */
|
||||
geqrrd = gain*gqcsr;
|
||||
ceqrrd = gain*cqcsr - geqrrd*vqp;
|
||||
geqrrd = here->DIOqpGain*gqcsr;
|
||||
ceqrrd = here->DIOqpGain*cqcsr - geqrrd*vqp;
|
||||
*(ckt->CKTrhs + here->DIOposPrimeNode) -= ceqrrd;
|
||||
*(ckt->CKTrhs + here->DIOnegNode) += ceqrrd;
|
||||
*(here->DIOposPrimeQpPtr) += geqrrd;
|
||||
|
|
|
|||
Loading…
Reference in New Issue