# ell1 norm convergence test

Barry Smith bsmith at mcs.anl.gov
Mon Sep 21 13:43:53 CDT 2009

```   Yan,

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).

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

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

Barry

On Sep 21, 2009, at 12:44 PM, Ryan Yan wrote:

> Hi All,
> The following question is only for test and comparison reason.
>
> Is there a command line option to set up using 1-Norm(sum of
> absolute value of residuals)  as convergence monitor and test.
>
> 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?
>
> Or one has to call the convergence test:
> MyKSPConverged(ksp,n,rnorm,flag,dummy);
> and following the steps:
> 1. fetch the exact solution:
>
> KSPBuildSolution(ksp,PETSC_NULL_OBJECT,x,ierr)
>
> 2. calculate the residual:
>
> 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.
>
> 3. set up the convergence test based on the 1_Norm residual.
>
>
> Thank you very much,
>
>
> Yan

```