PaStiX Handbook  6.2.1
pastix_zlrcores.h
Go to the documentation of this file.
1 /**
2  * @file pastix_zlrcores.h
3  *
4  * PaStiX kernel header.
5  *
6  * @copyright 2016-2021 Bordeaux INP, CNRS (LaBRI UMR 5800), Inria,
7  * Univ. Bordeaux. All rights reserved.
8  *
9  * @version 6.2.1
10  * @author Mathieu Faverge
11  * @author Pierre Ramet
12  * @author Xavier Lacoste
13  * @author Esragul Korkmaz
14  * @author Nolan Bredel
15  * @date 2021-06-29
16  * @generated from /builds/solverstack/pastix/kernels/pastix_zlrcores.h, normal z -> z, Tue Apr 12 09:38:27 2022
17  *
18  */
19 #ifndef _pastix_zlrcores_h_
20 #define _pastix_zlrcores_h_
21 
22 #include "pastix_lowrank.h"
23 
24 /**
25  *
26  * @addtogroup kernel_lr
27  * @{
28  * This module contains all the low-rank kernels working on pastix_lr_t
29  * matrix representations.
30  *
31  * @name PastixComplex64 low-rank kernels
32  * @{
33  */
34 void core_zlralloc( pastix_int_t M, pastix_int_t N, pastix_int_t rkmax, pastix_lrblock_t *A );
35 void core_zlrfree ( pastix_lrblock_t *A );
36 int core_zlrsze ( int copy, pastix_int_t M, pastix_int_t N, pastix_lrblock_t *A, pastix_int_t newrk, pastix_int_t newrkmax, pastix_int_t rklimit );
37 int core_zlr2ge ( pastix_trans_t trans, pastix_int_t M, pastix_int_t N, const pastix_lrblock_t *Alr, pastix_complex64_t *A, pastix_int_t lda );
38 
39 void core_zlrcpy ( const pastix_lr_t *lowrank,
40  pastix_trans_t transA, pastix_complex64_t alpha,
41  pastix_int_t M1, pastix_int_t N1, const pastix_lrblock_t *A,
42  pastix_int_t M2, pastix_int_t N2, pastix_lrblock_t *B,
43  pastix_int_t offx, pastix_int_t offy );
44 
45 void core_zlrconcatenate_u( pastix_complex64_t alpha,
46  pastix_int_t M1, pastix_int_t N1, const pastix_lrblock_t *A,
47  pastix_int_t M2, pastix_lrblock_t *B,
48  pastix_int_t offx,
49  pastix_complex64_t *u1u2 );
50 void core_zlrconcatenate_v( pastix_trans_t transA1, pastix_complex64_t alpha,
51  pastix_int_t M1, pastix_int_t N1, const pastix_lrblock_t *A,
52  pastix_int_t N2, pastix_lrblock_t *B,
53  pastix_int_t offy,
54  pastix_complex64_t *v1v2 );
55 
56 double core_zlrnrm( pastix_normtype_t ntype, int transV,
57  pastix_int_t M, pastix_int_t N,
58  const pastix_lrblock_t *A );
59 
60 size_t core_zlrgetsize( pastix_int_t M, pastix_int_t N, pastix_lrblock_t *A );
61 char *core_zlrpack( pastix_int_t M, pastix_int_t N, const pastix_lrblock_t *A, char *buffer );
62 char *core_zlrunpack( pastix_int_t M, pastix_int_t N, pastix_lrblock_t *A, char *buffer );
63 const char * core_zlrunpack2( pastix_int_t M, pastix_int_t N, pastix_lrblock_t *A, const char *input, char **outptr );
64 
65 /**
66  * @}
67  * @}
68  *
69  * @addtogroup kernel_lr_lrmm
70  * @{
71  * This are the kernels to compute the low-rank updates
72  *
73  * @name PastixComplex64 LRMM low-rank kernels
74  * @{
75  */
76 
77 /**
78  * @brief Structure to store all the parameters of the core_zlrmm family functions
79  */
80 typedef struct core_zlrmm_s {
81  const pastix_lr_t *lowrank; /**< The lowrank structure */
82  pastix_trans_t transA; /**< Specify op(A) and is equal to PastixNoTrans, PastixTrans, or PastixConjTrans */
83  pastix_trans_t transB; /**< Specify op(B) and is equal to PastixNoTrans, PastixTrans, or PastixConjTrans */
84  pastix_int_t M; /**< Number of rows of the A matrix */
85  pastix_int_t N; /**< Number of columns of the B matrix */
86  pastix_int_t K; /**< Number of columns of the A matrix (= number of rows of the B matrix) */
87  pastix_int_t Cm; /**< Number of rows of the C matrix that receives the AB contribution */
88  pastix_int_t Cn; /**< Number of columns of the C matrix that receives the AB contribution */
89  pastix_int_t offx; /**< Horizontal offsets of the AB product in the C matrix */
90  pastix_int_t offy; /**< Vertical offsets of the AB product in the C matrix */
91  pastix_complex64_t alpha; /**< The alpha factor */
92  const pastix_lrblock_t *A; /**< The A matrix described in a low-rank structure */
93  const pastix_lrblock_t *B; /**< The B matrix described in a low-rank structure */
94  pastix_complex64_t beta; /**< The beta factor */
95  pastix_lrblock_t *C; /**< The C matrix described in a low-rank structure */
96  pastix_complex64_t *work; /**< The pointer to an available workspace */
97  pastix_int_t lwork; /**< The size of the given workspace */
98  pastix_int_t lwused; /**< The size of the workspace that is already used */
99  pastix_atomic_lock_t *lock; /**< The lock to protect the concurrent accesses on the C matrix */
100 } core_zlrmm_t;
101 
102 /**
103  * @brief Initialize all the parameters of the core_zlrmm family functions to ease the access
104  */
105 #define PASTE_CORE_ZLRMM_PARAMS(_a_) \
106  const pastix_lr_t *lowrank = (_a_)->lowrank; \
107  pastix_trans_t transA = (_a_)->transA; \
108  pastix_trans_t transB = (_a_)->transB; \
109  pastix_int_t M = (_a_)->M; \
110  pastix_int_t N = (_a_)->N; \
111  pastix_int_t K = (_a_)->K; \
112  pastix_int_t Cm = (_a_)->Cm; \
113  pastix_int_t Cn = (_a_)->Cn; \
114  pastix_int_t offx = (_a_)->offx; \
115  pastix_int_t offy = (_a_)->offy; \
116  pastix_complex64_t alpha = (_a_)->alpha; \
117  const pastix_lrblock_t *A = (_a_)->A; \
118  const pastix_lrblock_t *B = (_a_)->B; \
119  pastix_complex64_t beta = (_a_)->beta; \
120  pastix_lrblock_t *C = (_a_)->C; \
121  pastix_complex64_t *work = (_a_)->work; \
122  pastix_int_t lwork = (_a_)->lwork; \
123  pastix_atomic_lock_t *lock = (_a_)->lock;
124 
125 /**
126  * @brief Void all the parameters of the core_zlrmm family functions to silent warnings
127  */
128 #define PASTE_CORE_ZLRMM_VOID \
129  (void)lowrank; \
130  (void)transA; \
131  (void)transB; \
132  (void)M; \
133  (void)N; \
134  (void)K; \
135  (void)Cm; \
136  (void)Cn; \
137  (void)offx; \
138  (void)offy; \
139  (void)alpha; \
140  (void)A; \
141  (void)B; \
142  (void)beta; \
143  (void)C; \
144  (void)work; \
145  (void)lwork; \
146  (void)lock
147 
148 /**
149  * @brief Function to get a workspace pointer if space is available in the one provided
150  * @param[inout] params The parameters structure for core_zlrmm family functions
151  * @param[in] newsize The required workspace size in number of elements
152  * @return The pointer to the workspace if enough space available, NULL otherwise.
153  */
154 static inline pastix_complex64_t *
156  ssize_t newsize )
157 {
158  pastix_complex64_t *work = NULL;
159  if ( (params->lwused + newsize) <= params->lwork )
160  {
161  work = params->work + params->lwused;
162  params->lwused += newsize;
163  }
164  /* else */
165  /* { */
166  /* if ( (params->work == NULL) || (params->lwused == 0) ) */
167  /* { */
168  /* params->work = realloc( params->work, newsize * sizeof(pastix_complex64_t) ); */
169  /* params->lwork = newsize; */
170  /* params->lwused = newsize; */
171  /* work = params->work; */
172  /* } */
173  /* } */
174  return work;
175 }
176 
177 /**
178  * @name update_fr Functions to perform the update on a full-rank matrix
179  * @{
180  */
181 pastix_fixdbl_t core_zfrfr2fr( core_zlrmm_t *params );
182 pastix_fixdbl_t core_zfrlr2fr( core_zlrmm_t *params );
183 pastix_fixdbl_t core_zlrfr2fr( core_zlrmm_t *params );
184 pastix_fixdbl_t core_zlrlr2fr( core_zlrmm_t *params );
185 
186 /**
187  * @}
188  * @name update_lr Functions to prepare the AB product for an update on a low-rank matrix
189  * @{
190  */
191 pastix_fixdbl_t core_zfrfr2lr( core_zlrmm_t *params,
192  pastix_lrblock_t *AB,
193  int *infomask,
194  pastix_int_t Kmax );
195 pastix_fixdbl_t core_zfrlr2lr( core_zlrmm_t *params,
196  pastix_lrblock_t *AB,
197  int *infomask,
198  pastix_int_t Brkmin );
199 pastix_fixdbl_t core_zlrfr2lr( core_zlrmm_t *params,
200  pastix_lrblock_t *AB,
201  int *infomask,
202  pastix_int_t Arkmin );
203 pastix_fixdbl_t core_zlrlr2lr( core_zlrmm_t *params,
204  pastix_lrblock_t *AB,
205  int *infomask );
206 
207 /**
208  * @}
209  * @name add_lr Functions to add the AB contribution in a low-rank format to any C matrix
210  * @{
211  */
212 pastix_fixdbl_t core_zlradd( core_zlrmm_t *params,
213  const pastix_lrblock_t *AB,
214  pastix_trans_t transV,
215  int infomask );
216 
217 /**
218  * @}
219  */
220 
221 pastix_fixdbl_t core_zlrmm( core_zlrmm_t *params );
222 
223 /**
224  * @}
225  * @}
226  *
227  * @addtogroup kernel_lr_svd
228  * @{
229  * This is the SVD implementation of the low-rank kernels based on the LAPACK
230  * GESVD function.
231  *
232  * @name PastixComplex64 SVD low-rank kernels
233  * @{
234  */
235 
236 pastix_fixdbl_t core_zge2lr_svd( int use_reltol, pastix_fixdbl_t tol, pastix_int_t rklimit,
237  pastix_int_t m, pastix_int_t n,
238  const void *Avoid, pastix_int_t lda, pastix_lrblock_t *Alr );
239 pastix_fixdbl_t core_zrradd_svd( const pastix_lr_t *lowrank, pastix_trans_t transA1, const void *alphaptr,
240  pastix_int_t M1, pastix_int_t N1, const pastix_lrblock_t *A,
241  pastix_int_t M2, pastix_int_t N2, pastix_lrblock_t *B,
242  pastix_int_t offx, pastix_int_t offy);
243 
244 /**
245  * @}
246  * @}
247  *
248  * @addtogroup kernel_lr_rrqr
249  * @{
250  * These are the rank-revealing QR implementations to generate the low-rank
251  * representations of a full rank matrix.
252  *
253  * @name PastixComplex64 main template to convert a full rank matrix to low-rank
254  * @{
255  */
256 
257 typedef int (*core_zrrqr_cp_t)( double tol, pastix_int_t maxrank, int refine, pastix_int_t nb,
258  pastix_int_t m, pastix_int_t n,
259  pastix_complex64_t *A, pastix_int_t lda,
260  pastix_int_t *jpvt, pastix_complex64_t *tau,
261  pastix_complex64_t *work, pastix_int_t lwork, double *rwork );
262 
263 typedef int (*core_zrrqr_rt_t)( double tol, pastix_int_t maxrank, pastix_int_t nb,
264  pastix_int_t m, pastix_int_t n,
265  pastix_complex64_t *A, pastix_int_t lda, pastix_complex64_t *tau,
266  pastix_complex64_t *B, pastix_int_t ldb, pastix_complex64_t *tau_b,
267  pastix_complex64_t *work, pastix_int_t lwork, double normA );
268 /**
269  * @}
270  *
271  * @name PastixComplex64 Rank Revealing QR kernels for low-rank
272  * @{
273  */
274 
275 pastix_fixdbl_t core_zge2lr_pqrcp( int use_reltol, pastix_fixdbl_t tol, pastix_int_t rklimit,
276  pastix_int_t m, pastix_int_t n,
277  const void *Avoid, pastix_int_t lda, pastix_lrblock_t *Alr );
278 pastix_fixdbl_t core_zrradd_pqrcp( const pastix_lr_t *lowrank, pastix_trans_t transA1, const void *alphaptr,
279  pastix_int_t M1, pastix_int_t N1, const pastix_lrblock_t *A,
280  pastix_int_t M2, pastix_int_t N2, pastix_lrblock_t *B,
281  pastix_int_t offx, pastix_int_t offy );
282 
283 pastix_fixdbl_t core_zge2lr_rqrcp( int use_reltol, pastix_fixdbl_t tol, pastix_int_t rklimit,
284  pastix_int_t m, pastix_int_t n,
285  const void *Avoid, pastix_int_t lda, pastix_lrblock_t *Alr );
286 pastix_fixdbl_t core_zrradd_rqrcp( const pastix_lr_t *lowrank, pastix_trans_t transA1, const void *alphaptr,
287  pastix_int_t M1, pastix_int_t N1, const pastix_lrblock_t *A,
288  pastix_int_t M2, pastix_int_t N2, pastix_lrblock_t *B,
289  pastix_int_t offx, pastix_int_t offy );
290 
291 pastix_fixdbl_t core_zge2lr_tqrcp( int use_reltol, pastix_fixdbl_t tol, pastix_int_t rklimit,
292  pastix_int_t m, pastix_int_t n,
293  const void *Avoid, pastix_int_t lda, pastix_lrblock_t *Alr );
294 pastix_fixdbl_t core_zrradd_tqrcp( const pastix_lr_t *lowrank, pastix_trans_t transA1, const void *alphaptr,
295  pastix_int_t M1, pastix_int_t N1, const pastix_lrblock_t *A,
296  pastix_int_t M2, pastix_int_t N2, pastix_lrblock_t *B,
297  pastix_int_t offx, pastix_int_t offy );
298 
299 pastix_fixdbl_t core_zge2lr_rqrrt( int use_reltol, pastix_fixdbl_t tol, pastix_int_t rklimit,
300  pastix_int_t m, pastix_int_t n,
301  const void *Avoid, pastix_int_t lda, pastix_lrblock_t *Alr );
302 
303 
304 pastix_fixdbl_t core_zge2lr_qrcp( core_zrrqr_cp_t rrqrfct,
305  int use_reltol, pastix_fixdbl_t tol, pastix_int_t rklimit,
306  pastix_int_t m, pastix_int_t n,
307  const void *Avoid, pastix_int_t lda,
308  pastix_lrblock_t *Alr );
309 pastix_fixdbl_t core_zge2lr_qrrt( core_zrrqr_rt_t rrqrfct,
310  int use_reltol, pastix_fixdbl_t tol, pastix_int_t rklimit,
311  pastix_int_t m, pastix_int_t n,
312  const void *Avoid, pastix_int_t lda,
313  pastix_lrblock_t *Alr);
314 
315 pastix_fixdbl_t core_zrradd_qr( core_zrrqr_cp_t rrqrfct,
316  const pastix_lr_t *lowrank, pastix_trans_t transA1, const void *alphaptr,
317  pastix_int_t M1, pastix_int_t N1, const pastix_lrblock_t *A,
318  pastix_int_t M2, pastix_int_t N2, pastix_lrblock_t *B,
319  pastix_int_t offx, pastix_int_t offy );
320 
321 /**
322  * @}
323  * @}
324  *
325  * @addtogroup kernel_lr_debug
326  * @{
327  * This is the debug routines for the low rank kernels.
328  *
329  * @name PastixComplex64 low-rank debug functions
330  * @{
331  */
332 
333 void core_zlrdbg_printsvd( pastix_int_t M,
334  pastix_int_t N,
335  const pastix_complex64_t *A,
336  pastix_int_t lda );
337 
338 int core_zlrdbg_check_orthogonality( pastix_int_t M,
339  pastix_int_t N,
340  const pastix_complex64_t *A,
341  pastix_int_t lda );
342 
343 int core_zlrdbg_check_orthogonality_AB( pastix_int_t M, pastix_int_t NA, pastix_int_t NB,
344  const pastix_complex64_t *A, pastix_int_t lda,
345  const pastix_complex64_t *B, pastix_int_t ldb );
346 
347 /**
348  * @}
349  * @}
350  *
351  */
352 #endif /* _pastix_zlrcores_h_ */
core_zlrmm_s::transB
pastix_trans_t transB
Definition: pastix_zlrcores.h:83
core_zlrmm
pastix_fixdbl_t core_zlrmm(core_zlrmm_t *params)
Compute the matrix matrix product when involved matrices are stored in a low-rank structure.
Definition: core_zlrmm.c:278
core_zrradd_qr
pastix_fixdbl_t core_zrradd_qr(core_zrrqr_cp_t rrqrfct, const pastix_lr_t *lowrank, pastix_trans_t transA1, const void *alphaptr, pastix_int_t M1, pastix_int_t N1, const pastix_lrblock_t *A, pastix_int_t M2, pastix_int_t N2, pastix_lrblock_t *B, pastix_int_t offx, pastix_int_t offy)
Template to perform the addition of two low-rank structures with compression kernel based on QR decom...
Definition: core_zgelrops.c:1174
pastix_lr_s
Structure to define the type of function to use for the low-rank kernels and their parameters.
Definition: pastix_lowrank.h:147
core_zlrmm_s::transA
pastix_trans_t transA
Definition: pastix_zlrcores.h:82
pastix_lowrank.h
core_zrradd_pqrcp
pastix_fixdbl_t core_zrradd_pqrcp(const pastix_lr_t *lowrank, pastix_trans_t transA1, const void *alphaptr, pastix_int_t M1, pastix_int_t N1, const pastix_lrblock_t *A, pastix_int_t M2, pastix_int_t N2, pastix_lrblock_t *B, pastix_int_t offx, pastix_int_t offy)
Add two LR structures A=(-u1) v1^T and B=u2 v2^T into u2 v2^T.
Definition: core_zpqrcp.c:504
core_zlrmm_s::B
const pastix_lrblock_t * B
Definition: pastix_zlrcores.h:93
core_zlrlr2fr
pastix_fixdbl_t core_zlrlr2fr(core_zlrmm_t *params)
Perform the operation C = alpha * op(A) * op(B) + beta C, with A and B low-rank and C full-rank.
Definition: core_zxx2fr.c:304
pastix_trans_t
enum pastix_trans_e pastix_trans_t
Transpostion.
core_zlrdbg_check_orthogonality
int core_zlrdbg_check_orthogonality(pastix_int_t M, pastix_int_t N, const pastix_complex64_t *A, pastix_int_t lda)
Check the orthogonality of the matrix A.
Definition: core_zlrdbg.c:98
core_zlrmm_t
struct core_zlrmm_s core_zlrmm_t
Structure to store all the parameters of the core_zlrmm family functions.
core_zlrmm_s::Cm
pastix_int_t Cm
Definition: pastix_zlrcores.h:87
core_zlrmm_s::beta
pastix_complex64_t beta
Definition: pastix_zlrcores.h:94
core_zlrlr2lr
pastix_fixdbl_t core_zlrlr2lr(core_zlrmm_t *params, pastix_lrblock_t *AB, int *infomask)
Perform the operation AB = op(A) * op(B), with A, B, and AB low-rank.
Definition: core_zxx2lr.c:442
pastix_lrblock_s
The block low-rank structure to hold a matrix in low-rank form.
Definition: pastix_lowrank.h:112
core_zlrmm_getws
static pastix_complex64_t * core_zlrmm_getws(core_zlrmm_t *params, ssize_t newsize)
Function to get a workspace pointer if space is available in the one provided.
Definition: pastix_zlrcores.h:155
core_zlradd
pastix_fixdbl_t core_zlradd(core_zlrmm_t *params, const pastix_lrblock_t *AB, pastix_trans_t transV, int infomask)
Perform the addition of two low-rank matrices.
Definition: core_zlr2xx.c:383
core_zlrdbg_printsvd
void core_zlrdbg_printsvd(pastix_int_t M, pastix_int_t N, const pastix_complex64_t *A, pastix_int_t lda)
Print the svd values of the given matrix.
Definition: core_zlrdbg.c:45
core_zlrmm_s
Structure to store all the parameters of the core_zlrmm family functions.
Definition: pastix_zlrcores.h:80
core_zlrmm_s::N
pastix_int_t N
Definition: pastix_zlrcores.h:85
core_zge2lr_tqrcp
pastix_fixdbl_t core_zge2lr_tqrcp(int use_reltol, pastix_fixdbl_t tol, pastix_int_t rklimit, pastix_int_t m, pastix_int_t n, const void *Avoid, pastix_int_t lda, pastix_lrblock_t *Alr)
Convert a full rank matrix in a low rank matrix, using TQRCP.
Definition: core_ztqrcp.c:454
core_zlrnrm
double core_zlrnrm(pastix_normtype_t ntype, int transV, pastix_int_t M, pastix_int_t N, const pastix_lrblock_t *A)
Compute the norm of a low-rank matrix.
Definition: core_zlrnrm.c:39
core_zlrfree
void core_zlrfree(pastix_lrblock_t *A)
Free a low-rank matrix.
Definition: core_zgelrops.c:116
core_zge2lr_qrcp
pastix_fixdbl_t core_zge2lr_qrcp(core_zrrqr_cp_t rrqrfct, int use_reltol, pastix_fixdbl_t tol, pastix_int_t rklimit, pastix_int_t m, pastix_int_t n, const void *Avoid, pastix_int_t lda, pastix_lrblock_t *Alr)
Template to convert a full rank matrix into a low rank matrix through QR decompositions.
Definition: core_zgelrops.c:749
core_zlrfr2lr
pastix_fixdbl_t core_zlrfr2lr(core_zlrmm_t *params, pastix_lrblock_t *AB, int *infomask, pastix_int_t Arkmin)
Perform the operation AB = op(A) * op(B), with B full-rank and A and AB low-rank.
Definition: core_zxx2lr.c:298
core_zge2lr_qrrt
pastix_fixdbl_t core_zge2lr_qrrt(core_zrrqr_rt_t rrqrfct, int use_reltol, pastix_fixdbl_t tol, pastix_int_t rklimit, pastix_int_t m, pastix_int_t n, const void *Avoid, pastix_int_t lda, pastix_lrblock_t *Alr)
Template to convert a full rank matrix into a low rank matrix through QR decompositions.
Definition: core_zgelrops.c:937
core_zfrfr2lr
pastix_fixdbl_t core_zfrfr2lr(core_zlrmm_t *params, pastix_lrblock_t *AB, int *infomask, pastix_int_t Kmax)
Perform the operation AB = op(A) * op(B), with A and B full-rank and AB low-rank.
Definition: core_zxx2lr.c:66
core_zlrmm_s::Cn
pastix_int_t Cn
Definition: pastix_zlrcores.h:88
core_zlrmm_s::offy
pastix_int_t offy
Definition: pastix_zlrcores.h:90
pastix_normtype_t
enum pastix_normtype_e pastix_normtype_t
Norms.
core_zlrmm_s::offx
pastix_int_t offx
Definition: pastix_zlrcores.h:89
core_zfrfr2fr
pastix_fixdbl_t core_zfrfr2fr(core_zlrmm_t *params)
Perform the full-rank operation C = alpha * op(A) * op(B) + beta C.
Definition: core_zxx2fr.c:48
core_zge2lr_rqrcp
pastix_fixdbl_t core_zge2lr_rqrcp(int use_reltol, pastix_fixdbl_t tol, pastix_int_t rklimit, pastix_int_t m, pastix_int_t n, const void *Avoid, pastix_int_t lda, pastix_lrblock_t *Alr)
Convert a full rank matrix in a low rank matrix, using RQRCP.
Definition: core_zrqrcp.c:411
core_zrradd_tqrcp
pastix_fixdbl_t core_zrradd_tqrcp(const pastix_lr_t *lowrank, pastix_trans_t transA1, const void *alphaptr, pastix_int_t M1, pastix_int_t N1, const pastix_lrblock_t *A, pastix_int_t M2, pastix_int_t N2, pastix_lrblock_t *B, pastix_int_t offx, pastix_int_t offy)
Add two LR structures A=(-u1) v1^T and B=u2 v2^T into u2 v2^T.
Definition: core_ztqrcp.c:518
core_zge2lr_pqrcp
pastix_fixdbl_t core_zge2lr_pqrcp(int use_reltol, pastix_fixdbl_t tol, pastix_int_t rklimit, pastix_int_t m, pastix_int_t n, const void *Avoid, pastix_int_t lda, pastix_lrblock_t *Alr)
Convert a full rank matrix in a low rank matrix, using PQRCP.
Definition: core_zpqrcp.c:440
core_zlrdbg_check_orthogonality_AB
int core_zlrdbg_check_orthogonality_AB(pastix_int_t M, pastix_int_t NA, pastix_int_t NB, const pastix_complex64_t *A, pastix_int_t lda, const pastix_complex64_t *B, pastix_int_t ldb)
Check the orthogonality of the matrix A relatively to the matrix B.
Definition: core_zlrdbg.c:181
core_zlr2ge
int core_zlr2ge(pastix_trans_t trans, pastix_int_t M, pastix_int_t N, const pastix_lrblock_t *Alr, pastix_complex64_t *A, pastix_int_t lda)
Convert a low rank matrix into a dense matrix.
Definition: core_zgelrops.c:300
core_zlrmm_s::lwused
pastix_int_t lwused
Definition: pastix_zlrcores.h:98
core_zlrmm_s::alpha
pastix_complex64_t alpha
Definition: pastix_zlrcores.h:91
core_zlrmm_s::C
pastix_lrblock_t * C
Definition: pastix_zlrcores.h:95
core_zfrlr2fr
pastix_fixdbl_t core_zfrlr2fr(core_zlrmm_t *params)
Perform the operation C = alpha * op(A) * op(B) + beta C, with A and C full-rank and B low-rank.
Definition: core_zxx2fr.c:101
core_zge2lr_svd
pastix_fixdbl_t core_zge2lr_svd(int use_reltol, pastix_fixdbl_t tol, pastix_int_t rklimit, pastix_int_t m, pastix_int_t n, const void *Avoid, pastix_int_t lda, pastix_lrblock_t *Alr)
Convert a full rank matrix in a low rank matrix, using SVD.
Definition: core_zgelrops_svd.c:116
core_zlralloc
void core_zlralloc(pastix_int_t M, pastix_int_t N, pastix_int_t rkmax, pastix_lrblock_t *A)
Allocate a low-rank matrix.
Definition: core_zgelrops.c:56
core_zlrmm_s::work
pastix_complex64_t * work
Definition: pastix_zlrcores.h:96
core_zlrsze
int core_zlrsze(int copy, pastix_int_t M, pastix_int_t N, pastix_lrblock_t *A, pastix_int_t newrk, pastix_int_t newrkmax, pastix_int_t rklimit)
Resize a low-rank matrix.
Definition: core_zgelrops.c:173
core_zlrconcatenate_u
void core_zlrconcatenate_u(pastix_complex64_t alpha, pastix_int_t M1, pastix_int_t N1, const pastix_lrblock_t *A, pastix_int_t M2, pastix_lrblock_t *B, pastix_int_t offx, pastix_complex64_t *u1u2)
Concatenate left parts of two low-rank matrices.
Definition: core_zgelrops.c:521
core_zlrcpy
void core_zlrcpy(const pastix_lr_t *lowrank, pastix_trans_t transA, pastix_complex64_t alpha, pastix_int_t M1, pastix_int_t N1, const pastix_lrblock_t *A, pastix_int_t M2, pastix_int_t N2, pastix_lrblock_t *B, pastix_int_t offx, pastix_int_t offy)
Copy a small low-rank structure into a large one.
Definition: core_zgelrops.c:418
core_zlrconcatenate_v
void core_zlrconcatenate_v(pastix_trans_t transA1, pastix_complex64_t alpha, pastix_int_t M1, pastix_int_t N1, const pastix_lrblock_t *A, pastix_int_t N2, pastix_lrblock_t *B, pastix_int_t offy, pastix_complex64_t *v1v2)
Concatenate right parts of two low-rank matrices.
Definition: core_zgelrops.c:629
core_zlrmm_s::lowrank
const pastix_lr_t * lowrank
Definition: pastix_zlrcores.h:81
core_zlrunpack2
const char * core_zlrunpack2(pastix_int_t M, pastix_int_t N, pastix_lrblock_t *A, const char *input, char **outptr)
Unpack low rank data and fill the cblk concerned by the computation.
Definition: core_zgelrops.c:1717
core_zlrmm_s::K
pastix_int_t K
Definition: pastix_zlrcores.h:86
core_zlrmm_s::lock
pastix_atomic_lock_t * lock
Definition: pastix_zlrcores.h:99
core_zlrgetsize
size_t core_zlrgetsize(pastix_int_t M, pastix_int_t N, pastix_lrblock_t *A)
Compute the size of a block to send in LR.
Definition: core_zgelrops.c:1570
core_zrradd_rqrcp
pastix_fixdbl_t core_zrradd_rqrcp(const pastix_lr_t *lowrank, pastix_trans_t transA1, const void *alphaptr, pastix_int_t M1, pastix_int_t N1, const pastix_lrblock_t *A, pastix_int_t M2, pastix_int_t N2, pastix_lrblock_t *B, pastix_int_t offx, pastix_int_t offy)
Add two LR structures A=(-u1) v1^T and B=u2 v2^T into u2 v2^T.
Definition: core_zrqrcp.c:474
core_zlrunpack
char * core_zlrunpack(pastix_int_t M, pastix_int_t N, pastix_lrblock_t *A, char *buffer)
Unpack low rank data and fill the cblk concerned by the computation.
Definition: core_zgelrops.c:1665
core_zge2lr_rqrrt
pastix_fixdbl_t core_zge2lr_rqrrt(int use_reltol, pastix_fixdbl_t tol, pastix_int_t rklimit, pastix_int_t m, pastix_int_t n, const void *Avoid, pastix_int_t lda, pastix_lrblock_t *Alr)
Convert a full rank matrix in a low rank matrix, using RQRRT.
Definition: core_zrqrrt.c:374
core_zlrmm_s::A
const pastix_lrblock_t * A
Definition: pastix_zlrcores.h:92
core_zlrmm_s::lwork
pastix_int_t lwork
Definition: pastix_zlrcores.h:97
core_zlrpack
char * core_zlrpack(pastix_int_t M, pastix_int_t N, const pastix_lrblock_t *A, char *buffer)
Pack low-rank data by side.
Definition: core_zgelrops.c:1605
core_zlrfr2fr
pastix_fixdbl_t core_zlrfr2fr(core_zlrmm_t *params)
Perform the operation C = alpha * op(A) * op(B) + beta C, with B and C full-rank and A low-rank.
Definition: core_zxx2fr.c:202
core_zrradd_svd
pastix_fixdbl_t core_zrradd_svd(const pastix_lr_t *lowrank, pastix_trans_t transA1, const void *alphaptr, pastix_int_t M1, pastix_int_t N1, const pastix_lrblock_t *A, pastix_int_t M2, pastix_int_t N2, pastix_lrblock_t *B, pastix_int_t offx, pastix_int_t offy)
Add two LR structures A=(-u1) v1^T and B=u2 v2^T into u2 v2^T.
Definition: core_zgelrops_svd.c:331
core_zfrlr2lr
pastix_fixdbl_t core_zfrlr2lr(core_zlrmm_t *params, pastix_lrblock_t *AB, int *infomask, pastix_int_t Brkmin)
Perform the operation AB = op(A) * op(B), with A full-rank and B and AB low-rank.
Definition: core_zxx2lr.c:152
core_zlrmm_s::M
pastix_int_t M
Definition: pastix_zlrcores.h:84