> On Nov 4, 2025, at 4:06 AM, Moral Sanchez, Elena > <[email protected]> wrote: > > 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.
I thought I attached it to the email. > 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
