GMIN Stepping trials
This commit is contained in:
parent
9e83607186
commit
5b6c4a9ebb
|
|
@ -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 ;
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue