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 #endif
44  int_t *Lsub_buf_2[MAX_LOOKAHEADS]; /* Buffers for the remote subscripts of L*/
45  doublecomplex *Lval_buf_2[MAX_LOOKAHEADS]; /* Buffers for the remote nonzeros of L */
46  int_t *Usub_buf_2[MAX_LOOKAHEADS]; /* Buffer for the remote subscripts of U */
47  doublecomplex *Uval_buf_2[MAX_LOOKAHEADS]; /* Buffer for the remote nonzeros of U */
48  int_t *Usub_buf; /* Buffer for the remote subscripts of U */
49  doublecomplex *Uval_buf; /* 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_t *ToRecv; /* Recv from no one (0), left (1), and up (2).*/
61  int_t *ToSendD; /* Whether need to send down block row. */
62  int_t **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 **);
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 
219 /* Driver related */
220 extern void zgsequ_dist (SuperMatrix *, double *, double *, double *,
221  double *, double *, int_t *);
222 extern double zlangs_dist (char *, SuperMatrix *);
223 extern void zlaqgs_dist (SuperMatrix *, double *, double *, double,
224  double, double, char *);
225 extern void pzgsequ (SuperMatrix *, double *, double *, double *,
226  double *, double *, int_t *, gridinfo_t *);
227 extern double pzlangs (char *, SuperMatrix *, gridinfo_t *);
228 extern void pzlaqgs (SuperMatrix *, double *, double *, double,
229  double, double, char *);
231  doublecomplex [], int, doublecomplex [], int, int,
232  gridinfo_t *);
233 
234 extern int sp_ztrsv_dist (char *, char *, char *, SuperMatrix *,
235  SuperMatrix *, doublecomplex *, int *);
237  int, doublecomplex, doublecomplex *, int);
238 extern int sp_zgemm_dist (char *, char *, int, int, int, doublecomplex,
240  doublecomplex *, int);
241 
243  LUstruct_t *, gridinfo_t *);
246  int, int, gridinfo_t *, LUstruct_t *, double *,
247  SuperLUStat_t *, int *);
250  LUstruct_t *, gridinfo_t *);
253  int, int, gridinfo_t *, LUstruct_t *,
254  SOLVEstruct_t *, double *, SuperLUStat_t *, int *);
258  int_t [], int_t [], gridinfo_t *grid,
262 extern void zldperm(int_t, int_t, int_t, int_t [], int_t [],
263  doublecomplex [], int_t *, double [], double []);
264 extern int_t pzgstrf(superlu_options_t *, int, int, double,
265  LUstruct_t*, gridinfo_t*, SuperLUStat_t*, int*);
267  doublecomplex *, int_t, int, SuperLUStat_t *, int *);
270  SuperLUStat_t *, int *);
272  int, int, int_t , int_t *, int_t, int_t, int_t,
273  int_t *, gridinfo_t *, LocalLU_t *,
274  MPI_Request [], SuperLUStat_t *);
276  int, int_t, int_t *, int_t *, Ucb_indptr_t **,
277  int_t **, int_t *, gridinfo_t *, LocalLU_t *,
278  MPI_Request [], SuperLUStat_t *);
279 extern void pzgsrfs(int_t, SuperMatrix *, double, LUstruct_t *,
281  doublecomplex [], int_t, doublecomplex [], int_t, int,
282  SOLVEstruct_t *, double *, SuperLUStat_t *, int *);
283 extern void pzgsrfs_ABXglobal(int_t, SuperMatrix *, double, LUstruct_t *,
285  int, double *, SuperLUStat_t *, int *);
287  gridinfo_t *, int_t *, int_t *[],
288  doublecomplex *[], int_t *[], int_t []);
292  doublecomplex [], double []);
294  pzgsmv_comm_t *);
298 
299 /* Memory-related */
302 extern double *doubleMalloc_dist(int_t);
303 extern double *doubleCalloc_dist(int_t);
304 extern void *duser_malloc_dist (int_t, int_t);
305 extern void duser_free_dist (int_t, int_t);
308 extern void LUstructInit(const int_t, const int_t, LUstruct_t *);
309 extern void LUstructFree(LUstruct_t *);
310 
311 /* Auxiliary routines */
316  doublecomplex [], int_t , gridinfo_t *);
317 extern void zreadhb_dist (int, FILE *, int_t *, int_t *, int_t *,
318  doublecomplex **, int_t **, int_t **);
319 
320 /* Distribute the data for numerical factorization */
323  LUstruct_t *, gridinfo_t *);
324 
325 /* Routines for debugging */
327  LocalLU_t *);
329  LocalLU_t *);
333 extern void PrintDoublecomplex(char *, int_t, doublecomplex *);
334 extern int file_PrintDoublecomplex(FILE *fp, char *, int_t, doublecomplex *);
335 
336 /* BLAS */
337 
338 #ifdef USE_VENDOR_BLAS
339 extern int zgemm_(char*, char*, int*, int*, int*, doublecomplex*,
340  doublecomplex*, int*, doublecomplex*, int*, doublecomplex*,
341  doublecomplex*, int*, int, int);
342 extern int ztrsv_(char*, char*, char*, int*, doublecomplex*, int*,
343  doublecomplex*, int*, int, int, int);
344 #else
345 extern int zgemm_(char*, char*, int*, int*, int*, doublecomplex*,
346  doublecomplex*, int*, doublecomplex*, int*, doublecomplex*,
347  doublecomplex*, int*);
348 extern int ztrsv_(char*, char*, char*, int*, doublecomplex*, int*,
349  doublecomplex*, int*);
350 #endif
351 
352 extern int zger_(int*, int*, doublecomplex*, doublecomplex*, int*,
353  doublecomplex*, int*, doublecomplex*, int*);
354 
355 
356 #ifdef __cplusplus
357  }
358 #endif
359 
360 #endif /* __SUPERLU_dDEFS */
361 
const unsigned n
Definition: CG3DPackingUnitTest.cpp:11
Header for dcomplex.c.
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC bfloat16 fmod(const bfloat16 &a, const bfloat16 &b)
Definition: BFloat16.h:648
ax
Definition: plotDoE.py:39
list x
Definition: plotDoE.py:28
fact_t
Definition: oomph_superlu_4.3/superlu_enum_consts.h:17
Mtype_t
Definition: oomph_superlu_4.3/supermatrix.h:31
Dtype_t
Definition: oomph_superlu_4.3/supermatrix.h:24
Stype_t
Definition: oomph_superlu_4.3/supermatrix.h:11
int int_t
Definition: slu_cdefs.h:78
Definition: superlu_defs.h:294
Definition: superlu_defs.h:239
Definition: superlu_ddefs.h:113
Definition: superlu_ddefs.h:35
doublecomplex ** Lnzval_bc_ptr
Definition: superlu_zdefs.h:37
doublecomplex * ujrow
Definition: superlu_zdefs.h:50
doublecomplex * Uval_buf
Definition: superlu_zdefs.h:49
doublecomplex ** Unzval_br_ptr
Definition: superlu_zdefs.h:39
Definition: psymbfact.h:47
Definition: superlu_ddefs.h:162
pzgsmv_comm_t * gsmv_comm
Definition: superlu_zdefs.h:166
Definition: superlu_defs.h:344
Definition: slu_util.h:290
Definition: oomph_superlu_4.3/supermatrix.h:43
Definition: superlu_ddefs.h:25
Definition: datatypes.h:15
Definition: superlu_defs.h:216
Definition: slu_util.h:299
Definition: superlu_ddefs.h:142
Definition: superlu_zdefs.h:121
int_t * ptr_ind_torecv
Definition: superlu_zdefs.h:127
int_t * extern_start
Definition: superlu_zdefs.h:122
doublecomplex * val_torecv
Definition: superlu_zdefs.h:134
int_t TotalValSend
Definition: superlu_zdefs.h:137
int_t * ind_torecv
Definition: superlu_zdefs.h:124
int * SendCounts
Definition: superlu_zdefs.h:129
int * RecvCounts
Definition: superlu_zdefs.h:131
int_t * ptr_ind_tosend
Definition: superlu_zdefs.h:125
int_t * ind_tosend
Definition: superlu_zdefs.h:123
doublecomplex * val_tosend
Definition: superlu_zdefs.h:133
int_t TotalIndSend
Definition: superlu_zdefs.h:135
Definition: slu_util.h:246
Definitions which are precision-neutral.
#define NBUFFERS
Definition: superlu_defs.h:100
void pzgssvx(superlu_options_t *, SuperMatrix *, ScalePermstruct_t *, doublecomplex *, int, int, gridinfo_t *, LUstruct_t *, SOLVEstruct_t *, double *, SuperLUStat_t *, int *)
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)
void zFillRHS_dist(char *, int_t, doublecomplex *, int_t, SuperMatrix *, doublecomplex *, int_t)
int_t pxgstrs_init(int_t, int_t, int_t, int_t, int_t[], int_t[], gridinfo_t *grid, Glu_persist_t *, SOLVEstruct_t *)
void zPrint_CompCol_Matrix_dist(SuperMatrix *)
void pzgsmv_init(SuperMatrix *, int_t *, gridinfo_t *, pzgsmv_comm_t *)
int sp_ztrsv_dist(char *, char *, char *, SuperMatrix *, SuperMatrix *, doublecomplex *, int *)
void zlaqgs_dist(SuperMatrix *, double *, double *, double, double, double, char *)
void pzgsequ(SuperMatrix *, double *, double *, double *, double *, double *, int_t *, gridinfo_t *)
int sp_zgemm_dist(char *, char *, int, int, int, doublecomplex, SuperMatrix *, doublecomplex *, int, doublecomplex, doublecomplex *, int)
void zSolveFinalize(superlu_options_t *, SOLVEstruct_t *)
void pzgsmv(int_t, SuperMatrix *, gridinfo_t *, pzgsmv_comm_t *, doublecomplex x[], doublecomplex ax[])
int sp_zgemv_dist(char *, doublecomplex, SuperMatrix *, doublecomplex *, int, doublecomplex, doublecomplex *, int)
void Destroy_LU(int_t, gridinfo_t *, LUstruct_t *)
int_t zQuerySpace_dist(int_t, LUstruct_t *, gridinfo_t *, mem_usage_t *)
double * doubleMalloc_dist(int_t)
double pzlangs(char *, SuperMatrix *, gridinfo_t *)
void LUstructFree(LUstruct_t *)
void zCreate_CompCol_Matrix_dist(SuperMatrix *, int_t, int_t, int_t, doublecomplex *, int_t *, int_t *, Stype_t, Dtype_t, Mtype_t)
void zPrintLblocks(int_t, int_t, gridinfo_t *, Glu_persist_t *, LocalLU_t *)
void pzgsrfs_ABXglobal(int_t, SuperMatrix *, double, LUstruct_t *, gridinfo_t *, doublecomplex *, int_t, doublecomplex *, int_t, int, double *, SuperLUStat_t *, int *)
int zPrint_CompRowLoc_Matrix_dist(SuperMatrix *)
void LUstructInit(const int_t, const int_t, LUstruct_t *)
void pzinf_norm_error(int, int_t, int_t, doublecomplex[], int_t, doublecomplex[], int_t, gridinfo_t *)
int pzPermute_Dense_Matrix(int_t, int_t, int_t[], int_t[], doublecomplex[], int, doublecomplex[], int, int, gridinfo_t *)
float pzdistribute(fact_t, int_t, SuperMatrix *, ScalePermstruct_t *, Glu_freeable_t *, LUstruct_t *, gridinfo_t *)
void zinf_norm_error_dist(int_t, int_t, doublecomplex *, int_t, doublecomplex *, int_t, gridinfo_t *)
void PrintDoublecomplex(char *, int_t, doublecomplex *)
void pzgssvx_ABglobal(superlu_options_t *, SuperMatrix *, ScalePermstruct_t *, doublecomplex *, int, int, gridinfo_t *, LUstruct_t *, double *, SuperLUStat_t *, int *)
void pzgstrs(int_t, LUstruct_t *, ScalePermstruct_t *, gridinfo_t *, doublecomplex *, int_t, int_t, int_t, int, SOLVEstruct_t *, SuperLUStat_t *, int *)
void zPrintUblocks(int_t, int_t, gridinfo_t *, Glu_persist_t *, LocalLU_t *)
doublecomplex * doublecomplexCalloc_dist(int_t)
void zCompRow_to_CompCol_dist(int_t, int_t, int_t, doublecomplex *, int_t *, int_t *, doublecomplex **, int_t **, int_t **)
int zSolveInit(superlu_options_t *, SuperMatrix *, int_t[], int_t[], int_t, LUstruct_t *, gridinfo_t *, SOLVEstruct_t *)
int zgemm_(char *, char *, int *, int *, int *, doublecomplex *, doublecomplex *, int *, doublecomplex *, int *, doublecomplex *, doublecomplex *, int *)
#define MAX_LOOKAHEADS
Definition: superlu_zdefs.h:34
void zCreate_Dense_Matrix_dist(SuperMatrix *, int_t, int_t, doublecomplex *, int_t, Stype_t, Dtype_t, Mtype_t)
float zdist_psymbtonum(fact_t, int_t, SuperMatrix *, ScalePermstruct_t *, Pslu_freeable_t *, LUstruct_t *, gridinfo_t *)
void zGenXtrue_dist(int_t, int_t, doublecomplex *, int_t)
void zfill_dist(doublecomplex *, int_t, doublecomplex)
int pzgsmv_AXglobal_abs(int_t, int_t[], doublecomplex[], int_t[], doublecomplex[], double[])
int zcreate_matrix(SuperMatrix *, int, doublecomplex **, int *, doublecomplex **, int *, FILE *, gridinfo_t *)
void zallocateA_dist(int_t, int_t, doublecomplex **, int_t **, int_t **)
void pzlaqgs(SuperMatrix *, double *, double *, double, double, double, char *)
int pzCompRow_loc_to_CompCol_global(int_t, SuperMatrix *, gridinfo_t *, SuperMatrix *)
double * doubleCalloc_dist(int_t)
void pxgstrs_finalize(pxgstrs_comm_t *)
void zgsequ_dist(SuperMatrix *, double *, double *, double *, double *, double *, int_t *)
void * duser_malloc_dist(int_t, int_t)
int_t pzgstrf(superlu_options_t *, int, int, double, LUstruct_t *, gridinfo_t *, SuperLUStat_t *, int *)
int zger_(int *, int *, doublecomplex *, doublecomplex *, int *, doublecomplex *, int *, doublecomplex *, int *)
void zCopy_CompCol_Matrix_dist(SuperMatrix *, SuperMatrix *)
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)
void zPrint_Dense_Matrix_dist(SuperMatrix *)
double zlangs_dist(char *, SuperMatrix *)
void zlsum_bmod(doublecomplex *, doublecomplex *, doublecomplex *, int, int_t, int_t *, int_t *, Ucb_indptr_t **, int_t **, int_t *, gridinfo_t *, LocalLU_t *, MPI_Request[], SuperLUStat_t *)
void zCopy_Dense_Matrix_dist(int_t, int_t, doublecomplex *, int_t, doublecomplex *, int_t)
void duser_free_dist(int_t, int_t)
int pzgsmv_AXglobal_setup(SuperMatrix *, Glu_persist_t *, gridinfo_t *, int_t *, int_t *[], doublecomplex *[], int_t *[], int_t[])
void zreadhb_dist(int, FILE *, int_t *, int_t *, int_t *, doublecomplex **, int_t **, int_t **)
void zlsum_fmod(doublecomplex *, doublecomplex *, doublecomplex *, doublecomplex *, int, int, int_t, int_t *, int_t, int_t, int_t, int_t *, gridinfo_t *, LocalLU_t *, MPI_Request[], SuperLUStat_t *)
int file_PrintDoublecomplex(FILE *fp, char *, int_t, doublecomplex *)
void pzgstrs_Bglobal(int_t, LUstruct_t *, gridinfo_t *, doublecomplex *, int_t, int, SuperLUStat_t *, int *)
int ztrsv_(char *, char *, char *, int *, doublecomplex *, int *, doublecomplex *, int *)
void pzgsmv_finalize(pzgsmv_comm_t *)
float zdistribute(fact_t, int_t, SuperMatrix *, Glu_freeable_t *, LUstruct_t *, gridinfo_t *)
void zldperm(int_t, int_t, int_t, int_t[], int_t[], doublecomplex[], int_t *, double[], double[])
int pzgsmv_AXglobal(int_t, int_t[], doublecomplex[], int_t[], doublecomplex[], doublecomplex[])
doublecomplex * doublecomplexMalloc_dist(int_t)
void pzgsrfs(int_t, SuperMatrix *, double, LUstruct_t *, ScalePermstruct_t *, gridinfo_t *, doublecomplex[], int_t, doublecomplex[], int_t, int, SOLVEstruct_t *, double *, SuperLUStat_t *, int *)