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