MFEMGeometricMultigridSolver

Overview

MFEMGeometricMultigridSolver defines a geometric multigrid preconditioner backed by mfem::GeometricMultigrid. It uses an MFEMFESpaceHierarchy to define the multigrid levels, a coarse-level solver, and one or more linear solvers as smoothers for the remaining levels.

The finest-level operator is supplied by the outer solver. Coarser level operators are rediscretized from the equation system on each hierarchy level using the requested "assembly_levels".

This solver is intended for linear, single-variable equation systems. Nonlinear equation systems and mixed bilinear form contributions are not supported.

Example Input File Syntax

[Solvers<<<{"href": "../../../syntax/Solvers/index.html"}>>>]
  [boomeramg]
    type = MFEMHypreBoomerAMG<<<{"description": "Hypre BoomerAMG solver and preconditioner for the iterative solution of MFEM equation systems.", "href": "MFEMHypreBoomerAMG.html"}>>>
    print_level<<<{"description": "Set the solver verbosity."}>>> = 0
  []
  [coarse]
    type = MFEMCGSolver<<<{"description": "MFEM native solver for the iterative solution of MFEM equation systems using the conjugate gradient method.", "href": "MFEMCGSolver.html"}>>>
    preconditioner<<<{"description": "Optional choice of preconditioner to use."}>>> = boomeramg
    l_max_its<<<{"description": "Set the maximum number of iterations."}>>> = 10
    l_tol<<<{"description": "Set the relative tolerance."}>>> = 1e-2
    print_level<<<{"description": "Set the solver verbosity."}>>> = -1
  []
  [chebyshev]
    type = MFEMOperatorChebyshevSmoother<<<{"description": "Chebyshev polynomial smoother backed by mfem::OperatorChebyshevSmoother. Symmetric positive definite by construction; the maximum eigenvalue of D^{-1}A is estimated automatically via a power method. Suitable as a multigrid smoother.", "href": "MFEMOperatorChebyshevSmoother.html"}>>>
    order<<<{"description": "Degree of the Chebyshev polynomial (1-4)."}>>> = 2
  []
  [pmg]
    type = MFEMGeometricMultigridSolver<<<{"description": "Geometric (p-)multigrid preconditioner backed by mfem::GeometricMultigrid. Requires a linear equation system, an MFEMFESpaceHierarchy, and per-level smoother objects.", "href": "MFEMGeometricMultigridSolver.html"}>>>
    variable<<<{"description": "Name of the trial variable this preconditioner acts on."}>>> = concentration
    smoothers<<<{"description": "Names of LinearSolverBase objects used as smoothers on the interior levels (levels 1 to N-1). May have length 1 (used on all interior levels) or N-1 (one per interior level, ordered coarse-to-fine)."}>>> = chebyshev
    coarse_solver<<<{"description": "Name of the LinearSolverBase used on the coarsest level."}>>> = coarse
  []
  [main]
    type = MFEMCGSolver<<<{"description": "MFEM native solver for the iterative solution of MFEM equation systems using the conjugate gradient method.", "href": "MFEMCGSolver.html"}>>>
    preconditioner<<<{"description": "Optional choice of preconditioner to use."}>>> = pmg
    l_tol<<<{"description": "Set the relative tolerance."}>>> = 1e-10
    l_max_its<<<{"description": "Set the maximum number of iterations."}>>> = 200
  []
[]
(test/tests/mfem/solvers/pmg_diffusion.i)

Input Parameters

  • coarse_solverName of the LinearSolverBase used on the coarsest level.

    C++ Type:MFEMSolverName

    Controllable:No

    Description:Name of the LinearSolverBase used on the coarsest level.

  • smoothersNames of LinearSolverBase objects used as smoothers on the interior levels (levels 1 to N-1). May have length 1 (used on all interior levels) or N-1 (one per interior level, ordered coarse-to-fine).

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

    Controllable:No

    Description:Names of LinearSolverBase objects used as smoothers on the interior levels (levels 1 to N-1). May have length 1 (used on all interior levels) or N-1 (one per interior level, ordered coarse-to-fine).

  • variableName of the trial variable this preconditioner acts on.

    C++ Type:std::string

    Controllable:No

    Description:Name of the trial variable this preconditioner acts on.

Required Parameters

  • assembly_levelslegacy Assembly level for each level in the hierarchy. Valid values: 'legacy', 'full', 'element', 'partial', 'none'. May have length 1 (used on all N levels) or N.

    Default:legacy

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

    Controllable:No

    Description:Assembly level for each level in the hierarchy. Valid values: 'legacy', 'full', 'element', 'partial', 'none'. May have length 1 (used on all N levels) or N.

  • low_order_refinedFalseSet usage of Low-Order Refined solver.

    Default:False

    C++ Type:bool

    Controllable:No

    Description:Set usage of Low-Order Refined solver.

  • 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.

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