[petsc-dev] strangness in Chebyshev estimate of eigenvalues
Barry Smith
bsmith at mcs.anl.gov
Sat Aug 22 17:35:36 CDT 2015
From KSPSolve_Chebyshev()
X = ksp->work[0];
if (cheb->random) {
B = ksp->work[1];
ierr = VecSetRandom(B,cheb->random);CHKERRQ(ierr);
} else {
B = ksp->vec_rhs;
}
ierr = KSPSolve(cheb->kspest,B,X);CHKERRQ(ierr);
if (ksp->guess_zero) {
ierr = VecZeroEntries(X);CHKERRQ(ierr);
}
ierr = KSPChebyshevComputeExtremeEigenvalues_Private(cheb->kspest,&min,&max);CHKERRQ(ierr);
This seems to do strange stuff with the initial guess for the eigenanalysis. ksp->work[0] is a work vector used within the Chebyshev algorithm, so at this point in the code it will have just whatever stuff it had in it from a previous Chebyshev solver or a zero the first time through. It seems bad to use this vector as the initial guess for estimator. Then AFTER the KSPSolve() it zeros ksp->work[0], sometimes? If the original system being solved has zero initial guess, even though the values in X will not be used again. WTF?
Shouldn't the code either
1) zero X = ksp->work[0] everytime BEFORE the KSPSolve() or
2) zero X if ksp->guess_zero and otherwise copy into X the initial guess vec_sol from the caller before computing the eigenvalues to use that initial guess in estimating the eigenvalues?
Barry
More information about the petsc-dev
mailing list