Add MODEDCTRANCURVE to enable returning capacitance upon dc sweep.
Exclude integration if MODEDCTRANCURVE is active.
This commit is contained in:
parent
ae06dfe978
commit
2a0a3ab403
|
|
@ -313,7 +313,7 @@ int HFETAload(GENmodel *inModel, CKTcircuit *ckt)
|
|||
* compute equivalent drain current source
|
||||
*/
|
||||
cd = cdrain - cgd;
|
||||
if ( (ckt->CKTmode & (MODETRAN|MODEINITSMSIG)) ||
|
||||
if ( (ckt->CKTmode & (MODEDCTRANCURVE|MODETRAN|MODEINITSMSIG)) ||
|
||||
((ckt->CKTmode & MODETRANOP) && (ckt->CKTmode & MODEUIC)) ){
|
||||
/*
|
||||
* charge storage elements
|
||||
|
|
@ -357,28 +357,31 @@ int HFETAload(GENmodel *inModel, CKTcircuit *ckt)
|
|||
*(ckt->CKTstate1 + here->HFETAqds) =
|
||||
*(ckt->CKTstate0 + here->HFETAqds);
|
||||
}
|
||||
error = NIintegrate(ckt,&geq,&ceq,capgs,here->HFETAqgs);
|
||||
if(error) return(error);
|
||||
ggspp = geq;
|
||||
cgspp = *(ckt->CKTstate0 + here->HFETAcqgs);
|
||||
cg = cg + cgspp;
|
||||
error = NIintegrate(ckt,&geq,&ceq,capgd,here->HFETAqgd);
|
||||
if(error) return(error);
|
||||
ggdpp = geq;
|
||||
cgdpp = *(ckt->CKTstate0 + here->HFETAcqgd);
|
||||
cg = cg + cgdpp;
|
||||
cd = cd - cgdpp;
|
||||
error = NIintegrate(ckt,&geq,&ceq,CDS,here->HFETAqds);
|
||||
if(error) return(error);
|
||||
gds += geq;
|
||||
cd += *(ckt->CKTstate0 + here->HFETAcqds);
|
||||
if (ckt->CKTmode & MODEINITTRAN) {
|
||||
*(ckt->CKTstate1 + here->HFETAcqgs) =
|
||||
/* no integration, if dc sweep, but keep evaluating capacitances */
|
||||
if (!(ckt->CKTmode & MODEDCTRANCURVE)) {
|
||||
error = NIintegrate(ckt, &geq, &ceq, capgs, here->HFETAqgs);
|
||||
if (error) return(error);
|
||||
ggspp = geq;
|
||||
cgspp = *(ckt->CKTstate0 + here->HFETAcqgs);
|
||||
cg = cg + cgspp;
|
||||
error = NIintegrate(ckt, &geq, &ceq, capgd, here->HFETAqgd);
|
||||
if (error) return(error);
|
||||
ggdpp = geq;
|
||||
cgdpp = *(ckt->CKTstate0 + here->HFETAcqgd);
|
||||
cg = cg + cgdpp;
|
||||
cd = cd - cgdpp;
|
||||
error = NIintegrate(ckt, &geq, &ceq, CDS, here->HFETAqds);
|
||||
if (error) return(error);
|
||||
gds += geq;
|
||||
cd += *(ckt->CKTstate0 + here->HFETAcqds);
|
||||
if (ckt->CKTmode & MODEINITTRAN) {
|
||||
*(ckt->CKTstate1 + here->HFETAcqgs) =
|
||||
*(ckt->CKTstate0 + here->HFETAcqgs);
|
||||
*(ckt->CKTstate1 + here->HFETAcqgd) =
|
||||
*(ckt->CKTstate1 + here->HFETAcqgd) =
|
||||
*(ckt->CKTstate0 + here->HFETAcqgd);
|
||||
*(ckt->CKTstate1 + here->HFETAcqds) =
|
||||
*(ckt->CKTstate1 + here->HFETAcqds) =
|
||||
*(ckt->CKTstate0 + here->HFETAcqds);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -218,7 +218,7 @@ int HFET2load(GENmodel *inModel, CKTcircuit *ckt)
|
|||
capgd = temp;
|
||||
}
|
||||
cd = cdrain - cgd;
|
||||
if((ckt->CKTmode & (MODETRAN|MODEINITSMSIG)) || ((ckt->CKTmode & MODETRANOP) &&
|
||||
if((ckt->CKTmode & (MODEDCTRANCURVE|MODETRAN|MODEINITSMSIG)) || ((ckt->CKTmode & MODETRANOP) &&
|
||||
(ckt->CKTmode & MODEUIC)) ){
|
||||
/* charge storage elements */
|
||||
vgs1 = *(ckt->CKTstate1 + here->HFET2vgs);
|
||||
|
|
@ -248,19 +248,22 @@ int HFET2load(GENmodel *inModel, CKTcircuit *ckt)
|
|||
*(ckt->CKTstate1 + here->HFET2qgs) = *(ckt->CKTstate0 + here->HFET2qgs);
|
||||
*(ckt->CKTstate1 + here->HFET2qgd) = *(ckt->CKTstate0 + here->HFET2qgd);
|
||||
}
|
||||
error = NIintegrate(ckt,&geq,&ceq,capgs,here->HFET2qgs);
|
||||
if(error) return(error);
|
||||
ggs = ggs + geq;
|
||||
cg = cg + *(ckt->CKTstate0 + here->HFET2cqgs);
|
||||
error = NIintegrate(ckt,&geq,&ceq,capgd,here->HFET2qgd);
|
||||
if(error) return(error);
|
||||
ggd = ggd + geq;
|
||||
cg = cg + *(ckt->CKTstate0 + here->HFET2cqgd);
|
||||
cd = cd - *(ckt->CKTstate0 + here->HFET2cqgd);
|
||||
cgd = cgd + *(ckt->CKTstate0 + here->HFET2cqgd);
|
||||
if (ckt->CKTmode & MODEINITTRAN) {
|
||||
*(ckt->CKTstate1 + here->HFET2cqgs) = *(ckt->CKTstate0 + here->HFET2cqgs);
|
||||
*(ckt->CKTstate1 + here->HFET2cqgd) = *(ckt->CKTstate0 + here->HFET2cqgd);
|
||||
/* no integration, if dc sweep, but keep evaluating capacitances */
|
||||
if (!(ckt->CKTmode & MODEDCTRANCURVE)) {
|
||||
error = NIintegrate(ckt, &geq, &ceq, capgs, here->HFET2qgs);
|
||||
if (error) return(error);
|
||||
ggs = ggs + geq;
|
||||
cg = cg + *(ckt->CKTstate0 + here->HFET2cqgs);
|
||||
error = NIintegrate(ckt, &geq, &ceq, capgd, here->HFET2qgd);
|
||||
if (error) return(error);
|
||||
ggd = ggd + geq;
|
||||
cg = cg + *(ckt->CKTstate0 + here->HFET2cqgd);
|
||||
cd = cd - *(ckt->CKTstate0 + here->HFET2cqgd);
|
||||
cgd = cgd + *(ckt->CKTstate0 + here->HFET2cqgd);
|
||||
if (ckt->CKTmode & MODEINITTRAN) {
|
||||
*(ckt->CKTstate1 + here->HFET2cqgs) = *(ckt->CKTstate0 + here->HFET2cqgs);
|
||||
*(ckt->CKTstate1 + here->HFET2cqgd) = *(ckt->CKTstate0 + here->HFET2cqgd);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -211,7 +211,7 @@ JFET2load(GENmodel *inModel, CKTcircuit *ckt)
|
|||
cg = cg + cgd;
|
||||
cd = cd - cgd;
|
||||
|
||||
if ( (ckt->CKTmode & (MODETRAN | MODEAC | MODEINITSMSIG) ) ||
|
||||
if ( (ckt->CKTmode & (MODEDCTRANCURVE | MODETRAN | MODEAC | MODEINITSMSIG) ) ||
|
||||
((ckt->CKTmode & MODETRANOP) && (ckt->CKTmode & MODEUIC)) ){
|
||||
/*
|
||||
* charge storage elements
|
||||
|
|
@ -244,26 +244,29 @@ JFET2load(GENmodel *inModel, CKTcircuit *ckt)
|
|||
*(ckt->CKTstate1 + here->JFET2qds) =
|
||||
*(ckt->CKTstate0 + here->JFET2qds);
|
||||
}
|
||||
error = NIintegrate(ckt,&geq,&ceq,capgs,here->JFET2qgs);
|
||||
if(error) return(error);
|
||||
ggs = ggs + geq;
|
||||
cg = cg + *(ckt->CKTstate0 + here->JFET2cqgs);
|
||||
error = NIintegrate(ckt,&geq,&ceq,capgd,here->JFET2qgd);
|
||||
if(error) return(error);
|
||||
ggd = ggd + geq;
|
||||
cg = cg + *(ckt->CKTstate0 + here->JFET2cqgd);
|
||||
cd = cd - *(ckt->CKTstate0 + here->JFET2cqgd);
|
||||
cgd = cgd + *(ckt->CKTstate0 + here->JFET2cqgd);
|
||||
error = NIintegrate(ckt,&geq,&ceq,capds,here->JFET2qds);
|
||||
cd = cd + *(ckt->CKTstate0 + here->JFET2cqds);
|
||||
if(error) return(error);
|
||||
if (ckt->CKTmode & MODEINITTRAN) {
|
||||
*(ckt->CKTstate1 + here->JFET2cqgs) =
|
||||
/* no integration, if dc sweep, but keep evaluating capacitances */
|
||||
if (!(ckt->CKTmode & MODEDCTRANCURVE)) {
|
||||
error = NIintegrate(ckt, &geq, &ceq, capgs, here->JFET2qgs);
|
||||
if (error) return(error);
|
||||
ggs = ggs + geq;
|
||||
cg = cg + *(ckt->CKTstate0 + here->JFET2cqgs);
|
||||
error = NIintegrate(ckt, &geq, &ceq, capgd, here->JFET2qgd);
|
||||
if (error) return(error);
|
||||
ggd = ggd + geq;
|
||||
cg = cg + *(ckt->CKTstate0 + here->JFET2cqgd);
|
||||
cd = cd - *(ckt->CKTstate0 + here->JFET2cqgd);
|
||||
cgd = cgd + *(ckt->CKTstate0 + here->JFET2cqgd);
|
||||
error = NIintegrate(ckt, &geq, &ceq, capds, here->JFET2qds);
|
||||
cd = cd + *(ckt->CKTstate0 + here->JFET2cqds);
|
||||
if (error) return(error);
|
||||
if (ckt->CKTmode & MODEINITTRAN) {
|
||||
*(ckt->CKTstate1 + here->JFET2cqgs) =
|
||||
*(ckt->CKTstate0 + here->JFET2cqgs);
|
||||
*(ckt->CKTstate1 + here->JFET2cqgd) =
|
||||
*(ckt->CKTstate1 + here->JFET2cqgd) =
|
||||
*(ckt->CKTstate0 + here->JFET2cqgd);
|
||||
*(ckt->CKTstate1 + here->JFET2cqds) =
|
||||
*(ckt->CKTstate1 + here->JFET2cqds) =
|
||||
*(ckt->CKTstate0 + here->JFET2cqds);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -335,7 +335,7 @@ MESload(GENmodel *inModel, CKTcircuit *ckt)
|
|||
* compute equivalent drain current source
|
||||
*/
|
||||
cd = cdrain - cgd;
|
||||
if ( (ckt->CKTmode & (MODETRAN|MODEINITSMSIG)) ||
|
||||
if ( (ckt->CKTmode & (MODEDCTRANCURVE | MODETRAN | MODEINITSMSIG)) ||
|
||||
((ckt->CKTmode & MODETRANOP) && (ckt->CKTmode & MODEUIC)) ){
|
||||
/*
|
||||
* charge storage elements
|
||||
|
|
@ -382,21 +382,24 @@ MESload(GENmodel *inModel, CKTcircuit *ckt)
|
|||
*(ckt->CKTstate1 + here->MESqgd) =
|
||||
*(ckt->CKTstate0 + here->MESqgd);
|
||||
}
|
||||
error = NIintegrate(ckt,&geq,&ceq,capgs,here->MESqgs);
|
||||
if(error) return(error);
|
||||
ggs = ggs + geq;
|
||||
cg = cg + *(ckt->CKTstate0 + here->MEScqgs);
|
||||
error = NIintegrate(ckt,&geq,&ceq,capgd,here->MESqgd);
|
||||
if(error) return(error);
|
||||
ggd = ggd + geq;
|
||||
cg = cg + *(ckt->CKTstate0 + here->MEScqgd);
|
||||
cd = cd - *(ckt->CKTstate0 + here->MEScqgd);
|
||||
cgd = cgd + *(ckt->CKTstate0 + here->MEScqgd);
|
||||
if (ckt->CKTmode & MODEINITTRAN) {
|
||||
*(ckt->CKTstate1 + here->MEScqgs) =
|
||||
/* no integration, if dc sweep, but keep evaluating capacitances */
|
||||
if (!(ckt->CKTmode & MODEDCTRANCURVE)) {
|
||||
error = NIintegrate(ckt, &geq, &ceq, capgs, here->MESqgs);
|
||||
if (error) return(error);
|
||||
ggs = ggs + geq;
|
||||
cg = cg + *(ckt->CKTstate0 + here->MEScqgs);
|
||||
error = NIintegrate(ckt, &geq, &ceq, capgd, here->MESqgd);
|
||||
if (error) return(error);
|
||||
ggd = ggd + geq;
|
||||
cg = cg + *(ckt->CKTstate0 + here->MEScqgd);
|
||||
cd = cd - *(ckt->CKTstate0 + here->MEScqgd);
|
||||
cgd = cgd + *(ckt->CKTstate0 + here->MEScqgd);
|
||||
if (ckt->CKTmode & MODEINITTRAN) {
|
||||
*(ckt->CKTstate1 + here->MEScqgs) =
|
||||
*(ckt->CKTstate0 + here->MEScqgs);
|
||||
*(ckt->CKTstate1 + here->MEScqgd) =
|
||||
*(ckt->CKTstate1 + here->MEScqgd) =
|
||||
*(ckt->CKTstate0 + here->MEScqgd);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -326,7 +326,7 @@ MESAload(GENmodel *inModel, CKTcircuit *ckt)
|
|||
* compute equivalent drain current source
|
||||
*/
|
||||
cd = cdrain - cgd;
|
||||
if ( (ckt->CKTmode & (MODETRAN|MODEINITSMSIG)) ||
|
||||
if ( (ckt->CKTmode & (MODEDCTRANCURVE | MODETRAN | MODEINITSMSIG)) ||
|
||||
((ckt->CKTmode & MODETRANOP) && (ckt->CKTmode & MODEUIC)) ){
|
||||
/*
|
||||
* charge storage elements
|
||||
|
|
@ -362,22 +362,25 @@ MESAload(GENmodel *inModel, CKTcircuit *ckt)
|
|||
*(ckt->CKTstate1 + here->MESAqgd) =
|
||||
*(ckt->CKTstate0 + here->MESAqgd);
|
||||
}
|
||||
error = NIintegrate(ckt,&geq,&ceq,capgs,here->MESAqgs);
|
||||
if(error) return(error);
|
||||
ggspp = geq;
|
||||
cgspp = *(ckt->CKTstate0 + here->MESAcqgs);
|
||||
cg = cg + cgspp;
|
||||
error = NIintegrate(ckt,&geq,&ceq,capgd,here->MESAqgd);
|
||||
if(error) return(error);
|
||||
ggdpp = geq;
|
||||
cgdpp = *(ckt->CKTstate0 + here->MESAcqgd);
|
||||
cg = cg + cgdpp;
|
||||
cd = cd - cgdpp;
|
||||
if (ckt->CKTmode & MODEINITTRAN) {
|
||||
*(ckt->CKTstate1 + here->MESAcqgs) =
|
||||
/* no integration, if dc sweep, but keep evaluating capacitances */
|
||||
if (!(ckt->CKTmode & MODEDCTRANCURVE)) {
|
||||
error = NIintegrate(ckt, &geq, &ceq, capgs, here->MESAqgs);
|
||||
if (error) return(error);
|
||||
ggspp = geq;
|
||||
cgspp = *(ckt->CKTstate0 + here->MESAcqgs);
|
||||
cg = cg + cgspp;
|
||||
error = NIintegrate(ckt, &geq, &ceq, capgd, here->MESAqgd);
|
||||
if (error) return(error);
|
||||
ggdpp = geq;
|
||||
cgdpp = *(ckt->CKTstate0 + here->MESAcqgd);
|
||||
cg = cg + cgdpp;
|
||||
cd = cd - cgdpp;
|
||||
if (ckt->CKTmode & MODEINITTRAN) {
|
||||
*(ckt->CKTstate1 + here->MESAcqgs) =
|
||||
*(ckt->CKTstate0 + here->MESAcqgs);
|
||||
*(ckt->CKTstate1 + here->MESAcqgd) =
|
||||
*(ckt->CKTstate1 + here->MESAcqgd) =
|
||||
*(ckt->CKTstate0 + here->MESAcqgd);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue