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

inline std::shared_ptr<const LinOp> get_system_matrix() const#

Returns the system operator (matrix) of the linear system.

Returns:

the system operator (matrix)

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 to true to skip the sorting (therefore, shortening the runtime). However, if it is unknown or if the matrix is known to be not sorted, it must remain false, otherwise, this multigrid_level might be incorrect.

See also