diff --git a/ChangeLog b/ChangeLog index 5d2f3cf9e..7cf18d484 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2011-12-11 Robert Larice + * src/spicelib/analysis/acan.c , + * src/spicelib/analysis/dcpss.c , + * src/spicelib/analysis/dctran.c : + use a macro to update ckt->CKTstat->STAT.. + 2011-12-11 Robert Larice * src/spicelib/**/*.c : auxiliary define `job' --> local variable `job' diff --git a/src/spicelib/analysis/acan.c b/src/spicelib/analysis/acan.c index aaa889c15..c2723f93e 100644 --- a/src/spicelib/analysis/acan.c +++ b/src/spicelib/analysis/acan.c @@ -22,6 +22,29 @@ Modified 2001: AlansFixes void SetAnalyse( char * Analyse, int Percent); #endif + +#define INIT_STATS() \ +do { \ + startTime = SPfrontEnd->IFseconds(); \ + startdTime = ckt->CKTstat->STATdecompTime; \ + startsTime = ckt->CKTstat->STATsolveTime; \ + startlTime = ckt->CKTstat->STATloadTime; \ + startcTime = ckt->CKTstat->STATcombineTime; \ + startkTime = ckt->CKTstat->STATsyncTime; \ +} while(0) + +#define UPDATE_STATS(analysis) \ +do { \ + ckt->CKTcurrentAnalysis = analysis; \ + ckt->CKTstat->STATacTime += SPfrontEnd->IFseconds() - startTime; \ + ckt->CKTstat->STATacDecompTime += ckt->CKTstat->STATdecompTime - startdTime; \ + ckt->CKTstat->STATacSolveTime += ckt->CKTstat->STATsolveTime - startsTime; \ + ckt->CKTstat->STATacLoadTime += ckt->CKTstat->STATloadTime - startlTime; \ + ckt->CKTstat->STATacCombTime += ckt->CKTstat->STATcombineTime - startcTime; \ + ckt->CKTstat->STATacSyncTime += ckt->CKTstat->STATsyncTime - startkTime; \ +} while(0) + + int ACan(CKTcircuit *ckt, int restart) { @@ -211,13 +234,7 @@ ACan(CKTcircuit *ckt, int restart) /* gtri - end - wbk */ #endif - - startTime = SPfrontEnd->IFseconds(); - startdTime = ckt->CKTstat->STATdecompTime; - startsTime = ckt->CKTstat->STATsolveTime; - startlTime = ckt->CKTstat->STATloadTime; - startcTime = ckt->CKTstat->STATcombineTime; - startkTime = ckt->CKTstat->STATsyncTime; + INIT_STATS(); /* main loop through all scheduled frequencies */ while (freq <= job->ACstopFreq + freqTol) { @@ -263,18 +280,7 @@ ACan(CKTcircuit *ckt, int restart) ckt->CKTmode = (ckt->CKTmode&MODEUIC) | MODEAC; error = NIacIter(ckt); if (error) { - ckt->CKTcurrentAnalysis = DOING_AC; - ckt->CKTstat->STATacTime += SPfrontEnd->IFseconds() - startTime; - ckt->CKTstat->STATacDecompTime += ckt->CKTstat->STATdecompTime - - startdTime; - ckt->CKTstat->STATacSolveTime += ckt->CKTstat->STATsolveTime - - startsTime; - ckt->CKTstat->STATacLoadTime += ckt->CKTstat->STATloadTime - - startlTime; - ckt->CKTstat->STATacCombTime += ckt->CKTstat->STATcombineTime - - startcTime; - ckt->CKTstat->STATacSyncTime += ckt->CKTstat->STATsyncTime - - startkTime; + UPDATE_STATS(DOING_AC); return(error); } @@ -313,18 +319,7 @@ ACan(CKTcircuit *ckt, int restart) error = CKTacDump(ckt,freq,acPlot); #endif if (error) { - ckt->CKTcurrentAnalysis = DOING_AC; - ckt->CKTstat->STATacTime += SPfrontEnd->IFseconds() - startTime; - ckt->CKTstat->STATacDecompTime += ckt->CKTstat->STATdecompTime - - startdTime; - ckt->CKTstat->STATacSolveTime += ckt->CKTstat->STATsolveTime - - startsTime; - ckt->CKTstat->STATacLoadTime += ckt->CKTstat->STATloadTime - - startlTime; - ckt->CKTstat->STATacCombTime += ckt->CKTstat->STATcombineTime - - startcTime; - ckt->CKTstat->STATacSyncTime += ckt->CKTstat->STATsyncTime - - startkTime; + UPDATE_STATS(DOING_AC); return(error); } @@ -374,18 +369,7 @@ ACan(CKTcircuit *ckt, int restart) endsweep: SPfrontEnd->OUTendPlot (acPlot); acPlot = NULL; - ckt->CKTcurrentAnalysis = 0; - ckt->CKTstat->STATacTime += SPfrontEnd->IFseconds() - startTime; - ckt->CKTstat->STATacDecompTime += ckt->CKTstat->STATdecompTime - - startdTime; - ckt->CKTstat->STATacSolveTime += ckt->CKTstat->STATsolveTime - - startsTime; - ckt->CKTstat->STATacLoadTime += ckt->CKTstat->STATloadTime - - startlTime; - ckt->CKTstat->STATacCombTime += ckt->CKTstat->STATcombineTime - - startcTime; - ckt->CKTstat->STATacSyncTime += ckt->CKTstat->STATsyncTime - - startkTime; + UPDATE_STATS(0); return(0); } diff --git a/src/spicelib/analysis/dcpss.c b/src/spicelib/analysis/dcpss.c index 10b74ca85..78f4c396c 100755 --- a/src/spicelib/analysis/dcpss.c +++ b/src/spicelib/analysis/dcpss.c @@ -45,6 +45,30 @@ void SetAnalyse( char * Analyse, int Percent); #endif +#define INIT_STATS() \ +do { \ + startTime = SPfrontEnd->IFseconds(); \ + startIters = ckt->CKTstat->STATnumIter; \ + startdTime = ckt->CKTstat->STATdecompTime; \ + startsTime = ckt->CKTstat->STATsolveTime; \ + startlTime = ckt->CKTstat->STATloadTime; \ + startcTime = ckt->CKTstat->STATcombineTime; \ + startkTime = ckt->CKTstat->STATsyncTime; \ +} while(0) + +#define UPDATE_STATS(analysis) \ +do { \ + ckt->CKTcurrentAnalysis = analysis; \ + ckt->CKTstat->STATtranTime += SPfrontEnd->IFseconds() - startTime; \ + ckt->CKTstat->STATtranIter += ckt->CKTstat->STATnumIter - startIters; \ + ckt->CKTstat->STATtranDecompTime += ckt->CKTstat->STATdecompTime - startdTime; \ + ckt->CKTstat->STATtranSolveTime += ckt->CKTstat->STATsolveTime - startsTime; \ + ckt->CKTstat->STATtranLoadTime += ckt->CKTstat->STATloadTime - startlTime; \ + ckt->CKTstat->STATtranCombTime += ckt->CKTstat->STATcombineTime - startcTime; \ + ckt->CKTstat->STATtranSyncTime += ckt->CKTstat->STATsyncTime - startkTime; \ +} while(0) + + int CKTfour(int, int, double *, double *, double *, double, double *, double *, double *, double *,double *); @@ -317,13 +341,7 @@ DCpss(CKTcircuit *ckt, int restart) } #endif - startTime = SPfrontEnd->IFseconds(); - startIters = ckt->CKTstat->STATnumIter; - startdTime = ckt->CKTstat->STATdecompTime; - startsTime = ckt->CKTstat->STATsolveTime; - startlTime = ckt->CKTstat->STATloadTime; - startcTime = ckt->CKTstat->STATcombineTime; - startkTime = ckt->CKTstat->STATsyncTime; + INIT_STATS(); #ifdef CLUSTER CLUsetup(ckt); #endif @@ -331,13 +349,7 @@ DCpss(CKTcircuit *ckt, int restart) /*saj As traninit resets CKTmode */ ckt->CKTmode = (ckt->CKTmode&MODEUIC)|MODETRAN | MODEINITPRED; /* saj */ - startTime = SPfrontEnd->IFseconds(); - startIters = ckt->CKTstat->STATnumIter; - startdTime = ckt->CKTstat->STATdecompTime; - startsTime = ckt->CKTstat->STATsolveTime; - startlTime = ckt->CKTstat->STATloadTime; - startcTime = ckt->CKTstat->STATcombineTime; - startkTime = ckt->CKTstat->STATsyncTime; + INIT_STATS(); if(ckt->CKTminBreak==0) ckt->CKTminBreak=ckt->CKTmaxStep*5e-5; firsttime=0; /* To get rawfile working saj*/ @@ -406,19 +418,7 @@ nextTime: ckt->CKTbreak=0; /* XXX Error will cause single process to bail. */ if(error) { - ckt->CKTcurrentAnalysis = DOING_TRAN; - ckt->CKTstat->STATtranTime += SPfrontEnd->IFseconds() - startTime; - ckt->CKTstat->STATtranIter += ckt->CKTstat->STATnumIter - startIters; - ckt->CKTstat->STATtranDecompTime += ckt->CKTstat->STATdecompTime - - startdTime; - ckt->CKTstat->STATtranSolveTime += ckt->CKTstat->STATsolveTime - - startsTime; - ckt->CKTstat->STATtranLoadTime += ckt->CKTstat->STATloadTime - - startlTime; - ckt->CKTstat->STATtranCombTime += ckt->CKTstat->STATcombineTime - - startcTime; - ckt->CKTstat->STATtranSyncTime += ckt->CKTstat->STATsyncTime - - startkTime; + UPDATE_STATS(DOING_TRAN); return(error); } #ifdef XSPICE @@ -833,19 +833,7 @@ nextTime: if( SPfrontEnd->IFpauseTest() ) { /* user requested pause... */ - ckt->CKTcurrentAnalysis = DOING_TRAN; - ckt->CKTstat->STATtranTime += SPfrontEnd->IFseconds() - startTime; - ckt->CKTstat->STATtranIter += ckt->CKTstat->STATnumIter - startIters; - ckt->CKTstat->STATtranDecompTime += ckt->CKTstat->STATdecompTime - - startdTime; - ckt->CKTstat->STATtranSolveTime += ckt->CKTstat->STATsolveTime - - startsTime; - ckt->CKTstat->STATtranLoadTime += ckt->CKTstat->STATloadTime - - startlTime; - ckt->CKTstat->STATtranCombTime += ckt->CKTstat->STATcombineTime - - startcTime; - ckt->CKTstat->STATtranSyncTime += ckt->CKTstat->STATsyncTime - - startkTime; + UPDATE_STATS(DOING_TRAN); return(E_PAUSE); } @@ -1213,21 +1201,7 @@ resume: newdelta = ckt->CKTdelta; error = CKTtrunc(ckt,&newdelta); if(error) { - ckt->CKTcurrentAnalysis = DOING_TRAN; - ckt->CKTstat->STATtranTime += - SPfrontEnd->IFseconds() - startTime; - ckt->CKTstat->STATtranIter += - ckt->CKTstat->STATnumIter - startIters; - ckt->CKTstat->STATtranDecompTime += ckt->CKTstat->STATdecompTime - - startdTime; - ckt->CKTstat->STATtranSolveTime += ckt->CKTstat->STATsolveTime - - startsTime; - ckt->CKTstat->STATtranLoadTime += ckt->CKTstat->STATloadTime - - startlTime; - ckt->CKTstat->STATtranCombTime += ckt->CKTstat->STATcombineTime - - startcTime; - ckt->CKTstat->STATtranSyncTime += ckt->CKTstat->STATsyncTime - - startkTime; + UPDATE_STATS(DOING_TRAN); return(error); } if(newdelta>.9 * ckt->CKTdelta) { @@ -1236,21 +1210,7 @@ resume: ckt->CKTorder = 2; error = CKTtrunc(ckt,&newdelta); if(error) { - ckt->CKTcurrentAnalysis = DOING_TRAN; - ckt->CKTstat->STATtranTime += - SPfrontEnd->IFseconds() - startTime; - ckt->CKTstat->STATtranIter += - ckt->CKTstat->STATnumIter - startIters; - ckt->CKTstat->STATtranDecompTime += - ckt->CKTstat->STATdecompTime - startdTime; - ckt->CKTstat->STATtranSolveTime += - ckt->CKTstat->STATsolveTime - startsTime; - ckt->CKTstat->STATtranLoadTime += - ckt->CKTstat->STATloadTime - startlTime; - ckt->CKTstat->STATtranCombTime += - ckt->CKTstat->STATcombineTime - startcTime; - ckt->CKTstat->STATtranSyncTime += - ckt->CKTstat->STATsyncTime - startkTime; + UPDATE_STATS(DOING_TRAN); return(error); } if(newdelta <= 1.05 * ckt->CKTdelta) { @@ -1319,21 +1279,7 @@ resume: (void)printf("delta at delmin\n"); /*#endif*/ } else { - ckt->CKTcurrentAnalysis = DOING_TRAN; - ckt->CKTstat->STATtranTime += - SPfrontEnd->IFseconds() - startTime; - ckt->CKTstat->STATtranIter += - ckt->CKTstat->STATnumIter - startIters; - ckt->CKTstat->STATtranDecompTime += - ckt->CKTstat->STATdecompTime - startdTime; - ckt->CKTstat->STATtranSolveTime += - ckt->CKTstat->STATsolveTime - startsTime; - ckt->CKTstat->STATtranLoadTime += - ckt->CKTstat->STATloadTime - startlTime; - ckt->CKTstat->STATtranCombTime += - ckt->CKTstat->STATcombineTime - startcTime; - ckt->CKTstat->STATtranSyncTime += - ckt->CKTstat->STATsyncTime - startkTime; + UPDATE_STATS(DOING_TRAN); errMsg = CKTtrouble(ckt, "Timestep too small"); return(E_TIMESTEP); } diff --git a/src/spicelib/analysis/dctran.c b/src/spicelib/analysis/dctran.c index 502c4828f..842f34a54 100644 --- a/src/spicelib/analysis/dctran.c +++ b/src/spicelib/analysis/dctran.c @@ -43,6 +43,31 @@ extern struct dbcomm *dbs; void SetAnalyse(char * Analyse, int Percent); #endif + +#define INIT_STATS() \ +do { \ + startTime = SPfrontEnd->IFseconds(); \ + startIters = ckt->CKTstat->STATnumIter; \ + startdTime = ckt->CKTstat->STATdecompTime; \ + startsTime = ckt->CKTstat->STATsolveTime; \ + startlTime = ckt->CKTstat->STATloadTime; \ + startcTime = ckt->CKTstat->STATcombineTime; \ + startkTime = ckt->CKTstat->STATsyncTime; \ +} while(0) + +#define UPDATE_STATS(analysis) \ +do { \ + ckt->CKTcurrentAnalysis = analysis; \ + ckt->CKTstat->STATtranTime += SPfrontEnd->IFseconds() - startTime; \ + ckt->CKTstat->STATtranIter += ckt->CKTstat->STATnumIter - startIters; \ + ckt->CKTstat->STATtranDecompTime += ckt->CKTstat->STATdecompTime - startdTime; \ + ckt->CKTstat->STATtranSolveTime += ckt->CKTstat->STATsolveTime - startsTime; \ + ckt->CKTstat->STATtranLoadTime += ckt->CKTstat->STATloadTime - startlTime; \ + ckt->CKTstat->STATtranCombTime += ckt->CKTstat->STATcombineTime - startcTime; \ + ckt->CKTstat->STATtranSyncTime += ckt->CKTstat->STATsyncTime - startkTime; \ +} while(0) + + int DCtran(CKTcircuit *ckt, int restart) /* forced restart flag */ @@ -325,13 +350,7 @@ DCtran(CKTcircuit *ckt, } #endif - startTime = SPfrontEnd->IFseconds(); - startIters = ckt->CKTstat->STATnumIter; - startdTime = ckt->CKTstat->STATdecompTime; - startsTime = ckt->CKTstat->STATsolveTime; - startlTime = ckt->CKTstat->STATloadTime; - startcTime = ckt->CKTstat->STATcombineTime; - startkTime = ckt->CKTstat->STATsyncTime; + INIT_STATS(); #ifdef CLUSTER CLUsetup(ckt); #endif @@ -339,13 +358,7 @@ DCtran(CKTcircuit *ckt, /* saj As traninit resets CKTmode */ ckt->CKTmode = (ckt->CKTmode&MODEUIC) | MODETRAN | MODEINITPRED; /* saj */ - startTime = SPfrontEnd->IFseconds(); - startIters = ckt->CKTstat->STATnumIter; - startdTime = ckt->CKTstat->STATdecompTime; - startsTime = ckt->CKTstat->STATsolveTime; - startlTime = ckt->CKTstat->STATloadTime; - startcTime = ckt->CKTstat->STATcombineTime; - startkTime = ckt->CKTstat->STATsyncTime; + INIT_STATS(); if(ckt->CKTminBreak==0) ckt->CKTminBreak=ckt->CKTmaxStep*5e-5; firsttime=0; /* To get rawfile working saj*/ @@ -404,19 +417,7 @@ DCtran(CKTcircuit *ckt, ckt->CKTbreak = 0; /* XXX Error will cause single process to bail. */ if(error) { - ckt->CKTcurrentAnalysis = DOING_TRAN; - ckt->CKTstat->STATtranTime += SPfrontEnd->IFseconds() - startTime; - ckt->CKTstat->STATtranIter += ckt->CKTstat->STATnumIter - startIters; - ckt->CKTstat->STATtranDecompTime += ckt->CKTstat->STATdecompTime - - startdTime; - ckt->CKTstat->STATtranSolveTime += ckt->CKTstat->STATsolveTime - - startsTime; - ckt->CKTstat->STATtranLoadTime += ckt->CKTstat->STATloadTime - - startlTime; - ckt->CKTstat->STATtranCombTime += ckt->CKTstat->STATcombineTime - - startcTime; - ckt->CKTstat->STATtranSyncTime += ckt->CKTstat->STATsyncTime - - startkTime; + UPDATE_STATS(DOING_TRAN); return(error); } #ifdef XSPICE @@ -486,19 +487,7 @@ DCtran(CKTcircuit *ckt, ckt->CKTtime, ckt->CKTfinalTime, ckt->CKTminBreak); #endif SPfrontEnd->OUTendPlot (job->TRANplot); - ckt->CKTcurrentAnalysis = 0; - ckt->CKTstat->STATtranTime += SPfrontEnd->IFseconds() - startTime; - ckt->CKTstat->STATtranIter += ckt->CKTstat->STATnumIter - startIters; - ckt->CKTstat->STATtranDecompTime += ckt->CKTstat->STATdecompTime - - startdTime; - ckt->CKTstat->STATtranSolveTime += ckt->CKTstat->STATsolveTime - - startsTime; - ckt->CKTstat->STATtranLoadTime += ckt->CKTstat->STATloadTime - - startlTime; - ckt->CKTstat->STATtranCombTime += ckt->CKTstat->STATcombineTime - - startcTime; - ckt->CKTstat->STATtranSyncTime += ckt->CKTstat->STATsyncTime - - startkTime; + UPDATE_STATS(0); #ifdef WANT_SENSE2 if(ckt->CKTsenInfo && (ckt->CKTsenInfo->SENmode & TRANSEN)){ ckt->CKTsenInfo->SENmode = save; @@ -511,19 +500,7 @@ DCtran(CKTcircuit *ckt, } if(SPfrontEnd->IFpauseTest()) { /* user requested pause... */ - ckt->CKTcurrentAnalysis = DOING_TRAN; - ckt->CKTstat->STATtranTime += SPfrontEnd->IFseconds() - startTime; - ckt->CKTstat->STATtranIter += ckt->CKTstat->STATnumIter - startIters; - ckt->CKTstat->STATtranDecompTime += ckt->CKTstat->STATdecompTime - - startdTime; - ckt->CKTstat->STATtranSolveTime += ckt->CKTstat->STATsolveTime - - startsTime; - ckt->CKTstat->STATtranLoadTime += ckt->CKTstat->STATloadTime - - startlTime; - ckt->CKTstat->STATtranCombTime += ckt->CKTstat->STATcombineTime - - startcTime; - ckt->CKTstat->STATtranSyncTime += ckt->CKTstat->STATsyncTime - - startkTime; + UPDATE_STATS(DOING_TRAN); return(E_PAUSE); } resume: @@ -848,21 +825,7 @@ resume: newdelta = ckt->CKTdelta; error = CKTtrunc(ckt,&newdelta); if(error) { - ckt->CKTcurrentAnalysis = DOING_TRAN; - ckt->CKTstat->STATtranTime += - SPfrontEnd->IFseconds() - startTime; - ckt->CKTstat->STATtranIter += - ckt->CKTstat->STATnumIter - startIters; - ckt->CKTstat->STATtranDecompTime += ckt->CKTstat->STATdecompTime - - startdTime; - ckt->CKTstat->STATtranSolveTime += ckt->CKTstat->STATsolveTime - - startsTime; - ckt->CKTstat->STATtranLoadTime += ckt->CKTstat->STATloadTime - - startlTime; - ckt->CKTstat->STATtranCombTime += ckt->CKTstat->STATcombineTime - - startcTime; - ckt->CKTstat->STATtranSyncTime += ckt->CKTstat->STATsyncTime - - startkTime; + UPDATE_STATS(DOING_TRAN); return(error); } if(newdelta > .9 * ckt->CKTdelta) { @@ -871,21 +834,7 @@ resume: ckt->CKTorder = 2; error = CKTtrunc(ckt,&newdelta); if(error) { - ckt->CKTcurrentAnalysis = DOING_TRAN; - ckt->CKTstat->STATtranTime += - SPfrontEnd->IFseconds() - startTime; - ckt->CKTstat->STATtranIter += - ckt->CKTstat->STATnumIter - startIters; - ckt->CKTstat->STATtranDecompTime += - ckt->CKTstat->STATdecompTime - startdTime; - ckt->CKTstat->STATtranSolveTime += - ckt->CKTstat->STATsolveTime - startsTime; - ckt->CKTstat->STATtranLoadTime += - ckt->CKTstat->STATloadTime - startlTime; - ckt->CKTstat->STATtranCombTime += - ckt->CKTstat->STATcombineTime - startcTime; - ckt->CKTstat->STATtranSyncTime += - ckt->CKTstat->STATsyncTime - startkTime; + UPDATE_STATS(DOING_TRAN); return(error); } if(newdelta <= 1.05 * ckt->CKTdelta) { @@ -954,21 +903,7 @@ resume: (void)printf("delta at delmin\n"); #endif } else { - ckt->CKTcurrentAnalysis = DOING_TRAN; - ckt->CKTstat->STATtranTime += - SPfrontEnd->IFseconds() - startTime; - ckt->CKTstat->STATtranIter += - ckt->CKTstat->STATnumIter - startIters; - ckt->CKTstat->STATtranDecompTime += - ckt->CKTstat->STATdecompTime - startdTime; - ckt->CKTstat->STATtranSolveTime += - ckt->CKTstat->STATsolveTime - startsTime; - ckt->CKTstat->STATtranLoadTime += - ckt->CKTstat->STATloadTime - startlTime; - ckt->CKTstat->STATtranCombTime += - ckt->CKTstat->STATcombineTime - startcTime; - ckt->CKTstat->STATtranSyncTime += - ckt->CKTstat->STATsyncTime - startkTime; + UPDATE_STATS(DOING_TRAN); errMsg = CKTtrouble(ckt, "Timestep too small"); return(E_TIMESTEP); }