Hypre settings - starting point

Currently, MFIX-Exa does not have recommended hypre settings. The best way to figure out what works the best for your problem is to cycle through each option to determine which has a significant impact on time to solution or robustness and then optimize the most important ones. However, this can be a daunting task as hypre has many settings. Below are a collection of settings (thanks to Andy Nonaka :pray:) that were found to be near optimal for a PIC CLR circa early '23. If nothing else, this may serve as a jumping off point for others.

hypre.recompute_preconditioner = 0 # 1 if the mxtrix changes
hypre.write_matrix_files = 0

hypre.hypre_preconditioner = BoomerAMG
hypre.hypre_solver = GMRES

# HYPRE BoomerAMG preconditioner settings .............................
hypre.verbose      = 0
hypre.bamg_verbose = 0

hypre.bamg_max_iterations    = 1  # default 1; should be set to 1 for preconditioner
hypre.bamg_precond_tolerance = 0. # default 0.; should be set to 0. for preconditioner
hypre.bamg_coarsen_type      = 8  # default 6; (If on the CPU, use 10); see hypre/src/parcsr_ls/HYPRE_parcsr_ls.h HYPRE_BoomerAMGSetCoarsenType()
hypre.bamg_cycle_type        = 1  # default 1 (V-cycle); 2 (W-cycle)
hypre.bamg_relax_order       = 0  # default 1 (CF-relaxation); 0 (lexicographic)

# must set either relax_type or (all 3) down/up/coarse_relax_type; see hypre/src/parcsr_ls/par_relax.c hypre_BoomerAMGRelax()
hypre.bamg_relax_type          = 12 # default 6
#hypre.bamg_down_relax_type   = 11 # default 11
#hypre.bamg_up_relax_type     = 11 # default 11
#hypre.bamg_coarse_relax_type = 11 # default 11

# must set either num_sweeps or (all 3) down/up/coarse_num_sweeps
hypre.bamg_num_sweeps        =  4 # default 2
#hypre.bamg_num_down_sweeps   = 2 # default 2
#hypre.bamg_num_up_sweeps     = 2 # default 2
#hypre.bamg_num_coarse_sweeps = 1 # default 1

hypre.bamg_max_levels  = 10 # default 20
hypre.bamg_strong_threshold = 0.25 # default 0.57
hypre.bamg_interp_type = 6    # default 0; see hypre/src/parcsr_ls/HYPRE_parcsr_ls.h HYPRE_BoomerAMGSetInterpType()

hypre.bamg_variant          = 0   # default 0; see hypre/src/parcsr_ls/HYPRE_parcsr_ls.h HYPRE_BoomerAMGSetVariant()
hypre.bamg_keep_transpose   = 1
hypre.bamg_min_coarse_size  = 1   # default 1
hypre.bamg_max_coarse_size  = 9   # default 9
hypre.bamg_pmax_elmts       = 3   # default 4
hypre.bamg_agg_num_levels   = 1   # default 0
hypre.bamg_agg_interp_type  = 7   # default 4; see hypre/src/parcsr_ls/HYPRE_parcsr_ls.h HYPRE_BoomerAMGSetAggInterpType()
hypre.bamg_agg_pmax_elmts   = 3   # default 0
hypre.bamg_trunc_factor     = 0.1 # default 0.1
hypre.bamg_set_restriction  = 0   # default 0

#bamg_non_galerkin_tol =
#bamg_non_galerkin_level_tols =
#bamg_non_galerkin_level_levels =
#bamg_non_galerkin_level_tols =

#bamg_smooth_type = 5 # default 6; see hypre/src/parcsr_ls/HYPRE_parcsr_ls.h HYPRE_BoomerAMGSetSmoothType()

# for smooth_type=5 (ParILUK) or 7 (Pilut) or 9 (Euclid)
#bamg_smooth_num_sweeps = 1
#bamg_smooth_num_levels = 1 # default 0 (no complex smoothers)

# for smooth_type=5 or 7
#bamg_ilu_max_iter = 1

# for smooth_type=5
#bamg_ilu_type = 0
#bamg_ilu_level = 0

# for smooth_type=7
#bamg_ilu_max_row_nnz =
#bamg_ilu_drop_tol =

# for smooth_type=9
#bamg_euclid_file =

# HYPRE GRMES solver settings .............................
hypre.verbose = 0
hypre.num_krylov     = 100 # default 50
#hypre.max_iterations = 200 # default 200
#hypre.rtol           =
#hypre.atol           =