superlu_defs.h
Go to the documentation of this file.
1 
12 #ifndef __SUPERLU_DEFS /* allow multiple inclusions */
13 #define __SUPERLU_DEFS
14 
15 /*
16  * File name: superlu_defs.h
17  * Purpose: Definitions which are precision-neutral
18  */
19 #ifdef _CRAY
20 #include <fortran.h>
21 #include <string.h>
22 #endif
23 #include <mpi.h>
24 #include <stdlib.h>
25 #include <stdio.h>
26 
27 
28 /* Define my integer size int_t */
29 #ifdef _CRAY
30 typedef short int_t;
31 /*#undef int Revert back to int of default size. */
32 #define mpi_int_t MPI_SHORT
33 #elif defined (_LONGINT)
34 typedef long long int int_t;
35 #define mpi_int_t MPI_LONG
36 #else /* Default */
37 typedef int int_t;
38 #define mpi_int_t MPI_INT
39 #endif
40 
41 #include "superlu_enum_consts.h"
42 #include "Cnames.h"
43 #include "supermatrix.h"
44 #include "util_dist.h"
45 #include "psymbfact.h"
46 
47 
48 /***********************************************************************
49  * Constants
50  ***********************************************************************/
51 /*
52  * For each block column of L, the index[] array contains both the row
53  * subscripts and the integers describing the size of the blocks.
54  * The organization of index[] looks like:
55  *
56  * [ BLOCK COLUMN HEADER (size BC_HEADER)
57  * number of blocks
58  * number of row subscripts, i.e., LDA of nzval[]
59  * BLOCK 0 <----
60  * BLOCK DESCRIPTOR (of size LB_DESCRIPTOR) |
61  * block number (global) |
62  * number of full rows in the block |
63  * actual row subscripts |
64  * BLOCK 1 | Repeat ...
65  * BLOCK DESCRIPTOR | number of blocks
66  * block number (global) |
67  * number of full rows in the block |
68  * actual row subscripts |
69  * . |
70  * . |
71  * . <----
72  * ]
73  *
74  * For each block row of U, the organization of index[] looks like:
75  *
76  * [ BLOCK ROW HEADER (of size BR_HEADER)
77  * number of blocks
78  * number of entries in nzval[]
79  * number of entries in index[]
80  * BLOCK 0 <----
81  * BLOCK DESCRIPTOR (of size UB_DESCRIPTOR) |
82  * block number (global) |
83  * number of nonzeros in the block |
84  * actual fstnz subscripts |
85  * BLOCK 1 | Repeat ...
86  * BLOCK DESCRIPTOR | number of blocks
87  * block number (global) |
88  * number of nonzeros in the block |
89  * actual fstnz subscripts |
90  * . |
91  * . |
92  * . <----
93  * ]
94  *
95  */
96 #define BC_HEADER 2
97 #define LB_DESCRIPTOR 2
98 #define BR_HEADER 3
99 #define UB_DESCRIPTOR 2
100 #define NBUFFERS 5
101 
102 /*
103  * Communication tags
104  */
105  /* For numeric factorization. */
106 #define NTAGS 10000
107 #define UjROW 10
108 #define UkSUB 11
109 #define UkVAL 12
110 #define LkSUB 13
111 #define LkVAL 14
112 #define LkkDIAG 15
113  /* For triangular solves. */
114 #define XK_H 2 /* The header preceeding each X block. */
115 #define LSUM_H 2 /* The header preceeding each MOD block. */
116 #define GSUM 20
117 #define Xk 21
118 #define Yk 22
119 #define LSUM 23
120 
121 /*
122  * Communication scopes
123  */
124 #define COMM_ALL 100
125 #define COMM_COLUMN 101
126 #define COMM_ROW 102
127 
128 /*
129  * Matrix distribution for sparse matrix-vector multiplication
130  */
131 #define SUPER_LINEAR 11
132 #define SUPER_BLOCK 12
133 
134 /*
135  * No of marker arrays used in the symbolic factorization, each of size n
136  */
137 #define NO_MARKER 3
138 
139 
140 
141 /***********************************************************************
142  * Macros
143  ***********************************************************************/
144 #define IAM(comm) { int rank; MPI_Comm_rank ( comm, &rank ); rank};
145 #define MYROW(iam,grid) ( (iam) / grid->npcol )
146 #define MYCOL(iam,grid) ( (iam) % grid->npcol )
147 #define BlockNum(i) ( supno[i] )
148 #define FstBlockC(bnum) ( xsup[bnum] )
149 #define SuperSize(bnum) ( xsup[bnum+1]-xsup[bnum] )
150 #define LBi(bnum,grid) ( (bnum)/grid->nprow )/* Global to local block rowwise */
151 #define LBj(bnum,grid) ( (bnum)/grid->npcol )/* Global to local block columnwise*/
152 #define PROW(bnum,grid) ( (bnum) % grid->nprow )
153 #define PCOL(bnum,grid) ( (bnum) % grid->npcol )
154 #define PNUM(i,j,grid) ( (i)*grid->npcol + j ) /* Process number at coord(i,j) */
155 #define CEILING(a,b) ( ((a)%(b)) ? ((a)/(b) + 1) : ((a)/(b)) )
156  /* For triangular solves */
157 #define RHS_ITERATE(i) \
158  for (i = 0; i < nrhs; ++i)
159 #define X_BLK(i) \
160  ilsum[i] * nrhs + (i+1) * XK_H
161 #define LSUM_BLK(i) \
162  ilsum[i] * nrhs + (i+1) * LSUM_H
163 
164 #define SuperLU_timer_ SuperLU_timer_dist_
165 #define LOG2(x) (log10((double) x) / log10(2.0))
166 
167 
168 #if ( VAMPIR>=1 )
169 #define VT_TRACEON VT_traceon()
170 #define VT_TRACEOFF VT_traceoff()
171 #else
172 #define VT_TRACEON
173 #define VT_TRACEOFF
174 #endif
175 
176 
177 /***********************************************************************
178  * New data types
179  ***********************************************************************/
180 
181 /*
182  * Define the 2D mapping of matrix blocks to process grid.
183  *
184  * Process grid:
185  * Processes are numbered (0 : P-1).
186  * P = Pr x Pc, where Pr, Pc are the number of process rows and columns.
187  * (pr,pc) is the coordinate of IAM; 0 <= pr < Pr, 0 <= pc < Pc.
188  *
189  * Matrix blocks:
190  * Matrix is partitioned according to supernode partitions, both
191  * column and row-wise.
192  * The k-th block columns (rows) contains columns (rows) (s:t), where
193  * s=xsup[k], t=xsup[k+1]-1.
194  * Block A(I,J) contains
195  * rows from (xsup[I]:xsup[I+1]-1) and
196  * columns from (xsup[J]:xsup[J+1]-1)
197  *
198  * Mapping of matrix entry (i,j) to matrix block (I,J):
199  * (I,J) = ( supno[i], supno[j] )
200  *
201  * Mapping of matrix block (I,J) to process grid (pr,pc):
202  * (pr,pc) = ( MOD(I,NPROW), MOD(J,NPCOL) )
203  *
204  * (xsup[nsupers],supno[n]) are replicated on all processors.
205  *
206  */
207 
208 /*-- Communication subgroup */
209 typedef struct {
210  MPI_Comm comm; /* MPI communicator */
211  int Np; /* number of processes */
212  int Iam; /* my process number */
214 
215 /*-- Process grid definition */
216 typedef struct {
217  MPI_Comm comm; /* MPI communicator */
218  superlu_scope_t rscp; /* row scope */
219  superlu_scope_t cscp; /* column scope */
220  int iam; /* my process number in this scope */
221  int_t nprow; /* number of process rows */
222  int_t npcol; /* number of process columns */
223 } gridinfo_t;
224 
225 
226 /*
227  *-- The structures are determined by SYMBFACT and used thereafter.
228  *
229  * (xsup,supno) describes mapping between supernode and column:
230  * xsup[s] is the leading column of the s-th supernode.
231  * supno[i] is the supernode no to which column i belongs;
232  * e.g. supno 0 1 2 2 3 3 3 4 4 4 4 4 (n=12)
233  * xsup 0 1 2 4 7 12
234  * Note: dfs will be performed on supernode rep. relative to the new
235  * row pivoting ordering
236  *
237  * This is allocated during symbolic factorization SYMBFACT.
238  */
239 typedef struct {
242 } Glu_persist_t;
243 
244 /*
245  *-- The structures are determined by SYMBFACT and used by DDISTRIBUTE.
246  *
247  * (xlsub,lsub): lsub[*] contains the compressed subscript of
248  * rectangular supernodes; xlsub[j] points to the starting
249  * location of the j-th column in lsub[*]. Note that xlsub
250  * is indexed by column.
251  * Storage: original row subscripts
252  *
253  * During the course of sparse LU factorization, we also use
254  * (xlsub,lsub) for the purpose of symmetric pruning. For each
255  * supernode {s,s+1,...,t=s+r} with first column s and last
256  * column t, the subscript set
257  * lsub[j], j=xlsub[s], .., xlsub[s+1]-1
258  * is the structure of column s (i.e. structure of this supernode).
259  * It is used for the storage of numerical values.
260  * Furthermore,
261  * lsub[j], j=xlsub[t], .., xlsub[t+1]-1
262  * is the structure of the last column t of this supernode.
263  * It is for the purpose of symmetric pruning. Therefore, the
264  * structural subscripts can be rearranged without making physical
265  * interchanges among the numerical values.
266  *
267  * However, if the supernode has only one column, then we
268  * only keep one set of subscripts. For any subscript interchange
269  * performed, similar interchange must be done on the numerical
270  * values.
271  *
272  * The last column structures (for pruning) will be removed
273  * after the numercial LU factorization phase.
274  *
275  * (xusub,usub): xusub[i] points to the starting location of column i
276  * in usub[]. For each U-segment, only the row index of first nonzero
277  * is stored in usub[].
278  *
279  * Each U column consists of a number of full segments. Each full segment
280  * starts from a leading nonzero, running up to the supernode (block)
281  * boundary. (Recall that the column-wise supernode partition is also
282  * imposed on the rows.) Because the segment is full, we don't store all
283  * the row indices. Instead, only the leading nonzero index is stored.
284  * The rest can be found together with xsup/supno pair.
285  * For example,
286  * usub[xsub[j+1]] - usub[xsub[j]] = number of segments in column j.
287  * for any i in usub[],
288  * supno[i] = block number in which i belongs to
289  * xsup[supno[i]+1] = first row of the next block
290  * The nonzeros of this segment are:
291  * i, i+1 ... xsup[supno[i]+1]-1 (only i is stored in usub[])
292  *
293  */
294 typedef struct {
295  int_t *lsub; /* compressed L subscripts */
297  int_t *usub; /* compressed U subscripts */
299  int_t nzlmax; /* current max size of lsub */
300  int_t nzumax; /* " " " usub */
301  LU_space_t MemModel; /* 0 - system malloc'd; 1 - user provided */
302  int_t *llvl; /* keep track of level in L for level-based ILU */
303  int_t *ulvl; /* keep track of level in U for level-based ILU */
305 
306 
307 /*
308  *-- The structure used to store matrix A of the linear system and
309  * several vectors describing the transformations done to matrix A.
310  *
311  * A (SuperMatrix*)
312  * Matrix A in A*X=B, of dimension (A->nrow, A->ncol).
313  * The number of linear equations is A->nrow. The type of A can be:
314  * Stype = SLU_NC; Dtype = SLU_D; Mtype = SLU_GE.
315  *
316  * DiagScale (DiagScale_t)
317  * Specifies the form of equilibration that was done.
318  * = NOEQUIL: No equilibration.
319  * = ROW: Row equilibration, i.e., A was premultiplied by diag(R).
320  * = COL: Column equilibration, i.e., A was postmultiplied by diag(C).
321  * = BOTH: Both row and column equilibration, i.e., A was replaced
322  * by diag(R)*A*diag(C).
323  *
324  * R double*, dimension (A->nrow)
325  * The row scale factors for A.
326  * If DiagScale = ROW or BOTH, A is multiplied on the left by diag(R).
327  * If DiagScale = NOEQUIL or COL, R is not defined.
328  *
329  * C double*, dimension (A->ncol)
330  * The column scale factors for A.
331  * If DiagScale = COL or BOTH, A is multiplied on the right by diag(C).
332  * If DiagScale = NOEQUIL or ROW, C is not defined.
333  *
334  * perm_r (int*) dimension (A->nrow)
335  * Row permutation vector which defines the permutation matrix Pr,
336  * perm_r[i] = j means row i of A is in position j in Pr*A.
337  *
338  * perm_c (int*) dimension (A->ncol)
339  * Column permutation vector, which defines the
340  * permutation matrix Pc; perm_c[i] = j means column i of A is
341  * in position j in A*Pc.
342  *
343  */
344 typedef struct {
346  double *R;
347  double *C;
351 
352 /*
353  *-- This contains the options used to control the solution process.
354  *
355  * Fact (fact_t)
356  * Specifies whether or not the factored form of the matrix
357  * A is supplied on entry, and if not, how the matrix A should
358  * be factorizaed.
359  * = DOFACT: The matrix A will be factorized from scratch, and the
360  * factors will be stored in L and U.
361  * = SamePattern: The matrix A will be factorized assuming
362  * that a factorization of a matrix with the same sparsity
363  * pattern was performed prior to this one. Therefore, this
364  * factorization will reuse column permutation vector
365  * ScalePermstruct->perm_c and the column elimination tree
366  * LUstruct->etree.
367  * = SamePattern_SameRowPerm: The matrix A will be factorized
368  * assuming that a factorization of a matrix with the same
369  * sparsity pattern and similar numerical values was performed
370  * prior to this one. Therefore, this factorization will reuse
371  * both row and column scaling factors R and C, both row and
372  * column permutation vectors perm_r and perm_c, and the
373  * data structure set up from the previous symbolic factorization.
374  * = FACTORED: On entry, L, U, perm_r and perm_c contain the
375  * factored form of A. If DiagScale is not NOEQUIL, the matrix
376  * A has been equilibrated with scaling factors R and C.
377  *
378  * Equil (yes_no_t)
379  * Specifies whether to equilibrate the system (scale A's row and
380  * columns to have unit norm).
381  *
382  * ColPerm (colperm_t)
383  * Specifies what type of column permutation to use to reduce fill.
384  * = NATURAL: use the natural ordering
385  * = MMD_ATA: use minimum degree ordering on structure of A'*A
386  * = MMD_AT_PLUS_A: use minimum degree ordering on structure of A'+A
387  * = COLAMD: use approximate minimum degree column ordering
388  * = MY_PERMC: use the ordering specified by the user
389  *
390  * Trans (trans_t)
391  * Specifies the form of the system of equations:
392  * = NOTRANS: A * X = B (No transpose)
393  * = TRANS: A**T * X = B (Transpose)
394  * = CONJ: A**H * X = B (Transpose)
395  *
396  * IterRefine (IterRefine_t)
397  * Specifies whether to perform iterative refinement.
398  * = NO: no iterative refinement
399  * = SINGLE: perform iterative refinement in single precision
400  * = DOUBLE: perform iterative refinement in double precision
401  * = EXTRA: perform iterative refinement in extra precision
402  *
403  * DiagPivotThresh (double, in [0.0, 1.0]) (only for serial SuperLU)
404  * Specifies the threshold used for a diagonal entry to be an
405  * acceptable pivot.
406  *
407  * SymmetricMode (yest_no_t) (only for serial SuperLU)
408  * Specifies whether to use symmetric mode. Symmetric mode gives
409  * preference to diagonal pivots, and uses an (A'+A)-based column
410  * permutation algorithm.
411  *
412  * PivotGrowth (yes_no_t) (only for serial SuperLU)
413  * Specifies whether to compute the reciprocal pivot growth.
414  *
415  * ConditionNumber (ues_no_t) (only for serial SuperLU)
416  * Specifies whether to compute the reciprocal condition number.
417  *
418  * RowPerm (rowperm_t) (only for SuperLU_DIST or ILU in serial SuperLU)
419  * Specifies whether to permute rows of the original matrix.
420  * = NO: not to permute the rows
421  * = LargeDiag: make the diagonal large relative to the off-diagonal
422  * = MY_PERMR: use the permutation given by the user
423  *
424  * ILU_DropRule (int) (only for serial SuperLU)
425  * Specifies the dropping rule:
426  * = DROP_BASIC: Basic dropping rule, supernodal based ILUTP(tau).
427  * = DROP_PROWS: Supernodal based ILUTP(p,tau), p = gamma * nnz(A)/n.
428  * = DROP_COLUMN: Variant of ILUTP(p,tau), for j-th column,
429  * p = gamma * nnz(A(:,j)).
430  * = DROP_AREA: Variation of ILUTP, for j-th column, use
431  * nnz(F(:,1:j)) / nnz(A(:,1:j)) to control memory.
432  * = DROP_DYNAMIC: Modify the threshold tau during factorizaion:
433  * If nnz(L(:,1:j)) / nnz(A(:,1:j)) > gamma
434  * tau_L(j) := MIN(tau_0, tau_L(j-1) * 2);
435  * Otherwise
436  * tau_L(j) := MAX(tau_0, tau_L(j-1) / 2);
437  * tau_U(j) uses the similar rule.
438  * NOTE: the thresholds used by L and U are separate.
439  * = DROP_INTERP: Compute the second dropping threshold by
440  * interpolation instead of sorting (default).
441  * In this case, the actual fill ratio is not
442  * guaranteed to be smaller than gamma.
443  * Note: DROP_PROWS, DROP_COLUMN and DROP_AREA are mutually exclusive.
444  * ( Default: DROP_BASIC | DROP_AREA )
445  *
446  * ILU_DropTol (double) (only for serial SuperLU)
447  * numerical threshold for dropping.
448  *
449  * ILU_FillFactor (double) (only for serial SuperLU)
450  * Gamma in the secondary dropping.
451  *
452  * ILU_Norm (norm_t) (only for serial SuperLU)
453  * Specify which norm to use to measure the row size in a
454  * supernode: infinity-norm, 1-norm, or 2-norm.
455  *
456  * ILU_FillTol (double) (only for serial SuperLU)
457  * numerical threshold for zero pivot perturbation.
458  *
459  * ILU_MILU (milu_t) (only for serial SuperLU)
460  * Specifies which version of MILU to use.
461  *
462  * ILU_MILU_Dim (double)
463  * Dimension of the PDE if available.
464  *
465  * ReplaceTinyPivot (yes_no_t) (only for SuperLU_DIST)
466  * Specifies whether to replace the tiny diagonals by
467  * sqrt(epsilon)*||A|| during LU factorization.
468  *
469  * SolveInitialized (yes_no_t) (only for SuperLU_DIST)
470  * Specifies whether the initialization has been performed to the
471  * triangular solve.
472  *
473  * RefineInitialized (yes_no_t) (only for SuperLU_DIST)
474  * Specifies whether the initialization has been performed to the
475  * sparse matrix-vector multiplication routine needed in iterative
476  * refinement.
477  *
478  * num_lookaheads (int) (only for SuperLU_DIST)
479  * Specifies the number of levels in the look-ahead factorization
480  *
481  * lookahead_etree (yes_no_t) (only for SuperLU_DIST)
482  * Specifies whether to use the elimination tree computed from the
483  * serial symbolic factorization to perform scheduling.
484  *
485  * SymPattern (yes_no_t) (only for SuperLU_DIST)
486  * Gives the scheduling algorithm a hint whether the matrix
487  * would have symmetric pattern.
488  *
489  */
490 typedef struct {
491  fact_t Fact;
492  yes_no_t Equil;
493  colperm_t ColPerm;
494  trans_t Trans;
495  IterRefine_t IterRefine;
496  double DiagPivotThresh;
497  yes_no_t SymmetricMode;
498  yes_no_t PivotGrowth;
499  yes_no_t ConditionNumber;
500  rowperm_t RowPerm;
501  int ILU_DropRule;
502  double ILU_DropTol; /* threshold for dropping */
503  double ILU_FillFactor; /* gamma in the secondary dropping */
504  norm_t ILU_Norm; /* infinity-norm, 1-norm, or 2-norm */
505  double ILU_FillTol; /* threshold for zero pivot perturbation */
506  milu_t ILU_MILU;
507  double ILU_MILU_Dim; /* Dimension of PDE (if available) */
508  yes_no_t ParSymbFact;
509  yes_no_t ReplaceTinyPivot; /* used in SuperLU_DIST */
510  yes_no_t SolveInitialized;
511  yes_no_t RefineInitialized;
512  yes_no_t PrintStat;
513  int nnzL, nnzU; /* used to store nnzs for now */
514  int num_lookaheads; /* num of levels in look-ahead */
515  yes_no_t lookahead_etree; /* use etree computed from the
516  serial symbolic factorization */
517  yes_no_t SymPattern; /* symmetric factorization */
519 
520 typedef struct {
521  float for_lu;
522  float total;
524  int_t nnzL, nnzU;
525 } mem_usage_t;
526 
527 
528 /***********************************************************************
529  * Function prototypes
530  ***********************************************************************/
531 
532 #ifdef __cplusplus
533 extern "C" {
534 #endif
535 
545  SuperMatrix*);
547  int_t *);
548 extern void countnz_dist (const int_t, int_t *, int_t *, int_t *,
550 extern int_t fixupL_dist (const int_t, const int_t *, Glu_persist_t *,
551  Glu_freeable_t *);
553 extern float slamch_(char *);
554 extern double dlamch_(char *);
555 extern void *superlu_malloc_dist (size_t);
556 extern void superlu_free_dist (void*);
559 
560 /* Auxiliary routines */
561 extern double SuperLU_timer_ ();
562 extern void superlu_abort_and_exit_dist(char *);
564 extern int lsame_ (char *, char *);
565 extern int xerbla_ (char *, int *);
566 extern void ifill_dist (int_t *, int_t, int_t);
567 extern void super_stats_dist (int_t, int_t *);
568 extern void ScalePermstructInit(const int_t, const int_t,
571 extern void superlu_gridinit(MPI_Comm, int_t, int_t, gridinfo_t *);
572 extern void superlu_gridmap(MPI_Comm, int_t, int_t, int_t [], int_t,
573  gridinfo_t *);
576 extern void a_plus_at_dist(const int_t, const int_t, int_t *, int_t *,
577  int_t *, int_t **, int_t **);
578 extern void bcast_tree(void *, int, MPI_Datatype, int, int,
579  gridinfo_t *, int, int *);
585  Glu_freeable_t *);
588  int_t **, int_t **);
590 extern int xerbla_ (char *, int *);
591 extern void pxerbla (char *, gridinfo_t *, int_t);
592 extern void PStatInit(SuperLUStat_t *);
593 extern void PStatFree(SuperLUStat_t *);
595 
596 
597 /* Prototypes for parallel symbolic factorization */
598 extern float symbfact_dist
599 (int, int, SuperMatrix *, int_t *, int_t *, int_t *, int_t *,
600  Pslu_freeable_t *, MPI_Comm *, MPI_Comm *, mem_usage_t *);
601 
602 /* Get the column permutation using parmetis */
603 extern float get_perm_c_parmetis
604 (SuperMatrix *, int_t *, int_t *, int, int,
605  int_t **, int_t **, gridinfo_t *, MPI_Comm *);
606 
607 /* Auxiliary routines for memory expansions used during
608  the parallel symbolic factorization routine */
609 
613 
617 
621 
623 (int_t, int_t,
625 
626 /* Routines for debugging */
630 extern void PrintDouble5(char *, int_t, double *);
631 extern void PrintInt10(char *, int_t, int_t *);
632 extern int file_PrintInt10(FILE *, char *, int_t, int_t *);
633 
634 #ifdef __cplusplus
635  }
636 #endif
637 
638 #endif /* __SUPERLU_DEFS */
Macro definitions.
trans_t
Definition: oomph_superlu_4.3/superlu_enum_consts.h:21
milu_t
Definition: oomph_superlu_4.3/superlu_enum_consts.h:28
LU_space_t
Definition: oomph_superlu_4.3/superlu_enum_consts.h:26
DiagScale_t
Definition: oomph_superlu_4.3/superlu_enum_consts.h:22
IterRefine_t
Definition: oomph_superlu_4.3/superlu_enum_consts.h:23
rowperm_t
Definition: oomph_superlu_4.3/superlu_enum_consts.h:18
colperm_t
Definition: oomph_superlu_4.3/superlu_enum_consts.h:19
MemType
Definition: oomph_superlu_4.3/superlu_enum_consts.h:24
fact_t
Definition: oomph_superlu_4.3/superlu_enum_consts.h:17
norm_t
Definition: oomph_superlu_4.3/superlu_enum_consts.h:27
yes_no_t
Definition: oomph_superlu_4.3/superlu_enum_consts.h:16
enum constants header file
Matrix type definitions.
Definitions for parallel symbolic factorization routine.
int int_t
Definition: slu_cdefs.h:78
Definition: superlu_defs.h:294
int_t * usub
Definition: superlu_defs.h:297
int_t nzumax
Definition: superlu_defs.h:300
int_t * ulvl
Definition: superlu_defs.h:303
LU_space_t MemModel
Definition: superlu_defs.h:301
int_t * llvl
Definition: superlu_defs.h:302
int_t nzlmax
Definition: superlu_defs.h:299
int_t * xusub
Definition: superlu_defs.h:298
int_t * lsub
Definition: superlu_defs.h:295
int_t * xlsub
Definition: superlu_defs.h:296
Definition: superlu_defs.h:239
int_t * xsup
Definition: superlu_defs.h:240
int_t * supno
Definition: superlu_defs.h:241
Definition: psymbfact.h:95
Definition: psymbfact.h:47
Definition: superlu_defs.h:344
DiagScale_t DiagScale
Definition: superlu_defs.h:345
double * R
Definition: superlu_defs.h:346
int_t * perm_r
Definition: superlu_defs.h:348
double * C
Definition: superlu_defs.h:347
int_t * perm_c
Definition: superlu_defs.h:349
Definition: slu_util.h:290
Definition: oomph_superlu_4.3/supermatrix.h:43
Definition: superlu_defs.h:216
int_t nprow
Definition: superlu_defs.h:221
int_t npcol
Definition: superlu_defs.h:222
superlu_scope_t cscp
Definition: superlu_defs.h:219
superlu_scope_t rscp
Definition: superlu_defs.h:218
MPI_Comm comm
Definition: superlu_defs.h:217
int iam
Definition: superlu_defs.h:220
Definition: slu_util.h:299
float total
Definition: superlu_defs.h:522
int_t expansions
Definition: superlu_defs.h:523
int_t nnzL
Definition: superlu_defs.h:524
statistics collected during parallel symbolic factorization
Definition: psymbfact.h:183
Definition: slu_util.h:246
Definition: superlu_defs.h:209
int Np
Definition: superlu_defs.h:211
MPI_Comm comm
Definition: superlu_defs.h:210
int Iam
Definition: superlu_defs.h:212
Local information on vertices distribution.
Definition: psymbfact.h:129
void print_options_dist(superlu_options_t *)
void superlu_free_dist(void *)
void ifill_dist(int_t *, int_t, int_t)
void set_default_options_dist(superlu_options_t *)
void PrintDouble5(char *, int_t, double *)
int_t sp_ienv_dist(int_t)
int_t psymbfact_LUXpand_RL(int_t, int_t, int_t, int_t, int_t, int_t, Pslu_freeable_t *, Llu_symbfact_t *, vtcsInfo_symbfact_t *, psymbfact_stat_t *)
int_t symbfact(superlu_options_t *, int, SuperMatrix *, int_t *, int_t *, Glu_persist_t *, Glu_freeable_t *)
double dlamch_(char *)
void Destroy_CompCol_Matrix_dist(SuperMatrix *)
float symbfact_dist(int, int, SuperMatrix *, int_t *, int_t *, int_t *, int_t *, Pslu_freeable_t *, MPI_Comm *, MPI_Comm *, mem_usage_t *)
void pxerbla(char *, gridinfo_t *, int_t)
void a_plus_at_dist(const int_t, const int_t, int_t *, int_t *, int_t *, int_t **, int_t **)
int_t * intMalloc_dist(int_t)
void ScalePermstructInit(const int_t, const int_t, ScalePermstruct_t *)
void countnz_dist(const int_t, int_t *, int_t *, int_t *, Glu_persist_t *, Glu_freeable_t *)
float slamch_(char *)
int lsame_(char *, char *)
void print_panel_seg_dist(int_t, int_t, int_t, int_t, int_t *, int_t *)
int_t QuerySpace_dist(int_t, int_t, Glu_freeable_t *, mem_usage_t *)
void superlu_abort_and_exit_dist(char *)
void Destroy_SuperNode_Matrix_dist(SuperMatrix *)
int_t sp_coletree_dist(int_t *, int_t *, int_t *, int_t, int_t, int_t *)
int_t symbfact_SubXpand(int_t, int_t, int_t, MemType, int_t *, Glu_freeable_t *)
int_t symbfact_SubFree(Glu_freeable_t *)
void PStatPrint(superlu_options_t *, SuperLUStat_t *, gridinfo_t *)
#define SuperLU_timer_
Definition: superlu_defs.h:164
void Destroy_CompCol_Permuted_dist(SuperMatrix *)
int file_PrintInt10(FILE *, char *, int_t, int_t *)
void super_stats_dist(int_t, int_t *)
void get_perm_c_dist(int_t, int_t, SuperMatrix *, int_t *)
void PStatInit(SuperLUStat_t *)
void PStatFree(SuperLUStat_t *)
float get_perm_c_parmetis(SuperMatrix *, int_t *, int_t *, int, int, int_t **, int_t **, gridinfo_t *, MPI_Comm *)
void superlu_gridmap(MPI_Comm, int_t, int_t, int_t[], int_t, gridinfo_t *)
void get_diag_procs(int_t, Glu_persist_t *, gridinfo_t *, int_t *, int_t **, int_t **)
void superlu_gridinit(MPI_Comm, int_t, int_t, gridinfo_t *)
void sp_colorder(superlu_options_t *, SuperMatrix *, int_t *, int_t *, SuperMatrix *)
void Destroy_CompRow_Matrix_dist(SuperMatrix *)
int xerbla_(char *, int *)
void * superlu_malloc_dist(size_t)
int_t * TreePostorder_dist(int_t, int_t *)
int_t psymbfact_LUXpandMem(int_t, int_t, int_t, int_t, int_t, int_t, int_t, int_t, Pslu_freeable_t *, Llu_symbfact_t *, vtcsInfo_symbfact_t *, psymbfact_stat_t *)
int_t psymbfact_prLUXpand(int_t, int_t, MemType, Llu_symbfact_t *, psymbfact_stat_t *)
void PrintInt10(char *, int_t, int_t *)
void superlu_gridexit(gridinfo_t *)
int int_t
Definition: superlu_defs.h:37
int_t * intCalloc_dist(int_t)
int_t symbfact_SubInit(fact_t, void *, int_t, int_t, int_t, int_t, Glu_persist_t *, Glu_freeable_t *)
int_t fixupL_dist(const int_t, const int_t *, Glu_persist_t *, Glu_freeable_t *)
int_t psymbfact_LUXpand(int_t, int_t, int_t, int_t, int_t *, int_t, int_t, int_t, int_t, Pslu_freeable_t *, Llu_symbfact_t *, vtcsInfo_symbfact_t *, psymbfact_stat_t *)
void ScalePermstructFree(ScalePermstruct_t *)
void Destroy_SuperMatrix_Store_dist(SuperMatrix *)
int_t CheckZeroDiagonal(int_t, int_t *, int_t *, int_t *)
void check_repfnz_dist(int_t, int_t, int_t, int_t *)
void Destroy_CompRowLoc_Matrix_dist(SuperMatrix *)
void bcast_tree(void *, int, MPI_Datatype, int, int, gridinfo_t *, int, int *)
Header for utilities.