<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Apr 26, 2017 at 7:30 PM, Barry Smith <span dir="ltr"><<a href="mailto:bsmith@mcs.anl.gov" target="_blank">bsmith@mcs.anl.gov</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br>
  Yes, you asked for LU so it used LU!<br>
<br>
   Of course for smaller coarse grids and large numbers of processes this is very inefficient.<br>
<br>
   The default behavior for GAMG is probably what you want. In that case it is equivalent to<br>
-mg_coarse_pc_type bjacobi --mg_coarse_sub_pc_type lu.  But GAMG tries hard </blockquote><div><br></div><div>No, it just slams those puppies onto proc 0 :)</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">to put all the coarse grid degrees<br>
of freedom on the first process and none on the rest, so you do end up with the exact equivalent of a direct solver.<br>
Try -ksp_view in that case.<br>
<br>
   There is also -mg_coarse_pc_type redundant -mg_coarse_redundant_pc_type lu. In that case it makes a copy of the coarse matrix on EACH process and each process does its own factorization and solve. This saves one phase of the communication for each V cycle since every process has the entire solution it just grabs from itself the values it needs without communication.<br>
<div class="HOEnZb"><div class="h5"><br>
<br>
<br>
<br>
> On Apr 26, 2017, at 5:25 PM, Garth N. Wells <<a href="mailto:gnw20@cam.ac.uk">gnw20@cam.ac.uk</a>> wrote:<br>
><br>
> I'm a bit confused by the selection of the coarse grid solver for<br>
> multigrid. For the demo ksp/ex56, if I do:<br>
><br>
>    mpirun -np 1 ./ex56 -ne 16 -ksp_view -pc_type gamg<br>
> -mg_coarse_ksp_type preonly -mg_coarse_pc_type lu<br>
><br>
> I see<br>
><br>
>  Coarse grid solver -- level ------------------------------<wbr>-<br>
>    KSP Object: (mg_coarse_) 1 MPI processes<br>
>      type: preonly<br>
>      maximum iterations=10000, initial guess is zero<br>
>      tolerances:  relative=1e-05, absolute=1e-50, divergence=10000.<br>
>      left preconditioning<br>
>      using NONE norm type for convergence test<br>
>    PC Object: (mg_coarse_) 1 MPI processes<br>
>      type: lu<br>
>        out-of-place factorization<br>
>        tolerance for zero pivot 2.22045e-14<br>
>        matrix ordering: nd<br>
>        factor fill ratio given 5., needed 1.<br>
>          Factored matrix follows:<br>
>            Mat Object: 1 MPI processes<br>
>              type: seqaij<br>
>              rows=6, cols=6, bs=6<br>
>              package used to perform factorization: petsc<br>
>              total: nonzeros=36, allocated nonzeros=36<br>
>              total number of mallocs used during MatSetValues calls =0<br>
>                using I-node routines: found 2 nodes, limit used is 5<br>
>      linear system matrix = precond matrix:<br>
>      Mat Object: 1 MPI processes<br>
>        type: seqaij<br>
>        rows=6, cols=6, bs=6<br>
>        total: nonzeros=36, allocated nonzeros=36<br>
>        total number of mallocs used during MatSetValues calls =0<br>
>          using I-node routines: found 2 nodes, limit used is 5<br>
><br>
> which is what I expect. Increasing from 1 to 2 processes:<br>
><br>
>    mpirun -np 2 ./ex56 -ne 16 -ksp_view -pc_type gamg<br>
> -mg_coarse_ksp_type preonly -mg_coarse_pc_type lu<br>
><br>
> I see<br>
><br>
>  Coarse grid solver -- level ------------------------------<wbr>-<br>
>    KSP Object: (mg_coarse_) 2 MPI processes<br>
>      type: preonly<br>
>      maximum iterations=10000, initial guess is zero<br>
>      tolerances:  relative=1e-05, absolute=1e-50, divergence=10000.<br>
>      left preconditioning<br>
>      using NONE norm type for convergence test<br>
>    PC Object: (mg_coarse_) 2 MPI processes<br>
>      type: lu<br>
>        out-of-place factorization<br>
>        tolerance for zero pivot 2.22045e-14<br>
>        matrix ordering: natural<br>
>        factor fill ratio given 0., needed 0.<br>
>          Factored matrix follows:<br>
>            Mat Object: 2 MPI processes<br>
>              type: superlu_dist<br>
>              rows=6, cols=6<br>
>              package used to perform factorization: superlu_dist<br>
>              total: nonzeros=0, allocated nonzeros=0<br>
>              total number of mallocs used during MatSetValues calls =0<br>
>                SuperLU_DIST run parameters:<br>
>                  Process grid nprow 2 x npcol 1<br>
>                  Equilibrate matrix TRUE<br>
>                  Matrix input mode 1<br>
>                  Replace tiny pivots FALSE<br>
>                  Use iterative refinement FALSE<br>
>                  Processors in row 2 col partition 1<br>
>                  Row permutation LargeDiag<br>
>                  Column permutation METIS_AT_PLUS_A<br>
>                  Parallel symbolic factorization FALSE<br>
>                  Repeated factorization SamePattern<br>
>      linear system matrix = precond matrix:<br>
>      Mat Object: 2 MPI processes<br>
>        type: mpiaij<br>
>        rows=6, cols=6, bs=6<br>
>        total: nonzeros=36, allocated nonzeros=36<br>
>        total number of mallocs used during MatSetValues calls =0<br>
>          using I-node (on process 0) routines: found 2 nodes, limit used is 5<br>
><br>
> Note that the coarse grid is now using superlu_dist. Is the coarse<br>
> grid being solved in parallel?<br>
><br>
> Garth<br>
<br>
</div></div></blockquote></div><br></div></div>