Hi,
I am running CG with a Jacobi preconditioner. I have a monitor function that
prints the residual and saves the solution at every iteration. To get the
solution at every iteration, I am using the function KSPBuildSolution. I am
setting the KSP norm as UNPRECONDITIONED.
The convergence test is consistent with the 2-norm of KSPBuildResidual. However
this norm does not match the 2-norm of the residual computed explicitly from
the solution (obtained with KSPBuildSolution). It also does not match the
preconditioned norm. What norm is it computing?
When the CG is not preconditioned, the norm of KSPBuildResidual and the norm of
the residual computed from the solution match, as I expected.
This is KSPView():
KSP Object: 1 MPI process
type: cg
variant HERMITIAN
maximum iterations=100, nonzero initial guess
tolerances: relative=1e-08, absolute=1e-08, divergence=10000.
left preconditioning
using UNPRECONDITIONED norm type for convergence test
PC Object: 1 MPI process
type: jacobi
type DIAGONAL
linear system matrix = precond matrix:
Mat Object: 1 MPI process
type: nest
rows=524, cols=524
Matrix object:
type=nest, rows=3, cols=3
MatNest structure:
(0,0) : type=mpiaij, rows=176, cols=176
(0,1) : NULL
(0,2) : NULL
(1,0) : NULL
(1,1) : type=mpiaij, rows=172, cols=172
(1,2) : NULL
(2,0) : NULL
(2,1) : NULL
(2,2) : type=mpiaij, rows=176, cols=176
Cheers,
Elena Moral Sánchez