# Multigrid solvers

## Nodal projection

The following inputs are defined using the prefix `nodal_proj`:

| Description | Type | Default
--- | --- | --- | ---
verbose | Verbosity of multigrid solver in nodal projection | Int | 0
bottom_verbose | Verbosity of BiCGStab solver in nodal projection | Int | 0
mg_rtol | Relative tolerance in nodal projection | Real | 1.e-11
mg_atol | Absolute tolerance in nodal projection | Real | 1.e-14
maxiter | Maximum number of iterations in the nodal projection | Int | 100
bottom_maxiter | Maximum number of iterations in the nodal projection bottom solver if using bicg, cg, bicgcg or cgbicg | Int | 100
mg_max_coarsening_level | Maximum number of coarser levels to allow in the nodal projection If set to 0, the bottom solver will be called at the current level | Int | 100
bottom_solver | Which bottom solver to use in the nodal projection Options are bicgcg, bicgstab, cg, cgbicg, smoother or hypre | String | bicgcg
hypre_namespace | Namespace to use in the nodal projection when using hypre to control hypre specific settings. It can be any string. | String | hypre
hypre_interface | Which interface to use in the nodal projection when using hypre Options are ij, semi_structured or structured | String | ij

## MAC projection

The following inputs are defined using the prefix `mac_proj`:

| Description | Type | Default
--- | --- | --- | ---
verbose | Verbosity of multigrid solver in MAC projection | Int | 0
bottom_verbose | Verbosity of BiCGStab solver in MAC projection | Int | 0
mg_rtol | Relative tolerance in MAC projection | Real | 1.e-11
mg_atol | Absolute tolerance in MAC projection | Real | 1.e-14
maxiter | Maximum number of iterations in the MAC projection | Int | 200
bottom_maxiter | Maximum number of iterations in the MAC projection bottom solver if using bicg, cg, bicgcg or cgbicg | Int | 200
mg_max_coarsening_level | Maximum number of coarser levels to allow in the MAC projection If set to 0, the bottom solver will be called at the current level | Int | 100
bottom_solver | Which bottom solver to use in the MAC projection Options are bicgcg, bicgstab, cg, cgbicg, smoother or hypre | String | bicgcg
hypre_namespace | Namespace to use in the MAC projection when using hypre to control hypre specific settings. It can be any string. | String | hypre
hypre_interface | Which interface to use in the MAC projection when using hypre Options are ij, semi_structured or structured | String | ij

## Diffusion

The following inputs are defined using the prefix `diffusion`:

| Description | Type | Default
--- | --- | --- | ---
verbose | Verbosity of linear solver for diffusion solve | int | 0
bottom_verbose | Verbosity of BiCGStab solver in diffusion solve | int | 0
mg_rtol | Relative tolerance in diffusion solve | Real | 1.e-11
mg_atol | Absolute tolerance in diffusion solve | Real | 1.e-14
maxiter | Maximum number of iterations in diffusion solve | int | 100
bottom_maxiter | Maximum number of iterations in diffusion solve bottom solver if using bicg, cg, bicgcg or cgbicg | int | 100
mg_max_coarsening_level | Maximum number of coarser levels to allow in diffusion solve If set to 0, the bottom solver will be called at the current level | int | 100
bottom_solver | Which bottom solver to use in the diffusion solve Options are bicgcg, bicgstab, cg, cgbicg, or smoother | string | bicgcg

## Hypre Settings

hypre settings are specified using the following inputs which are read directly by AMReX when hypre is used as the bottom solve for the MAC and/or nodal projections. By default, these inputs are defined using the prefix `hypre`, however different settings for the nodal and MAC projections can be used by specifying a `hpyre_namespace` for each solver.

Warning

- MFIX-Exa must be built with hypre enabled to use hypre as the bottom solve.

- If hypre is used for the nodal and MAC projections, then either the `hypre_namespace` must be left as the default (`hypre`) or unique name spaces must be provided for both.

These inputs follow the typical approach for using hypre in MFIX-Exa where BoomerAMG is employed as a preconditioner and GMRES for the linear solver.

| Description | Type | Default
--- | --- | --- | ---
hypre_preconditioner | Type of preconditioner Options are BoomerAMG or euclid | string | none
recompute_preconditioner | Recompute preconditioner during runs | Bool | true
hypre_solver | Type of hypre solver Options are BoomerAMG, GMRES, COGMRES, LGMRES, FlexGMRES, BiCGSTAB, PCG or Hybrid | string | BoomerAMG
verbose | Verbosity of hypre | int | 0
num_krylov | Number of iterations | int | 50

The following inputs are valid when using `BoomerAMG` as a preconditioner or solver.

| Description | Type | Default
--- | --- | --- | ---
bamg_verbose | Set BoomerAMG verbosity | int | 0
bamg_logging | See HYPRE_BoomerAMGSetLogging | int | 0
bamg_max_iterations | See HYPRE_BoomerAMGSetMaxIter | int | 1
bamg_precond_tolerance | See HYPRE_BoomerAMGSetTol | Real | 0.0
bamg_coarsen_type | See HYPRE_BoomerAMGSetCoarsenType | int | 6
bamg_cycle_type | See HYPRE_BoomerAMGSetCycleType | int | 1
bamg_relax_order | See HYPRE_BoomerAMGSetRelaxOrder | int | 1
bamg_relax_type | See HYPRE_BoomerAMGSetRelaxType | int | 6
bamg_down_relax_type | See HYPRE_BoomerAMGSetCycleRelaxType | int | 11
bamg_up_relax_type | See HYPRE_BoomerAMGSetCycleRelaxType | int | 11
bamg_coarse_relax_type | See HYPRE_BoomerAMGSetCycleRelaxType | int | 11
bamg_num_sweeps | See HYPRE_BoomerAMGSetNumSweeps | int | 2
bamg_num_down_sweeps | See HYPRE_BoomerAMGSetCycleNumSweeps | int | 2
bamg_num_up_sweeps | See HYPRE_BoomerAMGSetCycleNumSweeps | int | 2
bamg_num_coarse_sweeps | See HYPRE_BoomerAMGSetCycleNumSweeps | int | 1
bamg_max_levels | See HYPRE_BoomerAMGSetMaxLevels | int | 20
bamg_strong_threshold | See HYPRE_BoomerAMGSetStrongThreshold | Real | 0.57
bamg_interp_type | See HYPRE_BoomerAMGSetInterpType | int | 0
bamg_variant | See HYPRE_BoomerAMGSetVariant | int | 0
bamg_keep_transpose | See HYPRE_BoomerAMGSetKeepTranspose | int | 0
bamg_min_coarse_size | See HYPRE_BoomerAMGSetMinCoarseSize | int | 1
bamg_max_coarse_size | See HYPRE_BoomerAMGSetMaxCoarseSize | int | 9
bamg_pmax_elmts | See HYPRE_BoomerAMGSetPMaxElmts | int | 4
bamg_agg_num_levels | See HYPRE_BoomerAMGSetAggNumLevels | int | 0
bamg_agg_interp_type | See HYPRE_BoomerAMGSetAggInterpType | int | 4
bamg_agg_pmax_elmts | See HYPRE_BoomerAMGSetAggPMaxElmts | int | 0
bamg_trunc_factor | See HYPRE_BoomerAMGSetTruncFactor | Real | 0.1
bamg_set_restriction | See HYPRE_BoomerAMGSetRestriction | int | 0

| Description | Type | Default
--- | --- | --- | ---
adjust_singular_matrix | Should be true if the problem to be solved has singular matrix | Bool | false
overwrite_existing_matrix_files | Over-write existing matrix files | Bool | false
write_matrix_files | Write out matrix into text files | Bool | false

Note

This list is likely incomplete because the AMReX / hypre interface continues to evolve.