<div dir="ltr"><br><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
-pc_type mg -mg_levels_ksp_type richardson -mg_levels_pc_type jacobi -mg_levels_ksp_max_it 2<br>
<br>
then I get identical convergence in serial and parallel<br>
<br></blockquote><div><br></div><div>Good. That's the correct result.<br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
if, however, I run with<br>
<br>
-pc_type mg -mg_levels_ksp_type chebyshev -mg_levels_pc_type sor -mg_levels_ksp_max_it 2<br>
(the default according to -ksp_view)<br>
<br>
then I get very differing convergence in serial and parallel as described.<br>
<div class=""><br></div></blockquote><div> </div>It's normal that the behaviour is different. The PETSc SOR implementation is not parallel. It only performs SOR on your local subdomain.<br><div><br> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div class="">
> 1) How did you configure the coarse grid solver in the serial and parallel test? Are they consistent?<br>
<br>
</div>I initially just used the default (which is LU in serial and redundant with LU in parallel), when I rerun with:<br>
<br>
-pc_type mg -ksp_type fgmres -mg_coarse_ksp_type gmres -mg_coarse_pc_type jacobi -mg_coarse_ksp_max_it 100<br>
<br>
Which should be the same in serial and parallel, I again see bad behaviour in parallel.<br>
<div><br></div></blockquote><div><br></div><div>I see that this is a nested Krylov solve. Using fgmres on the outer sometimes is not enough. I've had problems where I needed to use the more stable orthogonalization routine in gmres.<br>
<br>Do you also observe different convergence behaviour  (serial versus parallel) with these choices<br>1) -mg_coarse_ksp_type gmres -mg_coarse_pc_type jacobi -mg_coarse_ksp_max_it 1<br><br>2) -mg_coarse_ksp_type gmres -mg_coarse_pc_type jacobi -mg_coarse_ksp_max_it 100 -mg_coarse_ksp_gmres_modifiedgramschmidt<br>
</div><div><br>3) -mg_coarse_ksp_type cg -mg_coarse_pc_type jacobi -mg_coarse_ksp_max_it 100<br><br> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div class="">
> 2) Does using one level with PCMG and a chebyshev smoother give the same answers in serial and parallel? If you precondition with jacobi, the residuals in serial and parallel should be very similar. If this test didn't pass, try a 1 level method again again without the preconditioner (i.e. just apply chebyshev). If the residuals are really different between these runs, there is likely something wrong/inconsistent with the definition of the operator on each level, or the way the boundary conditions are imposed.<br>

<br>
</div>For these tests, I use the following options:<br>
<br>
-pc_type mg -ksp_type fgmres -pc_mg_levels 2 -mg_coarse_ksp_type gmres -mg_coarse_pc_type jacobi -mg_coarse_ksp_max_it 100<br>
<br>
I then tried the following options for the smoother:<br>
<br>
-mg_levels_ksp_type chebyshev -mg_levels_pc_type sor -mg_levels_ksp_max_it 2<br>
<br>
Works in serial, doesn't converge well in parallel.<br>
<br></blockquote><div><br></div><div>Sure - see above.<br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
-mg_levels_ksp_type chebyshev -mg_levels_pc_type jacobi -mg_levels_ksp_max_it 2<br>
<br>
Converges veery slowly in both serial and parallel (but has the same convergence in both cases).<br>
<br>
-mg_levels_ksp_type chebyshev -mg_levels_pc_type none -mg_levels_ksp_max_it 2<br>
<br>
Converges well in both serial and parallel (identical convergence behaviour).<br>
<div class=""><br></div></blockquote><div><br></div><div>Sure - this wasn't a convergence test. I just wanted to see that the methods which should be identical in serial and parallel are in fact behaving as expected. Seems there are. So I'm included to think the problem is associated with having nested Krylov solves.<br>
</div><div><br><br></div><div>Cheers,<br></div><div>  Dave<br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div class="">
<br>
> 3) Is the code valgrind clean?<br>
<br>
</div>It's python-based, so it's a little difficult to say.  It appears to be so.<br>
<br>
Cheers,<br>
<br>
Lawrence<br>
</blockquote></div><br></div></div>