SuperLU Distributed 8.1.2
Distributed memory sparse direct solver
psymbfact.c File Reference

Implements parallel symbolic factorization. More...

#include <limits.h>
#include <math.h>
#include "superlu_ddefs.h"
#include "psymbfact.h"
Include dependency graph for psymbfact.c:

Macros

#define INT_T_MAX   LONG_MAX
 

Functions

static int_tintMalloc_symbfact (int_t)
 
static int_tintCalloc_symbfact (int_t)
 
static int_t initParmsAndStats (superlu_dist_options_t *options, psymbfact_stat_t *PS)
 
static void estimate_memUsage (int_t, int, superlu_dist_mem_usage_t *, float *, float *, Pslu_freeable_t *, Llu_symbfact_t *, vtcsInfo_symbfact_t *, comm_symbfact_t *, psymbfact_stat_t *)
 
static void symbfact_free (int, int, Llu_symbfact_t *, vtcsInfo_symbfact_t *, comm_symbfact_t *)
 
static int_t denseSep_symbfact (int, int_t, int, int, int, int_t *, int_t *, int, int, int, int_t, int_t, int_t *, int_t *, int_t *, int_t *, int_t *, MPI_Comm, MPI_Comm *, Llu_symbfact_t *, Pslu_freeable_t *_freeable, vtcsInfo_symbfact_t *, comm_symbfact_t *, psymbfact_stat_t *)
 
static int_t dnsUpSeps_symbfact (int_t, int, int, int, int, int_t *, int_t *, int_t, Llu_symbfact_t *, Pslu_freeable_t *, vtcsInfo_symbfact_t *, comm_symbfact_t *, psymbfact_stat_t *, int_t *, int_t *, int_t *)
 
static void intraLvl_symbfact (SuperMatrix *, int, int, int, int, int, int_t *, int_t *, int, int, int_t, int_t, Pslu_freeable_t *, Llu_symbfact_t *, vtcsInfo_symbfact_t *, comm_symbfact_t *, psymbfact_stat_t *, int_t *, int_t *, int_t *, int_t *, int_t *, int_t *, int_t *, MPI_Comm, MPI_Comm *)
 
static void initLvl_symbfact (int_t, int, int_t, int_t, Pslu_freeable_t *, Llu_symbfact_t *, vtcsInfo_symbfact_t *, psymbfact_stat_t *, MPI_Comm, int_t *, int_t, int_t)
 
static void createComm (int, int, MPI_Comm *, MPI_Comm *)
 
static void freeComm (int, int, MPI_Comm *, MPI_Comm *)
 
static void domain_symbfact (SuperMatrix *, int, int, int, int, int, int_t *, int_t *, int_t, int_t, Pslu_freeable_t *, Llu_symbfact_t *, vtcsInfo_symbfact_t *, comm_symbfact_t *, psymbfact_stat_t *, int_t *, int_t *, int_t *, int_t *, int_t *, int_t *, int_t *)
 
static float allocPrune_domain (superlu_dist_options_t *, int_t, int_t, Llu_symbfact_t *, vtcsInfo_symbfact_t *, psymbfact_stat_t *)
 
static float allocPrune_lvl (superlu_dist_options_t *, Llu_symbfact_t *, vtcsInfo_symbfact_t *, psymbfact_stat_t *)
 
static int symbfact_alloc (superlu_dist_options_t *, int_t, int, Pslu_freeable_t *, Llu_symbfact_t *, vtcsInfo_symbfact_t *, comm_symbfact_t *, psymbfact_stat_t *)
 
static float symbfact_mapVtcs (int, int, int, SuperMatrix *, int_t *, int_t *, Pslu_freeable_t *, vtcsInfo_symbfact_t *, int_t *, int_t, psymbfact_stat_t *)
 
static void symbfact_distributeMatrix (int, int, int, SuperMatrix *, int_t *, int_t *, matrix_symbfact_t *, Pslu_freeable_t *, vtcsInfo_symbfact_t *, int_t *, MPI_Comm *)
 
static int_t interLvl_symbfact (SuperMatrix *, int, int, int, int, int, int, int, int_t *, int_t *, int_t *, int_t *, int_t *, int_t *, int_t *, Llu_symbfact_t *, Pslu_freeable_t *, comm_symbfact_t *, vtcsInfo_symbfact_t *, psymbfact_stat_t *, MPI_Comm, MPI_Comm *)
 
static float cntsVtcs (int_t, int, int, Pslu_freeable_t *, Llu_symbfact_t *, vtcsInfo_symbfact_t *, int_t *, int_t *, int_t *, psymbfact_stat_t *, MPI_Comm *)
 
float symbfact_dist (superlu_dist_options_t *options, int nprocs_num, int nprocs_symb, SuperMatrix *A, int_t *perm_c, int_t *perm_r, int_t *sizes, int_t *fstVtxSep, Pslu_freeable_t *Pslu_freeable, MPI_Comm *num_comm, MPI_Comm *symb_comm, superlu_dist_mem_usage_t *symb_mem_usage)
 
static int_t symbfact_vtx (int_t n, int iam, int_t vtx, int_t vtx_lid, int_t vtx_prid, int_t computeL, int domain_symb, int_t fstVtx, int_t lstVtx, int_t snrep_lid, int_t szSn, int_t *p_next, int_t *marker, int_t *sub_rcvd, int_t sub_rcvd_sz, Pslu_freeable_t *Pslu_freeable, Llu_symbfact_t *Llu_symbfact, vtcsInfo_symbfact_t *VInfo, psymbfact_stat_t *PS, int_t *p_neltsVtxInit, int_t *p_neltsVtx, int_t *p_neltsVtx_CSep, int_t *p_neltsZrVtx, int_t *p_neltsMatched, int_t mark_vtx, int_t *p_prval_curvtx, int_t vtx_bel_othSn, int_t *p_vtx_bel_mySn)
 
static int_t updateRcvd_prGraph (int_t n, int iam, int_t *sub_rcvd, int_t sub_rcvd_sz, int_t fstVtx_toUpd, int_t lstVtx_toUpd, int_t pr_offset, int computeL, int_t *marker, Pslu_freeable_t *Pslu_freeable, Llu_symbfact_t *Llu_symbfact, vtcsInfo_symbfact_t *VInfo, psymbfact_stat_t *PS)
 
static int_t update_prGraph (int iam, int_t n, int_t fstVtx_blk, int_t lstVtx_blk, int_t snrep_lid, int_t pr_offset, int_t prval_cursn, int_t xsub_snp1, int computeL, Pslu_freeable_t *Pslu_freeable, Llu_symbfact_t *Llu_symbfact, psymbfact_stat_t *PS)
 
static int_t blk_symbfact (SuperMatrix *A, int iam, int lvl, int szSep, int ind_sizes1, int ind_sizes2, int_t *sizes, int_t *fstVtxSep, int_t fstVtx_loc, int_t fstVtx_blk, int_t lstVtx_blk, int_t *lsub_rcvd, int_t lsub_rcvd_sz, int_t *usub_rcvd, int_t usub_rcvd_sz, Pslu_freeable_t *Pslu_freeable, Llu_symbfact_t *Llu_symbfact, vtcsInfo_symbfact_t *VInfo, comm_symbfact_t *CS, psymbfact_stat_t *PS, int_t *marker, int_t *p_mark, int_t *p_nextl, int_t *p_nextu, int_t *p_neltsZr, int_t *p_neltsTotal, int_t *p_nsuper_loc)
 
static int_t expand_RL (int_t computeRcvd, int_t n, int iam, int_t *lsub_rcvd, int_t lsub_rcvd_sz, int_t *usub_rcvd, int_t usub_rcvd_sz, int_t vtxXp, int_t vtx_upd_pr, int_t lstVtx_upd_pr, int_t fstVtx_srcUpd, int_t lstVtx_srcUpd, int_t fstVtx_toUpd, int_t lstVtx_toUpd, int_t nvtcs_toUpd, int computeL, int_t *pmarkl, int_t *marker, Pslu_freeable_t *Pslu_freeable, Llu_symbfact_t *Llu_symbfact, vtcsInfo_symbfact_t *VInfo, psymbfact_stat_t *PS)
 
static int_t rl_update (int computeRcvd, int_t n, int iam, int_t *lsub_rcvd, int_t lsub_rcvd_sz, int_t *usub_rcvd, int_t usub_rcvd_sz, int_t fstVtx_srcUpd, int_t lstVtx_srcUpd, int_t indBlk_srcUpd, int_t fstVtx_toUpd, int_t lstVtx_toUpd, int_t nvtcs_toUpd, int computeL, int_t *pmarkl, int_t *marker, Pslu_freeable_t *Pslu_freeable, Llu_symbfact_t *Llu_symbfact, vtcsInfo_symbfact_t *VInfo, psymbfact_stat_t *PS)
 
static int_t dnsCurSep_symbfact (int_t n, int iam, int ind_sizes1, int ind_sizes2, int_t *sizes, int_t *fstVtxSep, int szSep, int npNode, int_t rcvd_dnsSep, int_t *p_nextl, int_t *p_nextu, int_t *p_mark, int_t *p_nsuper_loc, int_t *marker, MPI_Comm ndCom, Llu_symbfact_t *Llu_symbfact, Pslu_freeable_t *Pslu_freeable, vtcsInfo_symbfact_t *VInfo, comm_symbfact_t *CS, psymbfact_stat_t *PS)
 

Detailed Description

Implements parallel symbolic factorization.

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.

-- Parallel symbolic factorization routine  (version 2.3) --
Lawrence Berkeley National Lab, Univ. of California Berkeley - July 2003
INRIA France - January 2004
Laura Grigori

November 1, 2007
Feburary 20, 2008
October 15, 2008
January 28, 2018

The function symbfact_dist implements the parallel symbolic factorization
algorithm described in the paper:

Parallel Symbolic Factorization for Sparse LU with Static Pivoting,
Laura Grigori, James W. Demmel and Xiaoye S. Li,
Pages 1289-1314, SIAM Journal on Scientific Computing, Volume 29, Issue 3.

Macro Definition Documentation

◆ INT_T_MAX

#define INT_T_MAX   LONG_MAX

Function Documentation

◆ allocPrune_domain()

static float allocPrune_domain ( superlu_dist_options_t options,
int_t  fstVtx,
int_t  lstVtx,
Llu_symbfact_t Llu_symbfact,
vtcsInfo_symbfact_t VInfo,
psymbfact_stat_t PS 
)
static
Allocate storage for data structures necessary for pruned graphs.
For those unpredictable size, make a guess as FILL * n.
Return value:
    0 if enough memory was available;
    otherwise, return the amount of space intended to allocate 
    when memory allocation failure occurred.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ allocPrune_lvl()

static float allocPrune_lvl ( superlu_dist_options_t options,
Llu_symbfact_t Llu_symbfact,
vtcsInfo_symbfact_t VInfo,
psymbfact_stat_t PS 
)
static
Allocate storage for data structures necessary for pruned graphs.
For those unpredictable size, make a guess as FILL * n.
Return value:
    0 if enough memory was available;
    otherwise, return the amount of space intended to allocate 
    when memory allocation failure occurred.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ blk_symbfact()

static int_t blk_symbfact ( SuperMatrix A,
int  iam,
int  lvl,
int  szSep,
int  ind_sizes1,
int  ind_sizes2,
int_t sizes,
int_t fstVtxSep,
int_t  fstVtx_loc,
int_t  fstVtx_blk,
int_t  lstVtx_blk,
int_t lsub_rcvd,
int_t  lsub_rcvd_sz,
int_t usub_rcvd,
int_t  usub_rcvd_sz,
Pslu_freeable_t Pslu_freeable,
Llu_symbfact_t Llu_symbfact,
vtcsInfo_symbfact_t VInfo,
comm_symbfact_t CS,
psymbfact_stat_t PS,
int_t marker,
int_t p_mark,
int_t p_nextl,
int_t p_nextu,
int_t p_neltsZr,
int_t p_neltsTotal,
int_t p_nsuper_loc 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ cntsVtcs()

static float cntsVtcs ( int_t  n,
int  iam,
int  nprocs_symb,
Pslu_freeable_t Pslu_freeable,
Llu_symbfact_t Llu_symbfact,
vtcsInfo_symbfact_t VInfo,
int_t tempArray,
int_t fstVtxSep,
int_t sizes,
psymbfact_stat_t PS,
MPI_Comm *  commLvls 
)
static
Purpose
=======

Computes an estimation of the number of elements in columns of L
and rows of U.  Stores this information in cntelt_vtcs, and it will
be used in the right-looking symbolic factorization.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ createComm()

static void createComm ( int  iam,
int  nprocs,
MPI_Comm *  commLvls,
MPI_Comm *  symb_comm 
)
static
Here is the caller graph for this function:

◆ denseSep_symbfact()

static int_t denseSep_symbfact ( int  rcvd_dnsSep,
int_t  n,
int  iam,
int  ind_sizes1,
int  ind_sizes2,
int_t sizes,
int_t fstVtxSep,
int  szSep,
int  fstP,
int  lstP,
int_t  fstVtx_blkCyc,
int_t  nblk_loc,
int_t p_nextl,
int_t p_nextu,
int_t p_mark,
int_t p_nsuper_loc,
int_t marker,
MPI_Comm  ndCom,
MPI_Comm *  symb_comm,
Llu_symbfact_t Llu_symbfact,
Pslu_freeable_t Pslu_freeable,
vtcsInfo_symbfact_t VInfo,
comm_symbfact_t CS,
psymbfact_stat_t PS 
)
static
   All processors affected to current node must call this routine
   when VInfo->filledSep == FILLED_SEP
   This is necessary since subsequent routines called from here use 
   MPI_allreduce among all processors affected to curent node
Here is the call graph for this function:
Here is the caller graph for this function:

◆ dnsCurSep_symbfact()

static int_t dnsCurSep_symbfact ( int_t  n,
int  iam,
int  ind_sizes1,
int  ind_sizes2,
int_t sizes,
int_t fstVtxSep,
int  szSep,
int  npNode,
int_t  rcvd_dnsSep,
int_t p_nextl,
int_t p_nextu,
int_t p_mark,
int_t p_nsuper_loc,
int_t marker,
MPI_Comm  ndCom,
Llu_symbfact_t Llu_symbfact,
Pslu_freeable_t Pslu_freeable,
vtcsInfo_symbfact_t VInfo,
comm_symbfact_t CS,
psymbfact_stat_t PS 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ dnsUpSeps_symbfact()

static int_t dnsUpSeps_symbfact ( int_t  n,
int  iam,
int  szSep,
int  ind_sizes1,
int  ind_sizes2,
int_t sizes,
int_t fstVtxSep,
int_t  fstVtx_dns,
Llu_symbfact_t Llu_symbfact,
Pslu_freeable_t Pslu_freeable,
vtcsInfo_symbfact_t VInfo,
comm_symbfact_t CS,
psymbfact_stat_t PS,
int_t p_nextl,
int_t p_nextu,
int_t p_nsuper_loc 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ domain_symbfact()

static void domain_symbfact ( SuperMatrix A,
int  iam,
int  lvl,
int  szSep,
int  ind_sizes1,
int  ind_sizes2,
int_t sizes,
int_t fstVtxSep,
int_t  fstVtx,
int_t  lstVtx,
Pslu_freeable_t Pslu_freeable,
Llu_symbfact_t Llu_symbfact,
vtcsInfo_symbfact_t VInfo,
comm_symbfact_t CS,
psymbfact_stat_t PS,
int_t marker,
int_t p_mark,
int_t p_nextl,
int_t p_nextu,
int_t p_neltsZr,
int_t p_neltsTotal,
int_t p_nsuper_loc 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ estimate_memUsage()

static void estimate_memUsage ( int_t  n,
int  iam,
superlu_dist_mem_usage_t symb_mem_usage,
float *  p_totalMemLU,
float *  p_overestimMem,
Pslu_freeable_t Pslu_freeable,
Llu_symbfact_t Llu_symbfact,
vtcsInfo_symbfact_t VInfo,
comm_symbfact_t CS,
psymbfact_stat_t PS 
)
static
Here is the caller graph for this function:

◆ expand_RL()

static int_t expand_RL ( int_t  computeRcvd,
int_t  n,
int  iam,
int_t lsub_rcvd,
int_t  lsub_rcvd_sz,
int_t usub_rcvd,
int_t  usub_rcvd_sz,
int_t  vtxXp,
int_t  vtx_upd_pr,
int_t  lstVtx_upd_pr,
int_t  fstVtx_srcUpd,
int_t  lstVtx_srcUpd,
int_t  fstVtx_toUpd,
int_t  lstVtx_toUpd,
int_t  nvtcs_toUpd,
int  computeL,
int_t pmarkl,
int_t marker,
Pslu_freeable_t Pslu_freeable,
Llu_symbfact_t Llu_symbfact,
vtcsInfo_symbfact_t VInfo,
psymbfact_stat_t PS 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ freeComm()

static void freeComm ( int  iam,
int  nprocs,
MPI_Comm *  commLvls,
MPI_Comm *  symb_comm 
)
static
Here is the caller graph for this function:

◆ initLvl_symbfact()

static void initLvl_symbfact ( int_t  n,
int  iam,
int_t  fstVtx,
int_t  lstVtx,
Pslu_freeable_t Pslu_freeable,
Llu_symbfact_t Llu_symbfact,
vtcsInfo_symbfact_t VInfo,
psymbfact_stat_t PS,
MPI_Comm  ndComm,
int_t marker,
int_t  nextl,
int_t  nextu 
)
static
Compute counts of rows/columns of current separator.
cntelt_vtcs[i] is 0 when i is nonzero before current separator
and n when i is zero before current separator.

Set up nvtcsLvl_loc.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ initParmsAndStats()

static int_t initParmsAndStats ( superlu_dist_options_t options,
psymbfact_stat_t PS 
)
static
 
Purpose
=======
Initialize relaxation parameters and statistics variables
Here is the call graph for this function:
Here is the caller graph for this function:

◆ intCalloc_symbfact()

static int_t * intCalloc_symbfact ( int_t  n)
static
Here is the caller graph for this function:

◆ interLvl_symbfact()

static int_t interLvl_symbfact ( SuperMatrix A,
int  iam,
int  lvl,
int  szSep,
int  fstP,
int  lstP,
int  ind_sizes1,
int  ind_sizes2,
int_t sizes,
int_t fstVtxSep,
int_t p_nextl,
int_t p_nextu,
int_t p_nsuper_loc,
int_t pmark,
int_t marker,
Llu_symbfact_t Llu_symbfact,
Pslu_freeable_t Pslu_freeable,
comm_symbfact_t CS,
vtcsInfo_symbfact_t VInfo,
psymbfact_stat_t PS,
MPI_Comm  ndComm,
MPI_Comm *  symb_comm 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ intMalloc_symbfact()

static int_t * intMalloc_symbfact ( int_t  n)
static
Here is the caller graph for this function:

◆ intraLvl_symbfact()

static void intraLvl_symbfact ( SuperMatrix A,
int  iam,
int  lvl,
int  szSep,
int  ind_sizes1,
int  ind_sizes2,
int_t sizes,
int_t fstVtxSep,
int  fstP,
int  lstP,
int_t  fstVtx,
int_t  lstVtx,
Pslu_freeable_t Pslu_freeable,
Llu_symbfact_t Llu_symbfact,
vtcsInfo_symbfact_t VInfo,
comm_symbfact_t CS,
psymbfact_stat_t PS,
int_t marker,
int_t p_mark,
int_t p_nextl,
int_t p_nextu,
int_t p_neltsZr,
int_t p_neltsTotal,
int_t p_nsuper_loc,
MPI_Comm  ndComm,
MPI_Comm *  symb_comm 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ rl_update()

static int_t rl_update ( int  computeRcvd,
int_t  n,
int  iam,
int_t lsub_rcvd,
int_t  lsub_rcvd_sz,
int_t usub_rcvd,
int_t  usub_rcvd_sz,
int_t  fstVtx_srcUpd,
int_t  lstVtx_srcUpd,
int_t  indBlk_srcUpd,
int_t  fstVtx_toUpd,
int_t  lstVtx_toUpd,
int_t  nvtcs_toUpd,
int  computeL,
int_t pmarkl,
int_t marker,
Pslu_freeable_t Pslu_freeable,
Llu_symbfact_t Llu_symbfact,
vtcsInfo_symbfact_t VInfo,
psymbfact_stat_t PS 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ symbfact_alloc()

static int symbfact_alloc ( superlu_dist_options_t options,
int_t  n,
int  nprocs,
Pslu_freeable_t Pslu_freeable,
Llu_symbfact_t Llu_symbfact,
vtcsInfo_symbfact_t VInfo,
comm_symbfact_t CS,
psymbfact_stat_t PS 
)
static
Allocate storage for the data structures common to symbolic factorization
routines. For those unpredictable size, make a guess as FILL * nnz(A).
Return value:
    0 if enough memory was available;
    otherwise, return the amount of space intended to allocate 
    when memory allocation failure occurred.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ symbfact_dist()

float symbfact_dist ( superlu_dist_options_t options,
int  nprocs_num,
int  nprocs_symb,
SuperMatrix A,
int_t perm_c,
int_t perm_r,
int_t sizes,
int_t fstVtxSep,
Pslu_freeable_t Pslu_freeable,
MPI_Comm *  num_comm,
MPI_Comm *  symb_comm,
superlu_dist_mem_usage_t symb_mem_usage 
)
 
Purpose
=======
  symbfact_dist() performs symbolic factorization of matrix A suitable
  for performing the supernodal Gaussian elimination with no pivoting (GEPP). 
  This routine computes the structure of one column of L and one row of U 
  at a time.  It uses:
       o distributed input matrix
       o supernodes
       o symmetric structure pruning


Arguments
=========

nprocs_num (input) int
        Number of processors SuperLU_DIST is executed on, and the input 
        matrix is distributed on.

nprocs_symb (input) int
        Number of processors on which the symbolic factorization is
        performed.  It is equal to the number of independent domains
        idenfied in the graph partitioning algorithm executed
        previously and has to be a power of 2.  It corresponds to
        number of leaves in the separator tree.

A       (input) SuperMatrix*
        Matrix A in A*X=B, of dimension (A->nrow, A->ncol). The
        number of the linear equations is A->nrow.  Matrix A is
        distributed in NRformat_loc format.
        Matrix A is not yet permuted by perm_c.

perm_c  (input) int_t*
    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.

perm_r  (input) int_t*
    Row permutation vector of size A->nrow, which defines the 
        permutation matrix Pr; perm_r[i] = j means column i of A is 
        in position j in Pr*A.

sizes   (input) int_t*
        Contains the number of vertices in each separator.

fstVtxSep (input) int_t*
        Contains first vertex for each separator.

Pslu_freeable (output) Pslu_freeable_t*
        Returns the local L and U structure, and global to local
        information on the indexing of the vertices.  Contains all
        the information necessary for performing the data
        distribution towards the numeric factorization.

num_comm (input) MPI_Comm*
        Communicator for numerical factorization 

symb_comm (input) MPI_Comm*
        Communicator for symbolic factorization 

symb_mem_usage (input) superlu_dist_mem_usage_t *
        Statistics on memory usage.

Return value
============
  < 0, number of bytes allocated on return from the symbolic factorization.
  > 0, number of bytes allocated when out of memory.

Sketch of the algorithm
=======================

 Distrbute the vertices on the processors using a subtree to
 subcube algorithm.

 Redistribute the structure of the input matrix A according to the
 subtree to subcube computed previously for the symbolic
 factorization routine.  This implies in particular a distribution
 from nprocs_num processors to nprocs_symb processors.

 Perform symbolic factorization guided by the separator tree provided by
 a graph partitioning algorithm.  The symbolic factorization uses a 
 combined left-looking, right-looking approach. 
Here is the call graph for this function:

◆ symbfact_distributeMatrix()

static void symbfact_distributeMatrix ( int  iam,
int  nprocs_num,
int  nprocs_symb,
SuperMatrix A,
int_t perm_c,
int_t perm_r,
matrix_symbfact_t AS,
Pslu_freeable_t Pslu_freeable,
vtcsInfo_symbfact_t VInfo,
int_t tempArray,
MPI_Comm *  num_comm 
)
static
Purpose 
=======

Distribute input matrix A for the symbolic factorization routine.
Only structural information is distributed.  The redistributed
matrix has its rows and columns permuted according to perm_r and
perm_c. A is not modified during this routine.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ symbfact_free()

static void symbfact_free ( int  iam,
int  nprocs,
Llu_symbfact_t Llu_symbfact,
vtcsInfo_symbfact_t VInfo,
comm_symbfact_t CS 
)
static
Here is the caller graph for this function:

◆ symbfact_mapVtcs()

static float symbfact_mapVtcs ( int  iam,
int  nprocs_num,
int  nprocs_symb,
SuperMatrix A,
int_t fstVtxSep,
int_t sizes,
Pslu_freeable_t Pslu_freeable,
vtcsInfo_symbfact_t VInfo,
int_t tempArray,
int_t  maxSzBlk,
psymbfact_stat_t PS 
)
static
Purpose
=======

 symbfact_mapVtcs maps the vertices of the graph of the input
 matrix A on nprocs_symb processors, using the separator tree
 returned by a graph partitioning algorithm from the previous step
 of the symbolic factorization.  The number of processors
 nprocs_symb must be a power of 2.

Description of the algorithm
============================

 A subtree to subcube algorithm is used first to map the processors
 on the nodes of the separator tree.

 For each node of the separator tree, its corresponding vertices
 are distributed on the processors affected to this node, using a
 block cyclic distribution.

 After the distribution, fields of the VInfo structure are
 computed.  The array globToLoc and maxNvtcsPProc of Pslu_freeable
 are also computed.
Here is the call graph for this function:
Here is the caller graph for this function:

◆ symbfact_vtx()

static int_t symbfact_vtx ( int_t  n,
int  iam,
int_t  vtx,
int_t  vtx_lid,
int_t  vtx_prid,
int_t  computeL,
int  domain_symb,
int_t  fstVtx,
int_t  lstVtx,
int_t  snrep_lid,
int_t  szSn,
int_t p_next,
int_t marker,
int_t sub_rcvd,
int_t  sub_rcvd_sz,
Pslu_freeable_t Pslu_freeable,
Llu_symbfact_t Llu_symbfact,
vtcsInfo_symbfact_t VInfo,
psymbfact_stat_t PS,
int_t p_neltsVtxInit,
int_t p_neltsVtx,
int_t p_neltsVtx_CSep,
int_t p_neltsZrVtx,
int_t p_neltsMatched,
int_t  mark_vtx,
int_t p_prval_curvtx,
int_t  vtx_bel_othSn,
int_t p_vtx_bel_mySn 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ update_prGraph()

static int_t update_prGraph ( int  iam,
int_t  n,
int_t  fstVtx_blk,
int_t  lstVtx_blk,
int_t  snrep_lid,
int_t  pr_offset,
int_t  prval_cursn,
int_t  xsub_snp1,
int  computeL,
Pslu_freeable_t Pslu_freeable,
Llu_symbfact_t Llu_symbfact,
psymbfact_stat_t PS 
)
static
Here is the call graph for this function:
Here is the caller graph for this function:

◆ updateRcvd_prGraph()

static int_t updateRcvd_prGraph ( int_t  n,
int  iam,
int_t sub_rcvd,
int_t  sub_rcvd_sz,
int_t  fstVtx_toUpd,
int_t  lstVtx_toUpd,
int_t  pr_offset,
int  computeL,
int_t marker,
Pslu_freeable_t Pslu_freeable,
Llu_symbfact_t Llu_symbfact,
vtcsInfo_symbfact_t VInfo,
psymbfact_stat_t PS 
)
static
Here is the call graph for this function:
Here is the caller graph for this function: