niiter.c: indentations
This commit is contained in:
parent
ba6dd7b1af
commit
cea4eb09d6
|
|
@ -44,25 +44,25 @@ NIiter(CKTcircuit *ckt, int maxIter)
|
||||||
ipass=0;
|
ipass=0;
|
||||||
|
|
||||||
|
|
||||||
if( (ckt->CKTmode & MODETRANOP) && (ckt->CKTmode & MODEUIC)){
|
if( (ckt->CKTmode & MODETRANOP) && (ckt->CKTmode & MODEUIC)) {
|
||||||
temp = ckt->CKTrhsOld;
|
temp = ckt->CKTrhsOld;
|
||||||
ckt->CKTrhsOld = ckt->CKTrhs;
|
ckt->CKTrhsOld = ckt->CKTrhs;
|
||||||
ckt->CKTrhs = temp;
|
ckt->CKTrhs = temp;
|
||||||
error = CKTload(ckt);
|
error = CKTload(ckt);
|
||||||
if(error) {
|
if(error) {
|
||||||
return(error);
|
return(error);
|
||||||
}
|
}
|
||||||
return(OK);
|
return(OK);
|
||||||
}
|
}
|
||||||
#ifdef WANT_SENSE2
|
#ifdef WANT_SENSE2
|
||||||
if(ckt->CKTsenInfo){
|
if(ckt->CKTsenInfo) {
|
||||||
error = NIsenReinit(ckt);
|
error = NIsenReinit(ckt);
|
||||||
if(error) return(error);
|
if(error) return(error);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
if(ckt->CKTniState & NIUNINITIALIZED) {
|
if(ckt->CKTniState & NIUNINITIALIZED) {
|
||||||
error = NIreinit(ckt);
|
error = NIreinit(ckt);
|
||||||
if(error){
|
if(error) {
|
||||||
#ifdef STEPDEBUG
|
#ifdef STEPDEBUG
|
||||||
printf("re-init returned error \n");
|
printf("re-init returned error \n");
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -70,9 +70,9 @@ NIiter(CKTcircuit *ckt, int maxIter)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* OldCKTstate0=TMALLOC(double, ckt->CKTnumStates + 1); */
|
/* OldCKTstate0=TMALLOC(double, ckt->CKTnumStates + 1); */
|
||||||
|
|
||||||
for(;;){
|
for(;;) {
|
||||||
ckt->CKTnoncon=0;
|
ckt->CKTnoncon=0;
|
||||||
#ifdef NEWPRED
|
#ifdef NEWPRED
|
||||||
if(!(ckt->CKTmode & MODEINITPRED)) {
|
if(!(ckt->CKTmode & MODEINITPRED)) {
|
||||||
|
|
@ -88,7 +88,7 @@ NIiter(CKTcircuit *ckt, int maxIter)
|
||||||
#ifdef STEPDEBUG
|
#ifdef STEPDEBUG
|
||||||
printf("load returned error \n");
|
printf("load returned error \n");
|
||||||
#endif
|
#endif
|
||||||
FREE(OldCKTstate0);
|
FREE(OldCKTstate0);
|
||||||
return(error);
|
return(error);
|
||||||
}
|
}
|
||||||
/*printf("after loading, before solving\n");*/
|
/*printf("after loading, before solving\n");*/
|
||||||
|
|
@ -101,7 +101,7 @@ NIiter(CKTcircuit *ckt, int maxIter)
|
||||||
#ifdef STEPDEBUG
|
#ifdef STEPDEBUG
|
||||||
printf("pre-order returned error \n");
|
printf("pre-order returned error \n");
|
||||||
#endif
|
#endif
|
||||||
FREE(OldCKTstate0);
|
FREE(OldCKTstate0);
|
||||||
return(error); /* badly formed matrix */
|
return(error); /* badly formed matrix */
|
||||||
}
|
}
|
||||||
ckt->CKTniState |= NIDIDPREORDER;
|
ckt->CKTniState |= NIDIDPREORDER;
|
||||||
|
|
@ -114,9 +114,9 @@ NIiter(CKTcircuit *ckt, int maxIter)
|
||||||
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,
|
||||||
ckt->CKTpivotRelTol,ckt->CKTdiagGmin);
|
ckt->CKTpivotRelTol,ckt->CKTdiagGmin);
|
||||||
ckt->CKTstat->STATreorderTime +=
|
ckt->CKTstat->STATreorderTime +=
|
||||||
SPfrontEnd->IFseconds() - startTime;
|
SPfrontEnd->IFseconds() - startTime;
|
||||||
if(error) {
|
if(error) {
|
||||||
/* new feature - we can now find out something about what is
|
/* new feature - we can now find out something about what is
|
||||||
* wrong - so we ask for the troublesome entry
|
* wrong - so we ask for the troublesome entry
|
||||||
|
|
@ -124,8 +124,8 @@ NIiter(CKTcircuit *ckt, int maxIter)
|
||||||
SMPgetError(ckt->CKTmatrix,&i,&j);
|
SMPgetError(ckt->CKTmatrix,&i,&j);
|
||||||
message = TMALLOC(char, 1000); /* should be enough */
|
message = TMALLOC(char, 1000); /* should be enough */
|
||||||
(void)sprintf(message,
|
(void)sprintf(message,
|
||||||
"singular matrix: check nodes %s and %s\n",
|
"singular matrix: check nodes %s and %s\n",
|
||||||
NODENAME(ckt,i),NODENAME(ckt,j));
|
NODENAME(ckt,i),NODENAME(ckt,j));
|
||||||
SPfrontEnd->IFerror (ERR_WARNING, message, NULL);
|
SPfrontEnd->IFerror (ERR_WARNING, message, NULL);
|
||||||
FREE(message);
|
FREE(message);
|
||||||
ckt->CKTstat->STATnumIter += iterno;
|
ckt->CKTstat->STATnumIter += iterno;
|
||||||
|
|
@ -139,9 +139,9 @@ NIiter(CKTcircuit *ckt, int maxIter)
|
||||||
} else {
|
} else {
|
||||||
startTime = SPfrontEnd->IFseconds();
|
startTime = SPfrontEnd->IFseconds();
|
||||||
error=SMPluFac(ckt->CKTmatrix,ckt->CKTpivotAbsTol,
|
error=SMPluFac(ckt->CKTmatrix,ckt->CKTpivotAbsTol,
|
||||||
ckt->CKTdiagGmin);
|
ckt->CKTdiagGmin);
|
||||||
ckt->CKTstat->STATdecompTime +=
|
ckt->CKTstat->STATdecompTime +=
|
||||||
SPfrontEnd->IFseconds() - startTime;
|
SPfrontEnd->IFseconds() - startTime;
|
||||||
if(error) {
|
if(error) {
|
||||||
if( error == E_SINGULAR ) {
|
if( error == E_SINGULAR ) {
|
||||||
ckt->CKTniState |= NISHOULDREORDER;
|
ckt->CKTniState |= NISHOULDREORDER;
|
||||||
|
|
@ -155,46 +155,47 @@ NIiter(CKTcircuit *ckt, int maxIter)
|
||||||
#ifdef STEPDEBUG
|
#ifdef STEPDEBUG
|
||||||
printf("lufac returned error \n");
|
printf("lufac returned error \n");
|
||||||
#endif
|
#endif
|
||||||
FREE(OldCKTstate0);
|
FREE(OldCKTstate0);
|
||||||
return(error);
|
return(error);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/*moved it to here as if xspice is included then CKTload changes
|
/*moved it to here as if xspice is included then CKTload changes
|
||||||
CKTnumStates the first time it is run */
|
CKTnumStates the first time it is run */
|
||||||
if(!OldCKTstate0)
|
if(!OldCKTstate0)
|
||||||
OldCKTstate0=TMALLOC(double, ckt->CKTnumStates + 1);
|
OldCKTstate0=TMALLOC(double, ckt->CKTnumStates + 1);
|
||||||
for(i=0;i<ckt->CKTnumStates;i++) {
|
for(i=0; i<ckt->CKTnumStates; i++) {
|
||||||
*(OldCKTstate0+i) = *(ckt->CKTstate0+i);
|
*(OldCKTstate0+i) = *(ckt->CKTstate0+i);
|
||||||
}
|
}
|
||||||
|
|
||||||
startTime = SPfrontEnd->IFseconds();
|
startTime = SPfrontEnd->IFseconds();
|
||||||
SMPsolve(ckt->CKTmatrix,ckt->CKTrhs,ckt->CKTrhsSpare);
|
SMPsolve(ckt->CKTmatrix,ckt->CKTrhs,ckt->CKTrhsSpare);
|
||||||
ckt->CKTstat->STATsolveTime += SPfrontEnd->IFseconds() -
|
ckt->CKTstat->STATsolveTime += SPfrontEnd->IFseconds() -
|
||||||
startTime;
|
startTime;
|
||||||
#ifdef STEPDEBUG
|
#ifdef STEPDEBUG
|
||||||
/*XXXX*/
|
/*XXXX*/
|
||||||
if (*ckt->CKTrhs != 0.0)
|
if (*ckt->CKTrhs != 0.0)
|
||||||
printf("NIiter: CKTrhs[0] = %g\n", *ckt->CKTrhs);
|
printf("NIiter: CKTrhs[0] = %g\n", *ckt->CKTrhs);
|
||||||
if (*ckt->CKTrhsSpare != 0.0)
|
if (*ckt->CKTrhsSpare != 0.0)
|
||||||
printf("NIiter: CKTrhsSpare[0] = %g\n", *ckt->CKTrhsSpare);
|
printf("NIiter: CKTrhsSpare[0] = %g\n", *ckt->CKTrhsSpare);
|
||||||
if (*ckt->CKTrhsOld != 0.0)
|
if (*ckt->CKTrhsOld != 0.0)
|
||||||
printf("NIiter: CKTrhsOld[0] = %g\n", *ckt->CKTrhsOld);
|
printf("NIiter: CKTrhsOld[0] = %g\n", *ckt->CKTrhsOld);
|
||||||
/*XXXX*/
|
/*XXXX*/
|
||||||
#endif
|
#endif
|
||||||
*ckt->CKTrhs = 0;
|
*ckt->CKTrhs = 0;
|
||||||
*ckt->CKTrhsSpare = 0;
|
*ckt->CKTrhsSpare = 0;
|
||||||
*ckt->CKTrhsOld = 0;
|
*ckt->CKTrhsOld = 0;
|
||||||
|
|
||||||
if(iterno > maxIter) {
|
if(iterno > maxIter) {
|
||||||
/*fprintf(stderr,"too many iterations without convergence: %d iter's (max iter == %d)\n",
|
/*fprintf(stderr,"too many iterations without convergence: %d iter's (max iter == %d)\n",
|
||||||
iterno,maxIter);*/
|
iterno,maxIter);*/
|
||||||
ckt->CKTstat->STATnumIter += iterno;
|
ckt->CKTstat->STATnumIter += iterno;
|
||||||
|
FREE(errMsg);
|
||||||
errMsg = TMALLOC(char, strlen(msg) + 1);
|
errMsg = TMALLOC(char, strlen(msg) + 1);
|
||||||
strcpy(errMsg,msg);
|
strcpy(errMsg,msg);
|
||||||
#ifdef STEPDEBUG
|
#ifdef STEPDEBUG
|
||||||
printf("iterlim exceeded \n");
|
printf("iterlim exceeded \n");
|
||||||
#endif
|
#endif
|
||||||
FREE(OldCKTstate0);
|
FREE(OldCKTstate0);
|
||||||
return(E_ITERLIM);
|
return(E_ITERLIM);
|
||||||
}
|
}
|
||||||
if(ckt->CKTnoncon==0 && iterno!=1) {
|
if(ckt->CKTnoncon==0 && iterno!=1) {
|
||||||
|
|
@ -207,33 +208,33 @@ NIiter(CKTcircuit *ckt, int maxIter)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
if( (ckt->CKTnodeDamping!=0) && (ckt->CKTnoncon!=0) &&
|
if( (ckt->CKTnodeDamping!=0) && (ckt->CKTnoncon!=0) &&
|
||||||
((ckt->CKTmode & MODETRANOP) || (ckt->CKTmode & MODEDCOP)) &&
|
((ckt->CKTmode & MODETRANOP) || (ckt->CKTmode & MODEDCOP)) &&
|
||||||
(iterno>1) ) {
|
(iterno>1) ) {
|
||||||
maxdiff=0;
|
maxdiff=0;
|
||||||
for (node = ckt->CKTnodes->next; node; node = node->next) {
|
for (node = ckt->CKTnodes->next; node; node = node->next) {
|
||||||
if(node->type == NODE_VOLTAGE) {
|
if(node->type == NODE_VOLTAGE) {
|
||||||
diff = (ckt->CKTrhs)[node->number] -
|
diff = (ckt->CKTrhs)[node->number] -
|
||||||
(ckt->CKTrhsOld)[node->number];
|
(ckt->CKTrhsOld)[node->number];
|
||||||
if (diff>maxdiff) maxdiff=diff;
|
if (diff>maxdiff) maxdiff=diff;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (maxdiff>10) {
|
if (maxdiff>10) {
|
||||||
damp_factor=10/maxdiff;
|
damp_factor=10/maxdiff;
|
||||||
if (damp_factor<0.1) damp_factor=0.1;
|
if (damp_factor<0.1) damp_factor=0.1;
|
||||||
for (node = ckt->CKTnodes->next; node; node = node->next) {
|
for (node = ckt->CKTnodes->next; node; node = node->next) {
|
||||||
diff = (ckt->CKTrhs)[node->number] -
|
diff = (ckt->CKTrhs)[node->number] -
|
||||||
(ckt->CKTrhsOld)[node->number];
|
(ckt->CKTrhsOld)[node->number];
|
||||||
(ckt->CKTrhs)[node->number]=(ckt->CKTrhsOld)[node->number] +
|
(ckt->CKTrhs)[node->number]=(ckt->CKTrhsOld)[node->number] +
|
||||||
(damp_factor * diff);
|
(damp_factor * diff);
|
||||||
}
|
}
|
||||||
for(i=0;i<ckt->CKTnumStates;i++) {
|
for(i=0; i<ckt->CKTnumStates; i++) {
|
||||||
diff = *(ckt->CKTstate0+i) - *(OldCKTstate0+i);
|
diff = *(ckt->CKTstate0+i) - *(OldCKTstate0+i);
|
||||||
*(ckt->CKTstate0+i) = *(OldCKTstate0+i) +
|
*(ckt->CKTstate0+i) = *(OldCKTstate0+i) +
|
||||||
(damp_factor * diff);
|
(damp_factor * diff);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -267,7 +268,7 @@ NIiter(CKTcircuit *ckt, int maxIter)
|
||||||
} else {
|
} else {
|
||||||
ckt->CKTstat->STATnumIter += iterno;
|
ckt->CKTstat->STATnumIter += iterno;
|
||||||
#ifdef STEPDEBUG
|
#ifdef STEPDEBUG
|
||||||
printf("bad initf state \n");
|
printf("bad initf state \n");
|
||||||
#endif
|
#endif
|
||||||
FREE(OldCKTstate0);
|
FREE(OldCKTstate0);
|
||||||
return(E_INTERN);
|
return(E_INTERN);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue