first trial for ac implementation

This commit is contained in:
dwarning 2025-09-21 19:46:05 +02:00
parent b5232a50cb
commit 8caa85f6f0
4 changed files with 26 additions and 0 deletions

View File

@ -61,6 +61,26 @@ DIOacLoad(GENmodel *inModel, CKTcircuit *ckt)
double xgcTt= *(ckt->CKTstate0 + here->DIOcqth) * ckt->CKTomega; double xgcTt= *(ckt->CKTstate0 + here->DIOcqth) * ckt->CKTomega;
(*(here->DIOtempTempPtr + 1) += xgcTt); (*(here->DIOtempTempPtr + 1) += xgcTt);
} }
if (model->DIOsoftRevRecParamGiven) {
double dcrrdvd, grr, geqrrd;
double gdres = *(ckt->CKTstate0 + here->DIOresConduct);
double gqcsr = *(ckt->CKTstate0 + here->DIOgqcsr);
/* QP subcircuit */
dcrrdvd = here->DIOtTransitTime / model->DIOsoftRevRecParam * gdres;
grr = 1/model->DIOsoftRevRecParam;
*(here->DIOqpQpPtr) += grr + gqcsr;
*(here->DIOqpPosPrimePtr) += -dcrrdvd;
*(here->DIOqpNegPtr) += dcrrdvd;
/* Contribution to diode current */
/* Linear contribution -(1-vp)/tau*ddt(Qp) */
geqrrd = (1 - model->DIOsoftRevRecParam) / here->DIOtTransitTime * gqcsr;
*(here->DIOposPrimeQpPtr) += geqrrd;
*(here->DIOnegQpPtr) += -geqrrd;
xceq = *(ckt->CKTstate0 + here->DIOsrcapCurrent) * ckt->CKTomega;
*(here->DIOqpQpPtr + 1) += xceq;
}
} }
} }
return(OK); return(OK);

View File

@ -63,6 +63,8 @@ DIOask (CKTcircuit *ckt, GENinstance *inst, int which, IFvalue *value,
return(OK); return(OK);
case DIO_CURRENT: case DIO_CURRENT:
value->rValue = *(ckt->CKTstate0+here->DIOcurrent); value->rValue = *(ckt->CKTstate0+here->DIOcurrent);
if (here->DIOqpNode > 0)
value->rValue += *(ckt->CKTstate0+here->DIOcqcsr);
return(OK); return(OK);
case DIO_CAP: case DIO_CAP:
value->rValue = here->DIOcap; value->rValue = here->DIOcap;

View File

@ -505,6 +505,7 @@ next1:
(!(ckt->CKTmode & MODEUIC)) ) { (!(ckt->CKTmode & MODEUIC)) ) {
if (ckt->CKTmode & MODEINITSMSIG){ if (ckt->CKTmode & MODEINITSMSIG){
*(ckt->CKTstate0 + here->DIOcapCurrent) = capd; *(ckt->CKTstate0 + here->DIOcapCurrent) = capd;
*(ckt->CKTstate0 + here->DIOsrcapCurrent) = capsr;
if(SenCond){ if(SenCond){
*(ckt->CKTstate0 + here->DIOcurrent) = cd; *(ckt->CKTstate0 + here->DIOcurrent) = cd;

View File

@ -21,6 +21,9 @@ DIOtrunc(GENmodel *inModel, CKTcircuit *ckt, double *timeStep)
for( ; model != NULL; model = DIOnextModel(model)) { for( ; model != NULL; model = DIOnextModel(model)) {
for(here=DIOinstances(model);here!=NULL;here = DIOnextInstance(here)){ for(here=DIOinstances(model);here!=NULL;here = DIOnextInstance(here)){
CKTterr(here->DIOcapCharge,ckt,timeStep); CKTterr(here->DIOcapCharge,ckt,timeStep);
if (model->DIOsoftRevRecParamGiven) {
CKTterr(here->DIOsrcapCharge,ckt,timeStep);
}
} }
} }
return(OK); return(OK);