Currently the CPR_OPTIONS card serves one purpose – to configure the AMG solver used as stage one of the two stage CPR preconditioner. This is the BOOMERAMG solver provided by the HYPRE package. A great number of configuration options for this are available, see for example the HYPRE technical manual if interested. The CPR_OPTIONS subcard and its subcard CPR_HYPRE_OPTIONS provide easy access to some of the most important of these AMG settings.

First we note that the CPR preconditioner in PFLOTRAN sets some parameters in BOOMERAMG automatically, so that the default AMG configuration is not as described in the HYPRE manual. The settings are as follows:

• Coarsening type is set to PMIS

• Interpolation type is set to EXT+I

• Relax type (all) is set to Jacobi

• The strong coupling threshold is set to 0.5.

This is the reason for the first CPR keyword:

• CPR_MANUAL_AMG_CONFIG: disables the automatic setting of AMG parameters as described above. Instead the default configuration of BOOMERAMG is used. You must use this keyword if it is desired to change any of the: coarsening type, interpolation type, smoother type, or strong threshold of the AMG part of the CPR preconditioner (see CPR_HYPRE_OPTIONS for how to do this), since any changes will be overridden otherwise.

• CPRAMGREPORT: causes detailed debugging information to be output from the AMG solver part of the CPR preconditioner. This is useful for confirming which AMG settings are being used. Not recommended for production runs.

## CPR_HYPRE_OPTIONS¶

The CPR_HYPRE_OPTIONS card collects keywords specifically related to the settings for the HYPRE BOOMERAMG AMG solver part of the CPR, as follows:

CPR HYPRE_OPTIONS
BOOMERAMG_COARSEN_TYPE <amg_coarsen_type>: [Falgout, PMIS, etc.]
BOOMERAMG_INTERPOLATION_TYPE <amg_interpolation_type>: [ext+i, classical, etc.]
BOOMERAMG_RELAX_TYPE_ALL <amg_relax_type>: [Jacobi, symmetric-SOR/Jacobi etc.]
BOOMERAMG_STRONG_THRESHOLD: <amg_strong_threshold>
BOOMERAMG_AGG_NL: <amg_aggressive_coarsening_levels>
END


Where:

• amg_coarsen_type: The coarsening method used to generate the algebraic ‘coarse grid’ in the AMG solver. Possible values are [CLJP, Ruge-Steuben, moddified Ruge-steuben, Falgout, PMIS, HMIS]. This is an exhaustive list of options available through PETSc/Hypre, note that PMIS and Falgout have been most extensively tested in the context of our CPR implementation and PMIS is recommended. Default is PMIS, or Falgout if CPR_MANUAL_AMG_CONFIG is used.

• amg_interpolation_type: The interpolation method used to relate solutions on algebraically coarse grids to finer ones in the AMG solver. Possible values are [classical, direct, multipass, multipass-wts, ext+i, ext+i-cc, standard, standard-wts, block, block-wtd, FF, FF1]. This is an exhaustive list of options available through PETSc/Hypre, note that ext+i and classical have been most extensively tested in the context of our CPR implementation and ext+i is recommended. Default is EXT+I, or classical if CPR_MANUAL_AMG_CONFIG is used.

• amg_relax_type: The classical solver (i.e. relaxer) type used as an approximate solver on each level of the AMG solver. possible values are [Jacobi, sequential-Gauss-Seidel, seqboundary-Gauss-Seidel, SOR/Jacobi, backward-SOR/Jacobi, symmetric-SOR/Jacobi l1scaled-SOR/Jacobi, Gaussian-elimination, CG, Chebyshev, FCF-Jacobi, l1scaled-Jacobi]. This is an exhaustive list of options available through PETSc/Hypre, note that Jacobi and symmetric-SOR/Jacobi have been most extensively tested in the context of our CPR implementation and Jacobi is recommended. Default is Jacobi, or symmetric-SOR/Jacobi if CPR_MANUAL_AMG_CONFIG is used.

• amg_strong_threshold: float between 0 and 1. Thresholding parameter used in the coarsening algorithm of the AMG solver. Default is 0.5, or 0.25 if CPR_MANUAL_AMG_CONFIG is used.

• amg_aggressive_coarseing_levels: integer. On how many levels to apply aggressive coarsening on the AMG solver. Default is 0.

Below is a more complex example:

LINEAR_SOLVER FLOW
ATOL 1D-8
RTOL 1D-8
MAXIT 50
KSP_TYPE FGMRES
GMRES_RESTART 50
GMRES_MODIFIED_GS
PC_TYPE CPR
CPR_OPTIONS
CPR_HYPRE_OPTIONS
BOOMERAMG_AGG_NL 1
END
END
END