[petsc-dev] [petsc-users] Convergence of AMG

Smith, Barry F. bsmith at mcs.anl.gov
Sun Oct 28 15:54:07 CDT 2018


   Moved a question not needed in the public discussions to petsc-dev to ask Mark.


   Mark,

    PCGAMGSetCoarseEqLim - Set maximum number of equations on coarsest grid

   Is there a way to set the minimum number of equations on the coarse grid also? This particular case goes down to 6, 54 and 642 unknowns on the coarsest grids when I'm guessing it would be better to stop at 642 unknowns for the coarsest level. 

   Barry



> On Oct 28, 2018, at 12:16 PM, Manav Bhatia <bhatiamanav at gmail.com> wrote:
> 
> Hi, 
> 
>    I am attempting to solve a Mindlin plate bending problem with AMG solver in petsc. This test case is with a mesh of 300x300 elements and 543,606 dofs. 
> 
>    The discretization includes 6 variables (u, v, w, tx, ty, tz), but only three are relevant for plate bending (w, tx, ty). 
> 
>    I am calling the solver with the following options: 
> 
> -pc_type gamg -pc_gamg_threshold 0. --node-major-dofs -mat_block_size 6 -ksp_rtol 1.e-8 -ksp_monitor -ksp_converged_reason -ksp_view 
> 
>   And the convergence behavior is shown below, along with the ksp_view information. Based on notes in the manual, this seems to be subpar convergence rate. At the end of the solution the norm of each variable is : 
> 
> var: 0: u  : norm: 5.505909e-18
> var: 1: v  : norm: 7.639640e-18
> var: 2: w : norm: 3.901464e-03
> var: 3: tx : norm: 4.403576e-02
> var: 4: ty : norm: 4.403576e-02
> var: 5: tz : norm: 1.148409e-16
> 
>   I tried different values of -ksp_rtol from 1e-1 to 1e-8 and this does not make a lot of difference in the norms of (w, tx, ty). 
>  
>   I do provide the solver with 6 rigid-body vectors to approximate the null-space of the problem. Without these the solver shows very poor convergence. 
> 
>   I would appreciate advice on possible strategies to improve this behavior. 
> 
> Thanks,
> Manav 
> 
>     0 KSP Residual norm 1.696304497261e+00 
>     1 KSP Residual norm 1.120485505777e+00 
>     2 KSP Residual norm 8.324222302402e-01 
>     3 KSP Residual norm 6.477349534115e-01 
>     4 KSP Residual norm 5.080936471292e-01 
>     5 KSP Residual norm 4.051099646638e-01 
>     6 KSP Residual norm 3.260432664653e-01 
>     7 KSP Residual norm 2.560483838143e-01 
>     8 KSP Residual norm 2.029943986124e-01 
>     9 KSP Residual norm 1.560985741610e-01 
>    10 KSP Residual norm 1.163720702140e-01 
>    11 KSP Residual norm 8.488411085459e-02 
>    12 KSP Residual norm 5.888041729034e-02 
>    13 KSP Residual norm 4.027792209980e-02 
>    14 KSP Residual norm 2.819048087304e-02 
>    15 KSP Residual norm 1.904674196962e-02 
>    16 KSP Residual norm 1.289302447822e-02 
>    17 KSP Residual norm 9.162203296376e-03 
>    18 KSP Residual norm 7.016781679507e-03 
>    19 KSP Residual norm 5.399170865328e-03 
>    20 KSP Residual norm 4.254385887482e-03 
>    21 KSP Residual norm 3.530831740621e-03 
>    22 KSP Residual norm 2.946780747923e-03 
>    23 KSP Residual norm 2.339361361128e-03 
>    24 KSP Residual norm 1.815072489282e-03 
>    25 KSP Residual norm 1.408814185342e-03 
>    26 KSP Residual norm 1.063795714320e-03 
>    27 KSP Residual norm 7.828540233117e-04 
>    28 KSP Residual norm 5.683910750067e-04 
>    29 KSP Residual norm 4.131151010250e-04 
>    30 KSP Residual norm 3.065608221019e-04 
>    31 KSP Residual norm 2.634114273459e-04 
>    32 KSP Residual norm 2.198180137626e-04 
>    33 KSP Residual norm 1.748956510799e-04 
>    34 KSP Residual norm 1.317539710010e-04 
>    35 KSP Residual norm 9.790121566055e-05 
>    36 KSP Residual norm 7.465935386094e-05 
>    37 KSP Residual norm 5.689506626052e-05 
>    38 KSP Residual norm 4.413136619126e-05 
>    39 KSP Residual norm 3.512194236402e-05 
>    40 KSP Residual norm 2.877755408287e-05 
>    41 KSP Residual norm 2.340080556431e-05 
>    42 KSP Residual norm 1.904544450345e-05 
>    43 KSP Residual norm 1.504723478235e-05 
>    44 KSP Residual norm 1.141381950576e-05 
>    45 KSP Residual norm 8.206151384599e-06 
>    46 KSP Residual norm 5.911426091276e-06 
>    47 KSP Residual norm 4.233669089283e-06 
>    48 KSP Residual norm 2.898052944223e-06 
>    49 KSP Residual norm 2.023556779973e-06 
>    50 KSP Residual norm 1.459108043935e-06 
>    51 KSP Residual norm 1.097335545865e-06 
>    52 KSP Residual norm 8.440457332262e-07 
>    53 KSP Residual norm 6.705616854004e-07 
>    54 KSP Residual norm 5.404888680234e-07 
>    55 KSP Residual norm 4.391368084979e-07 
>    56 KSP Residual norm 3.697063014621e-07 
>    57 KSP Residual norm 3.021772094146e-07 
>    58 KSP Residual norm 2.479354520792e-07 
>    59 KSP Residual norm 2.013077841968e-07 
>    60 KSP Residual norm 1.553159612793e-07 
>    61 KSP Residual norm 1.400784224898e-07 
>    62 KSP Residual norm 9.707453662195e-08 
>    63 KSP Residual norm 7.263173080146e-08 
>    64 KSP Residual norm 5.593723572132e-08 
>    65 KSP Residual norm 4.448788809586e-08 
>    66 KSP Residual norm 3.613992590778e-08 
>    67 KSP Residual norm 2.946099051876e-08 
>    68 KSP Residual norm 2.408053564170e-08 
>    69 KSP Residual norm 1.945257374856e-08 
>    70 KSP Residual norm 1.572494535110e-08 
> 
> 
> KSP Object: 4 MPI processes
>   type: gmres
>     restart=30, using Classical (unmodified) Gram-Schmidt Orthogonalization with no iterative refinement
>     happy breakdown tolerance 1e-30
>   maximum iterations=10000, initial guess is zero
>   tolerances:  relative=1e-08, absolute=1e-50, divergence=10000.
>   left preconditioning
>   using PRECONDITIONED norm type for convergence test
> PC Object: 4 MPI processes
>   type: gamg
>     type is MULTIPLICATIVE, levels=6 cycles=v
>       Cycles per PCApply=1
>       Using externally compute Galerkin coarse grid matrices
>       GAMG specific options
>         Threshold for dropping small values in graph on each level =   0.   0.   0.   0.  
>         Threshold scaling factor for each level not specified = 1.
>         AGG specific options
>           Symmetric graph false
>           Number of levels to square graph 1
>           Number smoothing steps 1
>   Coarse grid solver -- level -------------------------------
>     KSP Object: (mg_coarse_) 4 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_) 4 MPI processes
>       type: bjacobi
>         number of blocks = 4
>         Local solve is same for all blocks, in the following KSP and PC objects:
>       KSP Object: (mg_coarse_sub_) 1 MPI processes
>         type: preonly
>         maximum iterations=1, 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_sub_) 1 MPI processes
>         type: lu
>           out-of-place factorization
>           tolerance for zero pivot 2.22045e-14
>           using diagonal shift on blocks to prevent zero pivot [INBLOCKS]
>           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
>       linear system matrix = precond matrix:
>       Mat Object: 4 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 nonscalable MatPtAP() implementation
>           using I-node (on process 0) routines: found 2 nodes, limit used is 5
>   Down solver (pre-smoother) on level 1 -------------------------------
>     KSP Object: (mg_levels_1_) 4 MPI processes
>       type: chebyshev
>         eigenvalue estimates used:  min = 0.099971, max = 1.09968
>         eigenvalues estimate via gmres min 0.154032, max 0.99971
>         eigenvalues estimated using gmres with translations  [0. 0.1; 0. 1.1]
>         KSP Object: (mg_levels_1_esteig_) 4 MPI processes
>           type: gmres
>             restart=30, using Classical (unmodified) Gram-Schmidt Orthogonalization with no iterative refinement
>             happy breakdown tolerance 1e-30
>           maximum iterations=10, initial guess is zero
>           tolerances:  relative=1e-12, absolute=1e-50, divergence=10000.
>           left preconditioning
>           using PRECONDITIONED norm type for convergence test
>         estimating eigenvalues using noisy right hand side
>       maximum iterations=2, nonzero initial guess
>       tolerances:  relative=1e-05, absolute=1e-50, divergence=10000.
>       left preconditioning
>       using NONE norm type for convergence test
>     PC Object: (mg_levels_1_) 4 MPI processes
>       type: sor
>         type = local_symmetric, iterations = 1, local iterations = 1, omega = 1.
>       linear system matrix = precond matrix:
>       Mat Object: 4 MPI processes
>         type: mpiaij
>         rows=54, cols=54, bs=6
>         total: nonzeros=2916, allocated nonzeros=2916
>         total number of mallocs used during MatSetValues calls =0
>           using I-node (on process 0) routines: found 11 nodes, limit used is 5
>   Up solver (post-smoother) same as down solver (pre-smoother)
>   Down solver (pre-smoother) on level 2 -------------------------------
>     KSP Object: (mg_levels_2_) 4 MPI processes
>       type: chebyshev
>         eigenvalue estimates used:  min = 0.171388, max = 1.88526
>         eigenvalues estimate via gmres min 0.0717873, max 1.71388
>         eigenvalues estimated using gmres with translations  [0. 0.1; 0. 1.1]
>         KSP Object: (mg_levels_2_esteig_) 4 MPI processes
>           type: gmres
>             restart=30, using Classical (unmodified) Gram-Schmidt Orthogonalization with no iterative refinement
>             happy breakdown tolerance 1e-30
>           maximum iterations=10, initial guess is zero
>           tolerances:  relative=1e-12, absolute=1e-50, divergence=10000.
>           left preconditioning
>           using PRECONDITIONED norm type for convergence test
>         estimating eigenvalues using noisy right hand side
>       maximum iterations=2, nonzero initial guess
>       tolerances:  relative=1e-05, absolute=1e-50, divergence=10000.
>       left preconditioning
>       using NONE norm type for convergence test
>     PC Object: (mg_levels_2_) 4 MPI processes
>       type: sor
>         type = local_symmetric, iterations = 1, local iterations = 1, omega = 1.
>       linear system matrix = precond matrix:
>       Mat Object: 4 MPI processes
>         type: mpiaij
>         rows=642, cols=642, bs=6
>         total: nonzeros=99468, allocated nonzeros=99468
>         total number of mallocs used during MatSetValues calls =0
>           using nonscalable MatPtAP() implementation
>           using I-node (on process 0) routines: found 47 nodes, limit used is 5
>   Up solver (post-smoother) same as down solver (pre-smoother)
>   Down solver (pre-smoother) on level 3 -------------------------------
>     KSP Object: (mg_levels_3_) 4 MPI processes
>       type: chebyshev
>         eigenvalue estimates used:  min = 0.164216, max = 1.80637
>         eigenvalues estimate via gmres min 0.0376323, max 1.64216
>         eigenvalues estimated using gmres with translations  [0. 0.1; 0. 1.1]
>         KSP Object: (mg_levels_3_esteig_) 4 MPI processes
>           type: gmres
>             restart=30, using Classical (unmodified) Gram-Schmidt Orthogonalization with no iterative refinement
>             happy breakdown tolerance 1e-30
>           maximum iterations=10, initial guess is zero
>           tolerances:  relative=1e-12, absolute=1e-50, divergence=10000.
>           left preconditioning
>           using PRECONDITIONED norm type for convergence test
>         estimating eigenvalues using noisy right hand side
>       maximum iterations=2, nonzero initial guess
>       tolerances:  relative=1e-05, absolute=1e-50, divergence=10000.
>       left preconditioning
>       using NONE norm type for convergence test
>     PC Object: (mg_levels_3_) 4 MPI processes
>       type: sor
>         type = local_symmetric, iterations = 1, local iterations = 1, omega = 1.
>       linear system matrix = precond matrix:
>       Mat Object: 4 MPI processes
>         type: mpiaij
>         rows=6726, cols=6726, bs=6
>         total: nonzeros=941796, allocated nonzeros=941796
>         total number of mallocs used during MatSetValues calls =0
>           using nonscalable MatPtAP() implementation
>           using I-node (on process 0) routines: found 552 nodes, limit used is 5
>   Up solver (post-smoother) same as down solver (pre-smoother)
>   Down solver (pre-smoother) on level 4 -------------------------------
>     KSP Object: (mg_levels_4_) 4 MPI processes
>       type: chebyshev
>         eigenvalue estimates used:  min = 0.163283, max = 1.79611
>         eigenvalues estimate via gmres min 0.0350306, max 1.63283
>         eigenvalues estimated using gmres with translations  [0. 0.1; 0. 1.1]
>         KSP Object: (mg_levels_4_esteig_) 4 MPI processes
>           type: gmres
>             restart=30, using Classical (unmodified) Gram-Schmidt Orthogonalization with no iterative refinement
>             happy breakdown tolerance 1e-30
>           maximum iterations=10, initial guess is zero
>           tolerances:  relative=1e-12, absolute=1e-50, divergence=10000.
>           left preconditioning
>           using PRECONDITIONED norm type for convergence test
>         estimating eigenvalues using noisy right hand side
>       maximum iterations=2, nonzero initial guess
>       tolerances:  relative=1e-05, absolute=1e-50, divergence=10000.
>       left preconditioning
>       using NONE norm type for convergence test
>     PC Object: (mg_levels_4_) 4 MPI processes
>       type: sor
>         type = local_symmetric, iterations = 1, local iterations = 1, omega = 1.
>       linear system matrix = precond matrix:
>       Mat Object: 4 MPI processes
>         type: mpiaij
>         rows=41022, cols=41022, bs=6
>         total: nonzeros=2852316, allocated nonzeros=2852316
>         total number of mallocs used during MatSetValues calls =0
>           using nonscalable MatPtAP() implementation
>           using I-node (on process 0) routines: found 3432 nodes, limit used is 5
>   Up solver (post-smoother) same as down solver (pre-smoother)
>   Down solver (pre-smoother) on level 5 -------------------------------
>     KSP Object: (mg_levels_5_) 4 MPI processes
>       type: chebyshev
>         eigenvalue estimates used:  min = 0.157236, max = 1.7296
>         eigenvalues estimate via gmres min 0.0317897, max 1.57236
>         eigenvalues estimated using gmres with translations  [0. 0.1; 0. 1.1]
>         KSP Object: (mg_levels_5_esteig_) 4 MPI processes
>           type: gmres
>             restart=30, using Classical (unmodified) Gram-Schmidt Orthogonalization with no iterative refinement
>             happy breakdown tolerance 1e-30
>           maximum iterations=10, initial guess is zero
>           tolerances:  relative=1e-12, absolute=1e-50, divergence=10000.
>           left preconditioning
>           using PRECONDITIONED norm type for convergence test
>         estimating eigenvalues using noisy right hand side
>       maximum iterations=2, nonzero initial guess
>       tolerances:  relative=1e-05, absolute=1e-50, divergence=10000.
>       left preconditioning
>       using NONE norm type for convergence test
>     PC Object: (mg_levels_5_) 4 MPI processes
>       type: sor
>         type = local_symmetric, iterations = 1, local iterations = 1, omega = 1.
>       linear system matrix = precond matrix:
>       Mat Object: () 4 MPI processes
>         type: mpiaij
>         rows=543606, cols=543606, bs=6
>         total: nonzeros=29224836, allocated nonzeros=29302596
>         total number of mallocs used during MatSetValues calls =0
>           has attached near null space
>           using I-node (on process 0) routines: found 45644 nodes, limit used is 5
>   Up solver (post-smoother) same as down solver (pre-smoother)
>   linear system matrix = precond matrix:
>   Mat Object: () 4 MPI processes
>     type: mpiaij
>     rows=543606, cols=543606, bs=6
>     total: nonzeros=29224836, allocated nonzeros=29302596
>     total number of mallocs used during MatSetValues calls =0
>       has attached near null space
>       using I-node (on process 0) routines: found 45644 nodes, limit used is 5
> 
> 



More information about the petsc-dev mailing list