Dear Barry,
Thanks for the fast answer. Unfortunately in my case the discrepancy is huge.
With the flags
-ksp_monitor_true_residual -ksp_norm_type unpreconditioned
this is the output:
0 KSP unpreconditioned resid norm 5.568889644229e-01 true resid norm
5.568889644229e-01 ||r(i)||/||b|| 1.000000000000e+00
1 KSP unpreconditioned resid norm 2.831772665189e-01 true resid norm
2.831772665189e-01 ||r(i)||/||b|| 5.084986139245e-01
2 KSP unpreconditioned resid norm 1.875950094147e-01 true resid norm
1.875950094147e-01 ||r(i)||/||b|| 3.368625011435e-01
and this is the output of my own monitor function:
Iter 0/10 | res = 5.57e-01/1.00e-08 | 0.0 s
difference KSPBuildSolution and u: 0.0
UNPRECONDITIONED norm: 0.5568889644229376
PRECONDITIONED norm: 2.049041078011257
KSPBuildResidual 2-norm: 0.5568889644229299
difference KSPBuildResidual and b-A(KSPBuildSolution): 6.573603152700697e-13
Iter 1/10 | res = 2.83e-01/1.00e-08 | 0.0 s
difference KSPBuildSolution and u: 0.0
UNPRECONDITIONED norm: 0.7661983589104541
PRECONDITIONED norm: 2.7387602134717137
KSPBuildResidual 2-norm: 0.2831772665189212
difference KSPBuildResidual and b-A(KSPBuildSolution): 0.1700718741085172
Iter 2/10 | res = 1.88e-01/1.00e-08 | 0.0 s
difference KSPBuildSolution and u: 0.0
UNPRECONDITIONED norm: 0.7050518160900253
PRECONDITIONED norm: 2.421773833445645
KSPBuildResidual 2-norm: 0.18759500941469456
difference KSPBuildResidual and b-A(KSPBuildSolution): 0.19327058976599623
Here u is the vector in the KSPSolve.
After the first iteration, the residual computed from KSPBuildSolution and the
residual from KSPBuildResidual diverge. They are the same when I run the same
code without preconditioner.
Another observation is that after convergence (wrt. unpreconditioned norm ==
2-norm of KSPBuildResidual) the solution with and without preconditioner looks
quite different. How is this possible if my preconditioner is SPD?
By the way, where can I find your implementation of "My monitor" in
src/snes/tutorials/ex5.c? I tried to look at the Gitlab repository but could
not find it.
Thanks for the help.
Cheers,
Elena
On 11/4/25 03:01, Barry Smith wrote:
0 KSP unpreconditioned resid norm 1.265943996096e+00 true resid norm
1.265943996096e+00 ||r(i)||/||b|| 1.000000000000e+00
My monitor 0 1.265943996096e+00