Hi, Im solving a linear system with different methods for comparison goals.
<div>And I want to make Krylov iterative methods work until they reach the predefined value of the <b>TRUE</b> residual norm.</div><div>So Im setting up tolerances (in fact only <b>atol</b>) with KSPSetTolerances(KSP, 1.e-50, 1.e-10, PETSC_DEFAULT, PETSC_DEFAULT)<span class="Apple-style-span" style="white-space: pre-wrap;"> and watching for -ksp_monitor (or -ksp_monitor_true_residual).</span></div>
<div><span class="Apple-style-span" style="white-space: pre-wrap;">By default most of methods monitor their preconditioned residual norm and stop working then the preconditioned residual norm reaches the predefined value. </span></div>
<div><span class="Apple-style-span" style="white-space: pre-wrap;">That of course doesn&#39;t mean true residual norm also reached the value.</span></div><div><span class="Apple-style-span" style="white-space: pre-wrap;"><br>
</span></div><div><span class="Apple-style-span" style="white-space: pre-wrap;">So I need to change this behavior and use KSPSetNormType(KSP, KSP_NORM_UNPRECONDITIONED) to use unpreconditioned residual or KSPSetPreconditionerSide(KSP, PC_RIGHT) to make preconditioned residual be the same as unpreconditioned and achieve my goal anyway.</span></div>
<div><span class="Apple-style-span" style="white-space: pre-wrap;"><br></span></div><div><span class="Apple-style-span" style="white-space: pre-wrap;">So what I have:</span></div><div><span class="Apple-style-span" style="white-space: pre-wrap;"><br>
</span></div><div><span class="Apple-style-span" style="white-space: pre-wrap;"><meta http-equiv="content-type" content="text/html; charset=utf-8">1) </span></div><div><span class="Apple-style-span" style="white-space: pre-wrap;">KSPSetNormType(KSP, KSP_NORM_UNPRECONDITIONED) is only supported by CG, RICHARDSON AND CHEBYCHEV (a said in user manual).</span></div>
<div><span class="Apple-style-span" style="white-space: pre-wrap;">So as it is expected, </span><span class="Apple-style-span" style="white-space: pre-wrap; ">CG, RICHARDSON AND CHEBYCHEV print error message: &quot;No right preconditioning for KSPCG</span><span class="Apple-style-span" style="white-space: pre-wrap; ">, KSPRICHARDSON</span><span class="Apple-style-span" style="white-space: pre-wrap; ">, KSPCHEBYCHEV!&quot; and work  great with </span><span class="Apple-style-span" style="white-space: pre-wrap; ">KSPSetNormType(KSP, KSP_NORM_UNPRECONDITIONED)</span></div>
<div><span class="Apple-style-span" style="white-space: pre-wrap;">Great!</span></div><div><span class="Apple-style-span" style="white-space: pre-wrap; "><br></span></div><div><span class="Apple-style-span" style="white-space: pre-wrap;">2)</span></div>
<div><span class="Apple-style-span" style="white-space: pre-wrap;">Practically the same behavior does KSPLSQR (except the great work, actually it doesn&#39;t work at all with my linear system, but I don&#39;t care about lsqr) </span></div>
<div><span class="Apple-style-span" style="white-space: pre-wrap;"><meta http-equiv="content-type" content="text/html; charset=utf-8">So it&#39;s ok.</span></div><div><span class="Apple-style-span" style="white-space: pre-wrap;"><br>
</span></div><div><span class="Apple-style-span" style="white-space: pre-wrap;">3)</span></div><div><span class="Apple-style-span" style="white-space: pre-wrap;">KSPBCGS and KSPBICG don&#39;t support right preconditioning, so their true residual norm values cant be set as the finish point for iterating. </span></div>
<div><span class="Apple-style-span" style="white-space: pre-wrap;">Am I right?</span></div><div><span class="Apple-style-span" style="white-space: pre-wrap;"><br></span></div><div><span class="Apple-style-span" style="white-space: pre-wrap;">4)</span></div>
<div><span class="Apple-style-span" style="white-space: pre-wrap;">KSPGMRES </span><span class="Apple-style-span" style="white-space: pre-wrap; ">print error message: </span><span class="Apple-style-span" style="white-space: pre-wrap; ">&quot;Use right preconditioning -ksp_right_pc if want unpreconditioned norm&quot;, when I use it with </span><span class="Apple-style-span" style="white-space: pre-wrap; ">KSPSetNormType(KSP, KSP_NORM_UNPRECONDITIONED).</span></div>
<div><span class="Apple-style-span" style="white-space: pre-wrap; ">And works great with  </span><span class="Apple-style-span" style="white-space: pre-wrap; ">KSPSetPreconditionerSide(KSP, PC_RIGHT). </span></div><div><span class="Apple-style-span" style="white-space: pre-wrap; ">As expected.</span></div>
<div><span class="Apple-style-span" style="white-space: pre-wrap; "><br></span></div><div><span class="Apple-style-span" style="white-space: pre-wrap; ">5)</span></div><div><span class="Apple-style-span" style="white-space: pre-wrap; ">KSPCGS prints no error, when I use it with </span><span class="Apple-style-span" style="white-space: pre-wrap; ">KSPSetNormType(KSP, KSP_NORM_UNPRECONDITIONED) and works with preconditioned norm.</span></div>
<div><span class="Apple-style-span" style="white-space: pre-wrap;"><span class="Apple-style-span" style="white-space: normal; "><span class="Apple-style-span" style="white-space: pre-wrap; ">And works great with  </span><span class="Apple-style-span" style="white-space: pre-wrap; ">KSPSetPreconditionerSide(KSP, PC_RIGHT). </span></span></span></div>
<div><span class="Apple-style-span" style="white-space: pre-wrap;"><span class="Apple-style-span" style="white-space: normal; "><span class="Apple-style-span" style="white-space: pre-wrap; ">So it&#39;s ok.</span></span></span></div>
<div><span class="Apple-style-span" style="white-space: pre-wrap;"><span class="Apple-style-span" style="white-space: normal; "><span class="Apple-style-span" style="white-space: pre-wrap; "><br></span></span></span></div>
<div><span class="Apple-style-span" style="white-space: pre-wrap;"><span class="Apple-style-span" style="white-space: normal; "><span class="Apple-style-span" style="white-space: pre-wrap; ">6)</span></span></span></div><div>
<span class="Apple-style-span" style="white-space: pre-wrap;"><span class="Apple-style-span" style="white-space: normal; "><span class="Apple-style-span" style="white-space: pre-wrap; ">KSPTFQMR and KSPTCQMR print no errors with any settings and works with preconditioned norm.</span></span></span></div>
<div><span class="Apple-style-span" style="white-space: pre-wrap;">Is there any methods to make KSPTFQMR use unpreconditioned norm or right preconditioning?</span></div><div><span class="Apple-style-span" style="white-space: pre-wrap;"><br>
</span></div><div><span class="Apple-style-span" style="white-space: pre-wrap;">Please help me to understand situations 3) and 6)</span></div><div><span class="Apple-style-span" style="white-space: pre-wrap;"><br></span></div>
<div><span class="Apple-style-span" style="white-space: pre-wrap;">Thank in advance!</span></div><br>-- <br><span style="border-collapse:collapse;font-family:arial, sans-serif;font-size:13px"><div><span style="border-collapse:collapse;font-family:arial, sans-serif;font-size:13px"><div>
Best regards,</div><div>Alexey Ryazanov</div><div>______________________________________</div><div><span style="color:rgb(51, 51, 51);font-family:Arial, Helvetica, sans-serif"><font size="1">Nuclear Safety Institute of Russian Academy of Sciences </font></span></div>
</span></div><div><br></div></span><br>