Permutations

Permutation vectors

In order to represent arbitrary permutations, Elemental recently switched from LAPACK-style pivot sequence representations to general permutation vectors, where entry i of the permutation vector p contains the column index of the nonzero entry in row i of the corresponding permutation matrix.

PermuteCols

void PermuteCols(Matrix<T> &A, const Matrix<int> &p)
void PermuteCols(AbstractDistMatrix<T> &A, const AbstractDistMatrix<int> &p)
void PermuteCols(Matrix<T> &A, const Matrix<int> &p, const Matrix<int> &pInv)
void PermuteCols(AbstractDistMatrix<T> &A, const AbstractDistMatrix<int> &p, const AbstractDistMatrix<int> &pInv)

Provide the inverse permutations so that they do not need to be internally computed and discarded.

PermuteRows

void PermuteRows(Matrix<T> &A, const Matrix<int> &p)
void PermuteRows(AbstractDistMatrix<T> &A, const AbstractDistMatrix<int> &p)
void PermuteRows(Matrix<T> &A, const Matrix<int> &p, const Matrix<int> &pInv)
void PermuteRows(AbstractDistMatrix<T> &A, const AbstractDistMatrix<int> &p, const AbstractDistMatrix<int> &pInv)

Provide the inverse permutations so that they do not need to be internally computed and discarded.

InversePermuteCols

void InversePermuteCols(Matrix<T> &A, const Matrix<int> &p)
void InversePermuteCols(AbstractDistMatrix<T> &A, const AbstractDistMatrix<int> &p)

InversePermuteRows

void InversePermuteRows(Matrix<T> &A, const Matrix<int> &p)
void InversePermuteRows(AbstractDistMatrix<T> &A, const AbstractDistMatrix<int> &p)

InvertPermutation

void InvertPermutation(const Matrix<int> &p, Matrix<int> &pInv)
void InvertPermutation(const AbstractDistMatrix<int> &p, AbstractDistMatrix<int> &pInv)

Compute the inverse permutation matrix in compressed (vector) form.

ExplicitPermutation

void ExplicitPermutation(const Matrix<int> &p, Matrix<int> &P)
void ExplicitPermutation(const AbstractDistMatrix<int> &p, AbstractDistMatrix<int> &P)

Return the full permutation matrix, P, represented by the permutation vector p.

PermutationParity

bool PermutationParity(const Matrix<int> &p)
bool PermutationParity(const AbstractDistMatrix<int> &p)

Return true if the given permutation is odd. The parity is determined in linear time by finding the decomposition of the inverse of the permutation as a product of transpositions.

PermutationMeta

type PermutationMeta
Int align
mpi::Comm comm
std::vector<int> sendCounts
std::vector<int> sendDispls
std::vector<int> sendIdx
std::vector<int> sendRanks
std::vector<int> recvCounts
std::vector<int> recvDispls
std::vector<int> recvIdx
std::vector<int> recvRanks
int TotalSend() const
int TotalRecv() const
void ScaleUp(int length)
void ScaleDown(int length)
PermutationMeta(const AbstractDistMatrix<int> &p, const AbstractDistMatrix<int> &pInv)

Pivot sequences

These routines make use of LAPACK-style pivot sequence vectors, where the pivot sequence vector p implies the sequence of swaps \((0,p_0)\), \((1,p_1)\), ..., \((n-1,p_{n-1})\). Elemental used to follow this convention when returning permutations from factorizations, but clearly this representation is somewhat restrictive, as routines which perform multiple swaps for each pivot (e.g., some variants of Bunch-Kaufman) cannot be handled.

ApplyColPivots

void ApplyColPivots(Matrix<T> &A, const Matrix<int> &pivots)
void ApplyColPivots(AbstractDistMatrix<T> &A, const AbstractDistMatrix<int> &pivots)

ApplyInverseColPivots

void ApplyInverseColPivots(Matrix<T> &A, const Matrix<int> &pivots)
void ApplyInverseColPivots(AbstractDistMatrix<T> &A, const AbstractDistMatrix<int> &pivots)

ApplyRowPivots

void ApplyRowPivots(Matrix<T> &A, const Matrix<int> &pivots)
void ApplyRowPivots(AbstractDistMatrix<T> &A, const AbstractDistMatrix<int> &pivots)

ApplyInverseRowPivots

void ApplyInverseRowPivots(Matrix<T> &A, const Matrix<int> &pivots)
void ApplyInverseRowPivots(AbstractDistMatrix<T> &A, const AbstractDistMatrix<int> &pivots)

ApplySymmetricPivots

void ApplySymmetricPivots(UpperOrLower uplo, Matrix<T> &A, const Matrix<int> &pivots, bool conjugate = false)
void ApplySymmetricPivots(UpperOrLower uplo, AbstractDistMatrix<T> &A, const AbstractDistMatrix<int> &pivots, bool conjugate = false)

ApplyInverseSymmetricPivots

void ApplyInverseSymmetricPivots(UpperOrLower uplo, Matrix<T> &A, const Matrix<int> &pivots, bool conjugate = false)
void ApplyInverseSymmetricPivots(UpperOrLower uplo, AbstractDistMatrix<T> &A, const AbstractDistMatrix<int> &pivots, bool conjugate = false)

PivotParity

bool PivotParity(const Matrix<int> &pivots)
bool PivotParity(const AbstractDistMatrix<int> &pivots)

Return true if the permutation implied by the pivot sequence is odd. This is determined by determining if an odd number of non-trivial transpositions are performed.

Converting pivot sequences to permutations

PivotsToPermutation

void PivotsToPermutation(const Matrix<int> &pivots, Matrix<int> &p, int offset = 0)
void PivotsToPermutation(const AbstractDistMatrix<int> &pivots, AbstractDistMatrix<int> &p, int offset = 0)

PivotsToInversePermutation

void PivotsToInversePermutation(const Matrix<int> &pivots, Matrix<int> &pInv, int offset = 0)
void PivotsToInversePermutation(const AbstractDistMatrix<int> &pivots, AbstractDistMatrix<int> &pInv, int offset = 0)

PivotsToPartialPermutation

void PivotsToPartialPermutation(const Matrix<int> &pivots, Matrix<int> &p, Matrix<int> &pInv, int offset = 0)
void PivotsToPartialPermutation(const AbstractDistMatrix<int> &pivots, AbstractDistMatrix<int> &p, AbstractDistMatrix<int> &pInv, int offset = 0)