53 assert( A->
rk <= A->
rkmax && A->
rk != 0 );
54 assert( B->
rk <= B->
rkmax && B->
rk != 0 );
55 assert( params->
C->
rk == -1 );
59 kernel_trace_start_lvl2( PastixKernelLvl2_LR_FRFR2FR );
61 kernel_trace_stop_lvl2( flops );
64 kernel_trace_start_lvl2( PastixKernelLvl2_LR_FRLR2FR );
66 kernel_trace_stop_lvl2( flops );
71 kernel_trace_start_lvl2( PastixKernelLvl2_LR_LRFR2FR );
73 kernel_trace_stop_lvl2( flops );
76 kernel_trace_start_lvl2( PastixKernelLvl2_LR_LRLR2FR );
78 kernel_trace_stop_lvl2( flops );
82 assert( params->
C->
rk == -1 );
119 assert( A->rk <= A->rkmax && A->rk != 0 );
120 assert( B->rk <= B->rkmax && B->rk != 0 );
124 kernel_trace_start_lvl2( PastixKernelLvl2_LR_FRFR2null );
126 pastix_imin( pastix_imin( M, N ),
128 kernel_trace_stop_lvl2( flops );
131 kernel_trace_start_lvl2( PastixKernelLvl2_LR_FRLR2null );
134 kernel_trace_stop_lvl2( flops );
139 kernel_trace_start_lvl2( PastixKernelLvl2_LR_LRFR2null );
142 kernel_trace_stop_lvl2( flops );
145 kernel_trace_start_lvl2( PastixKernelLvl2_LR_LRLR2null );
147 kernel_trace_stop_lvl2( flops );
149 assert( AB.
rk != -1 );
150 assert( AB.
rkmax != -1 );
158 flops +=
core_dlradd( params, &AB, transV, infomask );
205 assert( A->rk <= A->rkmax && A->rk != 0 );
206 assert( B->rk <= B->rkmax && B->rk != 0 );
210 kernel_trace_start_lvl2( PastixKernelLvl2_LR_FRFR2LR );
212 pastix_imin( M, N ) );
213 kernel_trace_stop_lvl2( flops );
216 kernel_trace_start_lvl2( PastixKernelLvl2_LR_FRLR2LR );
218 kernel_trace_stop_lvl2( flops );
223 kernel_trace_start_lvl2( PastixKernelLvl2_LR_LRFR2LR );
225 kernel_trace_stop_lvl2( flops );
228 kernel_trace_start_lvl2( PastixKernelLvl2_LR_LRLR2LR );
230 kernel_trace_stop_lvl2( flops );
232 assert( AB.
rk != -1 );
233 assert( AB.
rkmax != -1 );
241 flops +=
core_dlradd( params, &AB, transV, infomask );
285 assert( A->rk <= A->rkmax);
286 assert( B->rk <= B->rkmax);
287 assert( C->rk <= C->rkmax);
290 if ( A->rk == 0 || B->rk == 0 ) {
298 params->
work = work = NULL;
300 assert( ((work != NULL) && (lwork > 0)) ||
301 ((work == NULL) && (lwork <= 0)) );
306 else if ( C->rk == -1 ) {
313 #if defined(PASTIX_DEBUG_LR)
314 pastix_atomic_lock( lock );
318 fprintf(stderr,
"Failed to have u orthogonal in exit of lrmm\n" );
321 pastix_atomic_unlock( lock );
static pastix_fixdbl_t core_dlrmm_Cfr(core_dlrmm_t *params)
Compute the matrix matrix product when applied to a full rank matrix.
static pastix_fixdbl_t core_dlrmm_Clr(core_dlrmm_t *params)
Compute the matrix matrix product when applied to a low rank matrix.
static pastix_fixdbl_t core_dlrmm_Cnull(core_dlrmm_t *params)
Compute the matrix matrix product when applied to a null matrix.
int core_dlrdbg_check_orthogonality(pastix_int_t M, pastix_int_t N, const double *A, pastix_int_t lda)
Check the orthogonality of the matrix A.
const pastix_lrblock_t * B
const pastix_lrblock_t * A
pastix_fixdbl_t core_dlradd(core_dlrmm_t *params, const pastix_lrblock_t *A, pastix_trans_t transV, int infomask)
Perform the addition of two low-rank matrices.
pastix_fixdbl_t core_dlrfr2fr(core_dlrmm_t *params)
Perform the operation C = alpha * op(A) * op(B) + beta C, with B and C full-rank and A low-rank.
pastix_fixdbl_t core_dlrlr2fr(core_dlrmm_t *params)
Perform the operation C = alpha * op(A) * op(B) + beta C, with A and B low-rank and C full-rank.
#define PASTE_CORE_DLRMM_VOID
Void all the parameters of the core_dlrmm family functions to silent warnings.
pastix_fixdbl_t core_dfrfr2lr(core_dlrmm_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.
pastix_fixdbl_t core_dlrlr2lr(core_dlrmm_t *params, pastix_lrblock_t *AB, int *infomask)
Perform the operation AB = op(A) * op(B), with A, B, and AB low-rank.
#define PASTE_CORE_DLRMM_PARAMS(_a_)
Initialize all the parameters of the core_dlrmm family functions to ease the access.
pastix_fixdbl_t core_dfrlr2lr(core_dlrmm_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.
pastix_fixdbl_t core_dlrmm(core_dlrmm_t *params)
Compute the matrix matrix product when involved matrices are stored in a low-rank structure.
pastix_fixdbl_t core_dfrfr2fr(core_dlrmm_t *params)
Perform the full-rank operation C = alpha * op(A) * op(B) + beta C.
pastix_fixdbl_t core_dlrfr2lr(core_dlrmm_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.
pastix_fixdbl_t core_dfrlr2fr(core_dlrmm_t *params)
Perform the operation C = alpha * op(A) * op(B) + beta C, with A and C full-rank and B low-rank.
Structure to store all the parameters of the core_dlrmm family functions.
#define PASTIX_LRM3_ALLOCV
Macro to specify if the V part of a low-rank matrix has been allocated and need to be freed or not (U...
#define PASTIX_LRM3_TRANSB
Macro to specify if the the operator on B, still needs to be applied to the V part of the low-rank ma...
pastix_int_t(* core_get_rklimit)(pastix_int_t, pastix_int_t)
Compute the maximal rank accepted for a given matrix size. The pointer is set according to the low-ra...
#define PASTIX_LRM3_ALLOCU
Macro to specify if the U part of a low-rank matrix has been allocated and need to be freed or not (U...
The block low-rank structure to hold a matrix in low-rank form.
enum pastix_trans_e pastix_trans_t
Transpostion.
@ PastixCompressMethodSVD