From af3afcca38d31ea867ae9790a96a0a3636d4ca79 Mon Sep 17 00:00:00 2001 From: dwarning Date: Sun, 20 Apr 2008 09:33:06 +0000 Subject: [PATCH] Reconstruct NEWCONV macro --- src/maths/ni/niconv.c | 5 +- src/spicelib/devices/bsim3/b3ld.c | 5 +- src/spicelib/devices/bsim3soi/b4soiset.c | 4 +- src/spicelib/devices/bsim3v0/b3v0ld.c | 5 +- src/spicelib/devices/bsim4/b4ld.c | 2 + src/spicelib/devices/bsim4v2/b4v2ld.c | 40 +++++++++++ src/spicelib/devices/bsim4v3/b4v3ld.c | 2 + src/spicelib/devices/bsim4v4/b4v4ld.c | 86 ++++++++++++------------ src/spicelib/devices/bsim4v5/b4v5ld.c | 2 + 9 files changed, 103 insertions(+), 48 deletions(-) diff --git a/src/maths/ni/niconv.c b/src/maths/ni/niconv.c index ad77491f8..999c97be6 100644 --- a/src/maths/ni/niconv.c +++ b/src/maths/ni/niconv.c @@ -66,9 +66,12 @@ NIconvTest(CKTcircuit *ckt) } } - +#ifdef NEWCONV i = CKTconvTest(ckt); if (i) ckt->CKTtroubleNode = 0; return(i); +#else /* NEWCONV */ + return(0); +#endif /* NEWCONV */ } diff --git a/src/spicelib/devices/bsim3/b3ld.c b/src/spicelib/devices/bsim3/b3ld.c index d6b94173c..888f1b7f2 100644 --- a/src/spicelib/devices/bsim3/b3ld.c +++ b/src/spicelib/devices/bsim3/b3ld.c @@ -46,7 +46,10 @@ double czbd, czbdsw, czbdswg, czbs, czbssw, czbsswg, evbd, evbs, arg, sarg; double delvbd, delvbs, delvds, delvgd, delvgs; double Vfbeff, dVfbeff_dVg, dVfbeff_dVb, V3, V4; double gcbdb, gcbgb, gcbsb, gcddb, gcdgb, gcdsb, gcgdb, gcggb, gcgsb, gcsdb; -double gcsgb, gcssb, tol, MJ, MJSW, MJSWG; +#ifndef NEWCONV +double tol; +#endif +double gcsgb, gcssb, MJ, MJSW, MJSWG; double vbd, vbs, vds, vgb, vgd, vgs, vgdo, xfact; double qgate, qbulk, qdrn, qsrc, qinoi, cqgate, cqbulk, cqdrn; double Vds, Vgs, Vbs, Gmbs, FwdSum, RevSum; diff --git a/src/spicelib/devices/bsim3soi/b4soiset.c b/src/spicelib/devices/bsim3soi/b4soiset.c index d46ac7bb6..1190e9f41 100644 --- a/src/spicelib/devices/bsim3soi/b4soiset.c +++ b/src/spicelib/devices/bsim3soi/b4soiset.c @@ -1853,7 +1853,7 @@ IFuid tmpName; printf("Warning: soiMod has been set to its global value %d.\n", model->B4SOIsoiMod); } - if (here->B4SOIsoiMod == 3) /* auto selection */ + if (here->B4SOIsoiMod == 3) { /* auto selection */ if (Vbs0t > model->B4SOIvbs0fd) here->B4SOIsoiMod = 2; /* ideal FD mode */ else @@ -1861,7 +1861,7 @@ IFuid tmpName; here->B4SOIsoiMod = 0; /* BSIMPD */ else here->B4SOIsoiMod = 1; - + } here->B4SOIfloat = 0; if (here->B4SOIsoiMod == 2) /* v3.2 */ diff --git a/src/spicelib/devices/bsim3v0/b3v0ld.c b/src/spicelib/devices/bsim3v0/b3v0ld.c index 6ebf1c4b5..7a714a468 100644 --- a/src/spicelib/devices/bsim3v0/b3v0ld.c +++ b/src/spicelib/devices/bsim3v0/b3v0ld.c @@ -38,7 +38,10 @@ double czbd, czbdsw, czbs, czbssw, evbd, evbs, arg, sarg; double delvbd, delvbs, delvds, delvgd, delvgs; double Vfbeff, dVfbeff_dVg, dVfbeff_dVd, dVfbeff_dVb, V3, V4; double gcbdb, gcbgb, gcbsb, gcddb, gcdgb, gcdsb, gcgdb, gcggb, gcgsb, gcsdb; -double gcsgb, gcssb, tol, PhiB, PhiBSW, MJ, MJSW; +#ifndef NEWCONV +double tol; +#endif +double gcsgb, gcssb, PhiB, PhiBSW, MJ, MJSW; double vbd, vbs, vds, vgb, vgd, vgs, vgdo, xfact; double qgate = 0.0, qbulk = 0.0, qdrn = 0.0, qsrc, cqgate, cqbulk, cqdrn; double Vds, Vgs, Vbs, Gmbs, FwdSum, RevSum; diff --git a/src/spicelib/devices/bsim4/b4ld.c b/src/spicelib/devices/bsim4/b4ld.c index e00e08feb..22fd44a73 100644 --- a/src/spicelib/devices/bsim4/b4ld.c +++ b/src/spicelib/devices/bsim4/b4ld.c @@ -74,7 +74,9 @@ double dRs_dvg, dRd_dvg, dRs_dvb, dRd_dvb; double dT0_dvg, dT1_dvb, dT3_dvg, dT3_dvb; double vses, vdes, vdedo, delvses, delvded, delvdes; double Isestot=0.0, cseshat=0.0, Idedtot=0.0, cdedhat=0.0; +#ifndef NEWCONV double tol0, tol1, tol2, tol3, tol4, tol5, tol6; +#endif double geltd, gcrg, gcrgg, gcrgd, gcrgs, gcrgb, ceqgcrg; double vges, vgms, vgedo, vgmdo, vged, vgmd, delvged, delvgmd; diff --git a/src/spicelib/devices/bsim4v2/b4v2ld.c b/src/spicelib/devices/bsim4v2/b4v2ld.c index fb2ddc7bd..9d35c2351 100644 --- a/src/spicelib/devices/bsim4v2/b4v2ld.c +++ b/src/spicelib/devices/bsim4v2/b4v2ld.c @@ -3376,6 +3376,46 @@ finished: if ((here->BSIM4v2off == 0) || (!(ckt->CKTmode & MODEINITFIX))) { if (Check == 1) { ckt->CKTnoncon++; +#ifndef NEWCONV + } + else + { if (here->BSIM4v2mode >= 0) + { Idtot = here->BSIM4v2cd + here->BSIM4v2csub + + here->BSIM4v2Igidl - here->BSIM4v2cbd; + } + else + { Idtot = here->BSIM4v2cd + here->BSIM4v2cbd; + } + tol0 = ckt->CKTreltol * MAX(FABS(cdhat), FABS(Idtot)) + + ckt->CKTabstol; + tol1 = ckt->CKTreltol * MAX(FABS(cseshat), FABS(Isestot)) + + ckt->CKTabstol; + tol2 = ckt->CKTreltol * MAX(FABS(cdedhat), FABS(Idedtot)) + + ckt->CKTabstol; + tol3 = ckt->CKTreltol * MAX(FABS(cgshat), FABS(Igstot)) + + ckt->CKTabstol; + tol4 = ckt->CKTreltol * MAX(FABS(cgdhat), FABS(Igdtot)) + + ckt->CKTabstol; + tol5 = ckt->CKTreltol * MAX(FABS(cgbhat), FABS(Igbtot)) + + ckt->CKTabstol; + if ((FABS(cdhat - Idtot) >= tol0) || (FABS(cseshat - Isestot) >= tol1) + || (FABS(cdedhat - Idedtot) >= tol2)) + { ckt->CKTnoncon++; + } + else if ((FABS(cgshat - Igstot) >= tol3) || (FABS(cgdhat - Igdtot) >= tol4) + || (FABS(cgbhat - Igbtot) >= tol5)) + { ckt->CKTnoncon++; + } + else + { Ibtot = here->BSIM4v2cbs + here->BSIM4v2cbd + - here->BSIM4v2Igidl - here->BSIM4v2csub; + tol6 = ckt->CKTreltol * MAX(FABS(cbhat), FABS(Ibtot)) + + ckt->CKTabstol; + if (FABS(cbhat - Ibtot) > tol6) + { ckt->CKTnoncon++; + } + } +#endif /* NEWCONV */ } } *(ckt->CKTstate0 + here->BSIM4v2vds) = vds; diff --git a/src/spicelib/devices/bsim4v3/b4v3ld.c b/src/spicelib/devices/bsim4v3/b4v3ld.c index 9e2e360fa..502aeb111 100644 --- a/src/spicelib/devices/bsim4v3/b4v3ld.c +++ b/src/spicelib/devices/bsim4v3/b4v3ld.c @@ -50,7 +50,9 @@ double dRs_dvg, dRd_dvg, dRs_dvb, dRd_dvb; double dT0_dvg, dT1_dvb, dT3_dvg, dT3_dvb; double vses, vdes, vdedo, delvses, delvded, delvdes; double Isestot, cseshat, Idedtot, cdedhat; +#ifndef NEWCONV double tol0, tol1, tol2, tol3, tol4, tol5, tol6; +#endif double geltd, gcrg, gcrgg, gcrgd, gcrgs, gcrgb, ceqgcrg; double vges, vgms, vgedo, vgmdo, vged, vgmd, delvged, delvgmd; diff --git a/src/spicelib/devices/bsim4v4/b4v4ld.c b/src/spicelib/devices/bsim4v4/b4v4ld.c index 6bb5a85f2..dcca83268 100644 --- a/src/spicelib/devices/bsim4v4/b4v4ld.c +++ b/src/spicelib/devices/bsim4v4/b4v4ld.c @@ -67,9 +67,9 @@ double dRs_dvg, dRd_dvg, dRs_dvb, dRd_dvb; double dT0_dvg, dT1_dvb, dT3_dvg, dT3_dvb; double vses, vdes, vdedo, delvses, delvded, delvdes; double Isestot=0.0, cseshat=0.0, Idedtot=0.0, cdedhat=0.0; -//#ifndef NEWCONV -//double tol0, tol1, tol2, tol3, tol4, tol5, tol6; -//#endif +#ifndef NEWCONV +double tol0, tol1, tol2, tol3, tol4, tol5, tol6; +#endif double geltd, gcrg, gcrgg, gcrgd, gcrgs, gcrgb, ceqgcrg; double vges, vgms, vgedo, vgmdo, vged, vgmd, delvged, delvgmd; @@ -3576,46 +3576,46 @@ finished: if ((here->BSIM4v4off == 0) || (!(ckt->CKTmode & MODEINITFIX))) { if (Check == 1) { ckt->CKTnoncon++; -// #ifndef NEWCONV -// } -// else -// { if (here->BSIM4v4mode >= 0) -// { Idtot = here->BSIM4v4cd + here->BSIM4v4csub -// + here->BSIM4v4Igidl - here->BSIM4v4cbd; -// } -// else -// { Idtot = here->BSIM4v4cd + here->BSIM4v4cbd - here->BSIM4v4Igidl; /* bugfix */ -// } -// tol0 = ckt->CKTreltol * MAX(fabs(cdhat), fabs(Idtot)) -// + ckt->CKTabstol; -// tol1 = ckt->CKTreltol * MAX(fabs(cseshat), fabs(Isestot)) -// + ckt->CKTabstol; -// tol2 = ckt->CKTreltol * MAX(fabs(cdedhat), fabs(Idedtot)) -// + ckt->CKTabstol; -// tol3 = ckt->CKTreltol * MAX(fabs(cgshat), fabs(Igstot)) -// + ckt->CKTabstol; -// tol4 = ckt->CKTreltol * MAX(fabs(cgdhat), fabs(Igdtot)) -// + ckt->CKTabstol; -// tol5 = ckt->CKTreltol * MAX(fabs(cgbhat), fabs(Igbtot)) -// + ckt->CKTabstol; -// if ((fabs(cdhat - Idtot) >= tol0) || (fabs(cseshat - Isestot) >= tol1) -// || (fabs(cdedhat - Idedtot) >= tol2)) -// { ckt->CKTnoncon++; -// } -// else if ((fabs(cgshat - Igstot) >= tol3) || (fabs(cgdhat - Igdtot) >= tol4) -// || (fabs(cgbhat - Igbtot) >= tol5)) -// { ckt->CKTnoncon++; -// } -// else -// { Ibtot = here->BSIM4v4cbs + here->BSIM4v4cbd -// - here->BSIM4v4Igidl - here->BSIM4v4Igisl - here->BSIM4v4csub; -// tol6 = ckt->CKTreltol * MAX(fabs(cbhat), fabs(Ibtot)) -// + ckt->CKTabstol; -// if (fabs(cbhat - Ibtot) > tol6) -// { ckt->CKTnoncon++; -// } -// } -// #endif /* NEWCONV */ +#ifndef NEWCONV + } + else + { if (here->BSIM4v4mode >= 0) + { Idtot = here->BSIM4v4cd + here->BSIM4v4csub + + here->BSIM4v4Igidl - here->BSIM4v4cbd; + } + else + { Idtot = here->BSIM4v4cd + here->BSIM4v4cbd - here->BSIM4v4Igidl; /* bugfix */ + } + tol0 = ckt->CKTreltol * MAX(fabs(cdhat), fabs(Idtot)) + + ckt->CKTabstol; + tol1 = ckt->CKTreltol * MAX(fabs(cseshat), fabs(Isestot)) + + ckt->CKTabstol; + tol2 = ckt->CKTreltol * MAX(fabs(cdedhat), fabs(Idedtot)) + + ckt->CKTabstol; + tol3 = ckt->CKTreltol * MAX(fabs(cgshat), fabs(Igstot)) + + ckt->CKTabstol; + tol4 = ckt->CKTreltol * MAX(fabs(cgdhat), fabs(Igdtot)) + + ckt->CKTabstol; + tol5 = ckt->CKTreltol * MAX(fabs(cgbhat), fabs(Igbtot)) + + ckt->CKTabstol; + if ((fabs(cdhat - Idtot) >= tol0) || (fabs(cseshat - Isestot) >= tol1) + || (fabs(cdedhat - Idedtot) >= tol2)) + { ckt->CKTnoncon++; + } + else if ((fabs(cgshat - Igstot) >= tol3) || (fabs(cgdhat - Igdtot) >= tol4) + || (fabs(cgbhat - Igbtot) >= tol5)) + { ckt->CKTnoncon++; + } + else + { Ibtot = here->BSIM4v4cbs + here->BSIM4v4cbd + - here->BSIM4v4Igidl - here->BSIM4v4Igisl - here->BSIM4v4csub; + tol6 = ckt->CKTreltol * MAX(fabs(cbhat), fabs(Ibtot)) + + ckt->CKTabstol; + if (fabs(cbhat - Ibtot) > tol6) + { ckt->CKTnoncon++; + } + } +#endif /* NEWCONV */ } } *(ckt->CKTstate0 + here->BSIM4v4vds) = vds; diff --git a/src/spicelib/devices/bsim4v5/b4v5ld.c b/src/spicelib/devices/bsim4v5/b4v5ld.c index f2d25764c..e86498d7a 100644 --- a/src/spicelib/devices/bsim4v5/b4v5ld.c +++ b/src/spicelib/devices/bsim4v5/b4v5ld.c @@ -69,7 +69,9 @@ double dRs_dvg, dRd_dvg, dRs_dvb, dRd_dvb; double dT0_dvg, dT1_dvb, dT3_dvg, dT3_dvb; double vses, vdes, vdedo, delvses, delvded, delvdes; double Isestot=0.0, cseshat=0.0, Idedtot=0.0, cdedhat=0.0; +#ifndef NEWCONV double tol0, tol1, tol2, tol3, tol4, tol5, tol6; +#endif double geltd, gcrg, gcrgg, gcrgd, gcrgs, gcrgb, ceqgcrg; double vges, vgms, vgedo, vgmdo, vged, vgmd, delvged, delvgmd;