Thank You very much! I don&#39;t know Why I was avoiding the ownprecond variant. May be just was scared to try. I think I&#39;ll use it. I also could just set the maximum number of iterations and watch the -ksp_monitor_true_residual, but it&#39;s not so convinient. Thank You!<br>
<br><div class="gmail_quote">2011/7/17 Barry Smith <span dir="ltr">&lt;<a href="mailto:bsmith@mcs.anl.gov">bsmith@mcs.anl.gov</a>&gt;</span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div class="im"><br>
On Jul 16, 2011, at 4:55 AM, áÌÅËÓÅÊ òÑÚÁÎÏ× wrote:<br>
<br>
&gt; Hi, Im solving a linear system with different methods for comparison goals.<br>
&gt; And I want to make Krylov iterative methods work until they reach the predefined value of the TRUE residual norm.<br>
&gt; So Im setting up tolerances (in fact only atol) with KSPSetTolerances(KSP, 1.e-50, 1.e-10, PETSC_DEFAULT, PETSC_DEFAULT) and watching for -ksp_monitor (or -ksp_monitor_true_residual).<br>
&gt; By default most of methods monitor their preconditioned residual norm and stop working then the preconditioned residual norm reaches the predefined value.<br>
&gt; That of course doesn&#39;t mean true residual norm also reached the value.<br>
&gt;<br>
&gt;<br>
&gt; 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.<br>

&gt;<br>
&gt; So what I have:<br>
&gt;<br>
&gt;<br>
&gt; 1)<br>
&gt; KSPSetNormType(KSP, KSP_NORM_UNPRECONDITIONED) is only supported by CG, RICHARDSON AND CHEBYCHEV (a said in user manual).<br>
&gt; So as it is expected, CG, RICHARDSON AND CHEBYCHEV print error message: &quot;No right preconditioning for KSPCG, KSPRICHARDSON, KSPCHEBYCHEV!&quot; and work šgreat with KSPSetNormType(KSP, KSP_NORM_UNPRECONDITIONED)<br>

&gt; Great!<br>
&gt;<br>
&gt; 2)<br>
&gt; 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)<br>
&gt; So it&#39;s ok.<br>
&gt;<br>
&gt;<br>
&gt; 3)<br>
&gt; KSPBCGS and KSPBICG don&#39;t support right preconditioning, so their true residual norm values cant be set as the finish point for iterating.<br>
&gt; Am I right?<br>
<br>
</div> š šActually in petsc-dev <a href="http://www.mcs.anl.gov/petsc/petsc-as/developers/index.html" target="_blank">http://www.mcs.anl.gov/petsc/petsc-as/developers/index.html</a> KSPBCGS does support both left and right preconditioning. KSPBICG is coded only for left preconditioning<br>

<div class="im">&gt;<br>
&gt;<br>
&gt; 4)<br>
&gt; KSPGMRES print error message: &quot;Use right preconditioning -ksp_right_pc if want unpreconditioned norm&quot;, when I use it with KSPSetNormType(KSP, KSP_NORM_UNPRECONDITIONED).<br>
&gt; And works great with šKSPSetPreconditionerSide(KSP, PC_RIGHT).<br>
&gt; As expected.<br>
&gt;<br>
&gt; 5)<br>
&gt; KSPCGS prints no error, when I use it with KSPSetNormType(KSP, KSP_NORM_UNPRECONDITIONED) and works with preconditioned norm.<br>
&gt; And works great with šKSPSetPreconditionerSide(KSP, PC_RIGHT).<br>
&gt; So it&#39;s ok.<br>
&gt;<br>
&gt; 6)<br>
&gt; KSPTFQMR and KSPTCQMR print no errors with any settings and works with preconditioned norm.<br>
&gt; Is there any methods to make KSPTFQMR use unpreconditioned norm or right preconditioning?<br>
<br>
</div> š These two algorithms actually do work with both left and right preconditioner but they are different than all the other methods in that:<br>
<br>
 š šThe &quot;residual norm&quot; computed in this algorithm is actually just an upper bound on the actual residual norm.<br>
 š š š š šThat is for left preconditioning it is a bound on the preconditioned residual and for right preconditioning<br>
 š š š š šit is a bound on the true residual.<br>
<br>
 š šI have added this information to their manual pages in petsc-dev for clarity.<br>
<br>
 š š Note that our GMRES is implemented only with left preconditioning and preconditioned residual norm but you can use the FGMRES which is implemented only for right preconditioning and the true residual norm for testing.<br>

<br>
<br>
 š šIf you not particularly interested in speed and just want the iterations to stop when the true residual norm reaches some tolerance you can easily provide your own KSPConvergedTest() by calling KSPSetConvergenceTest() and writing a routine that calls KSPBuildResidual() (which always builds the true residual) and compute the norm of the result.<br>

<font color="#888888"><br>
 š šBarry<br>
</font><div><div></div><div class="h5"><br>
<br>
&gt;<br>
&gt;<br>
&gt; Please help me to understand situations 3) and 6)<br>
&gt;<br>
&gt; Thank in advance!<br>
&gt;<br>
&gt; --<br>
&gt; Best regards,<br>
&gt; Alexey Ryazanov<br>
&gt; ______________________________________<br>
&gt; Nuclear Safety Institute of Russian Academy of Sciences<br>
&gt;<br>
&gt;<br>
<br>
</div></div></blockquote></div><br>