MC64 is an algorithm for permuting large entries to the diagonal of a sparse matrix.
More...
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, https://doi.org/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 |