Gets matrix permutation.
-- Distributed SuperLU routine (version 2.1) --
Lawrence Berkeley National Lab, Univ. of California Berkeley,
November 1, 2007
Feburary 20, 2008
Last update: 7/27/2011 fix a bug with metis ordering on empty graph.
Purpose
GET_PERM_C_DIST obtains a permutation matrix Pc, by applying the multiple
minimum degree ordering code by Joseph Liu to matrix A'*A or A+A',
or using approximate minimum degree column ordering by Davis et. al.
The LU factorization of A*Pc tends to have less fill than the LU
factorization of A.
Arguments
ispec (input) colperm_t
Specifies what type of column permutation to use to reduce fill.
= NATURAL: natural ordering (i.e., Pc = I)
= MMD_AT_PLUS_A: minimum degree ordering on structure of A'+A
= MMD_ATA: minimum degree ordering on structure of A'*A
= METIS_AT_PLUS_A: MeTis on A'+A
A (input) SuperMatrix*
Matrix A in A*X=B, of dimension (A->nrow, A->ncol). The number
of the linear equations is A->nrow. Currently, the type of A
can be: Stype = SLU_NC; Dtype = SLU_D; Mtype = SLU_GE.
In the future, more general A can be handled.
perm_c (output) int*
Column permutation vector of size A->ncol, which defines the
permutation matrix Pc; perm_c[i] = j means column i of A is
in position j in A*Pc.
Purpose
Form the structure of A'*A. A is an m-by-n matrix in column oriented
format represented by (colptr, rowind). The output A'*A is in column
oriented format (symmetrically, also row oriented), represented by
(ata_colptr, ata_rowind).
This routine is modified from GETATA routine by Tim Davis.
The complexity of this algorithm is: SUM_{i=1,m} r(i)^2,
i.e., the sum of the square of the row counts.
Questions
o Do I need to withhold the dense rows?
o How do I know the number of nonzeros in A'*A?