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