SuperLU Distributed 8.2.1
Distributed memory sparse direct solver
get_perm_c.c File Reference

Gets matrix permutation. More...

#include "superlu_dist_config.h"
#include "superlu_ddefs.h"
Include dependency graph for get_perm_c.c:

Macros

#define METISOPTIONS   40
 

Functions

void get_metis_dist (int_t n, int_t bnz, int_t *b_colptr, int_t *b_rowind, int_t *perm_c)
 
void get_colamd_dist (const int m, const int n, const int nnz, int_t *colptr, int_t *rowind, int_t *perm_c)
 
void getata_dist (const int_t m, const int_t n, const int_t nz, int_t *colptr, int_t *rowind, int_t *atanz, int_t **ata_colptr, int_t **ata_rowind)
 
void at_plus_a_dist (const int_t n, const int_t nz, int_t *colptr, int_t *rowind, int_t *bnz, int_t **b_colptr, int_t **b_rowind)
 
void get_perm_c_dist (int_t pnum, int_t ispec, SuperMatrix *A, int_t *perm_c)
 

Detailed Description

Gets matrix permutation.

Copyright (c) 2003, The Regents of the University of California, through Lawrence Berkeley National Laboratory (subject to receipt of any required approvals from U.S. Dept. of Energy)

All rights reserved.

The source code is distributed under BSD license, see the file License.txt at the top-level directory.

-- 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.

Macro Definition Documentation

◆ METISOPTIONS

#define METISOPTIONS   40

Function Documentation

◆ at_plus_a_dist()

void at_plus_a_dist ( const int_t  n,
const int_t  nz,
int_t colptr,
int_t rowind,
int_t bnz,
int_t **  b_colptr,
int_t **  b_rowind 
)
Purpose
=======

Form the structure of A'+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).

◆ get_colamd_dist()

void get_colamd_dist ( const int  m,
const int  n,
const int  nnz,
int_t colptr,
int_t rowind,
int_t perm_c 
)
Here is the call graph for this function:

◆ get_metis_dist()

void get_metis_dist ( int_t  n,
int_t  bnz,
int_t b_colptr,
int_t b_rowind,
int_t perm_c 
)
Here is the caller graph for this function:

◆ get_perm_c_dist()

void get_perm_c_dist ( int_t  pnum,
int_t  ispec,
SuperMatrix A,
int_t perm_c 
)
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.
Here is the call graph for this function:

◆ getata_dist()

void getata_dist ( const int_t  m,
const int_t  n,
const int_t  nz,
int_t colptr,
int_t rowind,
int_t atanz,
int_t **  ata_colptr,
int_t **  ata_rowind 
)
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?