ell1 norm convergence test

Barry Smith bsmith at mcs.anl.gov
Mon Sep 21 14:29:54 CDT 2009


    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.

    Barry

On Sep 21, 2009, at 2:04 PM, Ryan Yan wrote:

> Hi Barry,
> Thanks for the suggestion.
>
> 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?
>
> If so, which header should I include to fetch the residual directly  
> from KSP_FGMRES?
>
> Yan
>
>
>
> On Mon, Sep 21, 2009 at 2:43 PM, Barry Smith <bsmith at mcs.anl.gov>  
> wrote:
>
>  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
>
>



More information about the petsc-users mailing list