PaStiX Handbook  6.2.1

Modules

 Internal functions for numerical factorization kernels
 
 Solve kernels
 

PastixFloat cblk-BLAS CPU kernels

int cpucblk_sgeaddsp1d (const SolverCblk *cblk1, SolverCblk *cblk2, const float *L1, float *L2, const float *U1, float *U2)
 Add two column blocks together. More...
 
pastix_fixdbl_t cpucblk_sgemmsp (pastix_coefside_t sideA, pastix_trans_t trans, const SolverCblk *cblk, const SolverBlok *blok, SolverCblk *fcblk, const void *A, const void *B, void *C, float *work, pastix_int_t lwork, const pastix_lr_t *lowrank)
 Compute the updates associated to one off-diagonal block. More...
 
void cpucblk_strsmsp (pastix_side_t side, pastix_uplo_t uplo, pastix_trans_t trans, pastix_diag_t diag, const SolverCblk *cblk, const void *A, void *C, const pastix_lr_t *lowrank)
 Compute the updates associated to a column of off-diagonal blocks. More...
 
void cpucblk_sscalo (pastix_trans_t trans, SolverCblk *cblk, void *dataL, void *dataLD)
 Copy the L term with scaling for the two-terms algorithm. More...
 
pastix_fixdbl_t cpublok_sgemmsp (pastix_trans_t trans, const SolverCblk *cblk, SolverCblk *fcblk, pastix_int_t blok_mk, pastix_int_t blok_nk, pastix_int_t blok_mn, const void *A, const void *B, void *C, const pastix_lr_t *lowrank)
 Compute the CPU gemm associated to a couple of off-diagonal blocks. More...
 
pastix_fixdbl_t cpublok_strsmsp (pastix_side_t side, pastix_uplo_t uplo, pastix_trans_t trans, pastix_diag_t diag, const SolverCblk *cblk, pastix_int_t blok_m, const void *A, void *C, const pastix_lr_t *lowrank)
 Compute the updates associated to one off-diagonal block. More...
 
void cpublok_sscalo (pastix_trans_t trans, SolverCblk *cblk, pastix_int_t blok_m, const void *A, const void *dataD, void *dataB)
 Copy the lower terms of the block with scaling for the two-terms algorithm. More...
 

PastixFloat cblk LU kernels

int cpucblk_sgetrfsp1d_getrf (SolverMatrix *solvmtx, SolverCblk *cblk, void *L, void *U)
 Compute the LU factorization of the diagonal block in a panel. More...
 
int cpucblk_sgetrfsp1d_panel (SolverMatrix *solvmtx, SolverCblk *cblk, void *L, void *U)
 Compute the LU factorization of one panel. More...
 
int cpucblk_sgetrfsp1d (SolverMatrix *solvmtx, SolverCblk *cblk, float *work, pastix_int_t lwork)
 Perform the LU factorization of a given panel and apply all its updates. More...
 

PastixFloat cblk Cholesky kernels

int cpucblk_spotrfsp1d_potrf (SolverMatrix *solvmtx, SolverCblk *cblk, void *dataL)
 Compute the Cholesky factorization of the diagonal block in a panel. More...
 
int cpucblk_spotrfsp1d_panel (SolverMatrix *solvmtx, SolverCblk *cblk, void *dataL)
 Compute the Cholesky factorization of one panel. More...
 
int cpucblk_spotrfsp1d (SolverMatrix *solvmtx, SolverCblk *cblk, float *work, pastix_int_t lwork)
 Perform the Cholesky factorization of a given panel and apply all its updates. More...
 

PastixFloat cblk LDL^h kernels

int cpucblk_ssytrfsp1d_sytrf (SolverMatrix *solvmtx, SolverCblk *cblk, void *L)
 Computes the LDL^t factorization of the diagonal block in a panel. More...
 
int cpucblk_ssytrfsp1d_panel (SolverMatrix *solvmtx, SolverCblk *cblk, void *L, void *DLh)
 Compute the LDL^t factorization of one panel. More...
 
int cpucblk_ssytrfsp1d (SolverMatrix *solvmtx, SolverCblk *cblk, float *work1, float *work2, pastix_int_t lwork)
 Perform the LDL^t factorization of a given panel and apply all its updates. More...
 

PastixFloat cblk LL^t kernels

int cpucblk_spotrfsp1d_pxtrf (SolverMatrix *solvmtx, SolverCblk *cblk, void *dataL)
 

PastixFloat initialization and additionnal routines

void cpucblk_salloc_lrws (const SolverCblk *cblk, pastix_lrblock_t *lrblok, float *ws)
 Initialize lrblock structure from a workspace from all blocks of the cblk associated. More...
 
void cpucblk_salloc_lr (pastix_coefside_t side, SolverCblk *cblk, int rkmax)
 Allocate the cblk structure to store the coefficient. More...
 
void cpucblk_salloc_fr (pastix_coefside_t side, SolverCblk *cblk)
 Allocate the cblk structure to store the coefficient. More...
 
void cpucblk_salloc (pastix_coefside_t side, SolverCblk *cblk)
 Allocate the cblk structure to store the coefficient. More...
 
void cpucblk_sfree (pastix_coefside_t side, SolverCblk *cblk)
 Free the cblk structure that store the coefficient. More...
 
void cpucblk_sfillin (pastix_coefside_t side, const SolverMatrix *solvmtx, const pastix_bcsc_t *bcsc, pastix_int_t itercblk)
 Initialize the coeftab structure from the internal bcsc. More...
 
void cpucblk_sinit (pastix_coefside_t side, const SolverMatrix *solvmtx, const pastix_bcsc_t *bcsc, pastix_int_t itercblk, const char *directory)
 Fully initialize a single cblk. More...
 
void cpucblk_sgetschur (const SolverCblk *cblk, int upper_part, float *S, pastix_int_t lds)
 Extract a cblk panel of the Schur complement to a dense lapack form. More...
 
void cpucblk_sdump (pastix_coefside_t side, const SolverCblk *cblk, FILE *stream)
 Dump a single column block into a FILE in a human readale format. More...
 
int cpucblk_sdiff (pastix_coefside_t side, const SolverCblk *cblkA, SolverCblk *cblkB)
 Compare two column blocks in full-rank format. More...
 
void cpucblk_sadd (pastix_coefside_t side, float alpha, const SolverCblk *cblkA, SolverCblk *cblkB, const pastix_lr_t *lowrank)
 Add two column bloks in full rank format. More...
 
void cpucblk_sadd_recv (pastix_coefside_t side, float alpha, SolverCblk *cblk)
 

PastixFloat MPI routines

int cpucblk_sincoming_deps (int mt_flag, pastix_coefside_t side, SolverMatrix *solvmtx, SolverCblk *cblk)
 Wait for incoming dependencies, and return when cblk->ctrbcnt has reached 0. More...
 
void cpucblk_srelease_deps (pastix_coefside_t side, SolverMatrix *solvmtx, const SolverCblk *cblk, SolverCblk *fcbk)
 Release the dependencies of the given cblk after an update. More...
 
void cpucblk_srequest_cleanup (pastix_coefside_t side, pastix_int_t sched, SolverMatrix *solvmtx)
 Waitall routine for current cblk request. More...
 
void cpucblk_smpi_progress (pastix_coefside_t side, SolverMatrix *solvmtx, int threadid)
 
void cpucblk_ssend_rhs_forward (const SolverMatrix *solvmtx, SolverCblk *cblk, float *b)
 Send the rhs associated to a cblk->lcolidx to the remote node. More...
 
void cpucblk_srecv_rhs_forward (const SolverMatrix *solvmtx, SolverCblk *cblk, float *work, pastix_int_t nrhs, float *b, pastix_int_t ldb)
 Receive the rhs associated to a cblk->lcolidx to the remote node. More...
 
void cpucblk_ssend_rhs_backward (const SolverMatrix *solvmtx, SolverCblk *cblk, float *b)
 Send the rhs associated to a cblk->lcolidx to the remote node. More...
 
void cpucblk_srecv_rhs_backward (const SolverMatrix *solvmtx, SolverCblk *cblk, float *b)
 Receive the rhs associated to a cblk->lcolidx to the remote node. More...
 

PastixFloat compression/uncompression routines

pastix_fixdbl_t cpublok_scompress (const pastix_lr_t *lowrank, pastix_int_t M, pastix_int_t N, pastix_lrblock_t *blok)
 Compress a single block from full-rank to low-rank format. More...
 
pastix_int_t cpucblk_scompress (const SolverMatrix *solvmtx, pastix_coefside_t side, int max_ilulvl, SolverCblk *cblk)
 Compress a single column block from full-rank to low-rank format. More...
 
void cpucblk_suncompress (pastix_coefside_t side, SolverCblk *cblk)
 Uncompress a single column block from low-rank format to full-rank format. More...
 
void cpucblk_smemory (pastix_coefside_t side, SolverMatrix *solvmtx, SolverCblk *cblk, pastix_int_t *orig, pastix_int_t *gain)
 Return the memory gain of the low-rank form over the full-rank form for a single column-block. More...
 

PastixDouble cblk-BLAS CPU kernels

int cpucblk_dgeaddsp1d (const SolverCblk *cblk1, SolverCblk *cblk2, const double *L1, double *L2, const double *U1, double *U2)
 Add two column blocks together. More...
 
pastix_fixdbl_t cpucblk_dgemmsp (pastix_coefside_t sideA, pastix_trans_t trans, const SolverCblk *cblk, const SolverBlok *blok, SolverCblk *fcblk, const void *A, const void *B, void *C, double *work, pastix_int_t lwork, const pastix_lr_t *lowrank)
 Compute the updates associated to one off-diagonal block. More...
 
void cpucblk_dtrsmsp (pastix_side_t side, pastix_uplo_t uplo, pastix_trans_t trans, pastix_diag_t diag, const SolverCblk *cblk, const void *A, void *C, const pastix_lr_t *lowrank)
 Compute the updates associated to a column of off-diagonal blocks. More...
 
void cpucblk_dscalo (pastix_trans_t trans, SolverCblk *cblk, void *dataL, void *dataLD)
 Copy the L term with scaling for the two-terms algorithm. More...
 
pastix_fixdbl_t cpublok_dgemmsp (pastix_trans_t trans, const SolverCblk *cblk, SolverCblk *fcblk, pastix_int_t blok_mk, pastix_int_t blok_nk, pastix_int_t blok_mn, const void *A, const void *B, void *C, const pastix_lr_t *lowrank)
 Compute the CPU gemm associated to a couple of off-diagonal blocks. More...
 
pastix_fixdbl_t cpublok_dtrsmsp (pastix_side_t side, pastix_uplo_t uplo, pastix_trans_t trans, pastix_diag_t diag, const SolverCblk *cblk, pastix_int_t blok_m, const void *A, void *C, const pastix_lr_t *lowrank)
 Compute the updates associated to one off-diagonal block. More...
 
void cpublok_dscalo (pastix_trans_t trans, SolverCblk *cblk, pastix_int_t blok_m, const void *A, const void *dataD, void *dataB)
 Copy the lower terms of the block with scaling for the two-terms algorithm. More...
 

PastixDouble cblk LU kernels

int cpucblk_dgetrfsp1d_getrf (SolverMatrix *solvmtx, SolverCblk *cblk, void *L, void *U)
 Compute the LU factorization of the diagonal block in a panel. More...
 
int cpucblk_dgetrfsp1d_panel (SolverMatrix *solvmtx, SolverCblk *cblk, void *L, void *U)
 Compute the LU factorization of one panel. More...
 
int cpucblk_dgetrfsp1d (SolverMatrix *solvmtx, SolverCblk *cblk, double *work, pastix_int_t lwork)
 Perform the LU factorization of a given panel and apply all its updates. More...
 

PastixDouble cblk Cholesky kernels

int cpucblk_dpotrfsp1d_potrf (SolverMatrix *solvmtx, SolverCblk *cblk, void *dataL)
 Compute the Cholesky factorization of the diagonal block in a panel. More...
 
int cpucblk_dpotrfsp1d_panel (SolverMatrix *solvmtx, SolverCblk *cblk, void *dataL)
 Compute the Cholesky factorization of one panel. More...
 
int cpucblk_dpotrfsp1d (SolverMatrix *solvmtx, SolverCblk *cblk, double *work, pastix_int_t lwork)
 Perform the Cholesky factorization of a given panel and apply all its updates. More...
 

PastixDouble cblk LDL^h kernels

int cpucblk_dsytrfsp1d_sytrf (SolverMatrix *solvmtx, SolverCblk *cblk, void *L)
 Computes the LDL^t factorization of the diagonal block in a panel. More...
 
int cpucblk_dsytrfsp1d_panel (SolverMatrix *solvmtx, SolverCblk *cblk, void *L, void *DLh)
 Compute the LDL^t factorization of one panel. More...
 
int cpucblk_dsytrfsp1d (SolverMatrix *solvmtx, SolverCblk *cblk, double *work1, double *work2, pastix_int_t lwork)
 Perform the LDL^t factorization of a given panel and apply all its updates. More...
 

PastixDouble cblk LL^t kernels

int cpucblk_dpotrfsp1d_pxtrf (SolverMatrix *solvmtx, SolverCblk *cblk, void *dataL)
 

PastixDouble initialization and additionnal routines

void cpucblk_dalloc_lrws (const SolverCblk *cblk, pastix_lrblock_t *lrblok, double *ws)
 Initialize lrblock structure from a workspace from all blocks of the cblk associated. More...
 
void cpucblk_dalloc_lr (pastix_coefside_t side, SolverCblk *cblk, int rkmax)
 Allocate the cblk structure to store the coefficient. More...
 
void cpucblk_dalloc_fr (pastix_coefside_t side, SolverCblk *cblk)
 Allocate the cblk structure to store the coefficient. More...
 
void cpucblk_dalloc (pastix_coefside_t side, SolverCblk *cblk)
 Allocate the cblk structure to store the coefficient. More...
 
void cpucblk_dfree (pastix_coefside_t side, SolverCblk *cblk)
 Free the cblk structure that store the coefficient. More...
 
void cpucblk_dfillin (pastix_coefside_t side, const SolverMatrix *solvmtx, const pastix_bcsc_t *bcsc, pastix_int_t itercblk)
 Initialize the coeftab structure from the internal bcsc. More...
 
void cpucblk_dinit (pastix_coefside_t side, const SolverMatrix *solvmtx, const pastix_bcsc_t *bcsc, pastix_int_t itercblk, const char *directory)
 Fully initialize a single cblk. More...
 
void cpucblk_dgetschur (const SolverCblk *cblk, int upper_part, double *S, pastix_int_t lds)
 Extract a cblk panel of the Schur complement to a dense lapack form. More...
 
void cpucblk_ddump (pastix_coefside_t side, const SolverCblk *cblk, FILE *stream)
 Dump a single column block into a FILE in a human readale format. More...
 
int cpucblk_ddiff (pastix_coefside_t side, const SolverCblk *cblkA, SolverCblk *cblkB)
 Compare two column blocks in full-rank format. More...
 
void cpucblk_dadd (pastix_coefside_t side, double alpha, const SolverCblk *cblkA, SolverCblk *cblkB, const pastix_lr_t *lowrank)
 Add two column bloks in full rank format. More...
 
void cpucblk_dadd_recv (pastix_coefside_t side, double alpha, SolverCblk *cblk)
 

PastixDouble MPI routines

int cpucblk_dincoming_deps (int mt_flag, pastix_coefside_t side, SolverMatrix *solvmtx, SolverCblk *cblk)
 Wait for incoming dependencies, and return when cblk->ctrbcnt has reached 0. More...
 
void cpucblk_drelease_deps (pastix_coefside_t side, SolverMatrix *solvmtx, const SolverCblk *cblk, SolverCblk *fcbk)
 Release the dependencies of the given cblk after an update. More...
 
void cpucblk_drequest_cleanup (pastix_coefside_t side, pastix_int_t sched, SolverMatrix *solvmtx)
 Waitall routine for current cblk request. More...
 
void cpucblk_dmpi_progress (pastix_coefside_t side, SolverMatrix *solvmtx, int threadid)
 
void cpucblk_dsend_rhs_forward (const SolverMatrix *solvmtx, SolverCblk *cblk, double *b)
 Send the rhs associated to a cblk->lcolidx to the remote node. More...
 
void cpucblk_drecv_rhs_forward (const SolverMatrix *solvmtx, SolverCblk *cblk, double *work, pastix_int_t nrhs, double *b, pastix_int_t ldb)
 Receive the rhs associated to a cblk->lcolidx to the remote node. More...
 
void cpucblk_dsend_rhs_backward (const SolverMatrix *solvmtx, SolverCblk *cblk, double *b)
 Send the rhs associated to a cblk->lcolidx to the remote node. More...
 
void cpucblk_drecv_rhs_backward (const SolverMatrix *solvmtx, SolverCblk *cblk, double *b)
 Receive the rhs associated to a cblk->lcolidx to the remote node. More...
 

PastixDouble compression/uncompression routines

pastix_fixdbl_t cpublok_dcompress (const pastix_lr_t *lowrank, pastix_int_t M, pastix_int_t N, pastix_lrblock_t *blok)
 Compress a single block from full-rank to low-rank format. More...
 
pastix_int_t cpucblk_dcompress (const SolverMatrix *solvmtx, pastix_coefside_t side, int max_ilulvl, SolverCblk *cblk)
 Compress a single column block from full-rank to low-rank format. More...
 
void cpucblk_duncompress (pastix_coefside_t side, SolverCblk *cblk)
 Uncompress a single column block from low-rank format to full-rank format. More...
 
void cpucblk_dmemory (pastix_coefside_t side, SolverMatrix *solvmtx, SolverCblk *cblk, pastix_int_t *orig, pastix_int_t *gain)
 Return the memory gain of the low-rank form over the full-rank form for a single column-block. More...
 

PastixComplex32 cblk-BLAS CPU kernels

int cpucblk_cgeaddsp1d (const SolverCblk *cblk1, SolverCblk *cblk2, const pastix_complex32_t *L1, pastix_complex32_t *L2, const pastix_complex32_t *U1, pastix_complex32_t *U2)
 Add two column blocks together. More...
 
pastix_fixdbl_t cpucblk_cgemmsp (pastix_coefside_t sideA, pastix_trans_t trans, const SolverCblk *cblk, const SolverBlok *blok, SolverCblk *fcblk, const void *A, const void *B, void *C, pastix_complex32_t *work, pastix_int_t lwork, const pastix_lr_t *lowrank)
 Compute the updates associated to one off-diagonal block. More...
 
void cpucblk_ctrsmsp (pastix_side_t side, pastix_uplo_t uplo, pastix_trans_t trans, pastix_diag_t diag, const SolverCblk *cblk, const void *A, void *C, const pastix_lr_t *lowrank)
 Compute the updates associated to a column of off-diagonal blocks. More...
 
void cpucblk_cscalo (pastix_trans_t trans, SolverCblk *cblk, void *dataL, void *dataLD)
 Copy the L term with scaling for the two-terms algorithm. More...
 
pastix_fixdbl_t cpublok_cgemmsp (pastix_trans_t trans, const SolverCblk *cblk, SolverCblk *fcblk, pastix_int_t blok_mk, pastix_int_t blok_nk, pastix_int_t blok_mn, const void *A, const void *B, void *C, const pastix_lr_t *lowrank)
 Compute the CPU gemm associated to a couple of off-diagonal blocks. More...
 
pastix_fixdbl_t cpublok_ctrsmsp (pastix_side_t side, pastix_uplo_t uplo, pastix_trans_t trans, pastix_diag_t diag, const SolverCblk *cblk, pastix_int_t blok_m, const void *A, void *C, const pastix_lr_t *lowrank)
 Compute the updates associated to one off-diagonal block. More...
 
void cpublok_cscalo (pastix_trans_t trans, SolverCblk *cblk, pastix_int_t blok_m, const void *A, const void *dataD, void *dataB)
 Copy the lower terms of the block with scaling for the two-terms algorithm. More...
 

PastixComplex32 cblk LU kernels

int cpucblk_cgetrfsp1d_getrf (SolverMatrix *solvmtx, SolverCblk *cblk, void *L, void *U)
 Compute the LU factorization of the diagonal block in a panel. More...
 
int cpucblk_cgetrfsp1d_panel (SolverMatrix *solvmtx, SolverCblk *cblk, void *L, void *U)
 Compute the LU factorization of one panel. More...
 
int cpucblk_cgetrfsp1d (SolverMatrix *solvmtx, SolverCblk *cblk, pastix_complex32_t *work, pastix_int_t lwork)
 Perform the LU factorization of a given panel and apply all its updates. More...
 

PastixComplex32 cblk Cholesky kernels

int cpucblk_cpotrfsp1d_potrf (SolverMatrix *solvmtx, SolverCblk *cblk, void *dataL)
 Compute the Cholesky factorization of the diagonal block in a panel. More...
 
int cpucblk_cpotrfsp1d_panel (SolverMatrix *solvmtx, SolverCblk *cblk, void *dataL)
 Compute the Cholesky factorization of one panel. More...
 
int cpucblk_cpotrfsp1d (SolverMatrix *solvmtx, SolverCblk *cblk, pastix_complex32_t *work, pastix_int_t lwork)
 Perform the Cholesky factorization of a given panel and apply all its updates. More...
 

PastixComplex32 cblk LDL^h kernels

int cpucblk_chetrfsp1d_hetrf (SolverMatrix *solvmtx, SolverCblk *cblk, void *L)
 Computes the LDL^h factorization of the diagonal block in a panel. More...
 
int cpucblk_chetrfsp1d_panel (SolverMatrix *solvmtx, SolverCblk *cblk, void *L, void *DLh)
 Compute the LDL^h factorization of one panel. More...
 
int cpucblk_chetrfsp1d (SolverMatrix *solvmtx, SolverCblk *cblk, pastix_complex32_t *work1, pastix_complex32_t *work2, pastix_int_t lwork)
 Perform the LDL^h factorization of a given panel and apply all its updates. More...
 

PastixComplex32 cblk LL^t kernels

int cpucblk_cpxtrfsp1d_pxtrf (SolverMatrix *solvmtx, SolverCblk *cblk, void *dataL)
 Compute the LL^t factorization of the diagonal block in a panel. More...
 
int cpucblk_cpxtrfsp1d_panel (SolverMatrix *solvmtx, SolverCblk *cblk, void *dataL)
 Compute the LL^t factorization of one panel. More...
 
int cpucblk_cpxtrfsp1d (SolverMatrix *solvmtx, SolverCblk *cblk, pastix_complex32_t *work, pastix_int_t lwork)
 Perform the LL^t factorization of a given panel and apply all its updates. More...
 

PastixComplex32 cblk LDL^t kernels

int cpucblk_csytrfsp1d_sytrf (SolverMatrix *solvmtx, SolverCblk *cblk, void *L)
 Computes the LDL^t factorization of the diagonal block in a panel. More...
 
int cpucblk_csytrfsp1d_panel (SolverMatrix *solvmtx, SolverCblk *cblk, void *L, void *DLt)
 Compute the LDL^t factorization of one panel. More...
 
int cpucblk_csytrfsp1d (SolverMatrix *solvmtx, SolverCblk *cblk, pastix_complex32_t *work1, pastix_complex32_t *work2, pastix_int_t lwork)
 Perform the LDL^t factorization of a given panel and apply all its updates. More...
 

PastixComplex32 initialization and additionnal routines

void cpucblk_calloc_lrws (const SolverCblk *cblk, pastix_lrblock_t *lrblok, pastix_complex32_t *ws)
 Initialize lrblock structure from a workspace from all blocks of the cblk associated. More...
 
void cpucblk_calloc_lr (pastix_coefside_t side, SolverCblk *cblk, int rkmax)
 Allocate the cblk structure to store the coefficient. More...
 
void cpucblk_calloc_fr (pastix_coefside_t side, SolverCblk *cblk)
 Allocate the cblk structure to store the coefficient. More...
 
void cpucblk_calloc (pastix_coefside_t side, SolverCblk *cblk)
 Allocate the cblk structure to store the coefficient. More...
 
void cpucblk_cfree (pastix_coefside_t side, SolverCblk *cblk)
 Free the cblk structure that store the coefficient. More...
 
void cpucblk_cfillin (pastix_coefside_t side, const SolverMatrix *solvmtx, const pastix_bcsc_t *bcsc, pastix_int_t itercblk)
 Initialize the coeftab structure from the internal bcsc. More...
 
void cpucblk_cinit (pastix_coefside_t side, const SolverMatrix *solvmtx, const pastix_bcsc_t *bcsc, pastix_int_t itercblk, const char *directory)
 Fully initialize a single cblk. More...
 
void cpucblk_cgetschur (const SolverCblk *cblk, int upper_part, pastix_complex32_t *S, pastix_int_t lds)
 Extract a cblk panel of the Schur complement to a dense lapack form. More...
 
void cpucblk_cdump (pastix_coefside_t side, const SolverCblk *cblk, FILE *stream)
 Dump a single column block into a FILE in a human readale format. More...
 
int cpucblk_cdiff (pastix_coefside_t side, const SolverCblk *cblkA, SolverCblk *cblkB)
 Compare two column blocks in full-rank format. More...
 
void cpucblk_cadd (pastix_coefside_t side, float alpha, const SolverCblk *cblkA, SolverCblk *cblkB, const pastix_lr_t *lowrank)
 Add two column bloks in full rank format. More...
 
void cpucblk_cadd_recv (pastix_coefside_t side, float alpha, SolverCblk *cblk)
 

PastixComplex32 MPI routines

int cpucblk_cincoming_deps (int mt_flag, pastix_coefside_t side, SolverMatrix *solvmtx, SolverCblk *cblk)
 Wait for incoming dependencies, and return when cblk->ctrbcnt has reached 0. More...
 
void cpucblk_crelease_deps (pastix_coefside_t side, SolverMatrix *solvmtx, const SolverCblk *cblk, SolverCblk *fcbk)
 Release the dependencies of the given cblk after an update. More...
 
void cpucblk_crequest_cleanup (pastix_coefside_t side, pastix_int_t sched, SolverMatrix *solvmtx)
 Waitall routine for current cblk request. More...
 
void cpucblk_cmpi_progress (pastix_coefside_t side, SolverMatrix *solvmtx, int threadid)
 
void cpucblk_csend_rhs_forward (const SolverMatrix *solvmtx, SolverCblk *cblk, pastix_complex32_t *b)
 Send the rhs associated to a cblk->lcolidx to the remote node. More...
 
void cpucblk_crecv_rhs_forward (const SolverMatrix *solvmtx, SolverCblk *cblk, pastix_complex32_t *work, pastix_int_t nrhs, pastix_complex32_t *b, pastix_int_t ldb)
 Receive the rhs associated to a cblk->lcolidx to the remote node. More...
 
void cpucblk_csend_rhs_backward (const SolverMatrix *solvmtx, SolverCblk *cblk, pastix_complex32_t *b)
 Send the rhs associated to a cblk->lcolidx to the remote node. More...
 
void cpucblk_crecv_rhs_backward (const SolverMatrix *solvmtx, SolverCblk *cblk, pastix_complex32_t *b)
 Receive the rhs associated to a cblk->lcolidx to the remote node. More...
 

PastixComplex32 compression/uncompression routines

pastix_fixdbl_t cpublok_ccompress (const pastix_lr_t *lowrank, pastix_int_t M, pastix_int_t N, pastix_lrblock_t *blok)
 Compress a single block from full-rank to low-rank format. More...
 
pastix_int_t cpucblk_ccompress (const SolverMatrix *solvmtx, pastix_coefside_t side, int max_ilulvl, SolverCblk *cblk)
 Compress a single column block from full-rank to low-rank format. More...
 
void cpucblk_cuncompress (pastix_coefside_t side, SolverCblk *cblk)
 Uncompress a single column block from low-rank format to full-rank format. More...
 
void cpucblk_cmemory (pastix_coefside_t side, SolverMatrix *solvmtx, SolverCblk *cblk, pastix_int_t *orig, pastix_int_t *gain)
 Return the memory gain of the low-rank form over the full-rank form for a single column-block. More...
 

PastixComplex64 cblk-BLAS CPU kernels

int cpucblk_zgeaddsp1d (const SolverCblk *cblk1, SolverCblk *cblk2, const pastix_complex64_t *L1, pastix_complex64_t *L2, const pastix_complex64_t *U1, pastix_complex64_t *U2)
 Add two column blocks together. More...
 
pastix_fixdbl_t cpucblk_zgemmsp (pastix_coefside_t sideA, pastix_trans_t trans, const SolverCblk *cblk, const SolverBlok *blok, SolverCblk *fcblk, const void *A, const void *B, void *C, pastix_complex64_t *work, pastix_int_t lwork, const pastix_lr_t *lowrank)
 Compute the updates associated to one off-diagonal block. More...
 
void cpucblk_ztrsmsp (pastix_side_t side, pastix_uplo_t uplo, pastix_trans_t trans, pastix_diag_t diag, const SolverCblk *cblk, const void *A, void *C, const pastix_lr_t *lowrank)
 Compute the updates associated to a column of off-diagonal blocks. More...
 
void cpucblk_zscalo (pastix_trans_t trans, SolverCblk *cblk, void *dataL, void *dataLD)
 Copy the L term with scaling for the two-terms algorithm. More...
 
pastix_fixdbl_t cpublok_zgemmsp (pastix_trans_t trans, const SolverCblk *cblk, SolverCblk *fcblk, pastix_int_t blok_mk, pastix_int_t blok_nk, pastix_int_t blok_mn, const void *A, const void *B, void *C, const pastix_lr_t *lowrank)
 Compute the CPU gemm associated to a couple of off-diagonal blocks. More...
 
pastix_fixdbl_t cpublok_ztrsmsp (pastix_side_t side, pastix_uplo_t uplo, pastix_trans_t trans, pastix_diag_t diag, const SolverCblk *cblk, pastix_int_t blok_m, const void *A, void *C, const pastix_lr_t *lowrank)
 Compute the updates associated to one off-diagonal block. More...
 
void cpublok_zscalo (pastix_trans_t trans, SolverCblk *cblk, pastix_int_t blok_m, const void *A, const void *dataD, void *dataB)
 Copy the lower terms of the block with scaling for the two-terms algorithm. More...
 

PastixComplex64 cblk LU kernels

int cpucblk_zgetrfsp1d_getrf (SolverMatrix *solvmtx, SolverCblk *cblk, void *L, void *U)
 Compute the LU factorization of the diagonal block in a panel. More...
 
int cpucblk_zgetrfsp1d_panel (SolverMatrix *solvmtx, SolverCblk *cblk, void *L, void *U)
 Compute the LU factorization of one panel. More...
 
int cpucblk_zgetrfsp1d (SolverMatrix *solvmtx, SolverCblk *cblk, pastix_complex64_t *work, pastix_int_t lwork)
 Perform the LU factorization of a given panel and apply all its updates. More...
 

PastixComplex64 cblk Cholesky kernels

int cpucblk_zpotrfsp1d_potrf (SolverMatrix *solvmtx, SolverCblk *cblk, void *dataL)
 Compute the Cholesky factorization of the diagonal block in a panel. More...
 
int cpucblk_zpotrfsp1d_panel (SolverMatrix *solvmtx, SolverCblk *cblk, void *dataL)
 Compute the Cholesky factorization of one panel. More...
 
int cpucblk_zpotrfsp1d (SolverMatrix *solvmtx, SolverCblk *cblk, pastix_complex64_t *work, pastix_int_t lwork)
 Perform the Cholesky factorization of a given panel and apply all its updates. More...
 

PastixComplex64 cblk LDL^h kernels

int cpucblk_zhetrfsp1d_hetrf (SolverMatrix *solvmtx, SolverCblk *cblk, void *L)
 Computes the LDL^h factorization of the diagonal block in a panel. More...
 
int cpucblk_zhetrfsp1d_panel (SolverMatrix *solvmtx, SolverCblk *cblk, void *L, void *DLh)
 Compute the LDL^h factorization of one panel. More...
 
int cpucblk_zhetrfsp1d (SolverMatrix *solvmtx, SolverCblk *cblk, pastix_complex64_t *work1, pastix_complex64_t *work2, pastix_int_t lwork)
 Perform the LDL^h factorization of a given panel and apply all its updates. More...
 

PastixComplex64 cblk LL^t kernels

int cpucblk_zpxtrfsp1d_pxtrf (SolverMatrix *solvmtx, SolverCblk *cblk, void *dataL)
 Compute the LL^t factorization of the diagonal block in a panel. More...
 
int cpucblk_zpxtrfsp1d_panel (SolverMatrix *solvmtx, SolverCblk *cblk, void *dataL)
 Compute the LL^t factorization of one panel. More...
 
int cpucblk_zpxtrfsp1d (SolverMatrix *solvmtx, SolverCblk *cblk, pastix_complex64_t *work, pastix_int_t lwork)
 Perform the LL^t factorization of a given panel and apply all its updates. More...
 

PastixComplex64 cblk LDL^t kernels

int cpucblk_zsytrfsp1d_sytrf (SolverMatrix *solvmtx, SolverCblk *cblk, void *L)
 Computes the LDL^t factorization of the diagonal block in a panel. More...
 
int cpucblk_zsytrfsp1d_panel (SolverMatrix *solvmtx, SolverCblk *cblk, void *L, void *DLt)
 Compute the LDL^t factorization of one panel. More...
 
int cpucblk_zsytrfsp1d (SolverMatrix *solvmtx, SolverCblk *cblk, pastix_complex64_t *work1, pastix_complex64_t *work2, pastix_int_t lwork)
 Perform the LDL^t factorization of a given panel and apply all its updates. More...
 

PastixComplex64 initialization and additionnal routines

void cpucblk_zalloc_lrws (const SolverCblk *cblk, pastix_lrblock_t *lrblok, pastix_complex64_t *ws)
 Initialize lrblock structure from a workspace from all blocks of the cblk associated. More...
 
void cpucblk_zalloc_lr (pastix_coefside_t side, SolverCblk *cblk, int rkmax)
 Allocate the cblk structure to store the coefficient. More...
 
void cpucblk_zalloc_fr (pastix_coefside_t side, SolverCblk *cblk)
 Allocate the cblk structure to store the coefficient. More...
 
void cpucblk_zalloc (pastix_coefside_t side, SolverCblk *cblk)
 Allocate the cblk structure to store the coefficient. More...
 
void cpucblk_zfree (pastix_coefside_t side, SolverCblk *cblk)
 Free the cblk structure that store the coefficient. More...
 
void cpucblk_zfillin (pastix_coefside_t side, const SolverMatrix *solvmtx, const pastix_bcsc_t *bcsc, pastix_int_t itercblk)
 Initialize the coeftab structure from the internal bcsc. More...
 
void cpucblk_zinit (pastix_coefside_t side, const SolverMatrix *solvmtx, const pastix_bcsc_t *bcsc, pastix_int_t itercblk, const char *directory)
 Fully initialize a single cblk. More...
 
void cpucblk_zgetschur (const SolverCblk *cblk, int upper_part, pastix_complex64_t *S, pastix_int_t lds)
 Extract a cblk panel of the Schur complement to a dense lapack form. More...
 
void cpucblk_zdump (pastix_coefside_t side, const SolverCblk *cblk, FILE *stream)
 Dump a single column block into a FILE in a human readale format. More...
 
int cpucblk_zdiff (pastix_coefside_t side, const SolverCblk *cblkA, SolverCblk *cblkB)
 Compare two column blocks in full-rank format. More...
 
void cpucblk_zadd (pastix_coefside_t side, double alpha, const SolverCblk *cblkA, SolverCblk *cblkB, const pastix_lr_t *lowrank)
 Add two column bloks in full rank format. More...
 
void cpucblk_zadd_recv (pastix_coefside_t side, double alpha, SolverCblk *cblk)
 

PastixComplex64 MPI routines

int cpucblk_zincoming_deps (int mt_flag, pastix_coefside_t side, SolverMatrix *solvmtx, SolverCblk *cblk)
 Wait for incoming dependencies, and return when cblk->ctrbcnt has reached 0. More...
 
void cpucblk_zrelease_deps (pastix_coefside_t side, SolverMatrix *solvmtx, const SolverCblk *cblk, SolverCblk *fcbk)
 Release the dependencies of the given cblk after an update. More...
 
void cpucblk_zrequest_cleanup (pastix_coefside_t side, pastix_int_t sched, SolverMatrix *solvmtx)
 Waitall routine for current cblk request. More...
 
void cpucblk_zmpi_progress (pastix_coefside_t side, SolverMatrix *solvmtx, int threadid)
 
void cpucblk_zsend_rhs_forward (const SolverMatrix *solvmtx, SolverCblk *cblk, pastix_complex64_t *b)
 Send the rhs associated to a cblk->lcolidx to the remote node. More...
 
void cpucblk_zrecv_rhs_forward (const SolverMatrix *solvmtx, SolverCblk *cblk, pastix_complex64_t *work, pastix_int_t nrhs, pastix_complex64_t *b, pastix_int_t ldb)
 Receive the rhs associated to a cblk->lcolidx to the remote node. More...
 
void cpucblk_zsend_rhs_backward (const SolverMatrix *solvmtx, SolverCblk *cblk, pastix_complex64_t *b)
 Send the rhs associated to a cblk->lcolidx to the remote node. More...
 
void cpucblk_zrecv_rhs_backward (const SolverMatrix *solvmtx, SolverCblk *cblk, pastix_complex64_t *b)
 Receive the rhs associated to a cblk->lcolidx to the remote node. More...
 

PastixComplex64 compression/uncompression routines

pastix_fixdbl_t cpublok_zcompress (const pastix_lr_t *lowrank, pastix_int_t M, pastix_int_t N, pastix_lrblock_t *blok)
 Compress a single block from full-rank to low-rank format. More...
 
pastix_int_t cpucblk_zcompress (const SolverMatrix *solvmtx, pastix_coefside_t side, int max_ilulvl, SolverCblk *cblk)
 Compress a single column block from full-rank to low-rank format. More...
 
void cpucblk_zuncompress (pastix_coefside_t side, SolverCblk *cblk)
 Uncompress a single column block from low-rank format to full-rank format. More...
 
void cpucblk_zmemory (pastix_coefside_t side, SolverMatrix *solvmtx, SolverCblk *cblk, pastix_int_t *orig, pastix_int_t *gain)
 Return the memory gain of the low-rank form over the full-rank form for a single column-block. More...
 

Detailed Description

This module contains all the kernel working at the solver matrix structure level for the numerical factorization step.

Function Documentation

◆ cpucblk_sgeaddsp1d()

int cpucblk_sgeaddsp1d ( const SolverCblk cblk1,
SolverCblk cblk2,
const float *  L,
float *  Cl,
const float *  U,
float *  Cu 
)

Add two column blocks together.

Perform the operation: cblk2 <- cblk1 + cblk2 using core_sgeadd().

Parameters
[in]cblk1The pointer to the data structure that describes the panel to add. Next column blok must be accessible through cblk1[1].
[in]cblk2The pointer to the data structure that describes the panel in which we add. Next column blok must be accessible through cblk2[1].
[in]LThe pointer to the lower matrix storing the coefficients of the panel. Must be of size cblk.stride -by- cblk.width
[in,out]ClThe pointer to the lower matrix storing the coefficients of the updated panel. Must be of size cblk.stride -by- cblk.width On exit Cl = Cl + L.
[in]UThe pointer to the upper matrix storing the coefficients of the panel. Must be of size cblk.stride -by- cblk.width. Ignored if NULL.
[in,out]CuThe pointer to the upper matrix storing the coefficients of the updated panel. Must be of size cblk.stride -by- cblk.width On exit Cu = Cu + U.
Return values
PASTIX_SUCCESSon success.

Definition at line 245 of file core_sgeadd.c.

References solver_blok_s::coefind, core_sgeadd(), solver_cblk_s::fblokptr, solver_cblk_s::fcolnum, solver_blok_s::frownum, is_block_inside_fblock(), solver_cblk_s::lcolnum, solver_blok_s::lrownum, PASTIX_SUCCESS, PastixNoTrans, and solver_cblk_s::stride.

◆ cpucblk_sgemmsp()

pastix_fixdbl_t cpucblk_sgemmsp ( pastix_coefside_t  sideA,
pastix_trans_t  trans,
const SolverCblk cblk,
const SolverBlok blok,
SolverCblk fcblk,
const void *  A,
const void *  B,
void *  C,
float *  work,
pastix_int_t  lwork,
const pastix_lr_t lowrank 
)

Compute the updates associated to one off-diagonal block.

Parameters
[in]sideASpecify if A and C belong to the lower part, or to the upper part. If sideA == PastixLCoef, the contribution of: (block .. (cblk[1].fblokptr-1)) -by- block is computed and added to C, otherwise the contribution: (block+1 .. (cblk[1].fblokptr-1)) -by- block is computed and added to C. The pointer to the data structure that describes the panel from which we compute the contributions. Next column blok must be accessible through cblk[1].
[in]transSpecify the transposition used for the B matrix. It has to be either PastixTrans or PastixTrans.
[in]cblkThe cblk structure to which block belongs to. The A and B pointers must be the coeftab of this column block. Next column blok must be accessible through cblk[1].
[in]blokThe block from which we compute the contributions.
[in,out]fcblkThe pointer to the data structure that describes the panel on which we compute the contributions. The C pointer must be one of the coeftab from this fcblk. Next column blok must be accessible through fcblk[1].
[in]AThe pointer to the correct representation of A.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in]BThe pointer to the correct representation of B.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in,out]CThe pointer to the correct representation of C.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in]workTemporary memory buffer.
[in]lowrankThe structure with low-rank parameters.
Returns
The number of static pivoting during factorization of the diagonal block.

Definition at line 1512 of file core_sgemmsp.c.

References blok_rownbr(), cblk_colnbr(), solver_cblk_s::cblktype, and solver_cblk_s::stride.

◆ cpucblk_strsmsp()

void cpucblk_strsmsp ( pastix_side_t  side,
pastix_uplo_t  uplo,
pastix_trans_t  trans,
pastix_diag_t  diag,
const SolverCblk cblk,
const void *  A,
void *  C,
const pastix_lr_t lowrank 
)

Compute the updates associated to a column of off-diagonal blocks.

Parameters
[in]sideSpecify whether the A matrix appears on the left or right in the equation. It has to be either PastixLeft or PastixRight.
[in]uploSpecify whether the A matrix is upper or lower triangular. It has to be either PastixUpper or PastixLower.
[in]transSpecify the transposition used for the A matrix. It has to be either PastixTrans or PastixTrans.
[in]diagSpecify if the A matrix is unit triangular. It has to be either PastixUnit or PastixNonUnit.
[in]cblkThe cblk structure to which block belongs to. The A and B pointers must be the coeftab of this column block. Next column blok must be accessible through cblk[1].
[in]AThe pointer to the correct representation of A.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in,out]CThe pointer to the correct representation of C.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in]lowrankThe structure with low-rank parameters.

Definition at line 356 of file core_strsmsp.c.

References cblk_colnbr(), solver_cblk_s::cblktype, and solver_cblk_s::stride.

Referenced by cpucblk_sgetrfsp1d_panel(), cpucblk_spotrfsp1d_panel(), and cpucblk_ssytrfsp1d_panel().

◆ cpucblk_sscalo()

void cpucblk_sscalo ( pastix_trans_t  trans,
SolverCblk cblk,
void *  dataL,
void *  dataLD 
)

Copy the L term with scaling for the two-terms algorithm.

Performs LD = op(L) * D

Parameters
[in]trans
  • PastixNoTrans: No transpose, op( L ) = L;
  • PastixTrans: Transpose, op( L ) = L;
  • PastixTrans: Conjugate Transpose, op( L ) = (L).
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in,out]dataLThe pointer to the correct representation of lower part of the data.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in,out]dataLDThe pointer to the correct representation of LD.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.

Definition at line 170 of file core_sscalo.c.

References cblk_colnbr(), solver_cblk_s::cblktype, and solver_cblk_s::fblokptr.

◆ cpublok_sgemmsp()

pastix_fixdbl_t cpublok_sgemmsp ( pastix_trans_t  transB,
const SolverCblk cblk,
SolverCblk fcblk,
pastix_int_t  blok_mk,
pastix_int_t  blok_nk,
pastix_int_t  blok_mn,
const void *  A,
const void *  B,
void *  C,
const pastix_lr_t lowrank 
)

Compute the CPU gemm associated to a couple of off-diagonal blocks.

C_l = C_l - A_l * op(B_s), with B_s = B_l, or B_u or C_u = C_u - A_u * op(B_s), with B_s = B_l, or B_u

Parameters
[in]transBSpecify wheter B should be used as PastixNoTrans, PastixTrans, or PastixTrans in the computations.
[in]cblkThe cblk structure to which block A and B belong to. The A and B pointers must be one of the [lu]coeftab of this column block. Next column blok must be accessible through cblk[1].
[in,out]fcblkThe pointer to the data structure that describes the panel on which we compute the contributions. The C pointer must be one of the [lu]coeftab from this fcblk. Next column blok must be accessible through fcblk[1].
[in]blok_mkSpecify the index of the A block in the cblk column. This index is 0-based for the diagonal block.
[in]blok_nkSpecify the index of the B block in the cblk column. This index is 0-based for the diagonal block.
[in]blok_mnSpecify the index of the C block in the fcblk column. This index is 0-based for the diagonal block.
[in]AThe pointer to the correct representation of A.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in]BThe pointer to the correct representation of B.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in]CThe pointer to the correct representation of C.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in]lowrankThe structure with the low-rank parameters.

Definition at line 1655 of file core_sgemmsp.c.

References solver_cblk_s::cblktype.

◆ cpublok_strsmsp()

pastix_fixdbl_t cpublok_strsmsp ( pastix_side_t  side,
pastix_uplo_t  uplo,
pastix_trans_t  trans,
pastix_diag_t  diag,
const SolverCblk cblk,
pastix_int_t  blok_m,
const void *  A,
void *  C,
const pastix_lr_t lowrank 
)

Compute the updates associated to one off-diagonal block.

Parameters
[in]sideSpecify whether the A matrix appears on the left or right in the equation. It has to be either PastixLeft or PastixRight.
[in]uploSpecify whether the A matrix is upper or lower triangular. It has to be either PastixUpper or PastixLower.
[in]transSpecify the transposition used for the A matrix. It has to be either PastixTrans or PastixTrans.
[in]diagSpecify if the A matrix is unit triangular. It has to be either PastixUnit or PastixNonUnit.
[in]cblkThe cblk structure to which block belongs to. The A and B pointers must be the coeftab of this column block. Next column blok must be accessible through cblk[1].
[in]blok_mIndex of the first off-diagonal block in cblk that is solved. The TRSM is also applied to all the folowing blocks which are facing the same diagonal block
[in]AThe pointer to the correct representation of A.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in,out]CThe pointer to the correct representation of C.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in]lowrankThe structure with low-rank parameters.

Definition at line 678 of file core_strsmsp.c.

References solver_cblk_s::cblktype.

◆ cpublok_sscalo()

void cpublok_sscalo ( pastix_trans_t  trans,
SolverCblk cblk,
pastix_int_t  blok_m,
const void *  dataA,
const void *  dataD,
void *  dataB 
)

Copy the lower terms of the block with scaling for the two-terms algorithm.

Performs B = op(A) * D

Parameters
[in]trans
  • PastixNoTrans: No transpose, op( A ) = A;
  • PastixTrans: Transpose, op( A ) = A;
  • PastixTrans: Conjugate Transpose, op( A ) = (A).
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in]blok_mIndex of the off-diagonal block to be solved in the cblk. All blocks facing the same cblk, in the current column block will be solved.
[in]dataAThe pointer to the correct representation of data of A.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in]dataDThe pointer to the correct representation of data of D.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in,out]dataBThe pointer to the correct representation of data of B.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.

Definition at line 315 of file core_sscalo.c.

References blok_rownbr(), cblk_colnbr(), solver_cblk_s::cblktype, and solver_cblk_s::fblokptr.

◆ cpucblk_sgetrfsp1d_getrf()

int cpucblk_sgetrfsp1d_getrf ( SolverMatrix *  solvmtx,
SolverCblk cblk,
void *  dataL,
void *  dataU 
)

Compute the LU factorization of the diagonal block in a panel.

Parameters
[in]solvmtxSolver Matrix structure of the problem
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in,out]dataLThe pointer to the correct representation of the lower part of the data.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in,out]dataUThe pointer to the correct representation of the upper part of the data.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width
  • pastix_lr_block if the block is compressed.
Returns
The number of static pivoting performed during the diagonal block factorization.

Definition at line 217 of file core_sgetrfsp.c.

References solver_cblk_s::cblktype, solver_cblk_s::fcolnum, and solver_cblk_s::lcolnum.

Referenced by cpucblk_sgetrfsp1d_panel().

◆ cpucblk_sgetrfsp1d_panel()

int cpucblk_sgetrfsp1d_panel ( SolverMatrix *  solvmtx,
SolverCblk cblk,
void *  L,
void *  U 
)

Compute the LU factorization of one panel.

Parameters
[in]solvmtxSolver Matrix structure of the problem
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in,out]LThe pointer to the correct representation of the lower part of the data.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in,out]UThe pointer to the correct representation of the upper part of the data.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
Returns
The number of static pivoting performed during the diagonal block factorization.

Definition at line 305 of file core_sgetrfsp.c.

References cpucblk_sgetrfsp1d_getrf(), cpucblk_strsmsp(), PastixNonUnit, PastixNoTrans, PastixRight, PastixUnit, and PastixUpper.

Referenced by cpucblk_sgetrfsp1d().

◆ cpucblk_sgetrfsp1d()

int cpucblk_sgetrfsp1d ( SolverMatrix *  solvmtx,
SolverCblk cblk,
float *  work,
pastix_int_t  lwork 
)

Perform the LU factorization of a given panel and apply all its updates.

Parameters
[in]solvmtxSolver Matrix structure of the problem
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in]workTemporary memory buffer.
[in]lworkTemporary workspace dimension.
Returns
The number of static pivoting during factorization of the diagonal block.

Definition at line 355 of file core_sgetrfsp.c.

References cblk_getdataL(), cblk_getdataU(), solver_cblk_s::cblktype, cpucblk_sgetrfsp1d_panel(), solver_cblk_s::fblokptr, and solver_blok_s::fcblknm.

◆ cpucblk_spotrfsp1d_potrf()

int cpucblk_spotrfsp1d_potrf ( SolverMatrix *  solvmtx,
SolverCblk cblk,
void *  dataL 
)

Compute the Cholesky factorization of the diagonal block in a panel.

Warning
This routine will fail if it discovers a null or negative value on the diagonal during factorization.
Parameters
[in]solvmtxSolver Matrix structure of the problem
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in,out]dataLThe pointer to the correct representation of the lower part of the data.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
Returns
The number of static pivoting performed during the diagonal block factorization.

Definition at line 220 of file core_spotrfsp.c.

References solver_cblk_s::cblktype, solver_cblk_s::fcolnum, and solver_cblk_s::lcolnum.

Referenced by cpucblk_spotrfsp1d_panel().

◆ cpucblk_spotrfsp1d_panel()

int cpucblk_spotrfsp1d_panel ( SolverMatrix *  solvmtx,
SolverCblk cblk,
void *  L 
)

Compute the Cholesky factorization of one panel.

Parameters
[in]solvmtxSolver Matrix structure of the problem
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in,out]LThe pointer to the correct representation of lower part of the data.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
Returns
The number of static pivoting during factorization of the diagonal block.

Definition at line 292 of file core_spotrfsp.c.

References cpucblk_spotrfsp1d_potrf(), cpucblk_strsmsp(), PastixLower, PastixNonUnit, PastixRight, and PastixTrans.

Referenced by cpucblk_spotrfsp1d().

◆ cpucblk_spotrfsp1d()

int cpucblk_spotrfsp1d ( SolverMatrix *  solvmtx,
SolverCblk cblk,
float *  work,
pastix_int_t  lwork 
)

Perform the Cholesky factorization of a given panel and apply all its updates.

Parameters
[in]solvmtxSolver Matrix structure of the problem
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in]workTemporary memory buffer.
[in]lworkTemporary workspace dimension.
Returns
The number of static pivoting during factorization of the diagonal block.

Definition at line 334 of file core_spotrfsp.c.

References cblk_getdataL(), solver_cblk_s::cblktype, cpucblk_spotrfsp1d_panel(), solver_cblk_s::fblokptr, and solver_blok_s::fcblknm.

◆ cpucblk_ssytrfsp1d_sytrf()

int cpucblk_ssytrfsp1d_sytrf ( SolverMatrix *  solvmtx,
SolverCblk cblk,
void *  dataL 
)

Computes the LDL^t factorization of the diagonal block in a panel.

Parameters
[in]solvmtxSolver Matrix structure of the problem
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in,out]dataLThe pointer to the correct representation of lower part of the data.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
Returns
The number of static pivoting performed during the diagonal block factorization.

Definition at line 232 of file core_ssytrfsp.c.

References solver_cblk_s::cblktype, solver_cblk_s::fcolnum, and solver_cblk_s::lcolnum.

Referenced by cpucblk_ssytrfsp1d_panel().

◆ cpucblk_ssytrfsp1d_panel()

int cpucblk_ssytrfsp1d_panel ( SolverMatrix *  solvmtx,
SolverCblk cblk,
void *  L,
void *  DLt 
)

Compute the LDL^t factorization of one panel.

Parameters
[in]solvmtxSolver Matrix structure of the problem
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in,out]LThe pointer to the matrix storing the coefficients of the panel. Must be of size cblk.stride -by- cblk.width
[in,out]DLtThe pointer to the upper matrix storing the coefficients the temporary DL^t product. Must be of size cblk.stride -by- cblk.width
Returns
The number of static pivoting during factorization of the diagonal block.

Definition at line 432 of file core_ssytrfsp.c.

References solver_cblk_s::cblktype, cpucblk_ssytrfsp1d_sytrf(), cpucblk_strsmsp(), PastixNonUnit, PastixNoTrans, PastixRight, and PastixUpper.

◆ cpucblk_ssytrfsp1d()

int cpucblk_ssytrfsp1d ( SolverMatrix *  solvmtx,
SolverCblk cblk,
float *  DLt,
float *  work,
pastix_int_t  lwork 
)

Perform the LDL^t factorization of a given panel and apply all its updates.

Parameters
[in]solvmtxSolver Matrix structure of the problem
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in]DLtTemporary memory buffer to store the transpose of DLt.
[in]workTemporary memory buffer.
[in]lworkTemporary workspace dimension.
Returns
The number of static pivoting during factorization of the diagonal block.

Definition at line 487 of file core_ssytrfsp.c.

References cblk_getdataL(), cblk_getdataU(), and solver_cblk_s::cblktype.

◆ cpucblk_salloc_lrws()

void cpucblk_salloc_lrws ( const SolverCblk cblk,
pastix_lrblock_t lrblok,
float *  ws 
)

Initialize lrblock structure from a workspace from all blocks of the cblk associated.

The lrblock structure must be allocated before.

Parameters
[in,out]cblkThe column block associated to the initialization.
[in]lrblokThe structure blok to initialize. Must be allocated before.
[in]wsThe workspace associated with the data that will be used for initialize lrblok.

Definition at line 96 of file cpucblk_sinit.c.

References cblk_colnbr(), solver_cblk_s::cblktype, and solver_cblk_s::fblokptr.

◆ cpucblk_salloc_lr()

void cpucblk_salloc_lr ( pastix_coefside_t  side,
SolverCblk cblk,
int  rkmax 
)

Allocate the cblk structure to store the coefficient.

When stored in low-rank format, the data pointer in the low-rank structure of each block must be initialized. This routines performs only the allocation and is thread-safe if called in parallel on the Lower and upper part.

Parameters
[in]sideDefine which side of the matrix must be initialized.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in,out]cblkThe column block to allocate.

Definition at line 143 of file cpucblk_sinit.c.

References cblk_colnbr(), solver_cblk_s::cblktype, and solver_cblk_s::fblokptr.

◆ cpucblk_salloc_fr()

void cpucblk_salloc_fr ( pastix_coefside_t  side,
SolverCblk cblk 
)

Allocate the cblk structure to store the coefficient.

When stored in low-rank format, the data pointer in the low-rank structure of each block must be initialized. This routines performs only the allocation and is thread-safe if called in parallel on the Lower and upper part.

Parameters
[in]sideDefine which side of the matrix must be initialized.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in,out]cblkThe column block to allocate.

Definition at line 217 of file cpucblk_sinit.c.

References cblk_colnbr(), solver_cblk_s::lcoeftab, PastixLCoef, solver_cblk_s::stride, and solver_cblk_s::ucoeftab.

◆ cpucblk_salloc()

void cpucblk_salloc ( pastix_coefside_t  side,
SolverCblk cblk 
)

Allocate the cblk structure to store the coefficient.

When stored in low-rank format, the data pointer in the low-rank structure of each block must be initialized. This routines performs only the allocation and is thread-safe if called in parallel on the Lower and upper part.

Parameters
[in]sideDefine which side of the matrix must be initialized.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in,out]cblkThe column block to allocate.

Definition at line 264 of file cpucblk_sinit.c.

References solver_cblk_s::cblktype, solver_cblk_s::lcoeftab, PastixLCoef, PastixUCoef, and solver_cblk_s::ucoeftab.

Referenced by cpucblk_sinit().

◆ cpucblk_sfree()

void cpucblk_sfree ( pastix_coefside_t  side,
SolverCblk cblk 
)

Free the cblk structure that store the coefficient.

This routines performs the free and is thread-safe if called in parallel on the Lower and upper part.

Parameters
[in]sideDefine which side of the matrix must be initialized.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in,out]cblkThe column block to free.

Definition at line 317 of file cpucblk_sinit.c.

References solver_cblk_s::cblktype, solver_cblk_s::lcoeftab, and PastixUCoef.

◆ cpucblk_sfillin()

void cpucblk_sfillin ( pastix_coefside_t  side,
const SolverMatrix *  solvmtx,
const pastix_bcsc_t bcsc,
pastix_int_t  itercblk 
)

Initialize the coeftab structure from the internal bcsc.

Parameters
[in]sideDefine which side of the matrix must be initialized.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in]solvmtxPaStiX structure to store numerical data and flags
[in]bcscThe internal bcsc structure that hold the graph with permutation stored by cblk.
[in]itercblkThe index of the cblk to fill in both bcsc and solvmtx structures.

Definition at line 604 of file cpucblk_sinit.c.

Referenced by cpucblk_sinit().

◆ cpucblk_sinit()

void cpucblk_sinit ( pastix_coefside_t  side,
const SolverMatrix *  solvmtx,
const pastix_bcsc_t bcsc,
pastix_int_t  itercblk,
const char *  directory 
)

Fully initialize a single cblk.

The cblk is allocated, intialized from the bcsc, and compressed if necessary.

Parameters
[in]sideDefine which side of the matrix must be initialized.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in]solvmtxThe solver matrix data structure.
[in]bcscThe internal block CSC structure to fill-in the matrix.
[in]itercblkThe index of the cblk to initialize.
[in,out]directoryThe pointer to the temporary directory where to store the output files. Used only if PASTIX_DEBUG_DUMP_COEFTAB is defined.

Try to compress the cblk if needs to be compressed

Definition at line 251 of file coeftab_sinit.c.

References cpucblk_salloc(), cpucblk_sdump(), cpucblk_sfillin(), solver_cblk_s::ctrbcnt, pastix_fopenw(), PastixLCoef, and PastixUCoef.

◆ cpucblk_sgetschur()

void cpucblk_sgetschur ( const SolverCblk cblk,
int  upper_part,
float *  S,
pastix_int_t  lds 
)

Extract a cblk panel of the Schur complement to a dense lapack form.

Parameters
[in]cblkThe column block to extract in the Schur array
[in]upper_partIf true, the upper part is also extracted in S.
[in,out]SThe pointer to the top of the column of the cblk in the Schur array. On exit, the computed coefficient are copy to this array.
[in]ldsThe leading dimension of the S array.

Definition at line 178 of file cpucblk_sschur.c.

References solver_cblk_s::cblktype.

◆ cpucblk_sdump()

void cpucblk_sdump ( pastix_coefside_t  side,
const SolverCblk cblk,
FILE *  stream 
)

Dump a single column block into a FILE in a human readale format.

All non-zeroes coefficients are dumped in the format: i j val with one value per row.

Parameters
[in]sideDefine which side of the cblk must be printed.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
[in]cblkThe column block to dump into the file.
[in,out]streamThe FILE structure opened in write mode.

Definition at line 51 of file coeftab_sinit.c.

References solver_cblk_s::cblktype, solver_cblk_s::lcoeftab, PastixUCoef, and solver_cblk_s::ucoeftab.

Referenced by cpucblk_sinit().

◆ cpucblk_sdiff()

int cpucblk_sdiff ( pastix_coefside_t  side,
const SolverCblk cblkA,
SolverCblk cblkB 
)

Compare two column blocks in full-rank format.

The second cblk is overwritten by the difference of the two column blocks. The frobenius norm of the difference is computed and the functions returns 0 if the result: || B - A || / ( || A || * eps )

is below 10. Otherwise, an error message is printed and 1 is returned.

Parameters
[in]sideDefine which side of the cblk must be tested.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in]cblkAThe column block of the A matrix.
[in,out]cblkBThe column block of the B matrix that matches the A matrix in stucture. On exit, cblkB coefficient arrays are overwritten by the result of (B-A).
Returns
0 if the test is passed, >= 0 otherwise.

Definition at line 63 of file cpucblk_sdiff.c.

References cblk_colnbr(), core_sgeadd(), solver_cblk_s::lcoeftab, PastixLCoef, PastixNoTrans, PastixUCoef, solver_cblk_s::stride, and solver_cblk_s::ucoeftab.

Referenced by coeftab_sdiff().

◆ cpucblk_sadd()

void cpucblk_sadd ( pastix_coefside_t  side,
float  alpha,
const SolverCblk cblkA,
SolverCblk cblkB,
const pastix_lr_t lowrank 
)

Add two column bloks in full rank format.

The second cblk is overwritten by the sum of the two column blocks. B <- alpha * A + B

Parameters
[in]sideDefine which side of the cblk must be tested.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
[in]alphaThe scalar alpha
[in]cblkAThe column block of the A matrix.
[in,out]cblkBThe column block of the B matrix On exit, cblkB coefficient arrays are overwritten by the result of alpha * A + B.

Definition at line 358 of file cpucblk_sadd.c.

References cblk_colnbr(), solver_cblk_s::cblktype, PastixLUCoef, and solver_cblk_s::stride.

◆ cpucblk_sincoming_deps()

int cpucblk_sincoming_deps ( int  rank,
pastix_coefside_t  side,
SolverMatrix *  solvmtx,
SolverCblk cblk 
)

Wait for incoming dependencies, and return when cblk->ctrbcnt has reached 0.

Parameters
[in]mt_flag
  • 0, the function is called in a sequential environment, and we can wait on each communication.
  • 1, the function is called in a multi-threaded environment, and we need to test the communication to avoid dead locks.
[in]sideDefine which side of the cblk must be released.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in,out]solvmtxThe solver matrix structure.
[in,out]cblkThe column block that contribute to fcblk.
Returns
1 if the cblk is a fanin, 0 otherwise

Definition at line 499 of file cpucblk_smpi_coeftab.c.

References solver_cblk_s::cblktype.

◆ cpucblk_srelease_deps()

void cpucblk_srelease_deps ( pastix_coefside_t  side,
SolverMatrix *  solvmtx,
const SolverCblk cblk,
SolverCblk fcbk 
)

Release the dependencies of the given cblk after an update.

Parameters
[in]sideDefine which side of the cblk must be released.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in,out]solvmtxThe solver matrix structure.
[in]cblkThe column block that contribute to fcblk.
[in,out]fcbkThe facing column block that is updated by cblk.

Definition at line 558 of file cpucblk_smpi_coeftab.c.

References solver_cblk_s::cblktype, and solver_cblk_s::ctrbcnt.

◆ cpucblk_srequest_cleanup()

void cpucblk_srequest_cleanup ( pastix_coefside_t  side,
pastix_int_t  sched,
SolverMatrix *  solvmtx 
)

Waitall routine for current cblk request.

It may be possible that some cblk will not be deallocated with the static scheduler. So a cleanup may be necessary.

Parameters
[in]sideDefine which side of the cblk must be tested.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in]schedDefine which sched is used
  • PastixSchedSequential if sequential
  • PastixSchedStatic if multi-threaded static scheduler
  • PastixSchedDynamic if multi-threaded dynamic scheduler No other scheduler is supported.
[in,out]solvmtxThe solver matrix structure.

Definition at line 609 of file cpucblk_smpi_coeftab.c.

References solver_cblk_s::cblktype, PastixSchedDynamic, PastixSchedSequential, and PastixSchedStatic.

◆ cpucblk_ssend_rhs_forward()

void cpucblk_ssend_rhs_forward ( const SolverMatrix *  solvmtx,
SolverCblk cblk,
float *  b 
)

Send the rhs associated to a cblk->lcolidx to the remote node.

Parameters
[in]solvmtxThe solver matrix holding the communicator.
[in]cblkThe cblk which defines the part to sent.
[in]bThe rhs that will be sent to the cblk->ownerid

Definition at line 42 of file cpucblk_smpi_rhs.c.

References cblk_colnbr(), and solver_cblk_s::cblktype.

◆ cpucblk_srecv_rhs_forward()

void cpucblk_srecv_rhs_forward ( const SolverMatrix *  solvmtx,
SolverCblk cblk,
float *  work,
pastix_int_t  nrhs,
float *  b,
pastix_int_t  ldb 
)

Receive the rhs associated to a cblk->lcolidx to the remote node.

Parameters
[in]solvmtxThe solver matrix holding the communicator.
[in]cblkThe cblk which may define the part to sent.
[in,out]workThe temporary buffer to receive the remote data
[in,out]bThe rhs that will be updated by the reception.
[in]ldbThe leading dimension of the matrix b.

Definition at line 195 of file cpucblk_smpi_rhs.c.

References cblk_colnbr(), and solver_cblk_s::cblktype.

◆ cpucblk_ssend_rhs_backward()

void cpucblk_ssend_rhs_backward ( const SolverMatrix *  solvmtx,
SolverCblk cblk,
float *  b 
)

Send the rhs associated to a cblk->lcolidx to the remote node.

Parameters
[in]solvmtxThe solver matrix holding the communicator.
[in]cblkThe cblk which defines the part to sent.
[in]bThe rhs that will be sent to the cblk->ownerid

Definition at line 89 of file cpucblk_smpi_rhs.c.

References cblk_colnbr(), and solver_cblk_s::cblktype.

◆ cpucblk_srecv_rhs_backward()

void cpucblk_srecv_rhs_backward ( const SolverMatrix *  solvmtx,
SolverCblk cblk,
float *  b 
)

Receive the rhs associated to a cblk->lcolidx to the remote node.

Parameters
[in]solvmtxThe solver matrix holding the communicator.
[in]cblkThe cblk which may define the part to sent.
[in,out]bThe rhs that will be receive from the cblk->ownerid.

Definition at line 136 of file cpucblk_smpi_rhs.c.

References cblk_colnbr(), and solver_cblk_s::cblktype.

◆ cpublok_scompress()

pastix_fixdbl_t cpublok_scompress ( const pastix_lr_t lowrank,
pastix_int_t  M,
pastix_int_t  N,
pastix_lrblock_t lrA 
)

Compress a single block from full-rank to low-rank format.

The compression to low-rank format is parameterized by the input information stored in the low-rank structure.

Parameters
[in]lowrankThe pointer to the low-rank structure describing the lo-rank compression parameters.
[in]MThe number of rows in the block
[in]NThe number of columns in the block
[in,out]lrAThe block to compress. On input, it points to a full-rank matrix. On output, if possible the matrix is compressed in block low-rank format.
Returns
The number of flops used to compress the block.

Definition at line 57 of file cpucblk_scompress.c.

References pastix_lr_s::core_ge2lr, pastix_lrblock_s::rk, pastix_lr_s::tolerance, pastix_lrblock_s::u, pastix_lr_s::use_reltol, and pastix_lrblock_s::v.

◆ cpucblk_scompress()

pastix_int_t cpucblk_scompress ( const SolverMatrix *  solvmtx,
pastix_coefside_t  side,
int  max_ilulvl,
SolverCblk cblk 
)

Compress a single column block from full-rank to low-rank format.

The compression to low-rank format is parameterized by the input information stored in the low-rank structure.

Parameters
[in]solvmtxThe pointer to the solver structure.
[in]sideDefine which side of the matrix must be initialized.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in,out]cblkThe column block to compress.
Returns
The memory gain resulting from the compression to low-rank format in number of elements.

Definition at line 110 of file cpucblk_scompress.c.

References cblk_colnbr(), solver_cblk_s::cblktype, and solver_cblk_s::fblokptr.

◆ cpucblk_suncompress()

void cpucblk_suncompress ( pastix_coefside_t  side,
SolverCblk cblk 
)

Uncompress a single column block from low-rank format to full-rank format.

Parameters
[in]sideDefine which side of the matrix must be initialized.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in,out]cblkThe column block to uncompress.

Definition at line 197 of file cpucblk_scompress.c.

References blok_rownbr(), cblk_colnbr(), core_slr2ge(), core_slralloc(), core_slrfree(), solver_cblk_s::fblokptr, solver_blok_s::LRblock, PastixLCoef, PastixNoTrans, PastixUCoef, and pastix_lrblock_s::u.

◆ cpucblk_smemory()

void cpucblk_smemory ( pastix_coefside_t  side,
SolverMatrix *  solvmtx,
SolverCblk cblk,
pastix_int_t *  orig,
pastix_int_t *  gain 
)

Return the memory gain of the low-rank form over the full-rank form for a single column-block.

This function returns the memory gain in number of elements for a single column block when it is stored in low-rank format compared to a full rank storage.

Parameters
[in]sideDefine which side of the matrix must be initialized.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in]solvmtxThe pointer to the solver structure.
[in]cblkThe column block to study.
[in,out]origThe structure that counts the original cost of the blocks.
[in,out]gainThe structure that counts gain on each type of the blocks.

Definition at line 277 of file cpucblk_scompress.c.

References cblk_colnbr(), solver_cblk_s::cblktype, solver_cblk_s::fblokptr, and solver_cblk_s::ownerid.

◆ cpucblk_dgeaddsp1d()

int cpucblk_dgeaddsp1d ( const SolverCblk cblk1,
SolverCblk cblk2,
const double *  L,
double *  Cl,
const double *  U,
double *  Cu 
)

Add two column blocks together.

Perform the operation: cblk2 <- cblk1 + cblk2 using core_dgeadd().

Parameters
[in]cblk1The pointer to the data structure that describes the panel to add. Next column blok must be accessible through cblk1[1].
[in]cblk2The pointer to the data structure that describes the panel in which we add. Next column blok must be accessible through cblk2[1].
[in]LThe pointer to the lower matrix storing the coefficients of the panel. Must be of size cblk.stride -by- cblk.width
[in,out]ClThe pointer to the lower matrix storing the coefficients of the updated panel. Must be of size cblk.stride -by- cblk.width On exit Cl = Cl + L.
[in]UThe pointer to the upper matrix storing the coefficients of the panel. Must be of size cblk.stride -by- cblk.width. Ignored if NULL.
[in,out]CuThe pointer to the upper matrix storing the coefficients of the updated panel. Must be of size cblk.stride -by- cblk.width On exit Cu = Cu + U.
Return values
PASTIX_SUCCESSon success.

Definition at line 245 of file core_dgeadd.c.

References solver_blok_s::coefind, core_dgeadd(), solver_cblk_s::fblokptr, solver_cblk_s::fcolnum, solver_blok_s::frownum, is_block_inside_fblock(), solver_cblk_s::lcolnum, solver_blok_s::lrownum, PASTIX_SUCCESS, PastixNoTrans, and solver_cblk_s::stride.

◆ cpucblk_dgemmsp()

pastix_fixdbl_t cpucblk_dgemmsp ( pastix_coefside_t  sideA,
pastix_trans_t  trans,
const SolverCblk cblk,
const SolverBlok blok,
SolverCblk fcblk,
const void *  A,
const void *  B,
void *  C,
double *  work,
pastix_int_t  lwork,
const pastix_lr_t lowrank 
)

Compute the updates associated to one off-diagonal block.

Parameters
[in]sideASpecify if A and C belong to the lower part, or to the upper part. If sideA == PastixLCoef, the contribution of: (block .. (cblk[1].fblokptr-1)) -by- block is computed and added to C, otherwise the contribution: (block+1 .. (cblk[1].fblokptr-1)) -by- block is computed and added to C. The pointer to the data structure that describes the panel from which we compute the contributions. Next column blok must be accessible through cblk[1].
[in]transSpecify the transposition used for the B matrix. It has to be either PastixTrans or PastixTrans.
[in]cblkThe cblk structure to which block belongs to. The A and B pointers must be the coeftab of this column block. Next column blok must be accessible through cblk[1].
[in]blokThe block from which we compute the contributions.
[in,out]fcblkThe pointer to the data structure that describes the panel on which we compute the contributions. The C pointer must be one of the coeftab from this fcblk. Next column blok must be accessible through fcblk[1].
[in]AThe pointer to the correct representation of A.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in]BThe pointer to the correct representation of B.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in,out]CThe pointer to the correct representation of C.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in]workTemporary memory buffer.
[in]lowrankThe structure with low-rank parameters.
Returns
The number of static pivoting during factorization of the diagonal block.

Definition at line 1512 of file core_dgemmsp.c.

References blok_rownbr(), cblk_colnbr(), solver_cblk_s::cblktype, and solver_cblk_s::stride.

◆ cpucblk_dtrsmsp()

void cpucblk_dtrsmsp ( pastix_side_t  side,
pastix_uplo_t  uplo,
pastix_trans_t  trans,
pastix_diag_t  diag,
const SolverCblk cblk,
const void *  A,
void *  C,
const pastix_lr_t lowrank 
)

Compute the updates associated to a column of off-diagonal blocks.

Parameters
[in]sideSpecify whether the A matrix appears on the left or right in the equation. It has to be either PastixLeft or PastixRight.
[in]uploSpecify whether the A matrix is upper or lower triangular. It has to be either PastixUpper or PastixLower.
[in]transSpecify the transposition used for the A matrix. It has to be either PastixTrans or PastixTrans.
[in]diagSpecify if the A matrix is unit triangular. It has to be either PastixUnit or PastixNonUnit.
[in]cblkThe cblk structure to which block belongs to. The A and B pointers must be the coeftab of this column block. Next column blok must be accessible through cblk[1].
[in]AThe pointer to the correct representation of A.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in,out]CThe pointer to the correct representation of C.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in]lowrankThe structure with low-rank parameters.

Definition at line 356 of file core_dtrsmsp.c.

References cblk_colnbr(), solver_cblk_s::cblktype, and solver_cblk_s::stride.

Referenced by cpucblk_dgetrfsp1d_panel(), cpucblk_dpotrfsp1d_panel(), and cpucblk_dsytrfsp1d_panel().

◆ cpucblk_dscalo()

void cpucblk_dscalo ( pastix_trans_t  trans,
SolverCblk cblk,
void *  dataL,
void *  dataLD 
)

Copy the L term with scaling for the two-terms algorithm.

Performs LD = op(L) * D

Parameters
[in]trans
  • PastixNoTrans: No transpose, op( L ) = L;
  • PastixTrans: Transpose, op( L ) = L;
  • PastixTrans: Conjugate Transpose, op( L ) = (L).
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in,out]dataLThe pointer to the correct representation of lower part of the data.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in,out]dataLDThe pointer to the correct representation of LD.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.

Definition at line 170 of file core_dscalo.c.

References cblk_colnbr(), solver_cblk_s::cblktype, and solver_cblk_s::fblokptr.

◆ cpublok_dgemmsp()

pastix_fixdbl_t cpublok_dgemmsp ( pastix_trans_t  transB,
const SolverCblk cblk,
SolverCblk fcblk,
pastix_int_t  blok_mk,
pastix_int_t  blok_nk,
pastix_int_t  blok_mn,
const void *  A,
const void *  B,
void *  C,
const pastix_lr_t lowrank 
)

Compute the CPU gemm associated to a couple of off-diagonal blocks.

C_l = C_l - A_l * op(B_s), with B_s = B_l, or B_u or C_u = C_u - A_u * op(B_s), with B_s = B_l, or B_u

Parameters
[in]transBSpecify wheter B should be used as PastixNoTrans, PastixTrans, or PastixTrans in the computations.
[in]cblkThe cblk structure to which block A and B belong to. The A and B pointers must be one of the [lu]coeftab of this column block. Next column blok must be accessible through cblk[1].
[in,out]fcblkThe pointer to the data structure that describes the panel on which we compute the contributions. The C pointer must be one of the [lu]coeftab from this fcblk. Next column blok must be accessible through fcblk[1].
[in]blok_mkSpecify the index of the A block in the cblk column. This index is 0-based for the diagonal block.
[in]blok_nkSpecify the index of the B block in the cblk column. This index is 0-based for the diagonal block.
[in]blok_mnSpecify the index of the C block in the fcblk column. This index is 0-based for the diagonal block.
[in]AThe pointer to the correct representation of A.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in]BThe pointer to the correct representation of B.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in]CThe pointer to the correct representation of C.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in]lowrankThe structure with the low-rank parameters.

Definition at line 1655 of file core_dgemmsp.c.

References solver_cblk_s::cblktype.

◆ cpublok_dtrsmsp()

pastix_fixdbl_t cpublok_dtrsmsp ( pastix_side_t  side,
pastix_uplo_t  uplo,
pastix_trans_t  trans,
pastix_diag_t  diag,
const SolverCblk cblk,
pastix_int_t  blok_m,
const void *  A,
void *  C,
const pastix_lr_t lowrank 
)

Compute the updates associated to one off-diagonal block.

Parameters
[in]sideSpecify whether the A matrix appears on the left or right in the equation. It has to be either PastixLeft or PastixRight.
[in]uploSpecify whether the A matrix is upper or lower triangular. It has to be either PastixUpper or PastixLower.
[in]transSpecify the transposition used for the A matrix. It has to be either PastixTrans or PastixTrans.
[in]diagSpecify if the A matrix is unit triangular. It has to be either PastixUnit or PastixNonUnit.
[in]cblkThe cblk structure to which block belongs to. The A and B pointers must be the coeftab of this column block. Next column blok must be accessible through cblk[1].
[in]blok_mIndex of the first off-diagonal block in cblk that is solved. The TRSM is also applied to all the folowing blocks which are facing the same diagonal block
[in]AThe pointer to the correct representation of A.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in,out]CThe pointer to the correct representation of C.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in]lowrankThe structure with low-rank parameters.

Definition at line 678 of file core_dtrsmsp.c.

References solver_cblk_s::cblktype.

◆ cpublok_dscalo()

void cpublok_dscalo ( pastix_trans_t  trans,
SolverCblk cblk,
pastix_int_t  blok_m,
const void *  dataA,
const void *  dataD,
void *  dataB 
)

Copy the lower terms of the block with scaling for the two-terms algorithm.

Performs B = op(A) * D

Parameters
[in]trans
  • PastixNoTrans: No transpose, op( A ) = A;
  • PastixTrans: Transpose, op( A ) = A;
  • PastixTrans: Conjugate Transpose, op( A ) = (A).
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in]blok_mIndex of the off-diagonal block to be solved in the cblk. All blocks facing the same cblk, in the current column block will be solved.
[in]dataAThe pointer to the correct representation of data of A.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in]dataDThe pointer to the correct representation of data of D.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in,out]dataBThe pointer to the correct representation of data of B.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.

Definition at line 315 of file core_dscalo.c.

References blok_rownbr(), cblk_colnbr(), solver_cblk_s::cblktype, and solver_cblk_s::fblokptr.

◆ cpucblk_dgetrfsp1d_getrf()

int cpucblk_dgetrfsp1d_getrf ( SolverMatrix *  solvmtx,
SolverCblk cblk,
void *  dataL,
void *  dataU 
)

Compute the LU factorization of the diagonal block in a panel.

Parameters
[in]solvmtxSolver Matrix structure of the problem
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in,out]dataLThe pointer to the correct representation of the lower part of the data.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in,out]dataUThe pointer to the correct representation of the upper part of the data.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width
  • pastix_lr_block if the block is compressed.
Returns
The number of static pivoting performed during the diagonal block factorization.

Definition at line 217 of file core_dgetrfsp.c.

References solver_cblk_s::cblktype, solver_cblk_s::fcolnum, and solver_cblk_s::lcolnum.

Referenced by cpucblk_dgetrfsp1d_panel().

◆ cpucblk_dgetrfsp1d_panel()

int cpucblk_dgetrfsp1d_panel ( SolverMatrix *  solvmtx,
SolverCblk cblk,
void *  L,
void *  U 
)

Compute the LU factorization of one panel.

Parameters
[in]solvmtxSolver Matrix structure of the problem
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in,out]LThe pointer to the correct representation of the lower part of the data.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in,out]UThe pointer to the correct representation of the upper part of the data.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
Returns
The number of static pivoting performed during the diagonal block factorization.

Definition at line 305 of file core_dgetrfsp.c.

References cpucblk_dgetrfsp1d_getrf(), cpucblk_dtrsmsp(), PastixNonUnit, PastixNoTrans, PastixRight, PastixUnit, and PastixUpper.

Referenced by cpucblk_dgetrfsp1d().

◆ cpucblk_dgetrfsp1d()

int cpucblk_dgetrfsp1d ( SolverMatrix *  solvmtx,
SolverCblk cblk,
double *  work,
pastix_int_t  lwork 
)

Perform the LU factorization of a given panel and apply all its updates.

Parameters
[in]solvmtxSolver Matrix structure of the problem
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in]workTemporary memory buffer.
[in]lworkTemporary workspace dimension.
Returns
The number of static pivoting during factorization of the diagonal block.

Definition at line 355 of file core_dgetrfsp.c.

References cblk_getdataL(), cblk_getdataU(), solver_cblk_s::cblktype, cpucblk_dgetrfsp1d_panel(), solver_cblk_s::fblokptr, and solver_blok_s::fcblknm.

◆ cpucblk_dpotrfsp1d_potrf()

int cpucblk_dpotrfsp1d_potrf ( SolverMatrix *  solvmtx,
SolverCblk cblk,
void *  dataL 
)

Compute the Cholesky factorization of the diagonal block in a panel.

Warning
This routine will fail if it discovers a null or negative value on the diagonal during factorization.
Parameters
[in]solvmtxSolver Matrix structure of the problem
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in,out]dataLThe pointer to the correct representation of the lower part of the data.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
Returns
The number of static pivoting performed during the diagonal block factorization.

Definition at line 220 of file core_dpotrfsp.c.

References solver_cblk_s::cblktype, solver_cblk_s::fcolnum, and solver_cblk_s::lcolnum.

Referenced by cpucblk_dpotrfsp1d_panel().

◆ cpucblk_dpotrfsp1d_panel()

int cpucblk_dpotrfsp1d_panel ( SolverMatrix *  solvmtx,
SolverCblk cblk,
void *  L 
)

Compute the Cholesky factorization of one panel.

Parameters
[in]solvmtxSolver Matrix structure of the problem
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in,out]LThe pointer to the correct representation of lower part of the data.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
Returns
The number of static pivoting during factorization of the diagonal block.

Definition at line 292 of file core_dpotrfsp.c.

References cpucblk_dpotrfsp1d_potrf(), cpucblk_dtrsmsp(), PastixLower, PastixNonUnit, PastixRight, and PastixTrans.

Referenced by cpucblk_dpotrfsp1d().

◆ cpucblk_dpotrfsp1d()

int cpucblk_dpotrfsp1d ( SolverMatrix *  solvmtx,
SolverCblk cblk,
double *  work,
pastix_int_t  lwork 
)

Perform the Cholesky factorization of a given panel and apply all its updates.

Parameters
[in]solvmtxSolver Matrix structure of the problem
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in]workTemporary memory buffer.
[in]lworkTemporary workspace dimension.
Returns
The number of static pivoting during factorization of the diagonal block.

Definition at line 334 of file core_dpotrfsp.c.

References cblk_getdataL(), solver_cblk_s::cblktype, cpucblk_dpotrfsp1d_panel(), solver_cblk_s::fblokptr, and solver_blok_s::fcblknm.

◆ cpucblk_dsytrfsp1d_sytrf()

int cpucblk_dsytrfsp1d_sytrf ( SolverMatrix *  solvmtx,
SolverCblk cblk,
void *  dataL 
)

Computes the LDL^t factorization of the diagonal block in a panel.

Parameters
[in]solvmtxSolver Matrix structure of the problem
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in,out]dataLThe pointer to the correct representation of lower part of the data.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
Returns
The number of static pivoting performed during the diagonal block factorization.

Definition at line 232 of file core_dsytrfsp.c.

References solver_cblk_s::cblktype, solver_cblk_s::fcolnum, and solver_cblk_s::lcolnum.

Referenced by cpucblk_dsytrfsp1d_panel().

◆ cpucblk_dsytrfsp1d_panel()

int cpucblk_dsytrfsp1d_panel ( SolverMatrix *  solvmtx,
SolverCblk cblk,
void *  L,
void *  DLt 
)

Compute the LDL^t factorization of one panel.

Parameters
[in]solvmtxSolver Matrix structure of the problem
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in,out]LThe pointer to the matrix storing the coefficients of the panel. Must be of size cblk.stride -by- cblk.width
[in,out]DLtThe pointer to the upper matrix storing the coefficients the temporary DL^t product. Must be of size cblk.stride -by- cblk.width
Returns
The number of static pivoting during factorization of the diagonal block.

Definition at line 432 of file core_dsytrfsp.c.

References solver_cblk_s::cblktype, cpucblk_dsytrfsp1d_sytrf(), cpucblk_dtrsmsp(), PastixNonUnit, PastixNoTrans, PastixRight, and PastixUpper.

◆ cpucblk_dsytrfsp1d()

int cpucblk_dsytrfsp1d ( SolverMatrix *  solvmtx,
SolverCblk cblk,
double *  DLt,
double *  work,
pastix_int_t  lwork 
)

Perform the LDL^t factorization of a given panel and apply all its updates.

Parameters
[in]solvmtxSolver Matrix structure of the problem
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in]DLtTemporary memory buffer to store the transpose of DLt.
[in]workTemporary memory buffer.
[in]lworkTemporary workspace dimension.
Returns
The number of static pivoting during factorization of the diagonal block.

Definition at line 487 of file core_dsytrfsp.c.

References cblk_getdataL(), cblk_getdataU(), and solver_cblk_s::cblktype.

◆ cpucblk_dalloc_lrws()

void cpucblk_dalloc_lrws ( const SolverCblk cblk,
pastix_lrblock_t lrblok,
double *  ws 
)

Initialize lrblock structure from a workspace from all blocks of the cblk associated.

The lrblock structure must be allocated before.

Parameters
[in,out]cblkThe column block associated to the initialization.
[in]lrblokThe structure blok to initialize. Must be allocated before.
[in]wsThe workspace associated with the data that will be used for initialize lrblok.

Definition at line 96 of file cpucblk_dinit.c.

References cblk_colnbr(), solver_cblk_s::cblktype, and solver_cblk_s::fblokptr.

◆ cpucblk_dalloc_lr()

void cpucblk_dalloc_lr ( pastix_coefside_t  side,
SolverCblk cblk,
int  rkmax 
)

Allocate the cblk structure to store the coefficient.

When stored in low-rank format, the data pointer in the low-rank structure of each block must be initialized. This routines performs only the allocation and is thread-safe if called in parallel on the Lower and upper part.

Parameters
[in]sideDefine which side of the matrix must be initialized.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in,out]cblkThe column block to allocate.

Definition at line 143 of file cpucblk_dinit.c.

References cblk_colnbr(), solver_cblk_s::cblktype, and solver_cblk_s::fblokptr.

◆ cpucblk_dalloc_fr()

void cpucblk_dalloc_fr ( pastix_coefside_t  side,
SolverCblk cblk 
)

Allocate the cblk structure to store the coefficient.

When stored in low-rank format, the data pointer in the low-rank structure of each block must be initialized. This routines performs only the allocation and is thread-safe if called in parallel on the Lower and upper part.

Parameters
[in]sideDefine which side of the matrix must be initialized.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in,out]cblkThe column block to allocate.

Definition at line 217 of file cpucblk_dinit.c.

References cblk_colnbr(), solver_cblk_s::lcoeftab, PastixLCoef, solver_cblk_s::stride, and solver_cblk_s::ucoeftab.

◆ cpucblk_dalloc()

void cpucblk_dalloc ( pastix_coefside_t  side,
SolverCblk cblk 
)

Allocate the cblk structure to store the coefficient.

When stored in low-rank format, the data pointer in the low-rank structure of each block must be initialized. This routines performs only the allocation and is thread-safe if called in parallel on the Lower and upper part.

Parameters
[in]sideDefine which side of the matrix must be initialized.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in,out]cblkThe column block to allocate.

Definition at line 264 of file cpucblk_dinit.c.

References solver_cblk_s::cblktype, solver_cblk_s::lcoeftab, PastixLCoef, PastixUCoef, and solver_cblk_s::ucoeftab.

Referenced by cpucblk_dinit().

◆ cpucblk_dfree()

void cpucblk_dfree ( pastix_coefside_t  side,
SolverCblk cblk 
)

Free the cblk structure that store the coefficient.

This routines performs the free and is thread-safe if called in parallel on the Lower and upper part.

Parameters
[in]sideDefine which side of the matrix must be initialized.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in,out]cblkThe column block to free.

Definition at line 317 of file cpucblk_dinit.c.

References solver_cblk_s::cblktype, solver_cblk_s::lcoeftab, and PastixUCoef.

◆ cpucblk_dfillin()

void cpucblk_dfillin ( pastix_coefside_t  side,
const SolverMatrix *  solvmtx,
const pastix_bcsc_t bcsc,
pastix_int_t  itercblk 
)

Initialize the coeftab structure from the internal bcsc.

Parameters
[in]sideDefine which side of the matrix must be initialized.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in]solvmtxPaStiX structure to store numerical data and flags
[in]bcscThe internal bcsc structure that hold the graph with permutation stored by cblk.
[in]itercblkThe index of the cblk to fill in both bcsc and solvmtx structures.

Definition at line 604 of file cpucblk_dinit.c.

Referenced by cpucblk_dinit().

◆ cpucblk_dinit()

void cpucblk_dinit ( pastix_coefside_t  side,
const SolverMatrix *  solvmtx,
const pastix_bcsc_t bcsc,
pastix_int_t  itercblk,
const char *  directory 
)

Fully initialize a single cblk.

The cblk is allocated, intialized from the bcsc, and compressed if necessary.

Parameters
[in]sideDefine which side of the matrix must be initialized.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in]solvmtxThe solver matrix data structure.
[in]bcscThe internal block CSC structure to fill-in the matrix.
[in]itercblkThe index of the cblk to initialize.
[in,out]directoryThe pointer to the temporary directory where to store the output files. Used only if PASTIX_DEBUG_DUMP_COEFTAB is defined.

Try to compress the cblk if needs to be compressed

Definition at line 251 of file coeftab_dinit.c.

References cpucblk_dalloc(), cpucblk_ddump(), cpucblk_dfillin(), solver_cblk_s::ctrbcnt, pastix_fopenw(), PastixLCoef, and PastixUCoef.

◆ cpucblk_dgetschur()

void cpucblk_dgetschur ( const SolverCblk cblk,
int  upper_part,
double *  S,
pastix_int_t  lds 
)

Extract a cblk panel of the Schur complement to a dense lapack form.

Parameters
[in]cblkThe column block to extract in the Schur array
[in]upper_partIf true, the upper part is also extracted in S.
[in,out]SThe pointer to the top of the column of the cblk in the Schur array. On exit, the computed coefficient are copy to this array.
[in]ldsThe leading dimension of the S array.

Definition at line 178 of file cpucblk_dschur.c.

References solver_cblk_s::cblktype.

◆ cpucblk_ddump()

void cpucblk_ddump ( pastix_coefside_t  side,
const SolverCblk cblk,
FILE *  stream 
)

Dump a single column block into a FILE in a human readale format.

All non-zeroes coefficients are dumped in the format: i j val with one value per row.

Parameters
[in]sideDefine which side of the cblk must be printed.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
[in]cblkThe column block to dump into the file.
[in,out]streamThe FILE structure opened in write mode.

Definition at line 51 of file coeftab_dinit.c.

References solver_cblk_s::cblktype, solver_cblk_s::lcoeftab, PastixUCoef, and solver_cblk_s::ucoeftab.

Referenced by cpucblk_dinit().

◆ cpucblk_ddiff()

int cpucblk_ddiff ( pastix_coefside_t  side,
const SolverCblk cblkA,
SolverCblk cblkB 
)

Compare two column blocks in full-rank format.

The second cblk is overwritten by the difference of the two column blocks. The frobenius norm of the difference is computed and the functions returns 0 if the result: || B - A || / ( || A || * eps )

is below 10. Otherwise, an error message is printed and 1 is returned.

Parameters
[in]sideDefine which side of the cblk must be tested.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in]cblkAThe column block of the A matrix.
[in,out]cblkBThe column block of the B matrix that matches the A matrix in stucture. On exit, cblkB coefficient arrays are overwritten by the result of (B-A).
Returns
0 if the test is passed, >= 0 otherwise.

Definition at line 63 of file cpucblk_ddiff.c.

References cblk_colnbr(), core_dgeadd(), solver_cblk_s::lcoeftab, PastixLCoef, PastixNoTrans, PastixUCoef, solver_cblk_s::stride, and solver_cblk_s::ucoeftab.

Referenced by coeftab_ddiff().

◆ cpucblk_dadd()

void cpucblk_dadd ( pastix_coefside_t  side,
double  alpha,
const SolverCblk cblkA,
SolverCblk cblkB,
const pastix_lr_t lowrank 
)

Add two column bloks in full rank format.

The second cblk is overwritten by the sum of the two column blocks. B <- alpha * A + B

Parameters
[in]sideDefine which side of the cblk must be tested.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
[in]alphaThe scalar alpha
[in]cblkAThe column block of the A matrix.
[in,out]cblkBThe column block of the B matrix On exit, cblkB coefficient arrays are overwritten by the result of alpha * A + B.

Definition at line 358 of file cpucblk_dadd.c.

References cblk_colnbr(), solver_cblk_s::cblktype, PastixLUCoef, and solver_cblk_s::stride.

◆ cpucblk_dincoming_deps()

int cpucblk_dincoming_deps ( int  rank,
pastix_coefside_t  side,
SolverMatrix *  solvmtx,
SolverCblk cblk 
)

Wait for incoming dependencies, and return when cblk->ctrbcnt has reached 0.

Parameters
[in]mt_flag
  • 0, the function is called in a sequential environment, and we can wait on each communication.
  • 1, the function is called in a multi-threaded environment, and we need to test the communication to avoid dead locks.
[in]sideDefine which side of the cblk must be released.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in,out]solvmtxThe solver matrix structure.
[in,out]cblkThe column block that contribute to fcblk.
Returns
1 if the cblk is a fanin, 0 otherwise

Definition at line 499 of file cpucblk_dmpi_coeftab.c.

References solver_cblk_s::cblktype.

◆ cpucblk_drelease_deps()

void cpucblk_drelease_deps ( pastix_coefside_t  side,
SolverMatrix *  solvmtx,
const SolverCblk cblk,
SolverCblk fcbk 
)

Release the dependencies of the given cblk after an update.

Parameters
[in]sideDefine which side of the cblk must be released.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in,out]solvmtxThe solver matrix structure.
[in]cblkThe column block that contribute to fcblk.
[in,out]fcbkThe facing column block that is updated by cblk.

Definition at line 558 of file cpucblk_dmpi_coeftab.c.

References solver_cblk_s::cblktype, and solver_cblk_s::ctrbcnt.

◆ cpucblk_drequest_cleanup()

void cpucblk_drequest_cleanup ( pastix_coefside_t  side,
pastix_int_t  sched,
SolverMatrix *  solvmtx 
)

Waitall routine for current cblk request.

It may be possible that some cblk will not be deallocated with the static scheduler. So a cleanup may be necessary.

Parameters
[in]sideDefine which side of the cblk must be tested.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in]schedDefine which sched is used
  • PastixSchedSequential if sequential
  • PastixSchedStatic if multi-threaded static scheduler
  • PastixSchedDynamic if multi-threaded dynamic scheduler No other scheduler is supported.
[in,out]solvmtxThe solver matrix structure.

Definition at line 609 of file cpucblk_dmpi_coeftab.c.

References solver_cblk_s::cblktype, PastixSchedDynamic, PastixSchedSequential, and PastixSchedStatic.

◆ cpucblk_dsend_rhs_forward()

void cpucblk_dsend_rhs_forward ( const SolverMatrix *  solvmtx,
SolverCblk cblk,
double *  b 
)

Send the rhs associated to a cblk->lcolidx to the remote node.

Parameters
[in]solvmtxThe solver matrix holding the communicator.
[in]cblkThe cblk which defines the part to sent.
[in]bThe rhs that will be sent to the cblk->ownerid

Definition at line 42 of file cpucblk_dmpi_rhs.c.

References cblk_colnbr(), and solver_cblk_s::cblktype.

◆ cpucblk_drecv_rhs_forward()

void cpucblk_drecv_rhs_forward ( const SolverMatrix *  solvmtx,
SolverCblk cblk,
double *  work,
pastix_int_t  nrhs,
double *  b,
pastix_int_t  ldb 
)

Receive the rhs associated to a cblk->lcolidx to the remote node.

Parameters
[in]solvmtxThe solver matrix holding the communicator.
[in]cblkThe cblk which may define the part to sent.
[in,out]workThe temporary buffer to receive the remote data
[in,out]bThe rhs that will be updated by the reception.
[in]ldbThe leading dimension of the matrix b.

Definition at line 195 of file cpucblk_dmpi_rhs.c.

References cblk_colnbr(), and solver_cblk_s::cblktype.

◆ cpucblk_dsend_rhs_backward()

void cpucblk_dsend_rhs_backward ( const SolverMatrix *  solvmtx,
SolverCblk cblk,
double *  b 
)

Send the rhs associated to a cblk->lcolidx to the remote node.

Parameters
[in]solvmtxThe solver matrix holding the communicator.
[in]cblkThe cblk which defines the part to sent.
[in]bThe rhs that will be sent to the cblk->ownerid

Definition at line 89 of file cpucblk_dmpi_rhs.c.

References cblk_colnbr(), and solver_cblk_s::cblktype.

◆ cpucblk_drecv_rhs_backward()

void cpucblk_drecv_rhs_backward ( const SolverMatrix *  solvmtx,
SolverCblk cblk,
double *  b 
)

Receive the rhs associated to a cblk->lcolidx to the remote node.

Parameters
[in]solvmtxThe solver matrix holding the communicator.
[in]cblkThe cblk which may define the part to sent.
[in,out]bThe rhs that will be receive from the cblk->ownerid.

Definition at line 136 of file cpucblk_dmpi_rhs.c.

References cblk_colnbr(), and solver_cblk_s::cblktype.

◆ cpublok_dcompress()

pastix_fixdbl_t cpublok_dcompress ( const pastix_lr_t lowrank,
pastix_int_t  M,
pastix_int_t  N,
pastix_lrblock_t lrA 
)

Compress a single block from full-rank to low-rank format.

The compression to low-rank format is parameterized by the input information stored in the low-rank structure.

Parameters
[in]lowrankThe pointer to the low-rank structure describing the lo-rank compression parameters.
[in]MThe number of rows in the block
[in]NThe number of columns in the block
[in,out]lrAThe block to compress. On input, it points to a full-rank matrix. On output, if possible the matrix is compressed in block low-rank format.
Returns
The number of flops used to compress the block.

Definition at line 57 of file cpucblk_dcompress.c.

References pastix_lr_s::core_ge2lr, pastix_lrblock_s::rk, pastix_lr_s::tolerance, pastix_lrblock_s::u, pastix_lr_s::use_reltol, and pastix_lrblock_s::v.

◆ cpucblk_dcompress()

pastix_int_t cpucblk_dcompress ( const SolverMatrix *  solvmtx,
pastix_coefside_t  side,
int  max_ilulvl,
SolverCblk cblk 
)

Compress a single column block from full-rank to low-rank format.

The compression to low-rank format is parameterized by the input information stored in the low-rank structure.

Parameters
[in]solvmtxThe pointer to the solver structure.
[in]sideDefine which side of the matrix must be initialized.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in,out]cblkThe column block to compress.
Returns
The memory gain resulting from the compression to low-rank format in number of elements.

Definition at line 110 of file cpucblk_dcompress.c.

References cblk_colnbr(), solver_cblk_s::cblktype, and solver_cblk_s::fblokptr.

◆ cpucblk_duncompress()

void cpucblk_duncompress ( pastix_coefside_t  side,
SolverCblk cblk 
)

Uncompress a single column block from low-rank format to full-rank format.

Parameters
[in]sideDefine which side of the matrix must be initialized.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in,out]cblkThe column block to uncompress.

Definition at line 197 of file cpucblk_dcompress.c.

References blok_rownbr(), cblk_colnbr(), core_dlr2ge(), core_dlralloc(), core_dlrfree(), solver_cblk_s::fblokptr, solver_blok_s::LRblock, PastixLCoef, PastixNoTrans, PastixUCoef, and pastix_lrblock_s::u.

◆ cpucblk_dmemory()

void cpucblk_dmemory ( pastix_coefside_t  side,
SolverMatrix *  solvmtx,
SolverCblk cblk,
pastix_int_t *  orig,
pastix_int_t *  gain 
)

Return the memory gain of the low-rank form over the full-rank form for a single column-block.

This function returns the memory gain in number of elements for a single column block when it is stored in low-rank format compared to a full rank storage.

Parameters
[in]sideDefine which side of the matrix must be initialized.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in]solvmtxThe pointer to the solver structure.
[in]cblkThe column block to study.
[in,out]origThe structure that counts the original cost of the blocks.
[in,out]gainThe structure that counts gain on each type of the blocks.

Definition at line 277 of file cpucblk_dcompress.c.

References cblk_colnbr(), solver_cblk_s::cblktype, solver_cblk_s::fblokptr, and solver_cblk_s::ownerid.

◆ cpucblk_cgeaddsp1d()

int cpucblk_cgeaddsp1d ( const SolverCblk cblk1,
SolverCblk cblk2,
const pastix_complex32_t *  L,
pastix_complex32_t *  Cl,
const pastix_complex32_t *  U,
pastix_complex32_t *  Cu 
)

Add two column blocks together.

Perform the operation: cblk2 <- cblk1 + cblk2 using core_cgeadd().

Parameters
[in]cblk1The pointer to the data structure that describes the panel to add. Next column blok must be accessible through cblk1[1].
[in]cblk2The pointer to the data structure that describes the panel in which we add. Next column blok must be accessible through cblk2[1].
[in]LThe pointer to the lower matrix storing the coefficients of the panel. Must be of size cblk.stride -by- cblk.width
[in,out]ClThe pointer to the lower matrix storing the coefficients of the updated panel. Must be of size cblk.stride -by- cblk.width On exit Cl = Cl + L.
[in]UThe pointer to the upper matrix storing the coefficients of the panel. Must be of size cblk.stride -by- cblk.width. Ignored if NULL.
[in,out]CuThe pointer to the upper matrix storing the coefficients of the updated panel. Must be of size cblk.stride -by- cblk.width On exit Cu = Cu + U.
Return values
PASTIX_SUCCESSon success.

Definition at line 245 of file core_cgeadd.c.

References solver_blok_s::coefind, core_cgeadd(), solver_cblk_s::fblokptr, solver_cblk_s::fcolnum, solver_blok_s::frownum, is_block_inside_fblock(), solver_cblk_s::lcolnum, solver_blok_s::lrownum, PASTIX_SUCCESS, PastixNoTrans, and solver_cblk_s::stride.

◆ cpucblk_cgemmsp()

pastix_fixdbl_t cpucblk_cgemmsp ( pastix_coefside_t  sideA,
pastix_trans_t  trans,
const SolverCblk cblk,
const SolverBlok blok,
SolverCblk fcblk,
const void *  A,
const void *  B,
void *  C,
pastix_complex32_t *  work,
pastix_int_t  lwork,
const pastix_lr_t lowrank 
)

Compute the updates associated to one off-diagonal block.

Parameters
[in]sideASpecify if A and C belong to the lower part, or to the upper part. If sideA == PastixLCoef, the contribution of: (block .. (cblk[1].fblokptr-1)) -by- block is computed and added to C, otherwise the contribution: (block+1 .. (cblk[1].fblokptr-1)) -by- block is computed and added to C. The pointer to the data structure that describes the panel from which we compute the contributions. Next column blok must be accessible through cblk[1].
[in]transSpecify the transposition used for the B matrix. It has to be either PastixTrans or PastixConjTrans.
[in]cblkThe cblk structure to which block belongs to. The A and B pointers must be the coeftab of this column block. Next column blok must be accessible through cblk[1].
[in]blokThe block from which we compute the contributions.
[in,out]fcblkThe pointer to the data structure that describes the panel on which we compute the contributions. The C pointer must be one of the coeftab from this fcblk. Next column blok must be accessible through fcblk[1].
[in]AThe pointer to the correct representation of A.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in]BThe pointer to the correct representation of B.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in,out]CThe pointer to the correct representation of C.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in]workTemporary memory buffer.
[in]lowrankThe structure with low-rank parameters.
Returns
The number of static pivoting during factorization of the diagonal block.

Definition at line 1512 of file core_cgemmsp.c.

References blok_rownbr(), cblk_colnbr(), solver_cblk_s::cblktype, and solver_cblk_s::stride.

◆ cpucblk_ctrsmsp()

void cpucblk_ctrsmsp ( pastix_side_t  side,
pastix_uplo_t  uplo,
pastix_trans_t  trans,
pastix_diag_t  diag,
const SolverCblk cblk,
const void *  A,
void *  C,
const pastix_lr_t lowrank 
)

Compute the updates associated to a column of off-diagonal blocks.

Parameters
[in]sideSpecify whether the A matrix appears on the left or right in the equation. It has to be either PastixLeft or PastixRight.
[in]uploSpecify whether the A matrix is upper or lower triangular. It has to be either PastixUpper or PastixLower.
[in]transSpecify the transposition used for the A matrix. It has to be either PastixTrans or PastixConjTrans.
[in]diagSpecify if the A matrix is unit triangular. It has to be either PastixUnit or PastixNonUnit.
[in]cblkThe cblk structure to which block belongs to. The A and B pointers must be the coeftab of this column block. Next column blok must be accessible through cblk[1].
[in]AThe pointer to the correct representation of A.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in,out]CThe pointer to the correct representation of C.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in]lowrankThe structure with low-rank parameters.

Definition at line 356 of file core_ctrsmsp.c.

References cblk_colnbr(), solver_cblk_s::cblktype, and solver_cblk_s::stride.

Referenced by cpucblk_cgetrfsp1d_panel(), cpucblk_chetrfsp1d_panel(), cpucblk_cpotrfsp1d_panel(), cpucblk_cpxtrfsp1d_panel(), and cpucblk_csytrfsp1d_panel().

◆ cpucblk_cscalo()

void cpucblk_cscalo ( pastix_trans_t  trans,
SolverCblk cblk,
void *  dataL,
void *  dataLD 
)

Copy the L term with scaling for the two-terms algorithm.

Performs LD = op(L) * D

Parameters
[in]trans
  • PastixNoTrans: No transpose, op( L ) = L;
  • PastixTrans: Transpose, op( L ) = L;
  • PastixConjTrans: Conjugate Transpose, op( L ) = conjf(L).
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in,out]dataLThe pointer to the correct representation of lower part of the data.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in,out]dataLDThe pointer to the correct representation of LD.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.

Definition at line 170 of file core_cscalo.c.

References cblk_colnbr(), solver_cblk_s::cblktype, and solver_cblk_s::fblokptr.

◆ cpublok_cgemmsp()

pastix_fixdbl_t cpublok_cgemmsp ( pastix_trans_t  transB,
const SolverCblk cblk,
SolverCblk fcblk,
pastix_int_t  blok_mk,
pastix_int_t  blok_nk,
pastix_int_t  blok_mn,
const void *  A,
const void *  B,
void *  C,
const pastix_lr_t lowrank 
)

Compute the CPU gemm associated to a couple of off-diagonal blocks.

C_l = C_l - A_l * op(B_s), with B_s = B_l, or B_u or C_u = C_u - A_u * op(B_s), with B_s = B_l, or B_u

Parameters
[in]transBSpecify wheter B should be used as PastixNoTrans, PastixTrans, or PastixConjTrans in the computations.
[in]cblkThe cblk structure to which block A and B belong to. The A and B pointers must be one of the [lu]coeftab of this column block. Next column blok must be accessible through cblk[1].
[in,out]fcblkThe pointer to the data structure that describes the panel on which we compute the contributions. The C pointer must be one of the [lu]coeftab from this fcblk. Next column blok must be accessible through fcblk[1].
[in]blok_mkSpecify the index of the A block in the cblk column. This index is 0-based for the diagonal block.
[in]blok_nkSpecify the index of the B block in the cblk column. This index is 0-based for the diagonal block.
[in]blok_mnSpecify the index of the C block in the fcblk column. This index is 0-based for the diagonal block.
[in]AThe pointer to the correct representation of A.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in]BThe pointer to the correct representation of B.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in]CThe pointer to the correct representation of C.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in]lowrankThe structure with the low-rank parameters.

Definition at line 1655 of file core_cgemmsp.c.

References solver_cblk_s::cblktype.

◆ cpublok_ctrsmsp()

pastix_fixdbl_t cpublok_ctrsmsp ( pastix_side_t  side,
pastix_uplo_t  uplo,
pastix_trans_t  trans,
pastix_diag_t  diag,
const SolverCblk cblk,
pastix_int_t  blok_m,
const void *  A,
void *  C,
const pastix_lr_t lowrank 
)

Compute the updates associated to one off-diagonal block.

Parameters
[in]sideSpecify whether the A matrix appears on the left or right in the equation. It has to be either PastixLeft or PastixRight.
[in]uploSpecify whether the A matrix is upper or lower triangular. It has to be either PastixUpper or PastixLower.
[in]transSpecify the transposition used for the A matrix. It has to be either PastixTrans or PastixConjTrans.
[in]diagSpecify if the A matrix is unit triangular. It has to be either PastixUnit or PastixNonUnit.
[in]cblkThe cblk structure to which block belongs to. The A and B pointers must be the coeftab of this column block. Next column blok must be accessible through cblk[1].
[in]blok_mIndex of the first off-diagonal block in cblk that is solved. The TRSM is also applied to all the folowing blocks which are facing the same diagonal block
[in]AThe pointer to the correct representation of A.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in,out]CThe pointer to the correct representation of C.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in]lowrankThe structure with low-rank parameters.

Definition at line 678 of file core_ctrsmsp.c.

References solver_cblk_s::cblktype.

◆ cpublok_cscalo()

void cpublok_cscalo ( pastix_trans_t  trans,
SolverCblk cblk,
pastix_int_t  blok_m,
const void *  dataA,
const void *  dataD,
void *  dataB 
)

Copy the lower terms of the block with scaling for the two-terms algorithm.

Performs B = op(A) * D

Parameters
[in]trans
  • PastixNoTrans: No transpose, op( A ) = A;
  • PastixTrans: Transpose, op( A ) = A;
  • PastixConjTrans: Conjugate Transpose, op( A ) = conjf(A).
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in]blok_mIndex of the off-diagonal block to be solved in the cblk. All blocks facing the same cblk, in the current column block will be solved.
[in]dataAThe pointer to the correct representation of data of A.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in]dataDThe pointer to the correct representation of data of D.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in,out]dataBThe pointer to the correct representation of data of B.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.

Definition at line 315 of file core_cscalo.c.

References blok_rownbr(), cblk_colnbr(), solver_cblk_s::cblktype, and solver_cblk_s::fblokptr.

◆ cpucblk_cgetrfsp1d_getrf()

int cpucblk_cgetrfsp1d_getrf ( SolverMatrix *  solvmtx,
SolverCblk cblk,
void *  dataL,
void *  dataU 
)

Compute the LU factorization of the diagonal block in a panel.

Parameters
[in]solvmtxSolver Matrix structure of the problem
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in,out]dataLThe pointer to the correct representation of the lower part of the data.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in,out]dataUThe pointer to the correct representation of the upper part of the data.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width
  • pastix_lr_block if the block is compressed.
Returns
The number of static pivoting performed during the diagonal block factorization.

Definition at line 217 of file core_cgetrfsp.c.

References solver_cblk_s::cblktype, solver_cblk_s::fcolnum, and solver_cblk_s::lcolnum.

Referenced by cpucblk_cgetrfsp1d_panel().

◆ cpucblk_cgetrfsp1d_panel()

int cpucblk_cgetrfsp1d_panel ( SolverMatrix *  solvmtx,
SolverCblk cblk,
void *  L,
void *  U 
)

Compute the LU factorization of one panel.

Parameters
[in]solvmtxSolver Matrix structure of the problem
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in,out]LThe pointer to the correct representation of the lower part of the data.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in,out]UThe pointer to the correct representation of the upper part of the data.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
Returns
The number of static pivoting performed during the diagonal block factorization.

Definition at line 305 of file core_cgetrfsp.c.

References cpucblk_cgetrfsp1d_getrf(), cpucblk_ctrsmsp(), PastixNonUnit, PastixNoTrans, PastixRight, PastixUnit, and PastixUpper.

Referenced by cpucblk_cgetrfsp1d().

◆ cpucblk_cgetrfsp1d()

int cpucblk_cgetrfsp1d ( SolverMatrix *  solvmtx,
SolverCblk cblk,
pastix_complex32_t *  work,
pastix_int_t  lwork 
)

Perform the LU factorization of a given panel and apply all its updates.

Parameters
[in]solvmtxSolver Matrix structure of the problem
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in]workTemporary memory buffer.
[in]lworkTemporary workspace dimension.
Returns
The number of static pivoting during factorization of the diagonal block.

Definition at line 355 of file core_cgetrfsp.c.

References cblk_getdataL(), cblk_getdataU(), solver_cblk_s::cblktype, cpucblk_cgetrfsp1d_panel(), solver_cblk_s::fblokptr, and solver_blok_s::fcblknm.

◆ cpucblk_cpotrfsp1d_potrf()

int cpucblk_cpotrfsp1d_potrf ( SolverMatrix *  solvmtx,
SolverCblk cblk,
void *  dataL 
)

Compute the Cholesky factorization of the diagonal block in a panel.

Warning
This routine will fail if it discovers a null or negative value on the diagonal during factorization.
Parameters
[in]solvmtxSolver Matrix structure of the problem
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in,out]dataLThe pointer to the correct representation of the lower part of the data.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
Returns
The number of static pivoting performed during the diagonal block factorization.

Definition at line 220 of file core_cpotrfsp.c.

References solver_cblk_s::cblktype, solver_cblk_s::fcolnum, and solver_cblk_s::lcolnum.

Referenced by cpucblk_cpotrfsp1d_panel().

◆ cpucblk_cpotrfsp1d_panel()

int cpucblk_cpotrfsp1d_panel ( SolverMatrix *  solvmtx,
SolverCblk cblk,
void *  L 
)

Compute the Cholesky factorization of one panel.

Parameters
[in]solvmtxSolver Matrix structure of the problem
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in,out]LThe pointer to the correct representation of lower part of the data.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
Returns
The number of static pivoting during factorization of the diagonal block.

Definition at line 292 of file core_cpotrfsp.c.

References cpucblk_cpotrfsp1d_potrf(), cpucblk_ctrsmsp(), PastixConjTrans, PastixLower, PastixNonUnit, and PastixRight.

Referenced by cpucblk_cpotrfsp1d().

◆ cpucblk_cpotrfsp1d()

int cpucblk_cpotrfsp1d ( SolverMatrix *  solvmtx,
SolverCblk cblk,
pastix_complex32_t *  work,
pastix_int_t  lwork 
)

Perform the Cholesky factorization of a given panel and apply all its updates.

Parameters
[in]solvmtxSolver Matrix structure of the problem
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in]workTemporary memory buffer.
[in]lworkTemporary workspace dimension.
Returns
The number of static pivoting during factorization of the diagonal block.

Definition at line 334 of file core_cpotrfsp.c.

References cblk_getdataL(), solver_cblk_s::cblktype, cpucblk_cpotrfsp1d_panel(), solver_cblk_s::fblokptr, and solver_blok_s::fcblknm.

◆ cpucblk_chetrfsp1d_hetrf()

int cpucblk_chetrfsp1d_hetrf ( SolverMatrix *  solvmtx,
SolverCblk cblk,
void *  dataL 
)

Computes the LDL^h factorization of the diagonal block in a panel.

Parameters
[in]solvmtxSolver Matrix structure of the problem
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in,out]dataLThe pointer to the correct representation of lower part of the data.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
Returns
The number of static pivoting performed during the diagonal block factorization.

Definition at line 234 of file core_chetrfsp.c.

References solver_cblk_s::cblktype, solver_cblk_s::fcolnum, and solver_cblk_s::lcolnum.

Referenced by cpucblk_chetrfsp1d_panel().

◆ cpucblk_chetrfsp1d_panel()

int cpucblk_chetrfsp1d_panel ( SolverMatrix *  solvmtx,
SolverCblk cblk,
void *  L,
void *  DLh 
)

Compute the LDL^h factorization of one panel.

Parameters
[in]solvmtxSolver Matrix structure of the problem
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in,out]LThe pointer to the correct representation of lower part of the data.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in,out]DLhThe pointer to the correct representation of Dlh matrix (stored in the upper part bu default).
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
Returns
The number of static pivoting during factorization of the diagonal block.

Definition at line 437 of file core_chetrfsp.c.

References solver_cblk_s::cblktype, cpucblk_chetrfsp1d_hetrf(), cpucblk_ctrsmsp(), PastixNonUnit, PastixNoTrans, PastixRight, and PastixUpper.

◆ cpucblk_chetrfsp1d()

int cpucblk_chetrfsp1d ( SolverMatrix *  solvmtx,
SolverCblk cblk,
pastix_complex32_t *  DLh,
pastix_complex32_t *  work,
pastix_int_t  lwork 
)

Perform the LDL^h factorization of a given panel and apply all its updates.

Parameters
[in]solvmtxSolver Matrix structure of the problem
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in]DLhTemporary memory buffer to store the conjugate transpose of DLh.
[in]workTemporary memory buffer.
[in]lworkTemporary workspace dimension.
Returns
The number of static pivoting during factorization of the diagonal block.

Definition at line 492 of file core_chetrfsp.c.

References cblk_getdataL(), cblk_getdataU(), and solver_cblk_s::cblktype.

◆ cpucblk_cpxtrfsp1d_pxtrf()

int cpucblk_cpxtrfsp1d_pxtrf ( SolverMatrix *  solvmtx,
SolverCblk cblk,
void *  dataL 
)

Compute the LL^t factorization of the diagonal block in a panel.

Warning
This routine will fail if it discovers a null or negative value on the diagonal during factorization.
Parameters
[in]solvmtxSolver Matrix structure of the problem
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in,out]dataLThe pointer to the correct representation of the lower part the data.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
Returns
The number of static pivoting performed during the diagonal block factorization.

Definition at line 212 of file core_cpxtrfsp.c.

References solver_cblk_s::cblktype, solver_cblk_s::fcolnum, and solver_cblk_s::lcolnum.

Referenced by cpucblk_cpxtrfsp1d_panel().

◆ cpucblk_cpxtrfsp1d_panel()

int cpucblk_cpxtrfsp1d_panel ( SolverMatrix *  solvmtx,
SolverCblk cblk,
void *  L 
)

Compute the LL^t factorization of one panel.

Parameters
[in]solvmtxSolver Matrix structure of the problem
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in,out]LThe pointer to the correct representation of the lower part the data.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
Returns
The number of static pivoting during factorization of the diagonal block.

Definition at line 284 of file core_cpxtrfsp.c.

References cpucblk_cpxtrfsp1d_pxtrf(), cpucblk_ctrsmsp(), PastixLower, PastixNonUnit, PastixRight, and PastixTrans.

Referenced by cpucblk_cpxtrfsp1d().

◆ cpucblk_cpxtrfsp1d()

int cpucblk_cpxtrfsp1d ( SolverMatrix *  solvmtx,
SolverCblk cblk,
pastix_complex32_t *  work,
pastix_int_t  lwork 
)

Perform the LL^t factorization of a given panel and apply all its updates.

Parameters
[in]solvmtxSolver Matrix structure of the problem
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in]workTemporary memory buffer.
[in]lworkTemporary workspace dimension.
Returns
The number of static pivoting during factorization of the diagonal block.

Definition at line 326 of file core_cpxtrfsp.c.

References cblk_getdataL(), solver_cblk_s::cblktype, cpucblk_cpxtrfsp1d_panel(), solver_cblk_s::fblokptr, and solver_blok_s::fcblknm.

◆ cpucblk_csytrfsp1d_sytrf()

int cpucblk_csytrfsp1d_sytrf ( SolverMatrix *  solvmtx,
SolverCblk cblk,
void *  dataL 
)

Computes the LDL^t factorization of the diagonal block in a panel.

Parameters
[in]solvmtxSolver Matrix structure of the problem
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in,out]dataLThe pointer to the correct representation of lower part of the data.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
Returns
The number of static pivoting performed during the diagonal block factorization.

Definition at line 232 of file core_csytrfsp.c.

References solver_cblk_s::cblktype, solver_cblk_s::fcolnum, and solver_cblk_s::lcolnum.

Referenced by cpucblk_csytrfsp1d_panel().

◆ cpucblk_csytrfsp1d_panel()

int cpucblk_csytrfsp1d_panel ( SolverMatrix *  solvmtx,
SolverCblk cblk,
void *  L,
void *  DLt 
)

Compute the LDL^t factorization of one panel.

Parameters
[in]solvmtxSolver Matrix structure of the problem
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in,out]LThe pointer to the matrix storing the coefficients of the panel. Must be of size cblk.stride -by- cblk.width
[in,out]DLtThe pointer to the upper matrix storing the coefficients the temporary DL^t product. Must be of size cblk.stride -by- cblk.width
Returns
The number of static pivoting during factorization of the diagonal block.

Definition at line 432 of file core_csytrfsp.c.

References solver_cblk_s::cblktype, cpucblk_csytrfsp1d_sytrf(), cpucblk_ctrsmsp(), PastixNonUnit, PastixNoTrans, PastixRight, and PastixUpper.

◆ cpucblk_csytrfsp1d()

int cpucblk_csytrfsp1d ( SolverMatrix *  solvmtx,
SolverCblk cblk,
pastix_complex32_t *  DLt,
pastix_complex32_t *  work,
pastix_int_t  lwork 
)

Perform the LDL^t factorization of a given panel and apply all its updates.

Parameters
[in]solvmtxSolver Matrix structure of the problem
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in]DLtTemporary memory buffer to store the transpose of DLt.
[in]workTemporary memory buffer.
[in]lworkTemporary workspace dimension.
Returns
The number of static pivoting during factorization of the diagonal block.

Definition at line 487 of file core_csytrfsp.c.

References cblk_getdataL(), cblk_getdataU(), and solver_cblk_s::cblktype.

◆ cpucblk_calloc_lrws()

void cpucblk_calloc_lrws ( const SolverCblk cblk,
pastix_lrblock_t lrblok,
pastix_complex32_t *  ws 
)

Initialize lrblock structure from a workspace from all blocks of the cblk associated.

The lrblock structure must be allocated before.

Parameters
[in,out]cblkThe column block associated to the initialization.
[in]lrblokThe structure blok to initialize. Must be allocated before.
[in]wsThe workspace associated with the data that will be used for initialize lrblok.

Definition at line 96 of file cpucblk_cinit.c.

References cblk_colnbr(), solver_cblk_s::cblktype, and solver_cblk_s::fblokptr.

◆ cpucblk_calloc_lr()

void cpucblk_calloc_lr ( pastix_coefside_t  side,
SolverCblk cblk,
int  rkmax 
)

Allocate the cblk structure to store the coefficient.

When stored in low-rank format, the data pointer in the low-rank structure of each block must be initialized. This routines performs only the allocation and is thread-safe if called in parallel on the Lower and upper part.

Parameters
[in]sideDefine which side of the matrix must be initialized.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in,out]cblkThe column block to allocate.

Definition at line 143 of file cpucblk_cinit.c.

References cblk_colnbr(), solver_cblk_s::cblktype, and solver_cblk_s::fblokptr.

◆ cpucblk_calloc_fr()

void cpucblk_calloc_fr ( pastix_coefside_t  side,
SolverCblk cblk 
)

Allocate the cblk structure to store the coefficient.

When stored in low-rank format, the data pointer in the low-rank structure of each block must be initialized. This routines performs only the allocation and is thread-safe if called in parallel on the Lower and upper part.

Parameters
[in]sideDefine which side of the matrix must be initialized.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in,out]cblkThe column block to allocate.

Definition at line 217 of file cpucblk_cinit.c.

References cblk_colnbr(), solver_cblk_s::lcoeftab, PastixLCoef, solver_cblk_s::stride, and solver_cblk_s::ucoeftab.

◆ cpucblk_calloc()

void cpucblk_calloc ( pastix_coefside_t  side,
SolverCblk cblk 
)

Allocate the cblk structure to store the coefficient.

When stored in low-rank format, the data pointer in the low-rank structure of each block must be initialized. This routines performs only the allocation and is thread-safe if called in parallel on the Lower and upper part.

Parameters
[in]sideDefine which side of the matrix must be initialized.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in,out]cblkThe column block to allocate.

Definition at line 264 of file cpucblk_cinit.c.

References solver_cblk_s::cblktype, solver_cblk_s::lcoeftab, PastixLCoef, PastixUCoef, and solver_cblk_s::ucoeftab.

Referenced by cpucblk_cinit().

◆ cpucblk_cfree()

void cpucblk_cfree ( pastix_coefside_t  side,
SolverCblk cblk 
)

Free the cblk structure that store the coefficient.

This routines performs the free and is thread-safe if called in parallel on the Lower and upper part.

Parameters
[in]sideDefine which side of the matrix must be initialized.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in,out]cblkThe column block to free.

Definition at line 317 of file cpucblk_cinit.c.

References solver_cblk_s::cblktype, solver_cblk_s::lcoeftab, and PastixUCoef.

◆ cpucblk_cfillin()

void cpucblk_cfillin ( pastix_coefside_t  side,
const SolverMatrix *  solvmtx,
const pastix_bcsc_t bcsc,
pastix_int_t  itercblk 
)

Initialize the coeftab structure from the internal bcsc.

Parameters
[in]sideDefine which side of the matrix must be initialized.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in]solvmtxPaStiX structure to store numerical data and flags
[in]bcscThe internal bcsc structure that hold the graph with permutation stored by cblk.
[in]itercblkThe index of the cblk to fill in both bcsc and solvmtx structures.

Definition at line 604 of file cpucblk_cinit.c.

Referenced by cpucblk_cinit().

◆ cpucblk_cinit()

void cpucblk_cinit ( pastix_coefside_t  side,
const SolverMatrix *  solvmtx,
const pastix_bcsc_t bcsc,
pastix_int_t  itercblk,
const char *  directory 
)

Fully initialize a single cblk.

The cblk is allocated, intialized from the bcsc, and compressed if necessary.

Parameters
[in]sideDefine which side of the matrix must be initialized.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in]solvmtxThe solver matrix data structure.
[in]bcscThe internal block CSC structure to fill-in the matrix.
[in]itercblkThe index of the cblk to initialize.
[in,out]directoryThe pointer to the temporary directory where to store the output files. Used only if PASTIX_DEBUG_DUMP_COEFTAB is defined.

Try to compress the cblk if needs to be compressed

Definition at line 251 of file coeftab_cinit.c.

References cpucblk_calloc(), cpucblk_cdump(), cpucblk_cfillin(), solver_cblk_s::ctrbcnt, pastix_fopenw(), PastixLCoef, and PastixUCoef.

◆ cpucblk_cgetschur()

void cpucblk_cgetschur ( const SolverCblk cblk,
int  upper_part,
pastix_complex32_t *  S,
pastix_int_t  lds 
)

Extract a cblk panel of the Schur complement to a dense lapack form.

Parameters
[in]cblkThe column block to extract in the Schur array
[in]upper_partIf true, the upper part is also extracted in S.
[in,out]SThe pointer to the top of the column of the cblk in the Schur array. On exit, the computed coefficient are copy to this array.
[in]ldsThe leading dimension of the S array.

Definition at line 178 of file cpucblk_cschur.c.

References solver_cblk_s::cblktype.

◆ cpucblk_cdump()

void cpucblk_cdump ( pastix_coefside_t  side,
const SolverCblk cblk,
FILE *  stream 
)

Dump a single column block into a FILE in a human readale format.

All non-zeroes coefficients are dumped in the format: i j val with one value per row.

Parameters
[in]sideDefine which side of the cblk must be printed.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
[in]cblkThe column block to dump into the file.
[in,out]streamThe FILE structure opened in write mode.

Definition at line 51 of file coeftab_cinit.c.

References solver_cblk_s::cblktype, solver_cblk_s::lcoeftab, PastixUCoef, and solver_cblk_s::ucoeftab.

Referenced by cpucblk_cinit().

◆ cpucblk_cdiff()

int cpucblk_cdiff ( pastix_coefside_t  side,
const SolverCblk cblkA,
SolverCblk cblkB 
)

Compare two column blocks in full-rank format.

The second cblk is overwritten by the difference of the two column blocks. The frobenius norm of the difference is computed and the functions returns 0 if the result: || B - A || / ( || A || * eps )

is below 10. Otherwise, an error message is printed and 1 is returned.

Parameters
[in]sideDefine which side of the cblk must be tested.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in]cblkAThe column block of the A matrix.
[in,out]cblkBThe column block of the B matrix that matches the A matrix in stucture. On exit, cblkB coefficient arrays are overwritten by the result of (B-A).
Returns
0 if the test is passed, >= 0 otherwise.

Definition at line 63 of file cpucblk_cdiff.c.

References cblk_colnbr(), core_cgeadd(), solver_cblk_s::lcoeftab, PastixLCoef, PastixNoTrans, PastixUCoef, solver_cblk_s::stride, and solver_cblk_s::ucoeftab.

Referenced by coeftab_cdiff().

◆ cpucblk_cadd()

void cpucblk_cadd ( pastix_coefside_t  side,
float  alpha,
const SolverCblk cblkA,
SolverCblk cblkB,
const pastix_lr_t lowrank 
)

Add two column bloks in full rank format.

The second cblk is overwritten by the sum of the two column blocks. B <- alpha * A + B

Parameters
[in]sideDefine which side of the cblk must be tested.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
[in]alphaThe scalar alpha
[in]cblkAThe column block of the A matrix.
[in,out]cblkBThe column block of the B matrix On exit, cblkB coefficient arrays are overwritten by the result of alpha * A + B.

Definition at line 358 of file cpucblk_cadd.c.

References cblk_colnbr(), solver_cblk_s::cblktype, PastixLUCoef, and solver_cblk_s::stride.

◆ cpucblk_cincoming_deps()

int cpucblk_cincoming_deps ( int  rank,
pastix_coefside_t  side,
SolverMatrix *  solvmtx,
SolverCblk cblk 
)

Wait for incoming dependencies, and return when cblk->ctrbcnt has reached 0.

Parameters
[in]mt_flag
  • 0, the function is called in a sequential environment, and we can wait on each communication.
  • 1, the function is called in a multi-threaded environment, and we need to test the communication to avoid dead locks.
[in]sideDefine which side of the cblk must be released.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in,out]solvmtxThe solver matrix structure.
[in,out]cblkThe column block that contribute to fcblk.
Returns
1 if the cblk is a fanin, 0 otherwise

Definition at line 499 of file cpucblk_cmpi_coeftab.c.

References solver_cblk_s::cblktype.

◆ cpucblk_crelease_deps()

void cpucblk_crelease_deps ( pastix_coefside_t  side,
SolverMatrix *  solvmtx,
const SolverCblk cblk,
SolverCblk fcbk 
)

Release the dependencies of the given cblk after an update.

Parameters
[in]sideDefine which side of the cblk must be released.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in,out]solvmtxThe solver matrix structure.
[in]cblkThe column block that contribute to fcblk.
[in,out]fcbkThe facing column block that is updated by cblk.

Definition at line 558 of file cpucblk_cmpi_coeftab.c.

References solver_cblk_s::cblktype, and solver_cblk_s::ctrbcnt.

◆ cpucblk_crequest_cleanup()

void cpucblk_crequest_cleanup ( pastix_coefside_t  side,
pastix_int_t  sched,
SolverMatrix *  solvmtx 
)

Waitall routine for current cblk request.

It may be possible that some cblk will not be deallocated with the static scheduler. So a cleanup may be necessary.

Parameters
[in]sideDefine which side of the cblk must be tested.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in]schedDefine which sched is used
  • PastixSchedSequential if sequential
  • PastixSchedStatic if multi-threaded static scheduler
  • PastixSchedDynamic if multi-threaded dynamic scheduler No other scheduler is supported.
[in,out]solvmtxThe solver matrix structure.

Definition at line 609 of file cpucblk_cmpi_coeftab.c.

References solver_cblk_s::cblktype, PastixSchedDynamic, PastixSchedSequential, and PastixSchedStatic.

◆ cpucblk_csend_rhs_forward()

void cpucblk_csend_rhs_forward ( const SolverMatrix *  solvmtx,
SolverCblk cblk,
pastix_complex32_t *  b 
)

Send the rhs associated to a cblk->lcolidx to the remote node.

Parameters
[in]solvmtxThe solver matrix holding the communicator.
[in]cblkThe cblk which defines the part to sent.
[in]bThe rhs that will be sent to the cblk->ownerid

Definition at line 42 of file cpucblk_cmpi_rhs.c.

References cblk_colnbr(), and solver_cblk_s::cblktype.

◆ cpucblk_crecv_rhs_forward()

void cpucblk_crecv_rhs_forward ( const SolverMatrix *  solvmtx,
SolverCblk cblk,
pastix_complex32_t *  work,
pastix_int_t  nrhs,
pastix_complex32_t *  b,
pastix_int_t  ldb 
)

Receive the rhs associated to a cblk->lcolidx to the remote node.

Parameters
[in]solvmtxThe solver matrix holding the communicator.
[in]cblkThe cblk which may define the part to sent.
[in,out]workThe temporary buffer to receive the remote data
[in,out]bThe rhs that will be updated by the reception.
[in]ldbThe leading dimension of the matrix b.

Definition at line 195 of file cpucblk_cmpi_rhs.c.

References cblk_colnbr(), and solver_cblk_s::cblktype.

◆ cpucblk_csend_rhs_backward()

void cpucblk_csend_rhs_backward ( const SolverMatrix *  solvmtx,
SolverCblk cblk,
pastix_complex32_t *  b 
)

Send the rhs associated to a cblk->lcolidx to the remote node.

Parameters
[in]solvmtxThe solver matrix holding the communicator.
[in]cblkThe cblk which defines the part to sent.
[in]bThe rhs that will be sent to the cblk->ownerid

Definition at line 89 of file cpucblk_cmpi_rhs.c.

References cblk_colnbr(), and solver_cblk_s::cblktype.

◆ cpucblk_crecv_rhs_backward()

void cpucblk_crecv_rhs_backward ( const SolverMatrix *  solvmtx,
SolverCblk cblk,
pastix_complex32_t *  b 
)

Receive the rhs associated to a cblk->lcolidx to the remote node.

Parameters
[in]solvmtxThe solver matrix holding the communicator.
[in]cblkThe cblk which may define the part to sent.
[in,out]bThe rhs that will be receive from the cblk->ownerid.

Definition at line 136 of file cpucblk_cmpi_rhs.c.

References cblk_colnbr(), and solver_cblk_s::cblktype.

◆ cpublok_ccompress()

pastix_fixdbl_t cpublok_ccompress ( const pastix_lr_t lowrank,
pastix_int_t  M,
pastix_int_t  N,
pastix_lrblock_t lrA 
)

Compress a single block from full-rank to low-rank format.

The compression to low-rank format is parameterized by the input information stored in the low-rank structure.

Parameters
[in]lowrankThe pointer to the low-rank structure describing the lo-rank compression parameters.
[in]MThe number of rows in the block
[in]NThe number of columns in the block
[in,out]lrAThe block to compress. On input, it points to a full-rank matrix. On output, if possible the matrix is compressed in block low-rank format.
Returns
The number of flops used to compress the block.

Definition at line 57 of file cpucblk_ccompress.c.

References pastix_lr_s::core_ge2lr, pastix_lrblock_s::rk, pastix_lr_s::tolerance, pastix_lrblock_s::u, pastix_lr_s::use_reltol, and pastix_lrblock_s::v.

◆ cpucblk_ccompress()

pastix_int_t cpucblk_ccompress ( const SolverMatrix *  solvmtx,
pastix_coefside_t  side,
int  max_ilulvl,
SolverCblk cblk 
)

Compress a single column block from full-rank to low-rank format.

The compression to low-rank format is parameterized by the input information stored in the low-rank structure.

Parameters
[in]solvmtxThe pointer to the solver structure.
[in]sideDefine which side of the matrix must be initialized.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in,out]cblkThe column block to compress.
Returns
The memory gain resulting from the compression to low-rank format in number of elements.

Definition at line 110 of file cpucblk_ccompress.c.

References cblk_colnbr(), solver_cblk_s::cblktype, and solver_cblk_s::fblokptr.

◆ cpucblk_cuncompress()

void cpucblk_cuncompress ( pastix_coefside_t  side,
SolverCblk cblk 
)

Uncompress a single column block from low-rank format to full-rank format.

Parameters
[in]sideDefine which side of the matrix must be initialized.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in,out]cblkThe column block to uncompress.

Definition at line 197 of file cpucblk_ccompress.c.

References blok_rownbr(), cblk_colnbr(), core_clr2ge(), core_clralloc(), core_clrfree(), solver_cblk_s::fblokptr, solver_blok_s::LRblock, PastixLCoef, PastixNoTrans, PastixUCoef, and pastix_lrblock_s::u.

◆ cpucblk_cmemory()

void cpucblk_cmemory ( pastix_coefside_t  side,
SolverMatrix *  solvmtx,
SolverCblk cblk,
pastix_int_t *  orig,
pastix_int_t *  gain 
)

Return the memory gain of the low-rank form over the full-rank form for a single column-block.

This function returns the memory gain in number of elements for a single column block when it is stored in low-rank format compared to a full rank storage.

Parameters
[in]sideDefine which side of the matrix must be initialized.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in]solvmtxThe pointer to the solver structure.
[in]cblkThe column block to study.
[in,out]origThe structure that counts the original cost of the blocks.
[in,out]gainThe structure that counts gain on each type of the blocks.

Definition at line 277 of file cpucblk_ccompress.c.

References cblk_colnbr(), solver_cblk_s::cblktype, solver_cblk_s::fblokptr, and solver_cblk_s::ownerid.

◆ cpucblk_zgeaddsp1d()

int cpucblk_zgeaddsp1d ( const SolverCblk cblk1,
SolverCblk cblk2,
const pastix_complex64_t *  L,
pastix_complex64_t *  Cl,
const pastix_complex64_t *  U,
pastix_complex64_t *  Cu 
)

Add two column blocks together.

Perform the operation: cblk2 <- cblk1 + cblk2 using core_zgeadd().

Parameters
[in]cblk1The pointer to the data structure that describes the panel to add. Next column blok must be accessible through cblk1[1].
[in]cblk2The pointer to the data structure that describes the panel in which we add. Next column blok must be accessible through cblk2[1].
[in]LThe pointer to the lower matrix storing the coefficients of the panel. Must be of size cblk.stride -by- cblk.width
[in,out]ClThe pointer to the lower matrix storing the coefficients of the updated panel. Must be of size cblk.stride -by- cblk.width On exit Cl = Cl + L.
[in]UThe pointer to the upper matrix storing the coefficients of the panel. Must be of size cblk.stride -by- cblk.width. Ignored if NULL.
[in,out]CuThe pointer to the upper matrix storing the coefficients of the updated panel. Must be of size cblk.stride -by- cblk.width On exit Cu = Cu + U.
Return values
PASTIX_SUCCESSon success.

Definition at line 245 of file core_zgeadd.c.

References solver_blok_s::coefind, core_zgeadd(), solver_cblk_s::fblokptr, solver_cblk_s::fcolnum, solver_blok_s::frownum, is_block_inside_fblock(), solver_cblk_s::lcolnum, solver_blok_s::lrownum, PASTIX_SUCCESS, PastixNoTrans, and solver_cblk_s::stride.

◆ cpucblk_zgemmsp()

pastix_fixdbl_t cpucblk_zgemmsp ( pastix_coefside_t  sideA,
pastix_trans_t  trans,
const SolverCblk cblk,
const SolverBlok blok,
SolverCblk fcblk,
const void *  A,
const void *  B,
void *  C,
pastix_complex64_t *  work,
pastix_int_t  lwork,
const pastix_lr_t lowrank 
)

Compute the updates associated to one off-diagonal block.

Parameters
[in]sideASpecify if A and C belong to the lower part, or to the upper part. If sideA == PastixLCoef, the contribution of: (block .. (cblk[1].fblokptr-1)) -by- block is computed and added to C, otherwise the contribution: (block+1 .. (cblk[1].fblokptr-1)) -by- block is computed and added to C. The pointer to the data structure that describes the panel from which we compute the contributions. Next column blok must be accessible through cblk[1].
[in]transSpecify the transposition used for the B matrix. It has to be either PastixTrans or PastixConjTrans.
[in]cblkThe cblk structure to which block belongs to. The A and B pointers must be the coeftab of this column block. Next column blok must be accessible through cblk[1].
[in]blokThe block from which we compute the contributions.
[in,out]fcblkThe pointer to the data structure that describes the panel on which we compute the contributions. The C pointer must be one of the coeftab from this fcblk. Next column blok must be accessible through fcblk[1].
[in]AThe pointer to the correct representation of A.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in]BThe pointer to the correct representation of B.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in,out]CThe pointer to the correct representation of C.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in]workTemporary memory buffer.
[in]lowrankThe structure with low-rank parameters.
Returns
The number of static pivoting during factorization of the diagonal block.

Definition at line 1512 of file core_zgemmsp.c.

References blok_rownbr(), cblk_colnbr(), solver_cblk_s::cblktype, and solver_cblk_s::stride.

◆ cpucblk_ztrsmsp()

void cpucblk_ztrsmsp ( pastix_side_t  side,
pastix_uplo_t  uplo,
pastix_trans_t  trans,
pastix_diag_t  diag,
const SolverCblk cblk,
const void *  A,
void *  C,
const pastix_lr_t lowrank 
)

Compute the updates associated to a column of off-diagonal blocks.

Parameters
[in]sideSpecify whether the A matrix appears on the left or right in the equation. It has to be either PastixLeft or PastixRight.
[in]uploSpecify whether the A matrix is upper or lower triangular. It has to be either PastixUpper or PastixLower.
[in]transSpecify the transposition used for the A matrix. It has to be either PastixTrans or PastixConjTrans.
[in]diagSpecify if the A matrix is unit triangular. It has to be either PastixUnit or PastixNonUnit.
[in]cblkThe cblk structure to which block belongs to. The A and B pointers must be the coeftab of this column block. Next column blok must be accessible through cblk[1].
[in]AThe pointer to the correct representation of A.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in,out]CThe pointer to the correct representation of C.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in]lowrankThe structure with low-rank parameters.

Definition at line 356 of file core_ztrsmsp.c.

References cblk_colnbr(), solver_cblk_s::cblktype, and solver_cblk_s::stride.

Referenced by cpucblk_zgetrfsp1d_panel(), cpucblk_zhetrfsp1d_panel(), cpucblk_zpotrfsp1d_panel(), cpucblk_zpxtrfsp1d_panel(), and cpucblk_zsytrfsp1d_panel().

◆ cpucblk_zscalo()

void cpucblk_zscalo ( pastix_trans_t  trans,
SolverCblk cblk,
void *  dataL,
void *  dataLD 
)

Copy the L term with scaling for the two-terms algorithm.

Performs LD = op(L) * D

Parameters
[in]trans
  • PastixNoTrans: No transpose, op( L ) = L;
  • PastixTrans: Transpose, op( L ) = L;
  • PastixConjTrans: Conjugate Transpose, op( L ) = conj(L).
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in,out]dataLThe pointer to the correct representation of lower part of the data.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in,out]dataLDThe pointer to the correct representation of LD.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.

Definition at line 170 of file core_zscalo.c.

References cblk_colnbr(), solver_cblk_s::cblktype, and solver_cblk_s::fblokptr.

◆ cpublok_zgemmsp()

pastix_fixdbl_t cpublok_zgemmsp ( pastix_trans_t  transB,
const SolverCblk cblk,
SolverCblk fcblk,
pastix_int_t  blok_mk,
pastix_int_t  blok_nk,
pastix_int_t  blok_mn,
const void *  A,
const void *  B,
void *  C,
const pastix_lr_t lowrank 
)

Compute the CPU gemm associated to a couple of off-diagonal blocks.

C_l = C_l - A_l * op(B_s), with B_s = B_l, or B_u or C_u = C_u - A_u * op(B_s), with B_s = B_l, or B_u

Parameters
[in]transBSpecify wheter B should be used as PastixNoTrans, PastixTrans, or PastixConjTrans in the computations.
[in]cblkThe cblk structure to which block A and B belong to. The A and B pointers must be one of the [lu]coeftab of this column block. Next column blok must be accessible through cblk[1].
[in,out]fcblkThe pointer to the data structure that describes the panel on which we compute the contributions. The C pointer must be one of the [lu]coeftab from this fcblk. Next column blok must be accessible through fcblk[1].
[in]blok_mkSpecify the index of the A block in the cblk column. This index is 0-based for the diagonal block.
[in]blok_nkSpecify the index of the B block in the cblk column. This index is 0-based for the diagonal block.
[in]blok_mnSpecify the index of the C block in the fcblk column. This index is 0-based for the diagonal block.
[in]AThe pointer to the correct representation of A.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in]BThe pointer to the correct representation of B.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in]CThe pointer to the correct representation of C.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in]lowrankThe structure with the low-rank parameters.

Definition at line 1655 of file core_zgemmsp.c.

References solver_cblk_s::cblktype.

◆ cpublok_ztrsmsp()

pastix_fixdbl_t cpublok_ztrsmsp ( pastix_side_t  side,
pastix_uplo_t  uplo,
pastix_trans_t  trans,
pastix_diag_t  diag,
const SolverCblk cblk,
pastix_int_t  blok_m,
const void *  A,
void *  C,
const pastix_lr_t lowrank 
)

Compute the updates associated to one off-diagonal block.

Parameters
[in]sideSpecify whether the A matrix appears on the left or right in the equation. It has to be either PastixLeft or PastixRight.
[in]uploSpecify whether the A matrix is upper or lower triangular. It has to be either PastixUpper or PastixLower.
[in]transSpecify the transposition used for the A matrix. It has to be either PastixTrans or PastixConjTrans.
[in]diagSpecify if the A matrix is unit triangular. It has to be either PastixUnit or PastixNonUnit.
[in]cblkThe cblk structure to which block belongs to. The A and B pointers must be the coeftab of this column block. Next column blok must be accessible through cblk[1].
[in]blok_mIndex of the first off-diagonal block in cblk that is solved. The TRSM is also applied to all the folowing blocks which are facing the same diagonal block
[in]AThe pointer to the correct representation of A.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in,out]CThe pointer to the correct representation of C.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in]lowrankThe structure with low-rank parameters.

Definition at line 678 of file core_ztrsmsp.c.

References solver_cblk_s::cblktype.

◆ cpublok_zscalo()

void cpublok_zscalo ( pastix_trans_t  trans,
SolverCblk cblk,
pastix_int_t  blok_m,
const void *  dataA,
const void *  dataD,
void *  dataB 
)

Copy the lower terms of the block with scaling for the two-terms algorithm.

Performs B = op(A) * D

Parameters
[in]trans
  • PastixNoTrans: No transpose, op( A ) = A;
  • PastixTrans: Transpose, op( A ) = A;
  • PastixConjTrans: Conjugate Transpose, op( A ) = conj(A).
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in]blok_mIndex of the off-diagonal block to be solved in the cblk. All blocks facing the same cblk, in the current column block will be solved.
[in]dataAThe pointer to the correct representation of data of A.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in]dataDThe pointer to the correct representation of data of D.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in,out]dataBThe pointer to the correct representation of data of B.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.

Definition at line 315 of file core_zscalo.c.

References blok_rownbr(), cblk_colnbr(), solver_cblk_s::cblktype, and solver_cblk_s::fblokptr.

◆ cpucblk_zgetrfsp1d_getrf()

int cpucblk_zgetrfsp1d_getrf ( SolverMatrix *  solvmtx,
SolverCblk cblk,
void *  dataL,
void *  dataU 
)

Compute the LU factorization of the diagonal block in a panel.

Parameters
[in]solvmtxSolver Matrix structure of the problem
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in,out]dataLThe pointer to the correct representation of the lower part of the data.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in,out]dataUThe pointer to the correct representation of the upper part of the data.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width
  • pastix_lr_block if the block is compressed.
Returns
The number of static pivoting performed during the diagonal block factorization.

Definition at line 217 of file core_zgetrfsp.c.

References solver_cblk_s::cblktype, solver_cblk_s::fcolnum, and solver_cblk_s::lcolnum.

Referenced by cpucblk_zgetrfsp1d_panel().

◆ cpucblk_zgetrfsp1d_panel()

int cpucblk_zgetrfsp1d_panel ( SolverMatrix *  solvmtx,
SolverCblk cblk,
void *  L,
void *  U 
)

Compute the LU factorization of one panel.

Parameters
[in]solvmtxSolver Matrix structure of the problem
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in,out]LThe pointer to the correct representation of the lower part of the data.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in,out]UThe pointer to the correct representation of the upper part of the data.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
Returns
The number of static pivoting performed during the diagonal block factorization.

Definition at line 305 of file core_zgetrfsp.c.

References cpucblk_zgetrfsp1d_getrf(), cpucblk_ztrsmsp(), PastixNonUnit, PastixNoTrans, PastixRight, PastixUnit, and PastixUpper.

Referenced by cpucblk_zgetrfsp1d().

◆ cpucblk_zgetrfsp1d()

int cpucblk_zgetrfsp1d ( SolverMatrix *  solvmtx,
SolverCblk cblk,
pastix_complex64_t *  work,
pastix_int_t  lwork 
)

Perform the LU factorization of a given panel and apply all its updates.

Parameters
[in]solvmtxSolver Matrix structure of the problem
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in]workTemporary memory buffer.
[in]lworkTemporary workspace dimension.
Returns
The number of static pivoting during factorization of the diagonal block.

Definition at line 355 of file core_zgetrfsp.c.

References cblk_getdataL(), cblk_getdataU(), solver_cblk_s::cblktype, cpucblk_zgetrfsp1d_panel(), solver_cblk_s::fblokptr, and solver_blok_s::fcblknm.

◆ cpucblk_zpotrfsp1d_potrf()

int cpucblk_zpotrfsp1d_potrf ( SolverMatrix *  solvmtx,
SolverCblk cblk,
void *  dataL 
)

Compute the Cholesky factorization of the diagonal block in a panel.

Warning
This routine will fail if it discovers a null or negative value on the diagonal during factorization.
Parameters
[in]solvmtxSolver Matrix structure of the problem
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in,out]dataLThe pointer to the correct representation of the lower part of the data.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
Returns
The number of static pivoting performed during the diagonal block factorization.

Definition at line 220 of file core_zpotrfsp.c.

References solver_cblk_s::cblktype, solver_cblk_s::fcolnum, and solver_cblk_s::lcolnum.

Referenced by cpucblk_zpotrfsp1d_panel().

◆ cpucblk_zpotrfsp1d_panel()

int cpucblk_zpotrfsp1d_panel ( SolverMatrix *  solvmtx,
SolverCblk cblk,
void *  L 
)

Compute the Cholesky factorization of one panel.

Parameters
[in]solvmtxSolver Matrix structure of the problem
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in,out]LThe pointer to the correct representation of lower part of the data.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
Returns
The number of static pivoting during factorization of the diagonal block.

Definition at line 292 of file core_zpotrfsp.c.

References cpucblk_zpotrfsp1d_potrf(), cpucblk_ztrsmsp(), PastixConjTrans, PastixLower, PastixNonUnit, and PastixRight.

Referenced by cpucblk_zpotrfsp1d().

◆ cpucblk_zpotrfsp1d()

int cpucblk_zpotrfsp1d ( SolverMatrix *  solvmtx,
SolverCblk cblk,
pastix_complex64_t *  work,
pastix_int_t  lwork 
)

Perform the Cholesky factorization of a given panel and apply all its updates.

Parameters
[in]solvmtxSolver Matrix structure of the problem
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in]workTemporary memory buffer.
[in]lworkTemporary workspace dimension.
Returns
The number of static pivoting during factorization of the diagonal block.

Definition at line 334 of file core_zpotrfsp.c.

References cblk_getdataL(), solver_cblk_s::cblktype, cpucblk_zpotrfsp1d_panel(), solver_cblk_s::fblokptr, and solver_blok_s::fcblknm.

◆ cpucblk_zhetrfsp1d_hetrf()

int cpucblk_zhetrfsp1d_hetrf ( SolverMatrix *  solvmtx,
SolverCblk cblk,
void *  dataL 
)

Computes the LDL^h factorization of the diagonal block in a panel.

Parameters
[in]solvmtxSolver Matrix structure of the problem
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in,out]dataLThe pointer to the correct representation of lower part of the data.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
Returns
The number of static pivoting performed during the diagonal block factorization.

Definition at line 234 of file core_zhetrfsp.c.

References solver_cblk_s::cblktype, solver_cblk_s::fcolnum, and solver_cblk_s::lcolnum.

Referenced by cpucblk_zhetrfsp1d_panel().

◆ cpucblk_zhetrfsp1d_panel()

int cpucblk_zhetrfsp1d_panel ( SolverMatrix *  solvmtx,
SolverCblk cblk,
void *  L,
void *  DLh 
)

Compute the LDL^h factorization of one panel.

Parameters
[in]solvmtxSolver Matrix structure of the problem
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in,out]LThe pointer to the correct representation of lower part of the data.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
[in,out]DLhThe pointer to the correct representation of Dlh matrix (stored in the upper part bu default).
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
Returns
The number of static pivoting during factorization of the diagonal block.

Definition at line 437 of file core_zhetrfsp.c.

References solver_cblk_s::cblktype, cpucblk_zhetrfsp1d_hetrf(), cpucblk_ztrsmsp(), PastixNonUnit, PastixNoTrans, PastixRight, and PastixUpper.

◆ cpucblk_zhetrfsp1d()

int cpucblk_zhetrfsp1d ( SolverMatrix *  solvmtx,
SolverCblk cblk,
pastix_complex64_t *  DLh,
pastix_complex64_t *  work,
pastix_int_t  lwork 
)

Perform the LDL^h factorization of a given panel and apply all its updates.

Parameters
[in]solvmtxSolver Matrix structure of the problem
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in]DLhTemporary memory buffer to store the conjugate transpose of DLh.
[in]workTemporary memory buffer.
[in]lworkTemporary workspace dimension.
Returns
The number of static pivoting during factorization of the diagonal block.

Definition at line 492 of file core_zhetrfsp.c.

References cblk_getdataL(), cblk_getdataU(), and solver_cblk_s::cblktype.

◆ cpucblk_zpxtrfsp1d_pxtrf()

int cpucblk_zpxtrfsp1d_pxtrf ( SolverMatrix *  solvmtx,
SolverCblk cblk,
void *  dataL 
)

Compute the LL^t factorization of the diagonal block in a panel.

Warning
This routine will fail if it discovers a null or negative value on the diagonal during factorization.
Parameters
[in]solvmtxSolver Matrix structure of the problem
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in,out]dataLThe pointer to the correct representation of the lower part the data.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
Returns
The number of static pivoting performed during the diagonal block factorization.

Definition at line 212 of file core_zpxtrfsp.c.

References solver_cblk_s::cblktype, solver_cblk_s::fcolnum, and solver_cblk_s::lcolnum.

Referenced by cpucblk_zpxtrfsp1d_panel().

◆ cpucblk_zpxtrfsp1d_panel()

int cpucblk_zpxtrfsp1d_panel ( SolverMatrix *  solvmtx,
SolverCblk cblk,
void *  L 
)

Compute the LL^t factorization of one panel.

Parameters
[in]solvmtxSolver Matrix structure of the problem
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in,out]LThe pointer to the correct representation of the lower part the data.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
Returns
The number of static pivoting during factorization of the diagonal block.

Definition at line 284 of file core_zpxtrfsp.c.

References cpucblk_zpxtrfsp1d_pxtrf(), cpucblk_ztrsmsp(), PastixLower, PastixNonUnit, PastixRight, and PastixTrans.

Referenced by cpucblk_zpxtrfsp1d().

◆ cpucblk_zpxtrfsp1d()

int cpucblk_zpxtrfsp1d ( SolverMatrix *  solvmtx,
SolverCblk cblk,
pastix_complex64_t *  work,
pastix_int_t  lwork 
)

Perform the LL^t factorization of a given panel and apply all its updates.

Parameters
[in]solvmtxSolver Matrix structure of the problem
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in]workTemporary memory buffer.
[in]lworkTemporary workspace dimension.
Returns
The number of static pivoting during factorization of the diagonal block.

Definition at line 326 of file core_zpxtrfsp.c.

References cblk_getdataL(), solver_cblk_s::cblktype, cpucblk_zpxtrfsp1d_panel(), solver_cblk_s::fblokptr, and solver_blok_s::fcblknm.

◆ cpucblk_zsytrfsp1d_sytrf()

int cpucblk_zsytrfsp1d_sytrf ( SolverMatrix *  solvmtx,
SolverCblk cblk,
void *  dataL 
)

Computes the LDL^t factorization of the diagonal block in a panel.

Parameters
[in]solvmtxSolver Matrix structure of the problem
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in,out]dataLThe pointer to the correct representation of lower part of the data.
  • coeftab if the block is in full rank. Must be of size cblk.stride -by- cblk.width.
  • pastix_lr_block if the block is compressed.
Returns
The number of static pivoting performed during the diagonal block factorization.

Definition at line 232 of file core_zsytrfsp.c.

References solver_cblk_s::cblktype, solver_cblk_s::fcolnum, and solver_cblk_s::lcolnum.

Referenced by cpucblk_zsytrfsp1d_panel().

◆ cpucblk_zsytrfsp1d_panel()

int cpucblk_zsytrfsp1d_panel ( SolverMatrix *  solvmtx,
SolverCblk cblk,
void *  L,
void *  DLt 
)

Compute the LDL^t factorization of one panel.

Parameters
[in]solvmtxSolver Matrix structure of the problem
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in,out]LThe pointer to the matrix storing the coefficients of the panel. Must be of size cblk.stride -by- cblk.width
[in,out]DLtThe pointer to the upper matrix storing the coefficients the temporary DL^t product. Must be of size cblk.stride -by- cblk.width
Returns
The number of static pivoting during factorization of the diagonal block.

Definition at line 432 of file core_zsytrfsp.c.

References solver_cblk_s::cblktype, cpucblk_zsytrfsp1d_sytrf(), cpucblk_ztrsmsp(), PastixNonUnit, PastixNoTrans, PastixRight, and PastixUpper.

◆ cpucblk_zsytrfsp1d()

int cpucblk_zsytrfsp1d ( SolverMatrix *  solvmtx,
SolverCblk cblk,
pastix_complex64_t *  DLt,
pastix_complex64_t *  work,
pastix_int_t  lwork 
)

Perform the LDL^t factorization of a given panel and apply all its updates.

Parameters
[in]solvmtxSolver Matrix structure of the problem
[in]cblkPointer to the structure representing the panel to factorize in the cblktab array. Next column blok must be accessible through cblk[1].
[in]DLtTemporary memory buffer to store the transpose of DLt.
[in]workTemporary memory buffer.
[in]lworkTemporary workspace dimension.
Returns
The number of static pivoting during factorization of the diagonal block.

Definition at line 487 of file core_zsytrfsp.c.

References cblk_getdataL(), cblk_getdataU(), and solver_cblk_s::cblktype.

◆ cpucblk_zalloc_lrws()

void cpucblk_zalloc_lrws ( const SolverCblk cblk,
pastix_lrblock_t lrblok,
pastix_complex64_t *  ws 
)

Initialize lrblock structure from a workspace from all blocks of the cblk associated.

The lrblock structure must be allocated before.

Parameters
[in,out]cblkThe column block associated to the initialization.
[in]lrblokThe structure blok to initialize. Must be allocated before.
[in]wsThe workspace associated with the data that will be used for initialize lrblok.

Definition at line 96 of file cpucblk_zinit.c.

References cblk_colnbr(), solver_cblk_s::cblktype, and solver_cblk_s::fblokptr.

◆ cpucblk_zalloc_lr()

void cpucblk_zalloc_lr ( pastix_coefside_t  side,
SolverCblk cblk,
int  rkmax 
)

Allocate the cblk structure to store the coefficient.

When stored in low-rank format, the data pointer in the low-rank structure of each block must be initialized. This routines performs only the allocation and is thread-safe if called in parallel on the Lower and upper part.

Parameters
[in]sideDefine which side of the matrix must be initialized.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in,out]cblkThe column block to allocate.

Definition at line 143 of file cpucblk_zinit.c.

References cblk_colnbr(), solver_cblk_s::cblktype, and solver_cblk_s::fblokptr.

◆ cpucblk_zalloc_fr()

void cpucblk_zalloc_fr ( pastix_coefside_t  side,
SolverCblk cblk 
)

Allocate the cblk structure to store the coefficient.

When stored in low-rank format, the data pointer in the low-rank structure of each block must be initialized. This routines performs only the allocation and is thread-safe if called in parallel on the Lower and upper part.

Parameters
[in]sideDefine which side of the matrix must be initialized.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in,out]cblkThe column block to allocate.

Definition at line 217 of file cpucblk_zinit.c.

References cblk_colnbr(), solver_cblk_s::lcoeftab, PastixLCoef, solver_cblk_s::stride, and solver_cblk_s::ucoeftab.

◆ cpucblk_zalloc()

void cpucblk_zalloc ( pastix_coefside_t  side,
SolverCblk cblk 
)

Allocate the cblk structure to store the coefficient.

When stored in low-rank format, the data pointer in the low-rank structure of each block must be initialized. This routines performs only the allocation and is thread-safe if called in parallel on the Lower and upper part.

Parameters
[in]sideDefine which side of the matrix must be initialized.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in,out]cblkThe column block to allocate.

Definition at line 264 of file cpucblk_zinit.c.

References solver_cblk_s::cblktype, solver_cblk_s::lcoeftab, PastixLCoef, PastixUCoef, and solver_cblk_s::ucoeftab.

Referenced by cpucblk_zinit().

◆ cpucblk_zfree()

void cpucblk_zfree ( pastix_coefside_t  side,
SolverCblk cblk 
)

Free the cblk structure that store the coefficient.

This routines performs the free and is thread-safe if called in parallel on the Lower and upper part.

Parameters
[in]sideDefine which side of the matrix must be initialized.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in,out]cblkThe column block to free.

Definition at line 317 of file cpucblk_zinit.c.

References solver_cblk_s::cblktype, solver_cblk_s::lcoeftab, and PastixUCoef.

◆ cpucblk_zfillin()

void cpucblk_zfillin ( pastix_coefside_t  side,
const SolverMatrix *  solvmtx,
const pastix_bcsc_t bcsc,
pastix_int_t  itercblk 
)

Initialize the coeftab structure from the internal bcsc.

Parameters
[in]sideDefine which side of the matrix must be initialized.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in]solvmtxPaStiX structure to store numerical data and flags
[in]bcscThe internal bcsc structure that hold the graph with permutation stored by cblk.
[in]itercblkThe index of the cblk to fill in both bcsc and solvmtx structures.

Definition at line 604 of file cpucblk_zinit.c.

Referenced by cpucblk_zinit().

◆ cpucblk_zinit()

void cpucblk_zinit ( pastix_coefside_t  side,
const SolverMatrix *  solvmtx,
const pastix_bcsc_t bcsc,
pastix_int_t  itercblk,
const char *  directory 
)

Fully initialize a single cblk.

The cblk is allocated, intialized from the bcsc, and compressed if necessary.

Parameters
[in]sideDefine which side of the matrix must be initialized.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in]solvmtxThe solver matrix data structure.
[in]bcscThe internal block CSC structure to fill-in the matrix.
[in]itercblkThe index of the cblk to initialize.
[in,out]directoryThe pointer to the temporary directory where to store the output files. Used only if PASTIX_DEBUG_DUMP_COEFTAB is defined.

Try to compress the cblk if needs to be compressed

Definition at line 251 of file coeftab_zinit.c.

References cpucblk_zalloc(), cpucblk_zdump(), cpucblk_zfillin(), solver_cblk_s::ctrbcnt, pastix_fopenw(), PastixLCoef, and PastixUCoef.

◆ cpucblk_zgetschur()

void cpucblk_zgetschur ( const SolverCblk cblk,
int  upper_part,
pastix_complex64_t *  S,
pastix_int_t  lds 
)

Extract a cblk panel of the Schur complement to a dense lapack form.

Parameters
[in]cblkThe column block to extract in the Schur array
[in]upper_partIf true, the upper part is also extracted in S.
[in,out]SThe pointer to the top of the column of the cblk in the Schur array. On exit, the computed coefficient are copy to this array.
[in]ldsThe leading dimension of the S array.

Definition at line 178 of file cpucblk_zschur.c.

References solver_cblk_s::cblktype.

◆ cpucblk_zdump()

void cpucblk_zdump ( pastix_coefside_t  side,
const SolverCblk cblk,
FILE *  stream 
)

Dump a single column block into a FILE in a human readale format.

All non-zeroes coefficients are dumped in the format: i j val with one value per row.

Parameters
[in]sideDefine which side of the cblk must be printed.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
[in]cblkThe column block to dump into the file.
[in,out]streamThe FILE structure opened in write mode.

Definition at line 51 of file coeftab_zinit.c.

References solver_cblk_s::cblktype, solver_cblk_s::lcoeftab, PastixUCoef, and solver_cblk_s::ucoeftab.

Referenced by cpucblk_zinit().

◆ cpucblk_zdiff()

int cpucblk_zdiff ( pastix_coefside_t  side,
const SolverCblk cblkA,
SolverCblk cblkB 
)

Compare two column blocks in full-rank format.

The second cblk is overwritten by the difference of the two column blocks. The frobenius norm of the difference is computed and the functions returns 0 if the result: || B - A || / ( || A || * eps )

is below 10. Otherwise, an error message is printed and 1 is returned.

Parameters
[in]sideDefine which side of the cblk must be tested.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in]cblkAThe column block of the A matrix.
[in,out]cblkBThe column block of the B matrix that matches the A matrix in stucture. On exit, cblkB coefficient arrays are overwritten by the result of (B-A).
Returns
0 if the test is passed, >= 0 otherwise.

Definition at line 63 of file cpucblk_zdiff.c.

References cblk_colnbr(), core_zgeadd(), solver_cblk_s::lcoeftab, PastixLCoef, PastixNoTrans, PastixUCoef, solver_cblk_s::stride, and solver_cblk_s::ucoeftab.

Referenced by coeftab_zdiff().

◆ cpucblk_zadd()

void cpucblk_zadd ( pastix_coefside_t  side,
double  alpha,
const SolverCblk cblkA,
SolverCblk cblkB,
const pastix_lr_t lowrank 
)

Add two column bloks in full rank format.

The second cblk is overwritten by the sum of the two column blocks. B <- alpha * A + B

Parameters
[in]sideDefine which side of the cblk must be tested.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
[in]alphaThe scalar alpha
[in]cblkAThe column block of the A matrix.
[in,out]cblkBThe column block of the B matrix On exit, cblkB coefficient arrays are overwritten by the result of alpha * A + B.

Definition at line 358 of file cpucblk_zadd.c.

References cblk_colnbr(), solver_cblk_s::cblktype, PastixLUCoef, and solver_cblk_s::stride.

◆ cpucblk_zincoming_deps()

int cpucblk_zincoming_deps ( int  rank,
pastix_coefside_t  side,
SolverMatrix *  solvmtx,
SolverCblk cblk 
)

Wait for incoming dependencies, and return when cblk->ctrbcnt has reached 0.

Parameters
[in]mt_flag
  • 0, the function is called in a sequential environment, and we can wait on each communication.
  • 1, the function is called in a multi-threaded environment, and we need to test the communication to avoid dead locks.
[in]sideDefine which side of the cblk must be released.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in,out]solvmtxThe solver matrix structure.
[in,out]cblkThe column block that contribute to fcblk.
Returns
1 if the cblk is a fanin, 0 otherwise

Definition at line 499 of file cpucblk_zmpi_coeftab.c.

References solver_cblk_s::cblktype.

◆ cpucblk_zrelease_deps()

void cpucblk_zrelease_deps ( pastix_coefside_t  side,
SolverMatrix *  solvmtx,
const SolverCblk cblk,
SolverCblk fcbk 
)

Release the dependencies of the given cblk after an update.

Parameters
[in]sideDefine which side of the cblk must be released.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in,out]solvmtxThe solver matrix structure.
[in]cblkThe column block that contribute to fcblk.
[in,out]fcbkThe facing column block that is updated by cblk.

Definition at line 558 of file cpucblk_zmpi_coeftab.c.

References solver_cblk_s::cblktype, and solver_cblk_s::ctrbcnt.

◆ cpucblk_zrequest_cleanup()

void cpucblk_zrequest_cleanup ( pastix_coefside_t  side,
pastix_int_t  sched,
SolverMatrix *  solvmtx 
)

Waitall routine for current cblk request.

It may be possible that some cblk will not be deallocated with the static scheduler. So a cleanup may be necessary.

Parameters
[in]sideDefine which side of the cblk must be tested.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in]schedDefine which sched is used
  • PastixSchedSequential if sequential
  • PastixSchedStatic if multi-threaded static scheduler
  • PastixSchedDynamic if multi-threaded dynamic scheduler No other scheduler is supported.
[in,out]solvmtxThe solver matrix structure.

Definition at line 609 of file cpucblk_zmpi_coeftab.c.

References solver_cblk_s::cblktype, PastixSchedDynamic, PastixSchedSequential, and PastixSchedStatic.

◆ cpucblk_zsend_rhs_forward()

void cpucblk_zsend_rhs_forward ( const SolverMatrix *  solvmtx,
SolverCblk cblk,
pastix_complex64_t *  b 
)

Send the rhs associated to a cblk->lcolidx to the remote node.

Parameters
[in]solvmtxThe solver matrix holding the communicator.
[in]cblkThe cblk which defines the part to sent.
[in]bThe rhs that will be sent to the cblk->ownerid

Definition at line 42 of file cpucblk_zmpi_rhs.c.

References cblk_colnbr(), and solver_cblk_s::cblktype.

◆ cpucblk_zrecv_rhs_forward()

void cpucblk_zrecv_rhs_forward ( const SolverMatrix *  solvmtx,
SolverCblk cblk,
pastix_complex64_t *  work,
pastix_int_t  nrhs,
pastix_complex64_t *  b,
pastix_int_t  ldb 
)

Receive the rhs associated to a cblk->lcolidx to the remote node.

Parameters
[in]solvmtxThe solver matrix holding the communicator.
[in]cblkThe cblk which may define the part to sent.
[in,out]workThe temporary buffer to receive the remote data
[in,out]bThe rhs that will be updated by the reception.
[in]ldbThe leading dimension of the matrix b.

Definition at line 195 of file cpucblk_zmpi_rhs.c.

References cblk_colnbr(), and solver_cblk_s::cblktype.

◆ cpucblk_zsend_rhs_backward()

void cpucblk_zsend_rhs_backward ( const SolverMatrix *  solvmtx,
SolverCblk cblk,
pastix_complex64_t *  b 
)

Send the rhs associated to a cblk->lcolidx to the remote node.

Parameters
[in]solvmtxThe solver matrix holding the communicator.
[in]cblkThe cblk which defines the part to sent.
[in]bThe rhs that will be sent to the cblk->ownerid

Definition at line 89 of file cpucblk_zmpi_rhs.c.

References cblk_colnbr(), and solver_cblk_s::cblktype.

◆ cpucblk_zrecv_rhs_backward()

void cpucblk_zrecv_rhs_backward ( const SolverMatrix *  solvmtx,
SolverCblk cblk,
pastix_complex64_t *  b 
)

Receive the rhs associated to a cblk->lcolidx to the remote node.

Parameters
[in]solvmtxThe solver matrix holding the communicator.
[in]cblkThe cblk which may define the part to sent.
[in,out]bThe rhs that will be receive from the cblk->ownerid.

Definition at line 136 of file cpucblk_zmpi_rhs.c.

References cblk_colnbr(), and solver_cblk_s::cblktype.

◆ cpublok_zcompress()

pastix_fixdbl_t cpublok_zcompress ( const pastix_lr_t lowrank,
pastix_int_t  M,
pastix_int_t  N,
pastix_lrblock_t lrA 
)

Compress a single block from full-rank to low-rank format.

The compression to low-rank format is parameterized by the input information stored in the low-rank structure.

Parameters
[in]lowrankThe pointer to the low-rank structure describing the lo-rank compression parameters.
[in]MThe number of rows in the block
[in]NThe number of columns in the block
[in,out]lrAThe block to compress. On input, it points to a full-rank matrix. On output, if possible the matrix is compressed in block low-rank format.
Returns
The number of flops used to compress the block.

Definition at line 57 of file cpucblk_zcompress.c.

References pastix_lr_s::core_ge2lr, pastix_lrblock_s::rk, pastix_lr_s::tolerance, pastix_lrblock_s::u, pastix_lr_s::use_reltol, and pastix_lrblock_s::v.

◆ cpucblk_zcompress()

pastix_int_t cpucblk_zcompress ( const SolverMatrix *  solvmtx,
pastix_coefside_t  side,
int  max_ilulvl,
SolverCblk cblk 
)

Compress a single column block from full-rank to low-rank format.

The compression to low-rank format is parameterized by the input information stored in the low-rank structure.

Parameters
[in]solvmtxThe pointer to the solver structure.
[in]sideDefine which side of the matrix must be initialized.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in,out]cblkThe column block to compress.
Returns
The memory gain resulting from the compression to low-rank format in number of elements.

Definition at line 110 of file cpucblk_zcompress.c.

References cblk_colnbr(), solver_cblk_s::cblktype, and solver_cblk_s::fblokptr.

◆ cpucblk_zuncompress()

void cpucblk_zuncompress ( pastix_coefside_t  side,
SolverCblk cblk 
)

Uncompress a single column block from low-rank format to full-rank format.

Parameters
[in]sideDefine which side of the matrix must be initialized.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in,out]cblkThe column block to uncompress.

Definition at line 197 of file cpucblk_zcompress.c.

References blok_rownbr(), cblk_colnbr(), core_zlr2ge(), core_zlralloc(), core_zlrfree(), solver_cblk_s::fblokptr, solver_blok_s::LRblock, PastixLCoef, PastixNoTrans, PastixUCoef, and pastix_lrblock_s::u.

◆ cpucblk_zmemory()

void cpucblk_zmemory ( pastix_coefside_t  side,
SolverMatrix *  solvmtx,
SolverCblk cblk,
pastix_int_t *  orig,
pastix_int_t *  gain 
)

Return the memory gain of the low-rank form over the full-rank form for a single column-block.

This function returns the memory gain in number of elements for a single column block when it is stored in low-rank format compared to a full rank storage.

Parameters
[in]sideDefine which side of the matrix must be initialized.
  • PastixLCoef if lower part only
  • PastixUCoef if upper part only
  • PastixLUCoef if both sides.
[in]solvmtxThe pointer to the solver structure.
[in]cblkThe column block to study.
[in,out]origThe structure that counts the original cost of the blocks.
[in,out]gainThe structure that counts gain on each type of the blocks.

Definition at line 277 of file cpucblk_zcompress.c.

References cblk_colnbr(), solver_cblk_s::cblktype, solver_cblk_s::fblokptr, and solver_cblk_s::ownerid.