[petsc-users] Multigrid coarse grid solver

Mark Adams mfadams at lbl.gov
Thu Apr 27 07:35:19 CDT 2017


On Wed, Apr 26, 2017 at 7:30 PM, Barry Smith <bsmith at mcs.anl.gov> wrote:

>
>   Yes, you asked for LU so it used LU!
>
>    Of course for smaller coarse grids and large numbers of processes this
> is very inefficient.
>
>    The default behavior for GAMG is probably what you want. In that case
> it is equivalent to
> -mg_coarse_pc_type bjacobi --mg_coarse_sub_pc_type lu.  But GAMG tries
> hard


No, it just slams those puppies onto proc 0 :)


> to put all the coarse grid degrees
> of freedom on the first process and none on the rest, so you do end up
> with the exact equivalent of a direct solver.
> Try -ksp_view in that case.
>
>    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.
>
>
>
>
> > On Apr 26, 2017, at 5:25 PM, Garth N. Wells <gnw20 at cam.ac.uk> wrote:
> >
> > I'm a bit confused by the selection of the coarse grid solver for
> > multigrid. For the demo ksp/ex56, if I do:
> >
> >    mpirun -np 1 ./ex56 -ne 16 -ksp_view -pc_type gamg
> > -mg_coarse_ksp_type preonly -mg_coarse_pc_type lu
> >
> > I see
> >
> >  Coarse grid solver -- level -------------------------------
> >    KSP Object: (mg_coarse_) 1 MPI processes
> >      type: preonly
> >      maximum iterations=10000, initial guess is zero
> >      tolerances:  relative=1e-05, absolute=1e-50, divergence=10000.
> >      left preconditioning
> >      using NONE norm type for convergence test
> >    PC Object: (mg_coarse_) 1 MPI processes
> >      type: lu
> >        out-of-place factorization
> >        tolerance for zero pivot 2.22045e-14
> >        matrix ordering: nd
> >        factor fill ratio given 5., needed 1.
> >          Factored matrix follows:
> >            Mat Object: 1 MPI processes
> >              type: seqaij
> >              rows=6, cols=6, bs=6
> >              package used to perform factorization: petsc
> >              total: nonzeros=36, allocated nonzeros=36
> >              total number of mallocs used during MatSetValues calls =0
> >                using I-node routines: found 2 nodes, limit used is 5
> >      linear system matrix = precond matrix:
> >      Mat Object: 1 MPI processes
> >        type: seqaij
> >        rows=6, cols=6, bs=6
> >        total: nonzeros=36, allocated nonzeros=36
> >        total number of mallocs used during MatSetValues calls =0
> >          using I-node routines: found 2 nodes, limit used is 5
> >
> > which is what I expect. Increasing from 1 to 2 processes:
> >
> >    mpirun -np 2 ./ex56 -ne 16 -ksp_view -pc_type gamg
> > -mg_coarse_ksp_type preonly -mg_coarse_pc_type lu
> >
> > I see
> >
> >  Coarse grid solver -- level -------------------------------
> >    KSP Object: (mg_coarse_) 2 MPI processes
> >      type: preonly
> >      maximum iterations=10000, initial guess is zero
> >      tolerances:  relative=1e-05, absolute=1e-50, divergence=10000.
> >      left preconditioning
> >      using NONE norm type for convergence test
> >    PC Object: (mg_coarse_) 2 MPI processes
> >      type: lu
> >        out-of-place factorization
> >        tolerance for zero pivot 2.22045e-14
> >        matrix ordering: natural
> >        factor fill ratio given 0., needed 0.
> >          Factored matrix follows:
> >            Mat Object: 2 MPI processes
> >              type: superlu_dist
> >              rows=6, cols=6
> >              package used to perform factorization: superlu_dist
> >              total: nonzeros=0, allocated nonzeros=0
> >              total number of mallocs used during MatSetValues calls =0
> >                SuperLU_DIST run parameters:
> >                  Process grid nprow 2 x npcol 1
> >                  Equilibrate matrix TRUE
> >                  Matrix input mode 1
> >                  Replace tiny pivots FALSE
> >                  Use iterative refinement FALSE
> >                  Processors in row 2 col partition 1
> >                  Row permutation LargeDiag
> >                  Column permutation METIS_AT_PLUS_A
> >                  Parallel symbolic factorization FALSE
> >                  Repeated factorization SamePattern
> >      linear system matrix = precond matrix:
> >      Mat Object: 2 MPI processes
> >        type: mpiaij
> >        rows=6, cols=6, bs=6
> >        total: nonzeros=36, allocated nonzeros=36
> >        total number of mallocs used during MatSetValues calls =0
> >          using I-node (on process 0) routines: found 2 nodes, limit used
> is 5
> >
> > Note that the coarse grid is now using superlu_dist. Is the coarse
> > grid being solved in parallel?
> >
> > Garth
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20170427/52e8e43c/attachment.html>


More information about the petsc-users mailing list