Reviewed IND, ISRC, RES and VSRC to work with the "new_kirchhoff" KCL verification

This commit is contained in:
Francesco Lannutti 2013-01-14 11:37:41 +01:00
parent f3891e5af3
commit fb306e5385
3 changed files with 22 additions and 56 deletions

View File

@ -430,10 +430,6 @@ extern void NInzIter(CKTcircuit *, int, int);
extern int NIpred(CKTcircuit *ckt);
#endif
/* KCL Verification */
extern int NIkclVerification (CKTcircuit *) ;
/********************/
extern IFfrontEnd *SPfrontEnd;
#endif

View File

@ -25,8 +25,22 @@ NIconvTest(CKTcircuit *ckt)
double new;
double tol;
/* KCL_verification */
double maximum = 0 ;
node = ckt->CKTnodes;
size = SMPmatSize(ckt->CKTmatrix);
for (i = 1 ; i <= size ; i++)
{
if (node->type == SP_CURRENT)
{
if (maximum < fabs (ckt->CKTrhsOld [i]))
maximum = fabs (ckt->CKTrhsOld [i]) ;
}
node = node->next ;
}
#ifdef STEPDEBUG
for (i=1;i<=size;i++) {
new = ckt->CKTrhs [i] ;
@ -34,6 +48,8 @@ NIconvTest(CKTcircuit *ckt)
printf("chk for convergence: %s new: %g old: %g\n",CKTnodName(ckt,i),new,old);
}
#endif /* STEPDEBUG */
node = ckt->CKTnodes ;
for (i=1;i<=size;i++) {
node = node->next;
new = ckt->CKTrhs [i] ;
@ -50,6 +66,12 @@ NIconvTest(CKTcircuit *ckt)
ckt->CKTtroubleElt = NULL;
return(1);
}
/* KCL Verification */
// printf ("Valore: %-.9g\tSoglia: %-.9g\n", fabs (ckt->CKTfvk [i] + ckt->CKTdiagGmin * ckt->CKTrhsOld [i]), (ckt->CKTreltol * maximum + ckt->CKTabstol)) ;
// if (fabs (ckt->CKTfvk [i]) > (ckt->CKTreltol * maximum + ckt->CKTabstol))
if (fabs (ckt->CKTfvk [i] + ckt->CKTdiagGmin * ckt->CKTrhsOld [i]) > (ckt->CKTreltol * maximum + ckt->CKTabstol))
return 1 ;
}
}
@ -62,42 +84,3 @@ NIconvTest(CKTcircuit *ckt)
return(0);
#endif /* NEWCONV */
}
/**
* Routine to Verify the KCL
*/
int NIkclVerification (CKTcircuit *ckt)
{
int i, size ;
double maximum = 0 ;
CKTnode *node ;
size = SMPmatSize (ckt->CKTmatrix) ;
node = ckt->CKTnodes ;
for (i = 1 ; i <= size ; i++)
{
if (node->type == SP_CURRENT)
{
if (maximum < fabs (ckt->CKTrhsOld [i]))
maximum = fabs (ckt->CKTrhsOld [i]) ;
}
node = node->next ;
}
node = ckt->CKTnodes ;
for (i = 1 ; i <= size ; i++)
{
if (node->type == SP_VOLTAGE)
{
if ((ckt->CKTfvk [i] + ckt->CKTdiagGmin * ckt->CKTrhsOld [i]) > (ckt->CKTreltol * maximum + ckt->CKTabstol))
// if ((ckt->CKTfvk [i]) > (ckt->CKTreltol * maximum + ckt->CKTabstol))
return 1 ;
}
node = node->next ;
}
return 0 ;
}

View File

@ -37,9 +37,6 @@ NIiter(CKTcircuit *ckt, int maxIter)
CKTnode *node; /* current matrix entry */
double diff, maxdiff, damp_factor, *OldCKTstate0=NULL;
/* KCL_verified */
int KCL_verified ;
if ( maxIter < 100 ) maxIter = 100; /* some convergence issues that get resolved by increasing max iter */
iterno=0;
@ -113,16 +110,6 @@ NIiter(CKTcircuit *ckt, int maxIter)
ckt->CKTniState |= NISHOULDREORDER;
}
/* KCL Verification */
if ((ckt->CKTnoncon == 0) && (iterno != 1))
{
KCL_verified = NIkclVerification (ckt) ;
if (KCL_verified) /* NOT VERIFIED */
ckt->CKTnoncon = 1 ;
else
ckt->CKTnoncon = 0 ;
}
if(ckt->CKTniState & NISHOULDREORDER) {
startTime = SPfrontEnd->IFseconds();
error = SMPreorder(ckt->CKTmatrix,ckt->CKTpivotAbsTol,