Reconstruct NEWCONV macro
This commit is contained in:
parent
389b1662ef
commit
af3afcca38
|
|
@ -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 */
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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 */
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Reference in New Issue