MFEMHypreBoomerAMG

Overview

Defines and builds an mfem::HypreBoomerAMG solver to use as a preconditioner or solver to solve the MFEM equation system.

A Low-Order-Refined (LOR) version of this solver may be used instead by setting the parameter "low_order_refined" to true. Using an LOR solver improves performance for high polynomial order systems.

Vector unknowns

By default BoomerAMG coarsens every degree of freedom as if it belonged to one scalar unknown. For a vector unknown, such as a displacement, "vector_treatment" selects one of hypre's approaches for systems of PDEs instead:

  • by_component coarsens each component on its own and does not interpolate between components. This is what hypre calls the unknown approach. It corresponds to mfem::HypreBoomerAMG::SetSystemsOptions (and to MFEM example 2 run without -elast).

  • rigid_body_modes also adds the rigid body modes of the space to the interpolation, which suits any vector problem whose near null space is rigid body motion. This is hypre's GM/LN approach. It corresponds to mfem::HypreBoomerAMG::SetElasticityOptions (and to MFEM example 2 run with -elast). It is not applied when hypre runs on a GPU.

Both need "fespace", the space of the unknown, which must use VDIM ordering, and both default the strength threshold to 0.5. Neither is always better: rigid_body_modes can take fewer iterations but costs more to set up, and for the linear elasticity example (and for MFEM example 2 in which it is based on) by_component is the faster of the two.

For backward compatibility, setting fespace without vector_treatment selects rigid_body_modes.

Example Input File Syntax

[Solvers<<<{"href": "../../../syntax/Solvers/index.html"}>>>]
  inactive<<<{"description": "If specified blocks matching these identifiers will be skipped."}>>> = 'jacobi'
  [boomeramg]
    type = MFEMHypreBoomerAMG<<<{"description": "Hypre BoomerAMG solver and preconditioner for the iterative solution of MFEM equation systems.", "href": "MFEMHypreBoomerAMG.html"}>>>
  []
  [jacobi]
    type = MFEMOperatorJacobiSmoother<<<{"description": "MFEM solver for performing Jacobi smoothing of the equation system.", "href": "MFEMOperatorJacobiSmoother.html"}>>>
  []
  [main]
    type = MFEMHypreGMRES<<<{"description": "Hypre solver for the iterative solution of MFEM equation systems using the generalized minimal residual method.", "href": "MFEMHypreGMRES.html"}>>>
    preconditioner<<<{"description": "Optional choice of preconditioner to use."}>>> = boomeramg
    l_tol<<<{"description": "Set the relative tolerance."}>>> = 1e-16
    l_max_its<<<{"description": "Set the maximum number of iterations."}>>> = 1000
  []
[]
(test/tests/mfem/kernels/diffusion.i)

Input Parameters

  • error_modeabortSet the behavior for treating hypre errors.

    Default:abort

    C++ Type:MooseEnum

    Options:ignore, warn, abort

    Controllable:No

    Description:Set the behavior for treating hypre errors.

  • fespaceVector H1 FESpace of the unknown, required when vector_treatment is 'by_component' or 'rigid_body_modes'.

    C++ Type:MFEMFESpaceName

    Controllable:No

    Description:Vector H1 FESpace of the unknown, required when vector_treatment is 'by_component' or 'rigid_body_modes'.

  • l_max_its10000Set the maximum number of iterations.

    Default:10000

    C++ Type:int

    Controllable:No

    Description:Set the maximum number of iterations.

  • l_tol1e-05Set the relative tolerance.

    Default:1e-05

    C++ Type:Real

    Unit:(no unit assumed)

    Controllable:No

    Description:Set the relative tolerance.

  • low_order_refinedFalseSet usage of Low-Order Refined solver.

    Default:False

    C++ Type:bool

    Controllable:No

    Description:Set usage of Low-Order Refined solver.

  • print_level2Set the solver verbosity.

    Default:2

    C++ Type:int

    Controllable:No

    Description:Set the solver verbosity.

  • strength_threshold0.25HypreBoomerAMG strong threshold. Defaults to 0.25, or to 0.5 when vector_treatment is 'by_component' or 'rigid_body_modes'.

    Default:0.25

    C++ Type:Real

    Unit:(no unit assumed)

    Controllable:No

    Description:HypreBoomerAMG strong threshold. Defaults to 0.25, or to 0.5 when vector_treatment is 'by_component' or 'rigid_body_modes'.

  • use_initial_guessFalseWhether to preserve the current MFEM solution vector as the initial guess for an iterative solver.

    Default:False

    C++ Type:bool

    Controllable:No

    Description:Whether to preserve the current MFEM solution vector as the initial guess for an iterative solver.

  • vector_treatmentautoSpecifies how BoomerAMG treats the components of a vector unknown.

    Default:auto

    C++ Type:MooseEnum

    Options:auto, scalar, by_component, rigid_body_modes

    Controllable:No

    Description:Specifies how BoomerAMG treats the components of a vector unknown.

Optional Parameters

  • control_tagsAdds user-defined labels for accessing object parameters via control logic.

    C++ Type:std::vector<std::string>

    Controllable:No

    Description:Adds user-defined labels for accessing object parameters via control logic.

  • enableTrueSet the enabled status of the MooseObject.

    Default:True

    C++ Type:bool

    Controllable:No

    Description:Set the enabled status of the MooseObject.

Advanced Parameters

Input Files