[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