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:
|