Reviewed IND, ISRC, RES and VSRC to work with the "new_kirchhoff" KCL verification
This commit is contained in:
parent
f3891e5af3
commit
fb306e5385
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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 ;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
Loading…
Reference in New Issue