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);
|
extern int NIpred(CKTcircuit *ckt);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* KCL Verification */
|
|
||||||
extern int NIkclVerification (CKTcircuit *) ;
|
|
||||||
/********************/
|
|
||||||
|
|
||||||
extern IFfrontEnd *SPfrontEnd;
|
extern IFfrontEnd *SPfrontEnd;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -25,8 +25,22 @@ NIconvTest(CKTcircuit *ckt)
|
||||||
double new;
|
double new;
|
||||||
double tol;
|
double tol;
|
||||||
|
|
||||||
|
/* KCL_verification */
|
||||||
|
double maximum = 0 ;
|
||||||
|
|
||||||
node = ckt->CKTnodes;
|
node = ckt->CKTnodes;
|
||||||
size = SMPmatSize(ckt->CKTmatrix);
|
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
|
#ifdef STEPDEBUG
|
||||||
for (i=1;i<=size;i++) {
|
for (i=1;i<=size;i++) {
|
||||||
new = ckt->CKTrhs [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);
|
printf("chk for convergence: %s new: %g old: %g\n",CKTnodName(ckt,i),new,old);
|
||||||
}
|
}
|
||||||
#endif /* STEPDEBUG */
|
#endif /* STEPDEBUG */
|
||||||
|
|
||||||
|
node = ckt->CKTnodes ;
|
||||||
for (i=1;i<=size;i++) {
|
for (i=1;i<=size;i++) {
|
||||||
node = node->next;
|
node = node->next;
|
||||||
new = ckt->CKTrhs [i] ;
|
new = ckt->CKTrhs [i] ;
|
||||||
|
|
@ -50,6 +66,12 @@ NIconvTest(CKTcircuit *ckt)
|
||||||
ckt->CKTtroubleElt = NULL;
|
ckt->CKTtroubleElt = NULL;
|
||||||
return(1);
|
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);
|
return(0);
|
||||||
#endif /* NEWCONV */
|
#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 */
|
CKTnode *node; /* current matrix entry */
|
||||||
double diff, maxdiff, damp_factor, *OldCKTstate0=NULL;
|
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 */
|
if ( maxIter < 100 ) maxIter = 100; /* some convergence issues that get resolved by increasing max iter */
|
||||||
|
|
||||||
iterno=0;
|
iterno=0;
|
||||||
|
|
@ -113,16 +110,6 @@ NIiter(CKTcircuit *ckt, int maxIter)
|
||||||
ckt->CKTniState |= NISHOULDREORDER;
|
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) {
|
if(ckt->CKTniState & NISHOULDREORDER) {
|
||||||
startTime = SPfrontEnd->IFseconds();
|
startTime = SPfrontEnd->IFseconds();
|
||||||
error = SMPreorder(ckt->CKTmatrix,ckt->CKTpivotAbsTol,
|
error = SMPreorder(ckt->CKTmatrix,ckt->CKTpivotAbsTol,
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue