Matrix permutation operations.  
More...
#include "slu_ddefs.h"
#include "colamd.h"
|  | 
| int | genmmd_ (int *neqns, int_t *xadj, int_t *adjncy, int *invp, int *perm, int_t *delta, int_t *dhead, int_t *qsize, int_t *llist, int_t *marker, int_t *maxint, int_t *nofsub) | 
|  | 
| void | get_colamd (const int m, const int n, const int_t nnz, int_t *colptr, int_t *rowind, int *perm_c) | 
|  | Get COLAMD's permutation for matrix A.  More... 
 | 
|  | 
| void | get_metis (int n, int_t bnz, int_t *b_colptr, int_t *b_rowind, int *perm_c) | 
|  | Get METIS' permutation for matrix B.  More... 
 | 
|  | 
| void | getata (const int m, const int n, const int_t nz, int_t *colptr, int_t *rowind, int_t *atanz, int_t **ata_colptr, int_t **ata_rowind) | 
|  | Form the structure of A'*A.  More... 
 | 
|  | 
| void | at_plus_a (const int n, const int_t nz, int_t *colptr, int_t *rowind, int_t *bnz, int_t **b_colptr, int_t **b_rowind) | 
|  | Form the structure of A'+A.  More... 
 | 
|  | 
| void | get_perm_c (int ispec, SuperMatrix *A, int *perm_c) | 
|  | Obtains a permutation matrix by applying the multiple minimum degree ordering code.  More... 
 | 
|  | 
◆ METISOPTIONS
◆ at_plus_a()
A is an n-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 (b_colptr, b_rowind).
- Parameters
- 
  
    | [in] | n | number of columns in matrix A. |  | [in] | nz | number of nonzeros in matrix A |  | [in] | colptr | column pointer of size n+1 for matrix A. |  | [in] | rowind | row indices of size nz for matrix A. |  | [out] | bnz | on exit, returns the actual number of nonzeros in matrix A'*A. |  | [out] | b_colptr | column pointer of size n+1 for matrix A'+A. |  | [out] | b_rowind | row indices of size bnz for matrix A'+A. |  
 
 
 
◆ genmmd_()
      
        
          | int genmmd_ | ( | int * | neqns, | 
        
          |  |  | int_t * | xadj, | 
        
          |  |  | int_t * | adjncy, | 
        
          |  |  | int * | invp, | 
        
          |  |  | int * | perm, | 
        
          |  |  | int_t * | delta, | 
        
          |  |  | int_t * | dhead, | 
        
          |  |  | int_t * | qsize, | 
        
          |  |  | int_t * | llist, | 
        
          |  |  | int_t * | marker, | 
        
          |  |  | int_t * | maxint, | 
        
          |  |  | int_t * | nofsub | 
        
          |  | ) |  |  | 
      
 
 
◆ get_colamd()
      
        
          | void get_colamd | ( | const int | m, | 
        
          |  |  | const int | n, | 
        
          |  |  | const int_t | nnz, | 
        
          |  |  | int_t * | colptr, | 
        
          |  |  | int_t * | rowind, | 
        
          |  |  | int * | perm_c | 
        
          |  | ) |  |  | 
      
 
- Parameters
- 
  
    | [in] | m | Number of rows in matrix A. |  | [in] | n | Number of columns in matrix A. |  | [in] | nnz | Number of nonzeros in matrix A. |  | [in] | colptr | Column pointer of size n+1 for matrix A. |  | [in] | rowind | Row indices of size nnz for matrix A. |  | [out] | perm_c | Column permutation vector. |  
 
 
 
◆ get_metis()
      
        
          | void get_metis | ( | int | n, | 
        
          |  |  | int_t | bnz, | 
        
          |  |  | int_t * | b_colptr, | 
        
          |  |  | int_t * | b_rowind, | 
        
          |  |  | int * | perm_c | 
        
          |  | ) |  |  | 
      
 
- Parameters
- 
  
    | [in] | n | Number of columns in matrix B. |  | [in] | bnz | Number of nonzeros in matrix B. |  | [in] | b_colptr | Column pointer of size n+1 for matrix B. |  | [in] | b_rowind | Row indices of size bnz for matrix B. |  | [out] | perm_c | Column permutation vector. |  
 
 
 
◆ get_perm_c()
      
        
          | void get_perm_c | ( | int | ispec, | 
        
          |  |  | SuperMatrix * | A, | 
        
          |  |  | int * | perm_c | 
        
          |  | ) |  |  | 
      
 
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.
- Parameters
- 
  
    | [in] | ispec | Specifies the type of column ordering to reduce fill: = 1: minimum degree on the structure of A^T * A
 = 2: minimum degree on the structure of A^T + A
 = 3: approximate minimum degree for unsymmetric matrices
 If ispec == 0, the natural ordering (i.e., Pc = I) is returned.
 |  | [in] | A | 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 = NC; Dtype = _D; Mtype = GE. In the future, more general A can be handled. |  | [out] | perm_c | 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. |  
 
 
 
◆ getata()
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
 
- 
Do I need to withhold the dense rows? 
- 
How do I know the number of nonzeros in A'*A? 
- Parameters
- 
  
    | [in] | m | number of rows in matrix A. |  | [in] | n | number of columns in matrix A. |  | [in] | nz | number of nonzeros in matrix A |  | [in] | colptr | column pointer of size n+1 for matrix A. |  | [in] | rowind | row indices of size nz for matrix A. |  | [out] | atanz | on exit, returns the actual number of nonzeros in matrix A'*A. |  | [out] | ata_colptr | column pointer of size n+1 for matrix A'*A. |  | [out] | ata_rowind | row indices of size atanz for matrix A'*A. |