[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Maintaining accuracy while increasing number of processors




   Billy,

    By default GMRES and most of the other KSP solvers stop after a reduction
in the 2-norm of the PRECONDITIONED residual by a factor of 10^-5. See the manual 
page for KSPDefaultConverged() http://www-unix.mcs.anl.gov/petsc/petsc-as/snapshots/petsc-current/docs/manualpages/KSP/KSPDefaultConverged.html 

   There are a couple of things to consider:
1) even with the exact same preconditioner (for example Jacobi) the convergence history
will be slightly different since the computations are done in a different order and so the floating
point results will be slightly different. The converged SOLUTIONS for a different number of
processes are ALL correct, even though they have different values since the calculations 
are done in floating point. As you decrease the tolerance factors you will see the SOLUTIONS
for different number of processes all converge to the same answer (i.e. the solutions will
share more and more significant digits.)

2) Most parallel preconditioners (even in exact precision) are different for a different number of
processes, for example block Jacobi and the additive Schwarz method. So you get all the
issues of 1) plus the fact that the convergence histories with different number of processes
will be different. Again IF the solver is converging than the answers from any number of
processes are equally correct. Also as you decrease the convergence tolerances you will
see more and more common significant digits in the different solutions. Sometimes 
with a larger number of processes the preconditioner may stop working and you do not
get convergence of GMRES and then, of course, the "answer" is garbage. You should always
call KSPGetConvergedReason() to  make sure the solver has converged.

   Barry




On Dec 29, 2007, at 5:56 PM, Billy Araújo wrote:


Hi,

I need to know more about the PETSc parallel GMRES solver. Does the solver maintain the same accuracy independent of the number of processors. For example, if I subdivide a mesh with 1000 unkowns into 10, 100, 1000 processors should I expect to get always the same result? If no, why not? Are there any studies on this?

Thank you,

Billy.