Diode: No integration if dc sweep, but keep calculating capacitances

This commit is contained in:
Holger Vogt 2026-06-01 11:02:45 +02:00
parent 973b6b6d49
commit d029ed02db
1 changed files with 30 additions and 27 deletions

View File

@ -658,36 +658,39 @@ next1:
*(ckt->CKTstate1 + here->DIOcapChargeSW) =
*(ckt->CKTstate0 + here->DIOcapChargeSW);
}
error = NIintegrate(ckt,&geq,&ceq,capd,here->DIOcapCharge);
if(error) return(error);
gd=gd+geq;
cd=cd+*(ckt->CKTstate0 + here->DIOcapCurrent);
if (model->DIOresistSWGiven) {
error = NIintegrate(ckt,&geq,&ceq,capdsw,here->DIOcapChargeSW);
if(error) return(error);
gdsw=gdsw+geq;
cdsw=cdsw+*(ckt->CKTstate0 + here->DIOcapCurrentSW);
}
if (ckt->CKTmode & MODEINITTRAN) {
*(ckt->CKTstate1 + here->DIOcapCurrent) =
*(ckt->CKTstate0 + here->DIOcapCurrent);
if (model->DIOresistSWGiven)
*(ckt->CKTstate1 + here->DIOcapCurrentSW) =
*(ckt->CKTstate0 + here->DIOcapCurrentSW);
}
if (revrec) {
/* soft recovery subcircuit */
if (ckt->CKTmode & MODEINITTRAN) {
*(ckt->CKTstate1 + here->DIOsrcapCharge) =
*(ckt->CKTstate0 + here->DIOsrcapCharge);
/* no integration, if dc sweep, but keep evaluating capacitances */
if (!(ckt->CKTmode & MODEDCTRANCURVE)) {
error = NIintegrate(ckt, &geq, &ceq, capd, here->DIOcapCharge);
if (error) return(error);
gd = gd + geq;
cd = cd + *(ckt->CKTstate0 + here->DIOcapCurrent);
if (model->DIOresistSWGiven) {
error = NIintegrate(ckt, &geq, &ceq, capdsw, here->DIOcapChargeSW);
if (error) return(error);
gdsw = gdsw + geq;
cdsw = cdsw + *(ckt->CKTstate0 + here->DIOcapCurrentSW);
}
error = NIintegrate(ckt,&geq,&ceq,capsr,here->DIOsrcapCharge);
if(error) return(error);
gqcsr = geq;
cqcsr = *(ckt->CKTstate0 + here->DIOsrcapCurrent);
if (ckt->CKTmode & MODEINITTRAN) {
*(ckt->CKTstate1 + here->DIOsrcapCurrent) =
*(ckt->CKTstate1 + here->DIOcapCurrent) =
*(ckt->CKTstate0 + here->DIOcapCurrent);
if (model->DIOresistSWGiven)
*(ckt->CKTstate1 + here->DIOcapCurrentSW) =
*(ckt->CKTstate0 + here->DIOcapCurrentSW);
}
if (revrec) {
/* soft recovery subcircuit */
if (ckt->CKTmode & MODEINITTRAN) {
*(ckt->CKTstate1 + here->DIOsrcapCharge) =
*(ckt->CKTstate0 + here->DIOsrcapCharge);
}
error = NIintegrate(ckt, &geq, &ceq, capsr, here->DIOsrcapCharge);
if (error) return(error);
gqcsr = geq;
cqcsr = *(ckt->CKTstate0 + here->DIOsrcapCurrent);
if (ckt->CKTmode & MODEINITTRAN) {
*(ckt->CKTstate1 + here->DIOsrcapCurrent) =
*(ckt->CKTstate0 + here->DIOsrcapCurrent);
}
}
}
if (selfheat)