diode fix current reporting for soft recovery model

This commit is contained in:
dwarning 2026-03-11 18:42:37 +01:00
parent 0937dd4cec
commit a61fee4aa3
3 changed files with 8 additions and 4 deletions

View File

@ -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;

View File

@ -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 */

View File

@ -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;