From d0a0cb4601ad0f480b3b5a6db1109fbe542bdaa3 Mon Sep 17 00:00:00 2001 From: Heather M Switzer Date: Mon, 4 Mar 2024 10:36:51 -0500 Subject: [PATCH] A couple bug fixes --- examples/ex_eigs_dparTests.c | 2 +- src/eigs/lanczos.c | 13 +++++++------ src/eigs/main_iter.c | 2 +- src/eigs/primme_c.c | 2 ++ 4 files changed, 11 insertions(+), 8 deletions(-) diff --git a/examples/ex_eigs_dparTests.c b/examples/ex_eigs_dparTests.c index 96e2247b..96dea66a 100644 --- a/examples/ex_eigs_dparTests.c +++ b/examples/ex_eigs_dparTests.c @@ -122,7 +122,7 @@ int main (int argc, char *argv[]) { primme.numEvals = 10; /* Number of wanted eigenpairs */ primme.maxBlockSize = 1; primme.printLevel = 4; - primme.minRestartSize = 10; + //primme.minRestartSize = 10; primme.locking = 0; primme.eps = 1e-1; /* ||r|| <= eps * ||matrix|| */ primme.aNorm = 1.0; diff --git a/src/eigs/lanczos.c b/src/eigs/lanczos.c index ec463e57..ece55667 100644 --- a/src/eigs/lanczos.c +++ b/src/eigs/lanczos.c @@ -124,7 +124,7 @@ int print_lanczos_timings_Sprimme(primme_context ctx) { printf("Restarts : %-" PRIMME_INT_P "\n", primme->stats.numRestarts); printf("Matvecs : %-" PRIMME_INT_P "\n", primme->stats.numMatvecs); printf("Preconds : %-" PRIMME_INT_P "\n", primme->stats.numPreconds); - printf("Elapsed Time : %-22.10E\n", primme->stats.elapsedTime); + printf("Elapsed Time : %-22.10E\n", primme_wTimer() - primme->stats.elapsedTime); printf("MatVec Time : %-22.10E\n", primme->stats.timeMatvec); printf("Precond Time : %-22.10E\n", primme->stats.timePrecond); printf("Ortho Time : %-22.10E\n", primme->stats.timeOrtho); @@ -390,7 +390,6 @@ int lanczos_Sprimme(HEVAL *evals, SCALAR *evecs, PRIMME_INT ldevecs, } /* End non-sketching */ /* Check how many pairs have converged basis in approximate residual */ - numConverged = 0; for(j = 0; j < primme->numEvals; j++) { if(j < numEvals) { resNorms[j] = fabs(H[(i-blockSize)*ldH + i]*hVecs[(i+blockSize)*j+(i+blockSize)-1]); @@ -398,16 +397,18 @@ int lanczos_Sprimme(HEVAL *evals, SCALAR *evecs, PRIMME_INT ldevecs, resNorms[j] = 1.0; } } + numConverged = 0; CHKERR(globalSum_Rprimme(resNorms, numEvals, ctx)); - if(resNorms[j] < primme->aNorm*primme->eps) numConverged++; + for(j = 0; j < primme->numEvals; j++) if(resNorms[j] < primme->aNorm*primme->eps) numConverged++; /* FOR TESTING: Print residual information */ if(primme->procID == 0){ + printf("BasisSize %ld: NumConverged = %d, Convergence Tolerance = %.6E (%.6E x %.6E)\n", i+blockSize, numConverged, primme->aNorm*primme->eps, primme->aNorm, primme->eps); for(j = 0; j < primme->numEvals; j++){ if(j < numEvals) { - printf("Iteration %ld Eval[%ld] = %lf, ResNorm[%ld] = %.6E\n", i, j, hVals[j], j, resNorms[j]); + printf("BasisSize %ld Eval[%ld] = %lf, ResNorm[%ld] = %.6E\n", i+blockSize, j, hVals[j], j, resNorms[j]); } else { - printf("Iteration %ld Eval[%ld] = %lf, ResNorm[%ld] = %.6E\n", i, j, 0.0, j, 0.0); + printf("BasisSize %ld Eval[%ld] = %lf, ResNorm[%ld] = %.6E\n", i+blockSize, j, 0.0, j, 0.0); } } } @@ -456,7 +457,7 @@ int lanczos_Sprimme(HEVAL *evals, SCALAR *evecs, PRIMME_INT ldevecs, primme->stats.numOuterIterations++; //Report timings - if(primme->procID == 0 && primme->stats.numOuterIterations % 100 == 0) CHKERR(print_lanczos_timings_Sprimme(ctx)); + if(primme->procID == 0 && (primme->stats.numOuterIterations % 100 == 0 || i % 100 == 0)) CHKERR(print_lanczos_timings_Sprimme(ctx)); } /* End basis build */ diff --git a/src/eigs/main_iter.c b/src/eigs/main_iter.c index c7667444..463ad478 100644 --- a/src/eigs/main_iter.c +++ b/src/eigs/main_iter.c @@ -125,7 +125,7 @@ int print_timings_Sprimme(primme_context ctx) { printf("Restarts : %-" PRIMME_INT_P "\n", primme->stats.numRestarts); printf("Matvecs : %-" PRIMME_INT_P "\n", primme->stats.numMatvecs); printf("Preconds : %-" PRIMME_INT_P "\n", primme->stats.numPreconds); - printf("Elapsed Time : %-22.10E\n", primme->stats.elapsedTime); + printf("Elapsed Time : %-22.10E\n", primme_wTimer() - primme->stats.elapsedTime); printf("MatVec Time : %-22.10E\n", primme->stats.timeMatvec); printf("Precond Time : %-22.10E\n", primme->stats.timePrecond); printf("Ortho Time : %-22.10E\n", primme->stats.timeOrtho); diff --git a/src/eigs/primme_c.c b/src/eigs/primme_c.c index 1d0405ae..bc6bfb7f 100644 --- a/src/eigs/primme_c.c +++ b/src/eigs/primme_c.c @@ -288,6 +288,7 @@ int wrapper_Sprimme(void *evals, void *evecs, void *resNorms, /* zero out the timer */ double t0 = primme_wTimer(); + primme->stats.elapsedTime = t0; // XXX: Added this for debugging purposes - Heather /* Set some defaults for sequential programs */ @@ -547,6 +548,7 @@ STATIC int check_input( } } + printf("Return = %d\n", ret); return ret; }