Sorry, FGMRES does not need to compute residual expilictly. Please forget about what I just asked.
Yan On Mon, Sep 21, 2009 at 3:04 PM, Ryan Yan <vyan2000 at gmail.com> 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 >>> >> >> > -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20090921/21d4cc79/attachment.htm>
