|
| const parameters_type & | get_parameters () const |
| |
| std::unique_ptr< result_type > | generate (std::shared_ptr< const LinOp > system_matrix) const |
| |
|
std::unique_ptr< AbstractObject > | create_default (std::shared_ptr< const Executor > exec) const |
| |
|
std::unique_ptr< AbstractObject > | create_default () const |
| |
|
std::unique_ptr< AbstractObject > | clone (std::shared_ptr< const Executor > exec) const |
| |
|
std::unique_ptr< AbstractObject > | clone () const |
| |
|
AbstractObject * | copy_from (const PolymorphicObject *other) |
| |
|
template<typename Derived > |
| std::enable_if_t< std::is_base_of< PolymorphicObject, std::decay_t< Derived > >::value, AbstractObject > * | copy_from (std::unique_ptr< Derived > &&other) |
| |
|
template<typename Derived > |
| std::enable_if_t< std::is_base_of< PolymorphicObject, std::decay_t< Derived > >::value, AbstractObject > * | copy_from (const std::unique_ptr< Derived > &other) |
| |
|
AbstractObject * | copy_from (const std::shared_ptr< const PolymorphicObject > &other) |
| |
|
AbstractObject * | move_from (ptr_param< PolymorphicObject > other) |
| |
|
AbstractObject * | clear () |
| |
|
PolymorphicObject & | operator= (const PolymorphicObject &) |
| |
| std::unique_ptr< PolymorphicObject > | create_default (std::shared_ptr< const Executor > exec) const |
| |
| std::unique_ptr< PolymorphicObject > | create_default () const |
| |
| std::unique_ptr< PolymorphicObject > | clone (std::shared_ptr< const Executor > exec) const |
| |
| std::unique_ptr< PolymorphicObject > | clone () const |
| |
| PolymorphicObject * | copy_from (const PolymorphicObject *other) |
| |
| template<typename Derived , typename Deleter > |
| std::enable_if_t< std::is_base_of< PolymorphicObject, std::decay_t< Derived > >::value, PolymorphicObject > * | copy_from (std::unique_ptr< Derived, Deleter > &&other) |
| |
| template<typename Derived , typename Deleter > |
| std::enable_if_t< std::is_base_of< PolymorphicObject, std::decay_t< Derived > >::value, PolymorphicObject > * | copy_from (const std::unique_ptr< Derived, Deleter > &other) |
| |
| PolymorphicObject * | copy_from (const std::shared_ptr< const PolymorphicObject > &other) |
| |
| PolymorphicObject * | move_from (ptr_param< PolymorphicObject > other) |
| |
| PolymorphicObject * | clear () |
| |
| std::shared_ptr< const Executor > | get_executor () const noexcept |
| |
| void | add_logger (std::shared_ptr< const Logger > logger) override |
| |
| void | remove_logger (const Logger *logger) override |
| |
|
void | remove_logger (ptr_param< const Logger > logger) |
| |
| const std::vector< std::shared_ptr< const Logger > > & | get_loggers () const override |
| |
| void | clear_loggers () override |
| |
|
void | remove_logger (ptr_param< const Logger > logger) |
| |
| void | convert_to (result_type *result) const override |
| |
| void | move_to (result_type *result) override |
| |
|
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::experimental::reorder::Mc64< ValueType, IndexType >
MC64 is an algorithm for permuting large entries to the diagonal of a sparse matrix. This approach can increase numerical stability of e.g. an LU factorization without pivoting. Under the assumption of working on a nonsingular square matrix, the algorithm computes a minimum weight perfect matching on a weighted edge bipartite graph of the matrix. It is described in detail in "On Algorithms for Permuting Large Entries to the
Diagonal of a Sparse Matrix" (Duff, Koster, 2001, DOI: 10.1137/S0895479899358443). There are two strategies for choosing the weights supported:
- Maximizing the product of the absolute values on the diagonal. For this strategy, the weights are computed as \(c(i, j) = \log_2(a_i) - \log_2(|a(i, j)|)\) if \(a(i, j) \neq 0 \) and \(c(i, j) = \infty\) otherwise. Here, a_i is the maximum absolute value in row i of the matrix A. In this case, the implementation computes a row permutation P and row and column scaling coefficients L and R such that the matrix P*L*A*R has values with unity absolute value on the diagonal and smaller or equal entries everywhere else.
- Maximizing the sum of the absolute values on the diagonal. For this strategy, the weights are computed as \(c(i, j) = a_i - |a(i, j)|\) if \(a(i, j) \neq 0\) and \(c(i, j) =
\infty\) otherwise. In this case, no scaling coefficients are computed.
This class creates a Combination of two ScaledPermutations representing the row and column permutation and scaling factors computed by this algorithm.
- 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 |