Skip to content

Allow orthoManagers to be configured using nested parameter list

Created by: jjellio

Update OrthOmanagers and Belos Pseudo Block GMRES to allow parameterlist configurations

API works as: Solver Parameter List: -- Orthogonalization : DGKS | ICGS | IMGS | TSQR -- DGKS (sublist) ---- ... -- ICGS (sublist) ---- ...

Ortho parameters are valid if they are acceptable as setParameters() This allows a user to fully configure the orthogonalizer.

WARNING: It is not clear how to handle the "Orthogonalization Constant" (kappa) that is baked into GMRES. Currently, this constant's default is enforced at the GMRES level.

Additions

  1. allows the use of a sublist to control the orthomanager The solver takes a string parameter named "Orthogonalization" "Orthogonalization" accepts the same values it always has: DGKS, ICGS, IMGS, TSQR

    The solver constructs its default parameter list by calling the OrthoManager's new static function, getDefaultParameters. A sublist is added to the solver's paramater list named DGKS, ICGS, IMGS, and TSQR.

    An orthoManager is instantiated based off the Orthogonalization name, and the sublist if present, is passed to the constructor.

    This required the addition of: static template getDefaultParameters ()

    And the modification of: getValidParameters in the solver setParameters in the solver

    Note: The current implementations convolute getValidParameters with getDefaultParameters. A small change would be to have getValidParameters call getDefaultParameters. The former uses the defaults, and performs validation. The latter provides defaults without needed the class to be instantiated.

    The motivation for getDefaultParameters is that we can validate parameters without instantiating an orthoManager. E.g., we can query acceptable parameters without instantiation, and then validate against this list at the solver level.

    Orthogonalization sublists are validated. This will ensure that if a user provides a parameter, it will either be used or an error generated. This resolves the current problem, where apps and examples set the number of Ortho sweeps, but this does nothing.

  2. Adjusted the labels used for Teuchos timers inside the orthoManagers. Labels now take the form: label_ + kernel_name + [ortho_passes] + detailed label E.g., Belos: ICGS[1]: Ortho (Inner Product)

    This addresses a performance concern, where users experience slow performance because the default ortho kernel is robust numerically, but has slow performance relative to classical gram schmidt. This is a compromise between changing the default, and ignoring this user issue. This way, users are informed as best as possible, and performance

@mhoemmen @hkthorn

Merge request reports