gko::multigrid::Pmis#
Classical algebraic-multigrid coarsening by a parallel modified independent set.
Pmis splits the rows of a non-distributed matrix into coarse and fine points
using the strength-of-connection threshold strength_threshold (default 0.25),
builds the prolongation by direct interpolation, and sets the restriction to its
transpose. The C/F splitting can differ between CPU and GPU executors, and
generation throws gko::InvalidStateError when the coarse level would be empty.
-
template<typename ValueType = default_precision, typename IndexType = int32>
class Pmis # Inherits from
public gko::LinOp
public gko::multigrid::EnableMultigridLevel<default_precision>
Parallel modified independent set (Pmis
) is the classical coarsening method introduced in the paper H. De Sterck et al., “Reducing complexity in parallel
algebraic multigrid preconditioners”.
Pmis creates the coarse- and fine-points group according to the matrix value not the structure.
Note
The restriction is \(P^T\) and the coarse operator the Galerkin product \(P^T A P\), which assumes a symmetric positive definite system. Non-symmetric systems still coarsen, but without a convergence guarantee.
- Template Parameters:
ValueType – precision of matrix elements
IndexType – precision of matrix indices
Public Functions
Public Static Functions
- static parameters_type parse(
- const config::pnode &config,
- const config::registry &context,
- const config::type_descriptor &td_for_child = config::make_type_descriptor<ValueType, IndexType>(),
Create the parameters from the property_tree. Because this is directly tied to the specific type, the value/index type settings within config are ignored and type_descriptor is only used for children configs.
- Parameters:
config – the property tree for setting
context – the registry
td_for_child – the type descriptor for children configs. The default uses the value/index type of this class.
- Returns:
parameters
-
struct parameters_type#
Public Members
-
remove_complex<ValueType> strength_threshold#
strength_threshold gives the threshold to decide which elements strongly depends on another element. if |mtx(i, j)| >= strength_threshold * max (k!=i) abs(mtx(i, k)), i strongly depends on j. This value is usually chosen between 0.25 and 0.5. We use the same default value 0.25 as HYPRE.
-
bool skip_sorting#
The
system_matrix, which will be given to this factory, must be sorted (first by row, then by column) in order for the algorithm to work. If it is known that the matrix will be sorted, this parameter can be set totrueto skip the sorting (therefore, shortening the runtime). However, if it is unknown or if the matrix is known to be not sorted, it must remainfalse, otherwise, this multigrid_level might be incorrect.
-
remove_complex<ValueType> strength_threshold#
See also
H. De Sterck, U. M. Yang, J. J. Heys, Reducing complexity in parallel algebraic multigrid preconditioners. SIAM Journal on Matrix Analysis and Applications, 27 (4), 1019-1039, 2006. https://doi.org/10.1137/040615729