<div>Just to share the experience. It is indeed very expansive to fetch the true residual out. I print the ell one norm by set up my own monitor, as well as the -ksp_monitor_true_residual. <br></div>
<div>An interesting part is that in this problem, ell_1 norm and ell_2 norm have almost the same error-reduction history, in the sense of order of magnitude..</div>
<div> </div>
<div>Yan <br></div>
<div class="gmail_quote">On Mon, Sep 21, 2009 at 3:29 PM, Barry Smith <span dir="ltr"><<a href="mailto:bsmith@mcs.anl.gov">bsmith@mcs.anl.gov</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid"><br> Likely it is too expensive to use the 1-norm for stopping criteria for fgmres unless you can reformulate fgmres to give you back the residual efficiently.<br>
<font color="#888888"><br> Barry</font>
<div>
<div></div>
<div class="h5"><br><br>On Sep 21, 2009, at 2:04 PM, Ryan Yan wrote:<br><br>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid">Hi Barry,<br>Thanks for the suggestion.<br><br>I am using FGMRES as the krylov solver. Is there a direct access to the residual vector for FGMRES. I guess the answer is yes, since that's the Krylov method which supports right preconditioning and provides the true residual 2_Norm monitor, right?<br>
<br>If so, which header should I include to fetch the residual directly from KSP_FGMRES?<br><br>Yan<br><br><br><br>On Mon, Sep 21, 2009 at 2:43 PM, Barry Smith <<a href="mailto:bsmith@mcs.anl.gov" target="_blank">bsmith@mcs.anl.gov</a>> wrote:<br>
<br> Yan,<br><br> This depends on the Krylov method being used. For example with GMRES the residual vector is NOT available at each iteration (the 2-norm of the residual is approximated via a recurrence relationship).<br>
<br> You can call KSPBuildResidual() to have the true residual computed for you. Note: it is expensive because it actually builds the current solution and computes r = b - A*x<br><br> What we intended is that if you want the residual efficiently for example for the CG method, you determine what Krylov method you want to use the include the appropriate private include file and access the residual directly from the data structure. This would be efficient. (but like I said does not work for all methods). For cg include src/ksp/ksp/impls/cg/cgctx.h<br>
<br><br> Barry<br><br><br>On Sep 21, 2009, at 12:44 PM, Ryan Yan wrote:<br><br>Hi All,<br>The following question is only for test and comparison reason.<br><br>Is there a command line option to set up using 1-Norm(sum of absolute value of residuals) as convergence monitor and test.<br>
<br>Alternatively, if I can get the residual "r" out at the end of each iteration, then it is going to be much simpler, since I can just call VecNorm(r, NORM_1, &r_ell1) and pass the r_ell1 into the convergence monitor and test. Can anyone inform me if PETSc has an interface for the resuidual r?<br>
<br>Or one has to call the convergence test:<br>MyKSPConverged(ksp,n,rnorm,flag,dummy);<br>and following the steps:<br>1. fetch the exact solution:<br><br>KSPBuildSolution(ksp,PETSC_NULL_OBJECT,x,ierr)<br><br>2. calculate the residual:<br>
<br>pass the Right Hand side and the Matrix in to calculate the 1-Norm. But this step is *not* obvious, since the matrix and rhs is already distributed over each processes.<br><br>3. set up the convergence test based on the 1_Norm residual.<br>
<br><br>Thank you very much,<br><br><br>Yan<br><br><br></blockquote><br></div></div></blockquote></div><br>