<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css" style="display:none;"><!-- P {margin-top:0;margin-bottom:0;} --></style>
</head>
<body dir="ltr">
<div id="divtagdefaultwrapper" style="font-size:12pt;color:#000000;font-family:Calibri,Helvetica,sans-serif;" dir="ltr">
<p></p>
<div>
<p>Dear Barry,</p>
<p>Thanks for the fast answer. Unfortunately in my case the discrepancy is huge. With the flags</p>
<blockquote>
<p> -ksp_monitor_true_residual -ksp_norm_type unpreconditioned</p>
</blockquote>
<p>this is the output:</p>
<blockquote>
<p>  0 KSP unpreconditioned resid norm 5.568889644229e-01 true resid norm 5.568889644229e-01 ||r(i)||/||b|| 1.000000000000e+00<br>
  1 KSP unpreconditioned resid norm 2.831772665189e-01 true resid norm 2.831772665189e-01 ||r(i)||/||b|| 5.084986139245e-01<br>
  2 KSP unpreconditioned resid norm 1.875950094147e-01 true resid norm 1.875950094147e-01 ||r(i)||/||b|| 3.368625011435e-01</p>
</blockquote>
<p>and this is the output of my own monitor function:</p>
<blockquote>
<p>Iter 0/10 | res = 5.57e-01/1.00e-08 | 0.0 s<br>
difference KSPBuildSolution and u: 0.0<br>
UNPRECONDITIONED norm:  0.5568889644229376<br>
PRECONDITIONED norm:  2.049041078011257<br>
KSPBuildResidual 2-norm: 0.5568889644229299<br>
difference KSPBuildResidual and b-A(KSPBuildSolution): 6.573603152700697e-13<br>
<br>
Iter 1/10 | res = 2.83e-01/1.00e-08 | 0.0 s<br>
difference KSPBuildSolution and u: 0.0<br>
UNPRECONDITIONED norm:  0.7661983589104541<br>
PRECONDITIONED norm:  2.7387602134717137<br>
KSPBuildResidual 2-norm: 0.2831772665189212<br>
difference KSPBuildResidual and b-A(KSPBuildSolution): 0.1700718741085172<br>
<br>
Iter 2/10 | res = 1.88e-01/1.00e-08 | 0.0 s<br>
difference KSPBuildSolution and u: 0.0<br>
UNPRECONDITIONED norm:  0.7050518160900253<br>
PRECONDITIONED norm:  2.421773833445645<br>
KSPBuildResidual 2-norm: 0.18759500941469456<br>
difference KSPBuildResidual and b-A(KSPBuildSolution): 0.19327058976599623</p>
</blockquote>
<p>Here u is the vector in the KSPSolve. </p>
<p>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.</p>
<p>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?</p>
<p><br>
</p>
<p>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.</p>
<p>Thanks for the help.</p>
<p>Cheers,</p>
<p>Elena</p>
</div>
<p></p>
<p><br>
</p>
<p><br>
</p>
<p><br>
</p>
<p><br>
</p>
<p><br>
</p>
<div class="moz-cite-prefix">On 11/4/25 03:01, Barry Smith wrote:<br>
</div>
<blockquote type="cite">
<div>    0 KSP unpreconditioned resid norm 1.265943996096e+00 true resid norm 1.265943996096e+00 ||r(i)||/||b|| 1.000000000000e+00</div>
<div>My monitor 0 1.265943996096e+00</div>
</blockquote>
</div>
</body>
</html>