diff --git a/src/spicelib/devices/hfet1/hfetload.c b/src/spicelib/devices/hfet1/hfetload.c index c3c9c0530..fe4929ad7 100644 --- a/src/spicelib/devices/hfet1/hfetload.c +++ b/src/spicelib/devices/hfet1/hfetload.c @@ -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); + } } } } diff --git a/src/spicelib/devices/hfet2/hfet2load.c b/src/spicelib/devices/hfet2/hfet2load.c index ad891e435..63189d7ae 100644 --- a/src/spicelib/devices/hfet2/hfet2load.c +++ b/src/spicelib/devices/hfet2/hfet2load.c @@ -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); + } } } } diff --git a/src/spicelib/devices/jfet2/jfet2load.c b/src/spicelib/devices/jfet2/jfet2load.c index ff68f3745..151e1d6c2 100644 --- a/src/spicelib/devices/jfet2/jfet2load.c +++ b/src/spicelib/devices/jfet2/jfet2load.c @@ -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); + } } } } diff --git a/src/spicelib/devices/mes/mesload.c b/src/spicelib/devices/mes/mesload.c index 2226991ba..32a83a2ec 100644 --- a/src/spicelib/devices/mes/mesload.c +++ b/src/spicelib/devices/mes/mesload.c @@ -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); + } } } } diff --git a/src/spicelib/devices/mesa/mesaload.c b/src/spicelib/devices/mesa/mesaload.c index e1ffecd4a..9b8081f53 100644 --- a/src/spicelib/devices/mesa/mesaload.c +++ b/src/spicelib/devices/mesa/mesaload.c @@ -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); + } } } }