GMIN Stepping trials

This commit is contained in:
Francesco Lannutti 2013-09-22 21:36:17 +02:00
parent 9e83607186
commit 5b6c4a9ebb
2 changed files with 24 additions and 6 deletions

View File

@ -22,6 +22,7 @@ NIconvTest (CKTcircuit *ckt)
int i ; /* generic loop variable */ int i ; /* generic loop variable */
int size ; /* size of the matrix */ int size ; /* size of the matrix */
CKTnode *node ; /* current matrix entry */ CKTnode *node ; /* current matrix entry */
double old, new, tol ;
#ifdef KIRCHHOFF #ifdef KIRCHHOFF
double maximum ; double maximum ;
@ -30,8 +31,6 @@ NIconvTest (CKTcircuit *ckt)
#ifdef STEPDEBUG #ifdef STEPDEBUG
int j ; int j ;
#endif #endif
#else
double old, new, tol ;
#endif #endif
size = SMPmatSize (ckt->CKTmatrix) ; size = SMPmatSize (ckt->CKTmatrix) ;
@ -53,9 +52,27 @@ NIconvTest (CKTcircuit *ckt)
node = node->next ; node = node->next ;
#ifdef KIRCHHOFF #ifdef KIRCHHOFF
/* KCL Verification */
if ((node->type == SP_VOLTAGE) && (!ckt->CKTnodeIsLinear [i])) if ((node->type == SP_VOLTAGE) && (!ckt->CKTnodeIsLinear [i]))
{ {
new = ckt->CKTrhs [i] ;
old = ckt->CKTrhsOld [i] ;
tol = ckt->CKTreltol * (MAX (fabs (old), fabs (new))) + ckt->CKTvoltTol ;
if (fabs (new - old) > tol)
{
#ifdef STEPDEBUG
fprintf (err, " non-convergence at node (type=3) %s (fabs(new-old)>tol --> fabs(%g-%g)>%g)\n", CKTnodName (ckt, i), new, old, tol) ;
fprintf (err, " reltol: %g voltTol: %g (tol=reltol*(MAX(fabs(old),fabs(new))) + voltTol)\n", ckt->CKTreltol, ckt->CKTvoltTol) ;
#endif /* STEPDEBUG */
ckt->CKTtroubleNode = i ;
ckt->CKTtroubleElt = NULL ;
return 1 ;
}
/* KCL Verification */
maximum = 0 ; maximum = 0 ;
ptr = ckt->CKTmkCurKCLarray [i] ; ptr = ckt->CKTmkCurKCLarray [i] ;
@ -87,6 +104,7 @@ NIconvTest (CKTcircuit *ckt)
/* Check Convergence */ /* Check Convergence */
if (fabs (ckt->CKTfvk [i] + ckt->CKTgmin * ckt->CKTrhsOld [i]) > (ckt->CKTreltol * maximum + ckt->CKTabstol)) if (fabs (ckt->CKTfvk [i] + ckt->CKTgmin * ckt->CKTrhsOld [i]) > (ckt->CKTreltol * maximum + ckt->CKTabstol))
// if (fabs (ckt->CKTfvk [i]) > (ckt->CKTreltol * maximum + ckt->CKTabstol))
{ {
ckt->CKTtroubleNode = i ; ckt->CKTtroubleNode = i ;
ckt->CKTtroubleElt = NULL ; ckt->CKTtroubleElt = NULL ;

View File

@ -81,13 +81,13 @@ CKTload(CKTcircuit *ckt)
#ifdef KIRCHHOFF #ifdef KIRCHHOFF
/* GMIN Stepping */ /* GMIN Stepping */
for (i = 1 ; i <= size ; i++) /* for (i = 1 ; i <= size ; i++)
{ {
if (ckt->CKTdiag [i] != NULL) if (ckt->CKTdiag [i] != NULL)
{ {
*(ckt->CKTdiag [i]) += ckt->CKTgmin ; *(ckt->CKTdiag [i]) += ckt->CKTdiagGmin ;
} }
} }*/
#endif #endif
#ifdef XSPICE #ifdef XSPICE