SuperLU_DIST  4.0
superlu_dist on CPU and GPU clusters
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
superlu_zdefs.h
Go to the documentation of this file.
1 
12 #ifndef __SUPERLU_zDEFS /* allow multiple inclusions */
13 #define __SUPERLU_zDEFS
14 
15 /*
16  * File name: superlu_zdefs.h
17  * Purpose: Distributed SuperLU data types and function prototypes
18  * History:
19  */
20 
21 #include "superlu_defs.h"
22 #include "dcomplex.h"
23 
24 /*-- Auxiliary data type used in PxGSTRS/PxGSTRS1. */
25 typedef struct {
26  int_t lbnum; /* Row block number (local). */
27  int_t indpos; /* Starting position in Uindex[]. */
28 } Ucb_indptr_t;
29 
30 /*
31  * On each processor, the blocks in L are stored in compressed block
32  * column format, the blocks in U are stored in compressed block row format.
33  */
34 #define MAX_LOOKAHEADS 50
35 typedef struct {
36  int_t **Lrowind_bc_ptr; /* size ceil(NSUPERS/Pc) */
37  doublecomplex **Lnzval_bc_ptr; /* size ceil(NSUPERS/Pc) */
38  int_t **Ufstnz_br_ptr; /* size ceil(NSUPERS/Pr) */
39  doublecomplex **Unzval_br_ptr; /* size ceil(NSUPERS/Pr) */
40 #if 0
41  int_t *Lsub_buf; /* Buffer for the remote subscripts of L */
42  double *Lval_buf; /* Buffer for the remote nonzeros of L */
43  int_t *Usub_buf; /* Buffer for the remote subscripts of U */
44  doublecomplex *Uval_buf; /* Buffer for the remote nonzeros of U */
45 #endif
46  int_t *Lsub_buf_2[MAX_LOOKAHEADS]; /* Buffers for the remote subscripts of L*/
47  doublecomplex *Lval_buf_2[MAX_LOOKAHEADS]; /* Buffers for the remote nonzeros of L */
48  int_t *Usub_buf_2[MAX_LOOKAHEADS]; /* Buffer for the remote subscripts of U */
49  doublecomplex *Uval_buf_2[MAX_LOOKAHEADS]; /* Buffer for the remote nonzeros of U */
50  doublecomplex *ujrow; /* used in panel factorization. */
51  int_t bufmax[NBUFFERS]; /* Buffer size; 5 entries
52  * 0 : size of Lsub_buf[]
53  * 1 : size of Lval_buf[]
54  * 2 : size of Usub_buf[]
55  * 3 : size of Uval_buf[]
56  * 4 : size of tempv[LDA]
57  */
58 
59  /*-- Record communication schedule for factorization. --*/
60  int *ToRecv; /* Recv from no one (0), left (1), and up (2).*/
61  int *ToSendD; /* Whether need to send down block row. */
62  int **ToSendR; /* List of processes to send right block col. */
63 
64  /*-- Record communication schedule for forward/back solves. --*/
65  int_t *fmod; /* Modification count for L-solve */
66  int_t **fsendx_plist; /* Column process list to send down Xk */
67  int_t *frecv; /* Modifications to be recv'd in proc row */
68  int_t nfrecvx; /* Number of Xk I will receive in L-solve */
69  int_t nfsendx; /* Number of Xk I will send in L-solve */
70  int_t *bmod; /* Modification count for U-solve */
71  int_t **bsendx_plist; /* Column process list to send down Xk */
72  int_t *brecv; /* Modifications to be recv'd in proc row */
73  int_t nbrecvx; /* Number of Xk I will receive in U-solve */
74  int_t nbsendx; /* Number of Xk I will send in U-solve */
75  int_t *mod_bit; /* Flag contribution from each row blocks */
76 
77  /*-- Auxiliary arrays used for forward/back solves. --*/
78  int_t *ilsum; /* Starting position of each supernode in lsum
79  (local) */
80  int_t ldalsum; /* LDA of lsum (local) */
81  int_t SolveMsgSent; /* Number of actual messages sent in LU-solve */
82  int_t SolveMsgVol; /* Volume of messages sent in the solve phase */
83 
84 
85  /*********************/
86  /* The following variables are used in the hybrid solver */
87 
88  /*-- Counts to be used in U^{-T} triangular solve. -- */
89  int_t UT_SOLVE;
90  int_t L_SOLVE;
91  int_t FRECV;
92  int_t ut_ldalsum; /* LDA of lsum (local) */
93  int_t *ut_ilsum; /* ilsum in column-wise */
94  int_t *utmod; /* Modification count for Ut-solve. */
95  int_t **ut_sendx_plist; /* Row process list to send down Xk */
96  int_t *utrecv; /* Modifications to be recev'd in proc column. */
97  int_t n_utsendx; /* Number of Xk I will receive */
98  int_t n_utrecvx; /* Number of Xk I will send */
99  int_t n_utrecvmod;
100  int_t nroot;
101  int_t *ut_modbit;
102  int_t *Urbs;
103  Ucb_indptr_t **Ucb_indptr;/* Vertical linked list pointing to Uindex[] */
104  int_t **Ucb_valptr; /* Vertical linked list pointing to Unzval[] */
105 
106  /* some additional counters for L solve */
107  int_t n;
108  int_t nleaf;
109  int_t nfrecvmod;
110 } LocalLU_t;
111 
112 
113 typedef struct {
114  int_t *etree;
115  Glu_persist_t *Glu_persist;
116  LocalLU_t *Llu;
117 } LUstruct_t;
118 
119 
120 /*-- Data structure for communication during matrix-vector multiplication. */
121 typedef struct {
123  int_t *ind_tosend; /* X indeices to be sent to other processes */
124  int_t *ind_torecv; /* X indeices to be received from other processes */
125  int_t *ptr_ind_tosend;/* Printers to ind_tosend[] (Size procs)
126  (also point to val_torecv) */
127  int_t *ptr_ind_torecv;/* Printers to ind_torecv[] (Size procs)
128  (also point to val_tosend) */
129  int *SendCounts; /* Numbers of X indices to be sent
130  (also numbers of X values to be received) */
131  int *RecvCounts; /* Numbers of X indices to be received
132  (also numbers of X values to be sent) */
133  doublecomplex *val_tosend; /* X values to be sent to other processes */
134  doublecomplex *val_torecv; /* X values to be received from other processes */
135  int_t TotalIndSend; /* Total number of indices to be sent
136  (also total number of values to be received) */
137  int_t TotalValSend; /* Total number of values to be sent.
138  (also total number of indices to be received) */
139 } pzgsmv_comm_t;
140 
141 /*-- Data structure for redistribution of B and X --*/
142 typedef struct {
143  int *B_to_X_SendCnt;
144  int *X_to_B_SendCnt;
145  int *ptr_to_ibuf, *ptr_to_dbuf;
146 
147  /* the following are needed in the hybrid solver */
148  int *X_to_B_iSendCnt;
149  int *X_to_B_vSendCnt;
150  int *disp_ibuf;
151  int_t *send_ibuf;
152  void *send_dbuf;
153 
154  int_t x2b, b2x;
155  int_t *send_ibuf2;
156  int_t *recv_ibuf2;
157  void *send_dbuf2;
158  void *recv_dbuf2;
160 
161 /*-- Data structure holding the information for the solution phase --*/
162 typedef struct {
163  int_t *row_to_proc;
164  int_t *inv_perm_c;
165  int_t num_diag_procs, *diag_procs, *diag_len;
167  pxgstrs_comm_t *gstrs_comm;
168  int_t *A_colind_gsmv; /* After pzgsmv_init(), the global column
169  indices of A are translated into the relative
170  positions in the gathered x-vector.
171  This is re-used in repeated calls to pzgsmv() */
172  int_t *xrow_to_proc;
173 } SOLVEstruct_t;
174 
175 
176 /***********************************************************************
177  * Function prototypes
178  ***********************************************************************/
179 
180 #ifdef __cplusplus
181 extern "C" {
182 #endif
183 
184 
185 /* Supernodal LU factor related */
186 extern void
188  int_t *, int_t *, Stype_t, Dtype_t, Mtype_t);
189 extern void
191  int_t, doublecomplex *, int_t *, int_t *,
193 extern void
195  doublecomplex **, int_t **, int_t **);
196 extern int
198  SuperMatrix *);
199 extern void
201 extern void
204 extern void
206  int_t *, int_t *, int_t *, int_t *, int_t *,
208 extern void
210  doublecomplex *, int_t);
211 
212 extern void zallocateA_dist (int_t, int_t, doublecomplex **, int_t **, int_t **);
213 extern void zGenXtrue_dist (int_t, int_t, doublecomplex *, int_t);
214 extern void zFillRHS_dist (char *, int_t, doublecomplex *, int_t,
216 extern int zcreate_matrix(SuperMatrix *, int, doublecomplex **, int *,
217  doublecomplex **, int *, FILE *, gridinfo_t *);
218 extern int zcreate_matrix_rb(SuperMatrix *, int, doublecomplex **, int *,
219  doublecomplex **, int *, FILE *, gridinfo_t *);
220 extern int zcreate_matrix_dat(SuperMatrix *, int, doublecomplex **, int *,
221  doublecomplex **, int *, FILE *, gridinfo_t *);
222 
223 /* Driver related */
224 extern void zgsequ_dist (SuperMatrix *, double *, double *, double *,
225  double *, double *, int_t *);
226 extern double zlangs_dist (char *, SuperMatrix *);
227 extern void zlaqgs_dist (SuperMatrix *, double *, double *, double,
228  double, double, char *);
229 extern void pzgsequ (SuperMatrix *, double *, double *, double *,
230  double *, double *, int_t *, gridinfo_t *);
231 extern double pzlangs (char *, SuperMatrix *, gridinfo_t *);
232 extern void pzlaqgs (SuperMatrix *, double *, double *, double,
233  double, double, char *);
234 extern int pzPermute_Dense_Matrix(int_t, int_t, int_t [], int_t[],
235  doublecomplex [], int, doublecomplex [], int, int,
236  gridinfo_t *);
237 
238 extern int sp_ztrsv_dist (char *, char *, char *, SuperMatrix *,
239  SuperMatrix *, doublecomplex *, int *);
240 extern int sp_zgemv_dist (char *, doublecomplex, SuperMatrix *, doublecomplex *,
241  int, doublecomplex, doublecomplex *, int);
242 extern int sp_zgemm_dist (char *, int, doublecomplex, SuperMatrix *,
243  doublecomplex *, int, doublecomplex, doublecomplex *, int);
244 
245 extern float zdistribute(fact_t, int_t, SuperMatrix *, Glu_freeable_t *,
246  LUstruct_t *, gridinfo_t *);
249  int, int, gridinfo_t *, LUstruct_t *, double *,
250  SuperLUStat_t *, int *);
251 extern float pzdistribute(fact_t, int_t, SuperMatrix *,
253  LUstruct_t *, gridinfo_t *);
254 extern void pzgssvx(superlu_options_t *, SuperMatrix *,
256  int, int, gridinfo_t *, LUstruct_t *,
257  SOLVEstruct_t *, double *, SuperLUStat_t *, int *);
258 extern int zSolveInit(superlu_options_t *, SuperMatrix *, int_t [], int_t [],
261  int_t [], int_t [], gridinfo_t *grid,
263 extern void pxgstrs_finalize(pxgstrs_comm_t *);
265 extern void zldperm_dist(int_t, int_t, int_t, int_t [], int_t [],
266  doublecomplex [], int_t *, double [], double []);
267 extern int static_schedule(superlu_options_t *, int, int,
269  int_t *, int_t *, int *);
270 
271 /* #define GPU_PROF
272 #define IPM_PROF */
273 
274 extern int_t pzgstrf(superlu_options_t *, int, int, double,
275  LUstruct_t*, gridinfo_t*, SuperLUStat_t*, int*);
276 extern void pzgstrs_Bglobal(int_t, LUstruct_t *, gridinfo_t *,
277  doublecomplex *, int_t, int, SuperLUStat_t *, int *);
280  SuperLUStat_t *, int *);
282  int, int, int_t , int_t *, int_t, int_t, int_t,
283  int_t *, gridinfo_t *, LocalLU_t *,
284  MPI_Request [], SuperLUStat_t *);
286  int, int_t, int_t *, int_t *, Ucb_indptr_t **,
287  int_t **, int_t *, gridinfo_t *, LocalLU_t *,
288  MPI_Request [], SuperLUStat_t *);
289 extern void pzgsrfs(int_t, SuperMatrix *, double, LUstruct_t *,
291  doublecomplex [], int_t, doublecomplex [], int_t, int,
292  SOLVEstruct_t *, double *, SuperLUStat_t *, int *);
293 extern void pzgsrfs_ABXglobal(int_t, SuperMatrix *, double, LUstruct_t *,
295  int, double *, SuperLUStat_t *, int *);
297  gridinfo_t *, int_t *, int_t *[],
298  doublecomplex *[], int_t *[], int_t []);
299 extern int pzgsmv_AXglobal(int_t, int_t [], doublecomplex [], int_t [],
301 extern int pzgsmv_AXglobal_abs(int_t, int_t [], doublecomplex [], int_t [],
302  doublecomplex [], double []);
303 extern void pzgsmv_init(SuperMatrix *, int_t *, gridinfo_t *,
304  pzgsmv_comm_t *);
305 extern void pzgsmv(int_t, SuperMatrix *, gridinfo_t *, pzgsmv_comm_t *,
306  doublecomplex x[], doublecomplex ax[]);
307 extern void pzgsmv_finalize(pzgsmv_comm_t *);
308 
309 /* Memory-related */
312 extern double *doubleMalloc_dist(int_t);
313 extern double *doubleCalloc_dist(int_t);
314 extern void *duser_malloc_dist (int_t, int_t);
315 extern void duser_free_dist (int_t, int_t);
318 extern void Destroy_LU(int_t, gridinfo_t *, LUstruct_t *);
319 extern void LUstructInit(const int_t, LUstruct_t *);
320 extern void LUstructFree(LUstruct_t *);
321 
322 /* Auxiliary routines */
323 extern void zfill_dist (doublecomplex *, int_t, doublecomplex);
326 extern void pzinf_norm_error(int, int_t, int_t, doublecomplex [], int_t,
327  doublecomplex [], int_t , gridinfo_t *);
328 extern void zreadhb_dist (int, FILE *, int_t *, int_t *, int_t *,
329  doublecomplex **, int_t **, int_t **);
330 extern void zreadtriple(FILE *, int_t *, int_t *, int_t *,
331  doublecomplex **, int_t **, int_t **);
332 extern void zreadrb_dist(FILE *, int *, int *, int *,
333  doublecomplex **, int **, int **);
334 
335 /* Distribute the data for numerical factorization */
336 extern float zdist_psymbtonum(fact_t, int_t, SuperMatrix *,
338  LUstruct_t *, gridinfo_t *);
339 
340 
341 /* Routines for debugging */
342 extern void zPrintLblocks(int, int_t, gridinfo_t *, Glu_persist_t *,
343  LocalLU_t *);
344 extern void zPrintUblocks(int, int_t, gridinfo_t *, Glu_persist_t *,
345  LocalLU_t *);
349 extern void PrintDoublecomplex(char *, int_t, doublecomplex *);
350 extern int file_PrintDoublecomplex(FILE *fp, char *, int_t, doublecomplex *);
351 
352 
353 /* BLAS */
354 
355 #ifdef USE_VENDOR_BLAS
356 extern int zgemm_(const char*, const char*, const int*, const int*, const int*,
357  const doublecomplex*, const doublecomplex*, const int*, const doublecomplex*,
358  const int*, const doublecomplex*, doublecomplex*, const int*, int, int);
359 extern int ztrsv_(char*, char*, char*, int*, doublecomplex*, int*,
360  doublecomplex*, int*, int, int, int);
361 extern int ztrsm_(char*, char*, char*, char*, int*, int*,
363  int*, int, int, int, int);
364 extern int zgemv_(char *, int *, int *, doublecomplex *, doublecomplex *a, int *,
365  doublecomplex *, int *, doublecomplex *, doublecomplex *, int *, int);
366 #else
367 extern int zgemm_(const char*, const char*, const int*, const int*, const int*,
368  const doublecomplex*, const doublecomplex*, const int*,
369  const doublecomplex*, const int*, const doublecomplex*,
370  doublecomplex*, const int*);
371 extern int ztrsv_(char*, char*, char*, int*, doublecomplex*, int*,
372  doublecomplex*, int*);
373 extern int ztrsm_(char*, char*, char*, char*, int*, int*,
374  doublecomplex*, doublecomplex*, int*, doublecomplex*, int*);
375 extern int zgemv_(char *, int *, int *, doublecomplex *, doublecomplex *a, int *,
376  doublecomplex *, int *, doublecomplex *, doublecomplex *, int *);
377 #endif
378 
379 extern int zgeru_(int*, int*, doublecomplex*, doublecomplex*, int*,
380  doublecomplex*, int*, doublecomplex*, int*);
381 
382 
383 #ifdef __cplusplus
384  }
385 #endif
386 
387 #endif /* __SUPERLU_dDEFS */
388 
void * duser_malloc_dist(int_t bytes, int_t which_end)
Definition: dmemory.c:20
int zgemv_(char *, int *, int *, doublecomplex *, doublecomplex *a, int *, doublecomplex *, int *, doublecomplex *, doublecomplex *, int *)
Definition: zgemv.c:9
void zSolveFinalize(superlu_options_t *options, SOLVEstruct_t *SOLVEstruct)
Release the resources used for the solution phase.
Definition: pzutil.c:479
int zcreate_matrix_dat(SuperMatrix *, int, doublecomplex **, int *, doublecomplex **, int *, FILE *, gridinfo_t *)
void zGenXtrue_dist(int_t, int_t, doublecomplex *, int_t)
Definition: zutil.c:284
void zCopy_CompCol_Matrix_dist(SuperMatrix *, SuperMatrix *)
Copy matrix A into matrix B.
Definition: zutil.c:112
void PrintDoublecomplex(char *, int_t, doublecomplex *)
Definition: zutil.c:344
void zCreate_Dense_Matrix_dist(SuperMatrix *, int_t, int_t, doublecomplex *, int_t, Stype_t, Dtype_t, Mtype_t)
Definition: zutil.c:217
float zdist_psymbtonum(fact_t fact, int_t n, SuperMatrix *A, ScalePermstruct_t *ScalePermstruct, Pslu_freeable_t *Pslu_freeable, LUstruct_t *LUstruct, gridinfo_t *grid)
Definition: pzsymbfact_distdata.c:1176
doublecomplex * val_tosend
Definition: superlu_zdefs.h:133
Definition: superlu_defs.h:250
Definition: psymbfact.h:47
void pzgsrfs(int_t n, SuperMatrix *A, double anorm, LUstruct_t *LUstruct, ScalePermstruct_t *ScalePermstruct, gridinfo_t *grid, doublecomplex *B, int_t ldb, doublecomplex *X, int_t ldx, int nrhs, SOLVEstruct_t *SOLVEstruct, double *berr, SuperLUStat_t *stat, int *info)
Definition: pzgsrfs.c:106
int_t * extern_start
Definition: superlu_zdefs.h:122
void zfill_dist(doublecomplex *, int_t, doublecomplex)
Fills a doublecomplex precision array with a given value.
Definition: zutil.c:311
Definition: superlu_defs.h:501
double pzlangs(char *norm, SuperMatrix *A, gridinfo_t *grid)
Definition: pzlangs.c:54
doublecomplex ** Unzval_br_ptr
Definition: superlu_zdefs.h:39
int_t TotalIndSend
Definition: superlu_zdefs.h:135
int ztrsv_(char *, char *, char *, int *, doublecomplex *, int *, doublecomplex *, int *)
Definition: ztrsv.c:9
int sp_zgemv_dist(char *, doublecomplex, SuperMatrix *, doublecomplex *, int, doublecomplex, doublecomplex *, int)
Definition: zsp_blas2.c:385
doublecomplex * val_torecv
Definition: superlu_zdefs.h:134
Definition: util_dist.h:72
double * doubleMalloc_dist(int_t n)
Definition: dmemory.c:142
int zcreate_matrix(SuperMatrix *, int, doublecomplex **, int *, doublecomplex **, int *, FILE *, gridinfo_t *)
Definition: zcreate_matrix.c:55
Definition: supermatrix.h:44
void zCreate_SuperNode_Matrix_dist(SuperMatrix *, int_t, int_t, int_t, doublecomplex *, int_t *, int_t *, int_t *, int_t *, int_t *, Stype_t, Dtype_t, Mtype_t)
Definition: zutil.c:256
fact_t
Definition: superlu_enum_consts.h:17
int zgemm_(const char *, const char *, const int *, const int *, const int *, const doublecomplex *, const doublecomplex *, const int *, const doublecomplex *, const int *, const doublecomplex *, doublecomplex *, const int *)
void zPrint_CompCol_Matrix_dist(SuperMatrix *)
Definition: zutil.c:132
int sp_ztrsv_dist(char *, char *, char *, SuperMatrix *, SuperMatrix *, doublecomplex *, int *)
Definition: zsp_blas2.c:84
int ztrsm_(char *, char *, char *, char *, int *, int *, doublecomplex *, doublecomplex *, int *, doublecomplex *, int *)
Definition: ztrsm.c:13
Stype_t
Definition: supermatrix.h:12
void pzgsrfs_ABXglobal(int_t n, SuperMatrix *A, double anorm, LUstruct_t *LUstruct, gridinfo_t *grid, doublecomplex *B, int_t ldb, doublecomplex *X, int_t ldx, int nrhs, double *berr, SuperLUStat_t *stat, int *info)
Definition: pzgsrfs_ABXglobal.c:111
void zPrint_Dense_Matrix_dist(SuperMatrix *)
Definition: zutil.c:156
void zinf_norm_error_dist(int_t, int_t, doublecomplex *, int_t, doublecomplex *, int_t, gridinfo_t *)
Check the inf-norm of the error vector.
Definition: zutil.c:321
doublecomplex ** Lnzval_bc_ptr
Definition: superlu_zdefs.h:37
Definition: superlu_ddefs.h:25
void pzgsmv(int_t abs, SuperMatrix *A_internal, gridinfo_t *grid, pzgsmv_comm_t *gsmv_comm, doublecomplex x[], doublecomplex ax[])
Definition: pzgsmv.c:224
void zreadhb_dist(int, FILE *, int_t *, int_t *, int_t *, doublecomplex **, int_t **, int_t **)
Definition: zreadhb.c:95
int_t * ptr_ind_tosend
Definition: superlu_zdefs.h:125
int file_PrintDoublecomplex(FILE *fp, char *, int_t, doublecomplex *)
Definition: zutil.c:353
void LUstructFree(LUstruct_t *)
Deallocate LUstruct.
Definition: util.c:205
void Destroy_LU(int_t, gridinfo_t *, LUstruct_t *)
Destroy distributed L & U matrices.
Definition: util.c:101
int zSolveInit(superlu_options_t *options, SuperMatrix *A, int_t perm_r[], int_t perm_c[], int_t nrhs, LUstruct_t *LUstruct, gridinfo_t *grid, SOLVEstruct_t *SOLVEstruct)
Initialize the data structure for the solution phase.
Definition: pzutil.c:392
Definition: superlu_ddefs.h:162
void pzinf_norm_error(int iam, int_t n, int_t nrhs, doublecomplex x[], int_t ldx, doublecomplex xtrue[], int_t ldxtrue, gridinfo_t *grid)
Check the inf-norm of the error vector.
Definition: pzutil.c:498
#define NBUFFERS
Definition: superlu_defs.h:100
Header for dcomplex.c.
Definition: superlu_defs.h:355
doublecomplex * doublecomplexMalloc_dist(int_t)
Definition: zmemory.c:141
pzgsmv_comm_t * gsmv_comm
Definition: superlu_zdefs.h:166
int_t * ind_tosend
Definition: superlu_zdefs.h:123
void zreadrb_dist(FILE *, int *, int *, int *, doublecomplex **, int **, int **)
Definition: zreadrb.c:281
void zPrintUblocks(int, int_t, gridinfo_t *, Glu_persist_t *, LocalLU_t *)
Print the blocks in the factored matrix U.
Definition: zutil.c:414
void zreadtriple(FILE *, int_t *, int_t *, int_t *, doublecomplex **, int_t **, int_t **)
Definition: zreadtriple.c:24
void zCreate_CompCol_Matrix_dist(SuperMatrix *, int_t, int_t, int_t, doublecomplex *, int_t *, int_t *, Stype_t, Dtype_t, Mtype_t)
Definition: zutil.c:27
int_t pzgstrf(superlu_options_t *options, int m, int n, double anorm, LUstruct_t *LUstruct, gridinfo_t *grid, SuperLUStat_t *stat, int *info)
Definition: pzgstrf_irecv.c:179
Definition: superlu_defs.h:227
int pzCompRow_loc_to_CompCol_global(int_t need_value, SuperMatrix *A, gridinfo_t *grid, SuperMatrix *GA)
Gather A from the distributed compressed row format to global A in compressed column format...
Definition: pzutil.c:18
int_t * ind_torecv
Definition: superlu_zdefs.h:124
int * RecvCounts
Definition: superlu_zdefs.h:131
void pzgsequ(SuperMatrix *A, double *r, double *c, double *rowcnd, double *colcnd, double *amax, int_t *info, gridinfo_t *grid)
Definition: pzgsequ.c:75
Definition: superlu_defs.h:305
Definition: superlu_zdefs.h:121
void pzgssvx_ABglobal(superlu_options_t *options, SuperMatrix *A, ScalePermstruct_t *ScalePermstruct, doublecomplex B[], int ldb, int nrhs, gridinfo_t *grid, LUstruct_t *LUstruct, double *berr, SuperLUStat_t *stat, int *info)
Definition: pzgssvx_ABglobal.c:454
void duser_free_dist(int_t bytes, int_t which_end)
Definition: dmemory.c:39
float pzdistribute(fact_t fact, int_t n, SuperMatrix *A, ScalePermstruct_t *ScalePermstruct, Glu_freeable_t *Glu_freeable, LUstruct_t *LUstruct, gridinfo_t *grid)
Definition: pzdistribute.c:309
void pzgstrs(int_t n, LUstruct_t *LUstruct, ScalePermstruct_t *ScalePermstruct, gridinfo_t *grid, doublecomplex *B, int_t m_loc, int_t fst_row, int_t ldb, int nrhs, SOLVEstruct_t *SOLVEstruct, SuperLUStat_t *stat, int *info)
Definition: pzgstrs.c:456
void zlsum_bmod(doublecomplex *lsum, doublecomplex *x, doublecomplex *xk, int nrhs, int_t k, int_t *bmod, int_t *Urbs, Ucb_indptr_t **Ucb_indptr, int_t **Ucb_valptr, int_t *xsup, gridinfo_t *grid, LocalLU_t *Llu, MPI_Request send_req[], SuperLUStat_t *stat)
Definition: pzgstrs_lsum.c:212
float zdistribute(fact_t, int_t, SuperMatrix *, Glu_freeable_t *, LUstruct_t *, gridinfo_t *)
Definition: zdistribute.c:50
doublecomplex * ujrow
Definition: superlu_zdefs.h:50
#define MAX_LOOKAHEADS
Definition: superlu_zdefs.h:34
Definition: superlu_ddefs.h:142
Mtype_t
Definition: supermatrix.h:32
int pzgsmv_AXglobal(int_t m, int_t update[], doublecomplex val[], int_t bindx[], doublecomplex X[], doublecomplex ax[])
Definition: pzgsmv_AXglobal.c:248
void pzgstrs_Bglobal(int_t n, LUstruct_t *LUstruct, gridinfo_t *grid, doublecomplex *B, int_t ldb, int nrhs, SuperLUStat_t *stat, int *info)
Definition: pzgstrs_Bglobal.c:93
int static_schedule(superlu_options_t *options, int m, int n, LUstruct_t *LUstruct, gridinfo_t *grid, SuperLUStat_t *stat, int_t *perm_c_supno, int_t *iperm_c_supno, int *info)
Definition: static_schedule.c:36
double zlangs_dist(char *, SuperMatrix *)
Definition: zlangs.c:51
int zcreate_matrix_rb(SuperMatrix *, int, doublecomplex **, int *, doublecomplex **, int *, FILE *, gridinfo_t *)
int sp_zgemm_dist(char *, int, doublecomplex, SuperMatrix *, doublecomplex *, int, doublecomplex, doublecomplex *, int)
Definition: zsp_blas3.c:114
int zgeru_(int *, int *, doublecomplex *, doublecomplex *, int *, doublecomplex *, int *, doublecomplex *, int *)
Definition: zgeru.c:9
void zlaqgs_dist(SuperMatrix *, double *, double *, double, double, double, char *)
Definition: zlaqgs.c:72
void pzgsmv_finalize(pzgsmv_comm_t *gsmv_comm)
Definition: pzgsmv.c:363
void zldperm_dist(int_t, int_t, int_t, int_t[], int_t[], doublecomplex[], int_t *, double[], double[])
Definition: zldperm_dist.c:84
int int_t
Definition: superlu_defs.h:37
void pzlaqgs(SuperMatrix *A, double *r, double *c, double rowcnd, double colcnd, double amax, char *equed)
Definition: pzlaqgs.c:74
int_t pxgstrs_init(int_t, int_t, int_t, int_t, int_t[], int_t[], gridinfo_t *grid, Glu_persist_t *, SOLVEstruct_t *)
Definition: util.c:415
void zPrintLblocks(int, int_t, gridinfo_t *, Glu_persist_t *, LocalLU_t *)
Print the blocks in the factored matrix L.
Definition: zutil.c:365
void zallocateA_dist(int_t, int_t, doublecomplex **, int_t **, int_t **)
Definition: zmemory.c:133
void zCompRow_to_CompCol_dist(int_t, int_t, int_t, doublecomplex *, int_t *, int_t *, doublecomplex **, int_t **, int_t **)
Convert a row compressed storage into a column compressed storage.
Definition: zutil.c:74
void LUstructInit(const int_t, LUstruct_t *)
Allocate storage in LUstruct.
Definition: util.c:192
void zlsum_fmod(doublecomplex *lsum, doublecomplex *x, doublecomplex *xk, doublecomplex *rtemp, int nrhs, int knsupc, int_t k, int_t *fmod, int_t nlb, int_t lptr, int_t luptr, int_t *xsup, gridinfo_t *grid, LocalLU_t *Llu, MPI_Request send_req[], SuperLUStat_t *stat)
Definition: pzgstrs_lsum.c:44
Definition: superlu_ddefs.h:35
int pzgsmv_AXglobal_setup(SuperMatrix *A, Glu_persist_t *Glu_persist, gridinfo_t *grid, int_t *m, int_t *update[], doublecomplex *val[], int_t *bindx[], int_t *mv_sup_to_proc)
Definition: pzgsmv_AXglobal.c:22
Dtype_t
Definition: supermatrix.h:25
void pzgsmv_init(SuperMatrix *A, int_t *row_to_proc, gridinfo_t *grid, pzgsmv_comm_t *gsmv_comm)
Definition: pzgsmv.c:16
int_t TotalValSend
Definition: superlu_zdefs.h:137
Definitions which are precision-neutral.
void zCreate_CompRowLoc_Matrix_dist(SuperMatrix *, int_t, int_t, int_t, int_t, int_t, doublecomplex *, int_t *, int_t *, Stype_t, Dtype_t, Mtype_t)
Definition: zutil.c:48
Definition: superlu_defs.h:531
void pxgstrs_finalize(pxgstrs_comm_t *)
Definition: util.c:542
int_t zQuerySpace_dist(int_t, LUstruct_t *, gridinfo_t *, SuperLUStat_t *, mem_usage_t *)
Definition: zmemory.c:62
Definition: superlu_ddefs.h:113
int pzPermute_Dense_Matrix(int_t fst_row, int_t m_loc, int_t row_to_proc[], int_t perm[], doublecomplex X[], int ldx, doublecomplex B[], int ldb, int nrhs, gridinfo_t *grid)
Permute the distributed dense matrix: B <= perm(X). perm[i] = j means the i-th row of X is in the j-t...
Definition: pzutil.c:280
void pzgssvx(superlu_options_t *options, SuperMatrix *A, ScalePermstruct_t *ScalePermstruct, doublecomplex B[], int ldb, int nrhs, gridinfo_t *grid, LUstruct_t *LUstruct, SOLVEstruct_t *SOLVEstruct, double *berr, SuperLUStat_t *stat, int *info)
Definition: pzgssvx.c:485
void zCopy_Dense_Matrix_dist(int_t, int_t, doublecomplex *, int_t, doublecomplex *, int_t)
Definition: zutil.c:236
int_t * ptr_ind_torecv
Definition: superlu_zdefs.h:127
int zPrint_CompRowLoc_Matrix_dist(SuperMatrix *)
Definition: zutil.c:173
int * SendCounts
Definition: superlu_zdefs.h:129
Definition: dcomplex.h:19
void zgsequ_dist(SuperMatrix *, double *, double *, double *, double *, double *, int_t *)
Definition: zgsequ.c:74
double * doubleCalloc_dist(int_t n)
Definition: dmemory.c:149
void zFillRHS_dist(char *, int_t, doublecomplex *, int_t, SuperMatrix *, doublecomplex *, int_t)
Let rhs[i] = sum of i-th row of A, so the solution vector is all 1's.
Definition: zutil.c:298
int pzgsmv_AXglobal_abs(int_t m, int_t update[], doublecomplex val[], int_t bindx[], doublecomplex X[], double ax[])
Definition: pzgsmv_AXglobal.c:278
doublecomplex * doublecomplexCalloc_dist(int_t)
Definition: zmemory.c:148