[petsc-users] Usage of AMG as preconditioner
Michael Werner
michael.werner at dlr.de
Fri Sep 28 06:43:23 CDT 2018
Matthew Knepley writes:
> On Fri, Sep 28, 2018 at 3:23 AM Michael Werner
> <michael.werner at dlr.de>
> wrote:
>
>> Hello,
>>
>> I'm having trouble with getting the AMG preconditioners
>> working. I
>> tried all of them (gamg, ml, hypre-boomeramg), with varying
>> degrees of "success":
>>
>> - GAMG:
>> CMD options: -ksp_rtol 1e-8 -ksp_monitor_true_residual
>> -ksp_max_it
>> 20 -ksp_type fgmres -pc_type gamg -pc_gamg_sym_graph TRUE
>> -pc_gamg_agg_nsmooths 1 -ksp_view
>> always crashes with the following error:
>> Error: error code 77
>> [0] KSPSolve() line 780 in
>>
>> /home/yoda/wern_mc/Programme/Anaconda/envs/GSA_27/weitere_programme/petsc-3.10.0/src/ksp/ksp/interface/itfunc.c
>> [0] KSPSolve_GMRES() line 233 in
>>
>> /home/yoda/wern_mc/Programme/Anaconda/envs/GSA_27/weitere_programme/petsc-3.10.0/src/ksp/ksp/impls/gmres/gmres.c
>> [0] KSPInitialResidual() line 67 in
>>
>> /home/yoda/wern_mc/Programme/Anaconda/envs/GSA_27/weitere_programme/petsc-3.10.0/src/ksp/ksp/interface/itres.c
>> [0] KSP_PCApply() line 281 in
>>
>> /home/yoda/wern_mc/Programme/Anaconda/envs/GSA_27/weitere_programme/petsc-3.10.0/include/petsc/private/kspimpl.h
>> [0] PCApply() line 462 in
>>
>> /home/yoda/wern_mc/Programme/Anaconda/envs/GSA_27/weitere_programme/petsc-3.10.0/src/ksp/pc/interface/precon.c
>> [0] PCApply_MG() line 377 in
>>
>> /home/yoda/wern_mc/Programme/Anaconda/envs/GSA_27/weitere_programme/petsc-3.10.0/src/ksp/pc/impls/mg/mg.c
>> [0] PCMGMCycle_Private() line 20 in
>>
>> /home/yoda/wern_mc/Programme/Anaconda/envs/GSA_27/weitere_programme/petsc-3.10.0/src/ksp/pc/impls/mg/mg.c
>> [0] KSPSolve() line 780 in
>>
>> /home/yoda/wern_mc/Programme/Anaconda/envs/GSA_27/weitere_programme/petsc-3.10.0/src/ksp/ksp/interface/itfunc.c
>> [0] KSPSolve_Chebyshev() line 381 in
>>
>> /home/yoda/wern_mc/Programme/Anaconda/envs/GSA_27/weitere_programme/petsc-3.10.0/src/ksp/ksp/impls/cheby/cheby.c
>> [0] Petsc has generated inconsistent data
>> [0] Eigen estimator failed: DIVERGED_NANORINF at iteration 0
>>
>> When I'm using a different solver for -mg_levels_ksp_type, such
>> as
>> gmres, GAMG no longer crashes, but I don't see convergence of
>> the
>> problem (convergence history and ksp_view output are attached
>> below).
>>
>
> It uses unpreconditioned GMRES to estimate spectral bounds for
> the operator
> before using a Chebychev smoother.
> If your matrix does not have a nice, connected, positive
> spectrum,
> Chebychev will not work. However, the fact that
> you get DIVERGED_NANORINF in the estimator tells me that you
> have a problem
> in the matrix.
>
The error above (DIVERGED_NANORINF) only appears for
-mg_levels_ksp_type chebyshev. When I use GMRES
(-mg_levels_ksp_type gmres) there are no errors, the KSP just
never converges.
>
>> - Hypre
>> With the default settings, BoomerAMG just returns a Vector of
>> all
>> zeros after one iteration.
>> When I change the relaxation type
>> -pc_hypre_boomeramg_relax_type_all to Jacobi, I get similar
>> results than with GAMG: the solver works without errors, but
>> doesn't converge. The output for Hypre is also attached below.
>>
>> - ML
>> With default settings the result is just like Boomeramg: a
>> vector
>> of all zeros after one iteration.
>> When I change -mg_levels_ksp_type the behaviour is identical to
>> GAMG.
>>
>>
>> Since none of the packages worked, I'm assuming that the error
>> lies with me/ my code,
>
>
> It looks like a value in the matrix might be bad.
>
>
>> so I'll give a short overview over what I'm
>> trying to do.
>> The matrix I'm trying to precondition is the Jacobian of a flow
>> field originating from an unstructured finite-volume CFD
>> code. It
>> has a blocked structure as each node of the original mesh holds
>> several variables (pressure, density, velocities). However, I'm
>> not using a DM-Plex since I get the assembled Jacobian in
>> binary
>> format from the external CFD code.
>> When I'm using direct (lu) I get correct results, so the basic
>> code should be fine.
>
>
> So LU works for the same problem that gave the NANORINF in
> GMRES?
>
> I would recommend using a Manufactured Solution to check the
> operation. Then
> you can start by feeding in the exact solution, and see that
> nothing fails.
> Also, I
> would make a very small test case, so that you can send the
> matrix and/or
> code
> to us to check.
>
Yes, LU works for the same matrix/ problem. I didn't change
anything besides using -pc_type lu instead of -pc_type gamg.
What do you mean by "Manufactured Solution"?
Concerning the test case: I'll set one up and send you the matrix
in binary format.
>
>> However, for larger problems lu is not
>> feasible due the very large memory requirements, therefore I
>> wanted to switch over to multigrid.
>>
>> Currently, PETSc has no information about the original
>> geometry. I
>> tried using setCoordinates, but for Hypre and ml it didn't make
>> a
>> difference, and GAMG crashed with an error:
>>
>
> This is only an optimization, and currently GAMG does not know
> what to
> do for multiple fields (it handles single field problems by
> building the
> nullspace of the symbol for the coarse grid). You could provide
> this when
> you want to optimize things.
>
> Thanks,
>
> Matt
Ok, thanks for the clarification. In that case I won't bother with
it for now. No need to optimize the code before the other problems
are solved.
Thank you for your answer!
Kind regards,
Michael
>
>
>> [0] PCSetCoordinates() line 1883 in
>>
>> /home/yoda/wern_mc/Programme/Anaconda/envs/GSA_27/weitere_programme/petsc-3.10.0/src/ksp/pc/interface/precon.c
>> [0] PCSetCoordinates_AGG() line 199 in
>>
>> /home/yoda/wern_mc/Programme/Anaconda/envs/GSA_27/weitere_programme/petsc-3.10.0/src/ksp/pc/impls/gamg/agg.c
>> [0] Petsc has generated inconsistent data
>> [0] Don't know how to create null space for ndm=2, ndf=4. Use
>> MatSetNearNullSpace.
>>
>> I would be glad if you could give me some advice on how to deal
>> with this.
>>
>> Kind regards,
>> Michael
>>
>>
More information about the petsc-users
mailing list