|
std::shared_ptr< const PermutationMatrix > | get_permutation () const |
| Gets the permutation (permutation matrix, output of the algorithm) of the linear operator. More...
|
|
std::shared_ptr< const PermutationMatrix > | get_inverse_permutation () const |
| Gets the inverse permutation (permutation matrix, output of the algorithm) of the linear operator. More...
|
|
const parameters_type & | get_parameters () const |
|
std::unique_ptr< Rcm< ValueType, IndexType > > | create_default (std::shared_ptr< const Executor > exec) const |
|
std::unique_ptr< Rcm< ValueType, IndexType > > | create_default () const |
|
std::unique_ptr< Rcm< ValueType, IndexType > > | clone (std::shared_ptr< const Executor > exec) const |
|
std::unique_ptr< Rcm< ValueType, IndexType > > | clone () const |
|
Rcm< ValueType, IndexType > * | copy_from (const PolymorphicObject *other) |
|
std::enable_if_t< std::is_base_of< PolymorphicObject, std::decay_t< Derived > >::value, Rcm< ValueType, IndexType > > * | copy_from (std::unique_ptr< Derived > &&other) |
|
std::enable_if_t< std::is_base_of< PolymorphicObject, std::decay_t< Derived > >::value, Rcm< ValueType, IndexType > > * | copy_from (const std::unique_ptr< Derived > &other) |
|
Rcm< ValueType, IndexType > * | copy_from (const std::shared_ptr< const PolymorphicObject > &other) |
|
Rcm< ValueType, IndexType > * | move_from (ptr_param< PolymorphicObject > other) |
|
Rcm< ValueType, IndexType > * | clear () |
|
void | convert_to (result_type *result) const override |
| Converts the implementer to an object of type result_type. More...
|
|
void | move_to (result_type *result) override |
| Converts the implementer to an object of type result_type by moving data from this object. More...
|
|
void | convert_to (ptr_param< result_type > result) const |
|
void | move_to (ptr_param< result_type > result) |
|
template<typename ValueType = default_precision, typename IndexType = int32>
class gko::reorder::Rcm< ValueType, IndexType >
Rcm (Reverse Cuthill-McKee) is a reordering algorithm minimizing the bandwidth of a matrix.
Such a reordering typically also significantly reduces fill-in, though usually not as effective as more complex algorithms, specifically AMD and nested dissection schemes. The advantage of this algorithm is its low runtime. It requires the input matrix to be structurally symmetric.
- Note
- This class is derived from polymorphic object but is not a LinOp as it does not make sense for this class to implement the apply methods. The objective of this class is to generate a reordering/permutation vector (in the form of the Permutation matrix), which can be used to apply to reorder a matrix as required.
There are two "starting strategies" currently available: minimum degree and pseudo-peripheral. These strategies control how a starting vertex for a connected component is chosen, which is then renumbered as first vertex in the component, starting the algorithm from there. In general, the bandwidths obtained by choosing a pseudo-peripheral vertex are slightly smaller than those obtained from choosing a vertex of minimum degree. On the other hand, this strategy is much more expensive, relatively. The algorithm for finding a pseudo-peripheral vertex as described in "Computer Solution of Sparse Linear Systems" (George, Liu, Ng, Oak Ridge National Laboratory, 1994) is implemented here.
- Template Parameters
-
ValueType | Type of the values of all matrices used in this class |
IndexType | Type of the indices of all matrices used in this class |