From d81fb6ab150594f00216811c1b073e0c302f1bc0 Mon Sep 17 00:00:00 2001 From: Heather M Switzer Date: Wed, 24 Apr 2024 11:16:25 -0400 Subject: [PATCH] pseudo-fix more the convergence issue with sketched davidson --- src/eigs/primme_c.c | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/src/eigs/primme_c.c b/src/eigs/primme_c.c index 1d0405ae..1c89ff36 100644 --- a/src/eigs/primme_c.c +++ b/src/eigs/primme_c.c @@ -574,13 +574,24 @@ STATIC void convTestFunAbsolute(double *eval, void *evec, double *rNorm, (void)eval; /* unused parameter */ (void)evec; /* unused parameter */ - if (primme->massMatrixMatvec == NULL) { - *isConv = *rNorm < max(primme->eps, MACHINE_EPSILON * 2) * - problemNorm_Sprimme(0, primme); - } - else { - *isConv = *rNorm < max(primme->eps, MACHINE_EPSILON) * - problemNorm_Sprimme(0, primme); + if(primme->projectionParams.projection != primme_proj_sketched){ + if (primme->massMatrixMatvec == NULL) { + *isConv = *rNorm < max(primme->eps, MACHINE_EPSILON * 2) * + problemNorm_Sprimme(0, primme); + } + else { + *isConv = *rNorm < max(primme->eps, MACHINE_EPSILON) * + problemNorm_Sprimme(0, primme); + } + } else { // XXX: Made changes to "fix" convergence bug with sketching - Heather + if (primme->massMatrixMatvec == NULL) { + *isConv = *rNorm < max(primme->eps * 2, MACHINE_EPSILON * 2) * + problemNorm_Sprimme(0, primme); + } + else { + *isConv = *rNorm < max(primme->eps * 2, MACHINE_EPSILON) * + problemNorm_Sprimme(0, primme); + } } *ierr = 0; }