MAGMA  2.7.1
Matrix Algebra for GPU and Multicore Architectures
 All Classes Files Functions Friends Groups Pages
double precision

Functions

magma_int_t magma_dresidual (magma_d_matrix A, magma_d_matrix b, magma_d_matrix x, double *res, magma_queue_t queue)
 Computes the residual ||b-Ax|| for a solution approximation x. More...
 
magma_int_t magma_dresidual_slice (magma_int_t start, magma_int_t end, magma_d_matrix A, magma_d_matrix b, magma_d_matrix x, double *res, magma_queue_t queue)
 Computes the residual r=||b-Ax|| for the slice r(start:end) for a solution approximation x. More...
 
magma_int_t magma_dresidualvec (magma_d_matrix A, magma_d_matrix b, magma_d_matrix x, magma_d_matrix *r, double *res, magma_queue_t queue)
 Computes the residual r = b-Ax for a solution approximation x. More...
 
magma_int_t magma_d_precond (magma_d_matrix A, magma_d_matrix b, magma_d_matrix *x, magma_d_preconditioner *precond, magma_queue_t queue)
 For a given input matrix A and vectors x, y and the preconditioner parameters, the respective preconditioner is chosen. More...
 
magma_int_t magma_d_precondsetup (magma_d_matrix A, magma_d_matrix b, magma_d_solver_par *solver, magma_d_preconditioner *precond, magma_queue_t queue)
 For a given input matrix M and vectors x, y and the preconditioner parameters, the respective preconditioner is preprocessed. More...
 
magma_int_t magma_d_applyprecond (magma_d_matrix A, magma_d_matrix b, magma_d_matrix *x, magma_d_preconditioner *precond, magma_queue_t queue)
 For a given input matrix A and vectors x, y and the preconditioner parameters, the respective preconditioner is applied. More...
 
magma_int_t magma_d_applyprecond_left (magma_trans_t trans, magma_d_matrix A, magma_d_matrix b, magma_d_matrix *x, magma_d_preconditioner *precond, magma_queue_t queue)
 For a given input matrix A and vectors x, y and the preconditioner parameters, the respective left preconditioner is applied. More...
 
magma_int_t magma_d_applyprecond_right (magma_trans_t trans, magma_d_matrix A, magma_d_matrix b, magma_d_matrix *x, magma_d_preconditioner *precond, magma_queue_t queue)
 For a given input matrix A and vectors x, y and the preconditioner parameters, the respective right-preconditioner is applied. More...
 
magma_int_t magma_d_solver (magma_d_matrix A, magma_d_matrix b, magma_d_matrix *x, magma_dopts *zopts, magma_queue_t queue)
 This is an interface that allows to use any iterative solver on the linear system Ax = b. More...
 
magma_int_t magma_dapplycustomprecond_l (magma_d_matrix b, magma_d_matrix *x, magma_d_preconditioner *precond, magma_queue_t queue)
 This is an interface to the left solve for any custom preconditioner. More...
 
magma_int_t magma_dapplycustomprecond_r (magma_d_matrix b, magma_d_matrix *x, magma_d_preconditioner *precond, magma_queue_t queue)
 This is an interface to the right solve for any custom preconditioner. More...
 
magma_int_t magma_dcsrsplit (magma_int_t offset, magma_int_t bsize, magma_d_matrix A, magma_d_matrix *D, magma_d_matrix *R, magma_queue_t queue)
 Splits a CSR matrix into two matrices, one containing the diagonal blocks with the diagonal element stored first, one containing the rest of the original matrix. More...
 
magma_int_t magma_ddomainoverlap (magma_index_t num_rows, magma_int_t *num_indices, magma_index_t *rowptr, magma_index_t *colidx, magma_index_t *x, magma_queue_t queue)
 Generates the update list. More...
 
magma_int_t magma_dmfree (magma_d_matrix *A, magma_queue_t queue)
 Free the memory of a magma_d_matrix. More...
 
magma_int_t magma_dprecondfree (magma_d_preconditioner *precond_par, magma_queue_t queue)
 Free a preconditioner. More...
 
magma_int_t magma_dmprepare_batched (magma_uplo_t uplotype, magma_trans_t transtype, magma_diag_t diagtype, magma_d_matrix L, magma_d_matrix LC, magma_index_t *sizes, magma_index_t *locations, double *trisystems, double *rhs, magma_queue_t queue)
 Takes a sparse matrix and generates an array containing the sizes of the different systems an array containing the indices with the locations in the sparse matrix where the data comes from and goes back to an array containing all the sparse triangular systems. More...
 
magma_int_t magma_dmtrisolve_batched (magma_uplo_t uplotype, magma_trans_t transtype, magma_diag_t diagtype, magma_d_matrix L, magma_d_matrix LC, magma_index_t *sizes, magma_index_t *locations, double *trisystems, double *rhs, magma_queue_t queue)
 Does all triangular solves. More...
 
magma_int_t magma_dmbackinsert_batched (magma_uplo_t uplotype, magma_trans_t transtype, magma_diag_t diagtype, magma_d_matrix *M, magma_index_t *sizes, magma_index_t *locations, double *trisystems, double *rhs, magma_queue_t queue)
 Inserts the values into the preconditioner matrix. More...
 
magma_int_t magma_dmiluspai_sizecheck (magma_d_matrix A, magma_index_t batchsize, magma_index_t *maxsize, magma_queue_t queue)
 Checks for a matrix whether the batched ISAI works for a given thread-block size. More...
 
magma_int_t magma_dmisai_blockstruct (magma_int_t n, magma_int_t bs, magma_int_t offs, magma_uplo_t uplotype, magma_d_matrix *A, magma_queue_t queue)
 Generates a block-diagonal sparsity pattern with block-size bs. More...
 
magma_int_t magma_dmatrix_cup (magma_d_matrix A, magma_d_matrix B, magma_d_matrix *U, magma_queue_t queue)
 Generates a matrix U = A B. More...
 
magma_int_t magma_dmatrix_cap (magma_d_matrix A, magma_d_matrix B, magma_d_matrix *U, magma_queue_t queue)
 Generates a matrix with entries being in both matrices: U = A B. More...
 
magma_int_t magma_dmatrix_negcap (magma_d_matrix A, magma_d_matrix B, magma_d_matrix *U, magma_queue_t queue)
 Generates a list of matrix entries being part of A but not of B. More...
 
magma_int_t magma_dmatrix_tril_negcap (magma_d_matrix A, magma_d_matrix B, magma_d_matrix *U, magma_queue_t queue)
 Generates a list of matrix entries being part of tril(A) but not of B. More...
 
magma_int_t magma_dmatrix_triu_negcap (magma_d_matrix A, magma_d_matrix B, magma_d_matrix *U, magma_queue_t queue)
 Generates a matrix with entries being part of triu(A) but not of B. More...
 
magma_int_t magma_dmatrix_addrowindex (magma_d_matrix *A, magma_queue_t queue)
 Adds to a CSR matrix an array containing the rowindexes. More...
 
magma_int_t magma_dcsrcoo_transpose (magma_d_matrix A, magma_d_matrix *B, magma_queue_t queue)
 Transposes a matrix that already contains rowidx. More...
 
magma_int_t magma_dmatrix_createrowptr (magma_int_t n, magma_index_t *row, magma_queue_t queue)
 This function generates a rowpointer out of a row-wise element count in parallel. More...
 
magma_int_t magma_dmatrix_swap (magma_d_matrix *A, magma_d_matrix *B, magma_queue_t queue)
 Swaps two matrices. More...
 
magma_int_t magma_dmatrix_tril (magma_d_matrix A, magma_d_matrix *L, magma_queue_t queue)
 Extracts the lower triangular of a matrix: L = tril(A). More...
 
magma_int_t magma_dmatrix_triu (magma_d_matrix A, magma_d_matrix *U, magma_queue_t queue)
 Extracts the lower triangular of a matrix: U = triu(A). More...
 
magma_int_t magma_dmatrix_abssum (magma_d_matrix A, double *sum, magma_queue_t queue)
 Computes the sum of the absolute values in a matrix. More...
 
magma_int_t magma_dcsr_sort (magma_d_matrix *A, magma_queue_t queue)
 SOrts the elements in a CSR matrix for increasing column index. More...
 
magma_int_t magma_drowentries (magma_d_matrix *A, magma_queue_t queue)
 Checks the maximal number of nonzeros in a row of matrix A. More...
 
magma_int_t magma_ddiameter (magma_d_matrix *A, magma_queue_t queue)
 Computes the diameter of a sparse matrix and stores the value in diameter. More...
 
magma_int_t magma_d_csr_compressor (double **val, magma_index_t **row, magma_index_t **col, double **valn, magma_index_t **rown, magma_index_t **coln, magma_int_t *n, magma_queue_t queue)
 Helper function to compress CSR containing zero-entries. More...
 
magma_int_t magma_dmconvert (magma_d_matrix A, magma_d_matrix *B, magma_storage_t old_format, magma_storage_t new_format, magma_queue_t queue)
 Converter between different sparse storage formats. More...
 
magma_int_t magma_dmcsrcompressor (magma_d_matrix *A, magma_queue_t queue)
 Removes zeros in a CSR matrix. More...
 
magma_int_t magma_dcsrset (magma_int_t m, magma_int_t n, magma_index_t *row, magma_index_t *col, double *val, magma_d_matrix *A, magma_queue_t queue)
 Passes a CSR matrix to MAGMA. More...
 
magma_int_t magma_dcsrget (magma_d_matrix A, magma_int_t *m, magma_int_t *n, magma_index_t **row, magma_index_t **col, double **val, magma_queue_t queue)
 Passes a MAGMA matrix to CSR structure. More...
 
magma_int_t magma_dcsrset_gpu (magma_int_t m, magma_int_t n, magmaIndex_ptr row, magmaIndex_ptr col, magmaDouble_ptr val, magma_d_matrix *A, magma_queue_t queue)
 Passes a CSR matrix to MAGMA (located on DEV). More...
 
magma_int_t magma_dcsrget_gpu (magma_d_matrix A, magma_int_t *m, magma_int_t *n, magmaIndex_ptr *row, magmaIndex_ptr *col, magmaDouble_ptr *val, magma_queue_t queue)
 Passes a MAGMA matrix to CSR structure (located on DEV). More...
 
magma_int_t magma_dmdiagdom (magma_d_matrix M, double *min_dd, double *max_dd, double *avg_dd, magma_queue_t queue)
 This routine takes a CSR matrix and computes the average diagonal dominance. More...
 
magma_int_t magma_dmbdiagdom (magma_d_matrix M, magma_d_matrix blocksizes, double *min_dd, double *max_dd, double *avg_dd, magma_queue_t queue)
 This routine takes a CSR matrix and computes the average block-diagonal dominance. More...
 
magma_int_t magma_dmdiff (magma_d_matrix A, magma_d_matrix B, real_Double_t *res, magma_queue_t queue)
 Computes the Frobenius norm of the difference between the CSR matrices A and B. More...
 
magma_int_t magma_dmfrobenius (magma_d_matrix A, magma_d_matrix B, magma_d_matrix S, double *norm, magma_queue_t queue)
 Computes the Frobenius norm || A - B ||_S on the sparsity pattern of S. More...
 
magma_int_t magma_dmgenerator (magma_int_t n, magma_int_t offdiags, magma_index_t *diag_offset, double *diag_vals, magma_d_matrix *A, magma_queue_t queue)
 Generate a symmetric n x n CSR matrix for a stencil. More...
 
magma_int_t magma_dm_27stencil (magma_int_t n, magma_d_matrix *A, magma_queue_t queue)
 Generate a 27-point stencil for a 3D FD discretization. More...
 
magma_int_t magma_dm_5stencil (magma_int_t n, magma_d_matrix *A, magma_queue_t queue)
 Generate a 5-point stencil for a 2D FD discretization. More...
 
magma_int_t magma_dsymbilu (magma_d_matrix *A, magma_int_t levels, magma_d_matrix *L, magma_d_matrix *U, magma_queue_t queue)
 This routine performs a symbolic ILU factorization. More...
 
magma_int_t read_d_csr_from_mtx (magma_storage_t *type, magma_location_t *location, magma_int_t *n_row, magma_int_t *n_col, magma_int_t *nnz, double **val, magma_index_t **row, magma_index_t **col, const char *filename, magma_queue_t queue)
 Reads in a matrix stored in coo format from a Matrix Market (.mtx) file and converts it into CSR format. More...
 
magma_int_t magma_dwrite_csr_mtx (magma_d_matrix A, magma_order_t MajorType, const char *filename, magma_queue_t queue)
 Writes a CSR matrix to a file using Matrix Market format. More...
 
magma_int_t magma_dprint_csr_mtx (magma_int_t n_row, magma_int_t n_col, magma_int_t nnz, double **val, magma_index_t **row, magma_index_t **col, magma_order_t MajorType, magma_queue_t queue)
 Prints a CSR matrix in Matrix Market format. More...
 
magma_int_t magma_dprint_csr (magma_int_t n_row, magma_int_t n_col, magma_int_t nnz, double **val, magma_index_t **row, magma_index_t **col, magma_queue_t queue)
 Prints a CSR matrix in CSR format. More...
 
magma_int_t magma_dprint_matrix (magma_d_matrix A, magma_queue_t queue)
 Prints a sparse matrix in CSR format. More...
 
magma_int_t magma_d_csr_mtx (magma_d_matrix *A, const char *filename, magma_queue_t queue)
 Reads in a matrix stored in coo format from a Matrix Market (.mtx) file and converts it into CSR format. More...
 
magma_int_t magma_d_csr_mtxsymm (magma_d_matrix *A, const char *filename, magma_queue_t queue)
 Reads in a SYMMETRIC matrix stored in coo format from a Matrix Market (.mtx) file and converts it into CSR format. More...
 
magma_int_t magma_dmlumerge (magma_d_matrix L, magma_d_matrix U, magma_d_matrix *A, magma_queue_t queue)
 Takes an strictly lower triangular matrix L and an upper triangular matrix U and merges them into a matrix A containing the upper and lower triangular parts. More...
 
magma_int_t magma_dmscale (magma_d_matrix *A, magma_scale_t scaling, magma_queue_t queue)
 Scales a matrix. More...
 
magma_int_t magma_dmscale_matrix_rhs (magma_d_matrix *A, magma_d_matrix *b, magma_d_matrix *scaling_factors, magma_scale_t scaling, magma_queue_t queue)
 Scales a matrix and a right hand side vector of a Ax = b system. More...
 
magma_int_t magma_dmdiagadd (magma_d_matrix *A, double add, magma_queue_t queue)
 Adds a multiple of the Identity matrix to a matrix: A = A+add * I. More...
 
magma_int_t magma_dmscale_generate (magma_int_t n, magma_scale_t *scaling, magma_side_t *side, magma_d_matrix *A, magma_d_matrix *scaling_factors, magma_queue_t queue)
 Generates n vectors of scaling factors from the A matrix and stores them in the factors matrix as column vectors in column major ordering. More...
 
magma_int_t magma_dmscale_apply (magma_int_t n, magma_side_t *side, magma_d_matrix *scaling_factors, magma_d_matrix *A, magma_queue_t queue)
 Applies n diagonal scaling matrices to a matrix A; n=[1,2], factor[i] is applied to side[i] of the matrix. More...
 
magma_int_t magma_ddimv (magma_d_matrix *vecA, magma_d_matrix *vecB, magma_queue_t queue)
 Multiplies a diagonal matrix (vecA) and a vector (vecB). More...
 
magma_int_t magma_dmshrink (magma_d_matrix A, magma_d_matrix *B, magma_queue_t queue)
 Shrinks a non-square matrix (m < n) to the smaller dimension. More...
 
magma_int_t magma_dmslice (magma_int_t num_slices, magma_int_t slice, magma_d_matrix A, magma_d_matrix *B, magma_d_matrix *ALOC, magma_d_matrix *ANLOC, magma_index_t *comm_i, double *comm_v, magma_int_t *start, magma_int_t *end, magma_queue_t queue)
 Takes a matrix and extracts a slice for solving the system in parallel: More...
 
magma_int_t magma_dmsupernodal (magma_int_t *max_bs, magma_d_matrix A, magma_d_matrix *S, magma_queue_t queue)
 Generates a block-diagonal sparsity pattern with block-size bs. More...
 
magma_int_t magma_dmvarsizeblockstruct (magma_int_t n, magma_int_t *bs, magma_int_t bsl, magma_uplo_t uplotype, magma_d_matrix *A, magma_queue_t queue)
 Generates a block-diagonal sparsity pattern with variable block-size. More...
 
magma_int_t magma_dmtransfer (magma_d_matrix A, magma_d_matrix *B, magma_location_t src, magma_location_t dst, magma_queue_t queue)
 Copies a matrix from memory location src to memory location dst. More...
 
magma_int_t d_transpose_csr (magma_int_t n_rows, magma_int_t n_cols, magma_int_t nnz, double *values, magma_index_t *rowptr, magma_index_t *colind, magma_int_t *new_n_rows, magma_int_t *new_n_cols, magma_int_t *new_nnz, double **new_values, magma_index_t **new_rowptr, magma_index_t **new_colind, magma_queue_t queue)
 Transposes a matrix stored in CSR format on the CPU host. More...
 
magma_int_t magma_dmtranspose (magma_d_matrix A, magma_d_matrix *B, magma_queue_t queue)
 Interface to cuSPARSE transpose. More...
 
magma_int_t magma_d_cucsrtranspose (magma_d_matrix A, magma_d_matrix *B, magma_queue_t queue)
 Helper function to transpose CSR matrix. More...
 
magma_int_t magma_dmtransposeconjugate (magma_d_matrix A, magma_d_matrix *B, magma_queue_t queue)
 This function forms the transpose conjugate of a matrix. More...
 
magma_int_t magma_dmtranspose_cpu (magma_d_matrix A, magma_d_matrix *B, magma_queue_t queue)
 Generates a transpose of A on the CPU. More...
 
magma_int_t magma_dmtransposeconj_cpu (magma_d_matrix A, magma_d_matrix *B, magma_queue_t queue)
 Generates a transpose conjugate of A on the CPU. More...
 
magma_int_t magma_dmtransposestruct_cpu (magma_d_matrix A, magma_d_matrix *B, magma_queue_t queue)
 Generates a transpose of the nonzero pattern of A on the CPU. More...
 
magma_int_t magma_dmtransposeabs_cpu (magma_d_matrix A, magma_d_matrix *B, magma_queue_t queue)
 Generates a transpose with absolute values of A on the CPU. More...
 
magma_int_t magma_dparic_sweep (magma_d_matrix A, magma_d_matrix *L, magma_queue_t queue)
 This function does one asynchronous ParILU sweep (symmetric case). More...
 
magma_int_t magma_dparic_sweep_sync (magma_d_matrix A, magma_d_matrix *L, magma_queue_t queue)
 This function does one synchronized ParILU sweep (symmetric case). More...
 
magma_int_t magma_dparict_candidates (magma_d_matrix L0, magma_d_matrix L, magma_d_matrix LT, magma_d_matrix *L_new, magma_queue_t queue)
 This function identifies the candidates like they appear as ILU1 fill-in. More...
 
magma_int_t magma_dparict_sweep_sync (magma_d_matrix *A, magma_d_matrix *L, magma_queue_t queue)
 This function does one synchronized ParILU sweep. More...
 
magma_int_t magma_dparilu_sweep (magma_d_matrix A, magma_d_matrix *L, magma_d_matrix *U, magma_queue_t queue)
 This function does one asynchronous ParILU sweep. More...
 
magma_int_t magma_dparilu_sweep_sync (magma_d_matrix A, magma_d_matrix *L, magma_d_matrix *U, magma_queue_t queue)
 This function does one synchronized ParILU sweep. More...
 
magma_int_t magma_dparilut_sweep (magma_d_matrix *A, magma_d_matrix *L, magma_d_matrix *U, magma_queue_t queue)
 This function does an ParILUT sweep. More...
 
magma_int_t magma_dparilut_sweep_sync (magma_d_matrix *A, magma_d_matrix *L, magma_d_matrix *U, magma_queue_t queue)
 This function does an ParILUT sweep. More...
 
magma_int_t magma_dparilut_residuals (magma_d_matrix A, magma_d_matrix L, magma_d_matrix U, magma_d_matrix *R, magma_queue_t queue)
 This function computes the ILU residual in the locations included in the sparsity pattern of R. More...
 
magma_int_t magma_dparilut_thrsrm (magma_int_t order, magma_d_matrix *A, double *thrs, magma_queue_t queue)
 Removes any element with absolute value smaller equal or larger equal thrs from the matrix and compacts the whole thing. More...
 
magma_int_t magma_dparilut_thrsrm_U (magma_int_t order, magma_d_matrix L, magma_d_matrix *A, double *thrs, magma_queue_t queue)
 Removes any element with absolute value smaller equal or larger equal thrs from the matrix and compacts the whole thing. More...
 
magma_int_t magma_dparilut_thrsrm_semilinked (magma_d_matrix *U, magma_d_matrix *US, double *thrs, magma_queue_t queue)
 Removes any element with absolute value smaller thrs from the matrix. More...
 
magma_int_t magma_dparilut_rmselected (magma_d_matrix R, magma_d_matrix *A, magma_queue_t queue)
 Removes a selected list of elements from the matrix. More...
 
magma_int_t magma_dparilut_selectoneperrow (magma_int_t order, magma_d_matrix *A, magma_d_matrix *oneA, magma_queue_t queue)
 This function takes a list of candidates with residuals, and selects the largest in every row. More...
 
magma_int_t magma_dparilut_selecttwoperrow (magma_int_t order, magma_d_matrix *A, magma_d_matrix *oneA, magma_queue_t queue)
 This function takes a list of candidates with residuals, and selects the largest in every row. More...
 
magma_int_t magma_dparilut_selectoneperrowthrs_lower (magma_d_matrix L, magma_d_matrix U, magma_d_matrix *A, double rtol, magma_d_matrix *oneA, magma_queue_t queue)
 This function takes a list of candidates with residuals, and selects the largest in every row. More...
 
magma_int_t magma_dparilut_selectoneperrowthrs_upper (magma_d_matrix L, magma_d_matrix U, magma_d_matrix *A, double rtol, magma_d_matrix *oneA, magma_queue_t queue)
 This function takes a list of candidates with residuals, and selects the largest in every row. More...
 
magma_int_t magma_dparilut_preselect (magma_int_t order, magma_d_matrix *A, magma_d_matrix *oneA, magma_queue_t queue)
 This function takes a list of candidates with residuals, and selects the largest in every row. More...
 
magma_int_t magma_dparilut_preselect_scale (magma_d_matrix *L, magma_d_matrix *oneL, magma_d_matrix *U, magma_d_matrix *oneU, magma_queue_t queue)
 This function takes a list of candidates with residuals, and selects the largest in every row. More...
 
magma_int_t magma_dparilut_transpose (magma_d_matrix A, magma_d_matrix *B, magma_queue_t queue)
 Transposes a matrix that already contains rowidx. More...
 
magma_int_t magma_dparilut_transpose_select_one (magma_d_matrix A, magma_d_matrix *B, magma_queue_t queue)
 This is a special routine with very limited scope. More...
 
magma_int_t magma_dparilut_create_collinkedlist (magma_d_matrix A, magma_d_matrix *B, magma_queue_t queue)
 For the matrix U in CSR (row-major) this creates B containing a row-ptr to the columns and a linked list for the elements. More...
 
magma_int_t magma_dparilut_sweep_semilinked (magma_d_matrix *A, magma_d_matrix *L, magma_d_matrix *US, magma_queue_t queue)
 This function does an ParILU sweep. More...
 
magma_int_t magma_dparilut_sweep_list (magma_d_matrix *A, magma_d_matrix *L, magma_d_matrix *U, magma_queue_t queue)
 This function does an ParILU sweep. More...
 
magma_int_t magma_dparilut_residuals_semilinked (magma_d_matrix A, magma_d_matrix L, magma_d_matrix US, magma_d_matrix *L_new, magma_queue_t queue)
 This function computes the residuals. More...
 
magma_int_t magma_dparilut_residuals_transpose (magma_d_matrix A, magma_d_matrix L, magma_d_matrix U, magma_d_matrix *U_new, magma_queue_t queue)
 This function computes the residuals. More...
 
magma_int_t magma_dparilut_residuals_list (magma_d_matrix A, magma_d_matrix L, magma_d_matrix U, magma_d_matrix *L_new, magma_queue_t queue)
 This function computes the residuals. More...
 
magma_int_t magma_dparilut_sweep_linkedlist (magma_d_matrix *A, magma_d_matrix *L, magma_d_matrix *U, magma_queue_t queue)
 This function does an ParILU sweep. More...
 
magma_int_t magma_dparilut_residuals_linkedlist (magma_d_matrix A, magma_d_matrix L, magma_d_matrix U, magma_d_matrix *L_new, magma_queue_t queue)
 This function computes the residuals. More...
 
magma_int_t magma_dparilut_colmajor (magma_d_matrix A, magma_d_matrix *AC, magma_queue_t queue)
 This function creates a col-pointer and a linked list along the columns for a row-major CSR matrix. More...
 
magma_int_t magma_dparilut_reorder (magma_d_matrix *LU, magma_queue_t queue)
 This routine reorders the matrix (inplace) for easier access. More...
 
magma_int_t magma_dparilut_colmajorup (magma_d_matrix A, magma_d_matrix *AC, magma_queue_t queue)
 This function creates a col-pointer and a linked list along the columns for a row-major CSR matrix. More...
 
magma_int_t magma_dparilut_insert (magma_int_t *num_rmL, magma_int_t *num_rmU, magma_index_t *rm_locL, magma_index_t *rm_locU, magma_d_matrix *L_new, magma_d_matrix *U_new, magma_d_matrix *L, magma_d_matrix *U, magma_d_matrix *UR, magma_queue_t queue)
 Inserts for the iterative dynamic ILU an new element in the (empty) place. More...
 
magma_int_t magma_dparilut_candidates (magma_d_matrix L0, magma_d_matrix U0, magma_d_matrix L, magma_d_matrix U, magma_d_matrix *L_new, magma_d_matrix *U_new, magma_queue_t queue)
 This function identifies the candidates like they appear as ILU1 fill-in. More...
 
magma_int_t magma_dparilut_candidates_semilinked (magma_d_matrix L0, magma_d_matrix U0, magma_d_matrix L, magma_d_matrix U, magma_d_matrix UT, magma_d_matrix *L_new, magma_d_matrix *U_new, magma_queue_t queue)
 This function identifies the candidates like they appear as ILU1 fill-in. More...
 
magma_int_t magma_dparilut_rm_thrs (double *thrs, magma_int_t *num_rm, magma_d_matrix *LU, magma_d_matrix *LU_new, magma_index_t *rm_loc, magma_queue_t queue)
 This routine removes matrix entries from the structure that are smaller than the threshold. More...
 
magma_int_t magma_dparilut_count (magma_d_matrix L, magma_int_t *num, magma_queue_t queue)
 This is a helper routine counting elements in a matrix in unordered Magma_CSRLIST format. More...
 
magma_int_t magma_dparilut_select_candidates_L (magma_int_t *num_rm, magma_index_t *rm_loc, magma_d_matrix *L_new, magma_queue_t queue)
 Screens the new candidates for multiple elements in the same row. More...
 
magma_int_t magma_dparilut_select_candidates_U (magma_int_t *num_rm, magma_index_t *rm_loc, magma_d_matrix *L_new, magma_queue_t queue)
 Screens the new candidates for multiple elements in the same row. More...
 
magma_int_t magma_dparilut_set_approx_thrs (magma_int_t num_rm, magma_d_matrix *LU, magma_int_t order, double *thrs, magma_queue_t queue)
 This routine approximates the threshold for removing num_rm elements. More...
 
magma_int_t magma_dparilut_set_thrs_randomselect (magma_int_t num_rm, magma_d_matrix *LU, magma_int_t order, double *thrs, magma_queue_t queue)
 This routine approximates the threshold for removing num_rm elements. More...
 
magma_int_t magma_dparilut_set_thrs_L_scaled (magma_int_t num_rm, magma_d_matrix *L, magma_d_matrix *U, magma_int_t order, double *thrs, magma_queue_t queue)
 This routine approximates the threshold for removing num_rm elements. More...
 
magma_int_t magma_dparilut_set_thrs_randomselect_approx2 (magma_int_t num_rm, magma_d_matrix *LU, magma_int_t order, double *thrs, magma_queue_t queue)
 This routine approximates the threshold for removing num_rm elements. More...
 
magma_int_t magma_dparilut_set_thrs_randomselect_approx (magma_int_t num_rm, magma_d_matrix *LU, magma_int_t order, double *thrs, magma_queue_t queue)
 This routine approximates the threshold for removing num_rm elements. More...
 
magma_int_t magma_dparilut_set_thrs_randomselect_factors (magma_int_t num_rm, magma_d_matrix *L, magma_d_matrix *U, magma_int_t order, double *thrs, magma_queue_t queue)
 This routine approximates the threshold for removing num_rm elements. More...
 
magma_int_t magma_dparilut_set_exact_thrs (magma_int_t num_rm, magma_d_matrix *LU, magma_int_t order, double *thrs, magma_queue_t queue)
 This routine provides the exact threshold for removing num_rm elements. More...
 
magma_int_t magma_dparilut_set_approx_thrs_inc (magma_int_t num_rm, magma_d_matrix *LU, magma_int_t order, double *thrs, magma_queue_t queue)
 This routine provides the exact threshold for removing num_rm elements. More...
 
magma_int_t magma_dparilut_align_residuals (magma_d_matrix L, magma_d_matrix U, magma_d_matrix *Lnew, magma_d_matrix *Unew, magma_queue_t queue)
 This function scales the residuals of a lower triangular factor L with the diagonal of U. More...
 
magma_int_t magma_dfrobenius (magma_d_matrix A, magma_d_matrix B, real_Double_t *res, magma_queue_t queue)
 Computes the Frobenius norm of the difference between the CSR matrices A and B. More...
 
magma_int_t magma_dnonlinres (magma_d_matrix A, magma_d_matrix L, magma_d_matrix U, magma_d_matrix *LU, real_Double_t *res, magma_queue_t queue)
 Computes the nonlinear residual A - LU and returns the difference as well es the Frobenius norm of the difference. More...
 
magma_int_t magma_dilures (magma_d_matrix A, magma_d_matrix L, magma_d_matrix U, magma_d_matrix *LU, real_Double_t *res, real_Double_t *nonlinres, magma_queue_t queue)
 Computes the ILU residual A - LU and returns the difference as well es the Frobenius norm of the difference. More...
 
magma_int_t magma_dicres (magma_d_matrix A, magma_d_matrix C, magma_d_matrix CT, magma_d_matrix *LU, real_Double_t *res, real_Double_t *nonlinres, magma_queue_t queue)
 Computes the IC residual A - CC^T and returns the difference as well es the Frobenius norm of the difference. More...
 
magma_int_t magma_dinitguess (magma_d_matrix A, magma_d_matrix *L, magma_d_matrix *U, magma_queue_t queue)
 Computes an initial guess for the ParILU/ParIC. More...
 
magma_int_t magma_dinitrecursiveLU (magma_d_matrix A, magma_d_matrix *B, magma_queue_t queue)
 Using the iterative approach of computing ILU factorizations with increasing fill-in, it takes the input matrix A, containing the approximate factors, ( L and U as well ) computes a matrix with one higher level of fill-in, inserts the original approximation as initial guess, and provides the factors L and U also filled with the scaled initial guess. More...
 
magma_int_t magma_dmLdiagadd (magma_d_matrix *L, magma_queue_t queue)
 Checks for a lower triangular matrix whether it is strictly lower triangular and in the negative case adds a unit diagonal. More...
 
magma_int_t magma_dselect (double *a, magma_int_t size, magma_int_t k, magma_queue_t queue)
 An efficient implementation of Blum, Floyd, Pratt, Rivest, and Tarjan's worst-case linear selection algorithm. More...
 
magma_int_t magma_dselectrandom (double *a, magma_int_t size, magma_int_t k, magma_queue_t queue)
 An efficient implementation of Blum, Floyd, Pratt, Rivest, and Tarjan's worst-case linear selection algorithm. More...
 
magma_int_t magma_dsolverinfo (magma_d_solver_par *solver_par, magma_d_preconditioner *precond_par, magma_queue_t queue)
 Prints information about a previously called solver. More...
 
magma_int_t magma_dsolverinfo_free (magma_d_solver_par *solver_par, magma_d_preconditioner *precond_par, magma_queue_t queue)
 Frees any memory assocoiated with the verbose mode of solver_par. More...
 
magma_int_t magma_dsolverinfo_init (magma_d_solver_par *solver_par, magma_d_preconditioner *precond_par, magma_queue_t queue)
 Initializes all solver and preconditioner parameters. More...
 
magma_int_t magma_deigensolverinfo_init (magma_d_solver_par *solver_par, magma_queue_t queue)
 Initializes space for eigensolvers. More...
 
magma_int_t magma_dsort (double *x, magma_int_t first, magma_int_t last, magma_queue_t queue)
 Sorts an array of values in increasing order. More...
 
magma_int_t magma_dmsort (double *x, magma_index_t *col, magma_index_t *row, magma_int_t first, magma_int_t last, magma_queue_t queue)
 Sorts an array of values in increasing order. More...
 
magma_int_t magma_dindexsort (magma_index_t *x, magma_int_t first, magma_int_t last, magma_queue_t queue)
 Sorts an array of integers in increasing order. More...
 
magma_int_t magma_dindexsortval (magma_index_t *x, double *y, magma_int_t first, magma_int_t last, magma_queue_t queue)
 Sorts an array of integers, updates a respective array of values. More...
 
magma_int_t magma_dmorderstatistics (double *val, magma_index_t *col, magma_index_t *row, magma_int_t length, magma_int_t k, magma_int_t r, double *element, magma_queue_t queue)
 Identifies the kth smallest/largest element in an array and reorders such that these elements come to the front. More...
 
magma_int_t magma_dorderstatistics (double *val, magma_int_t length, magma_int_t k, magma_int_t r, double *element, magma_queue_t queue)
 Identifies the kth smallest/largest element in an array. More...
 
magma_int_t magma_dorderstatistics_inc (double *val, magma_int_t length, magma_int_t k, magma_int_t inc, magma_int_t r, double *element, magma_queue_t queue)
 Approximates the k-th smallest element in an array by using order-statistics with step-size inc. More...
 
magma_int_t magma_dbitonic_sort (magma_int_t start, magma_int_t length, double *seq, magma_int_t flag, magma_queue_t queue)
 Approximates the k-th smallest element in an array by using order-statistics with step-size inc. More...
 
magma_int_t magma_dparse_opts (int argc, char **argv, magma_dopts *opts, int *matrices, magma_queue_t queue)
 Parses input options for a solver. More...
 
magma_int_t magma_dvinit (magma_d_matrix *x, magma_location_t mem_loc, magma_int_t num_rows, magma_int_t num_cols, double values, magma_queue_t queue)
 Allocates memory for magma_d_matrix and initializes it with the passed value. More...
 
magma_int_t magma_dvinit_rand (magma_d_matrix *x, magma_location_t mem_loc, magma_int_t num_rows, magma_int_t num_cols, magma_queue_t queue)
 Allocates memory for magma_d_matrix and initializes it with random values. More...
 
magma_int_t magma_dprint_vector (magma_d_matrix x, magma_int_t offset, magma_int_t visulen, magma_queue_t queue)
 Visualizes part of a vector of type magma_d_matrix. More...
 
magma_int_t magma_dvread (magma_d_matrix *x, magma_int_t length, char *filename, magma_queue_t queue)
 Reads in a double vector of length "length". More...
 
magma_int_t magma_dvspread (magma_d_matrix *x, const char *filename, magma_queue_t queue)
 Reads in a sparse vector-block stored in COO format. More...
 
magma_int_t magma_dwrite_vector (magma_d_matrix A, const char *filename, magma_queue_t queue)
 Writes a vector to a file. More...
 
magma_int_t magma_dvset (magma_int_t m, magma_int_t n, double *val, magma_d_matrix *v, magma_queue_t queue)
 Passes a vector to MAGMA. More...
 
magma_int_t magma_dvcopy (magma_d_matrix v, magma_int_t *m, magma_int_t *n, double *val, magma_queue_t queue)
 Passes a MAGMA vector back. More...
 
magma_int_t magma_dvset_dev (magma_int_t m, magma_int_t n, magmaDouble_ptr val, magma_d_matrix *v, magma_queue_t queue)
 Passes a vector to MAGMA (located on DEV). More...
 
magma_int_t magma_dvget (magma_d_matrix v, magma_int_t *m, magma_int_t *n, double **val, magma_queue_t queue)
 Passes a MAGMA vector back. More...
 
magma_int_t magma_dvget_dev (magma_d_matrix v, magma_int_t *m, magma_int_t *n, magmaDouble_ptr *val, magma_queue_t queue)
 Passes a MAGMA vector back (located on DEV). More...
 
magma_int_t magma_dvcopy_dev (magma_d_matrix v, magma_int_t *m, magma_int_t *n, magmaDouble_ptr val, magma_queue_t queue)
 Passes a MAGMA vector back (located on DEV). More...
 
magma_int_t magma_dvtranspose (magma_d_matrix x, magma_d_matrix *y, magma_queue_t queue)
 Transposes a vector from col to row major and vice versa. More...
 
magma_int_t magma_disai_generator_regs (magma_uplo_t uplotype, magma_trans_t transtype, magma_diag_t diagtype, magma_d_matrix L, magma_d_matrix *M, magma_queue_t queue)
 This routine is designet to combine all kernels into one. More...
 
magma_int_t magma_dgeisai_maxblock (magma_d_matrix L, magma_d_matrix *MT, magma_queue_t queue)
 This routine maximizes the pattern for the ISAI preconditioner. More...
 
magma_int_t magma_dmtrisolve_batched_gpu (magma_uplo_t uplotype, magma_trans_t transtype, magma_diag_t diagtype, magma_d_matrix L, magma_d_matrix LC, magma_index_t *sizes, magma_index_t *locations, double *trisystems, double *rhs, magma_queue_t queue)
 Does all triangular solves. More...
 
magma_int_t magma_dlobpcg_res (magma_int_t num_rows, magma_int_t num_vecs, magmaDouble_ptr evalues, magmaDouble_ptr X, magmaDouble_ptr R, magmaDouble_ptr res, magma_queue_t queue)
 This routine computes for Block-LOBPCG, the set of residuals. More...
 
magma_int_t magma_dlobpcg_shift (magma_int_t num_rows, magma_int_t num_vecs, magma_int_t shift, magmaDouble_ptr x, magma_queue_t queue)
 For a Block-LOBPCG, the set of residuals (entries consecutive in memory) shrinks and the vectors are shifted in case shift residuals drop below threshold. More...
 
magma_int_t magma_dparilut_candidates_gpu (magma_d_matrix L0, magma_d_matrix U0, magma_d_matrix L, magma_d_matrix U, magma_d_matrix *L_new, magma_d_matrix *U_new, magma_queue_t queue)
 This function identifies the locations with a potential nonzero ILU residual R = A - L*U where L and U are the current incomplete factors. More...
 
magma_int_t magma_dcopyscale (magma_int_t n, magma_int_t k, magmaDouble_ptr r, magmaDouble_ptr v, magmaDouble_ptr skp, magma_queue_t queue)
 Computes the correction term of the pipelined GMRES according to P. More...
 
magma_int_t magma_ddiagcheck (magma_d_matrix dA, magma_queue_t queue)
 This routine checks for a CSR matrix whether there exists a zero on the diagonal. More...
 
magma_int_t magma_dmatrix_cup_gpu (magma_d_matrix A, magma_d_matrix B, magma_d_matrix *U, magma_queue_t queue)
 Generates a matrix U = A B. More...
 
magma_int_t magma_dcsr_sort_gpu (magma_d_matrix *A, magma_queue_t queue)
 Generates a matrix U = A B. More...
 
magma_int_t magma_dmconjugate (magma_d_matrix *A, magma_queue_t queue)
 This function conjugates a matrix. More...
 
magma_int_t magma_dmcsrcompressor_gpu (magma_d_matrix *A, magma_queue_t queue)
 Removes zeros in a CSR matrix. More...
 
magma_int_t magma_dpreselect_gpu (magma_int_t order, magma_d_matrix *A, magma_d_matrix *oneA, magma_queue_t queue)
 This function takes a list of candidates with residuals, and selects the largest in every row. More...
 
magma_int_t magma_dsampleselect (magma_int_t total_size, magma_int_t subset_size, double *val, double *thrs, magma_ptr *tmp_ptr, magma_int_t *tmp_size, magma_queue_t queue)
 This routine selects a threshold separating the subset_size smallest magnitude elements from the rest. More...
 
magma_int_t magma_dsampleselect_approx (magma_int_t total_size, magma_int_t subset_size, double *val, double *thrs, magma_ptr *tmp_ptr, magma_int_t *tmp_size, magma_queue_t queue)
 This routine selects an approximate threshold separating the subset_size smallest magnitude elements from the rest. More...
 
magma_int_t magma_dsampleselect_nodp (magma_int_t total_size, magma_int_t subset_size, double *val, double *thrs, magma_ptr *tmp_ptr, magma_int_t *tmp_size, magma_queue_t queue)
 This routine selects a threshold separating the subset_size smallest magnitude elements from the rest. More...
 
magma_int_t magma_dsampleselect_approx_nodp (magma_int_t total_size, magma_int_t subset_size, double *val, double *thrs, magma_ptr *tmp_ptr, magma_int_t *tmp_size, magma_queue_t queue)
 This routine selects an approximate threshold separating the subset_size smallest magnitude elements from the rest. More...
 
magma_int_t magma_dthrsholdrm_gpu (magma_int_t order, magma_d_matrix *A, double *thrs, magma_queue_t queue)
 
Purpose

More...
 

Detailed Description

Function Documentation

magma_int_t magma_dresidual ( magma_d_matrix  A,
magma_d_matrix  b,
magma_d_matrix  x,
double *  res,
magma_queue_t  queue 
)

Computes the residual ||b-Ax|| for a solution approximation x.

Parameters
[in]Amagma_d_matrix input matrix A
[in]bmagma_d_matrix RHS b
[in]xmagma_d_matrix solution approximation
[out]resdouble* return residual
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dresidual_slice ( magma_int_t  start,
magma_int_t  end,
magma_d_matrix  A,
magma_d_matrix  b,
magma_d_matrix  x,
double *  res,
magma_queue_t  queue 
)

Computes the residual r=||b-Ax|| for the slice r(start:end) for a solution approximation x.

Parameters
[in]startmagma_int_t start of slice (row-index)
[in]endmagma_int_t end of slice (row-index)
[in]Amagma_d_matrix input matrix A
[in]bmagma_d_matrix RHS b
[in]xmagma_d_matrix solution approximation
[out]resdouble* return residual
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dresidualvec ( magma_d_matrix  A,
magma_d_matrix  b,
magma_d_matrix  x,
magma_d_matrix *  r,
double *  res,
magma_queue_t  queue 
)

Computes the residual r = b-Ax for a solution approximation x.

It returns both, the actual residual and the residual vector

Parameters
[in]Amagma_d_matrix input matrix A
[in]bmagma_d_matrix RHS b
[in]xmagma_d_matrix solution approximation
[in,out]rmagma_d_matrix* residual vector
[out]resdouble* return residual
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_d_precond ( magma_d_matrix  A,
magma_d_matrix  b,
magma_d_matrix *  x,
magma_d_preconditioner *  precond,
magma_queue_t  queue 
)

For a given input matrix A and vectors x, y and the preconditioner parameters, the respective preconditioner is chosen.

It approximates x for A x = y.

Parameters
[in]Amagma_d_matrix sparse matrix A
[in]bmagma_d_matrix input vector b
[in]xmagma_d_matrix* output vector x
[in,out]precondmagma_d_preconditioner preconditioner
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_d_precondsetup ( magma_d_matrix  A,
magma_d_matrix  b,
magma_d_solver_par *  solver,
magma_d_preconditioner *  precond,
magma_queue_t  queue 
)

For a given input matrix M and vectors x, y and the preconditioner parameters, the respective preconditioner is preprocessed.

E.g. for Jacobi: the scaling-vetor, for ILU the factorization.

Parameters
[in]Amagma_d_matrix sparse matrix M
[in]bmagma_d_matrix input vector y
[in]solvermagma_d_solver_par solver structure using the preconditioner
[in,out]precondmagma_d_preconditioner preconditioner
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_d_applyprecond ( magma_d_matrix  A,
magma_d_matrix  b,
magma_d_matrix *  x,
magma_d_preconditioner *  precond,
magma_queue_t  queue 
)

For a given input matrix A and vectors x, y and the preconditioner parameters, the respective preconditioner is applied.

E.g. for Jacobi: the scaling-vetor, for ILU the triangular solves.

Parameters
[in]Amagma_d_matrix sparse matrix A
[in]bmagma_d_matrix input vector b
[in,out]xmagma_d_matrix* output vector x
[in]precondmagma_d_preconditioner preconditioner
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_d_applyprecond_left ( magma_trans_t  trans,
magma_d_matrix  A,
magma_d_matrix  b,
magma_d_matrix *  x,
magma_d_preconditioner *  precond,
magma_queue_t  queue 
)

For a given input matrix A and vectors x, y and the preconditioner parameters, the respective left preconditioner is applied.

E.g. for Jacobi: the scaling-vetor, for ILU the left triangular solve.

Parameters
[in]transmagma_trans_t mode of the preconditioner: MagmaTrans or MagmaNoTrans
[in]Amagma_d_matrix sparse matrix A
[in]bmagma_d_matrix input vector b
[in,out]xmagma_d_matrix* output vector x
[in]precondmagma_d_preconditioner preconditioner
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_d_applyprecond_right ( magma_trans_t  trans,
magma_d_matrix  A,
magma_d_matrix  b,
magma_d_matrix *  x,
magma_d_preconditioner *  precond,
magma_queue_t  queue 
)

For a given input matrix A and vectors x, y and the preconditioner parameters, the respective right-preconditioner is applied.

E.g. for Jacobi: the scaling-vetor, for ILU the right triangular solve.

Parameters
[in]transmagma_trans_t mode of the preconditioner: MagmaTrans or MagmaNoTrans
[in]Amagma_d_matrix sparse matrix A
[in]bmagma_d_matrix input vector b
[in,out]xmagma_d_matrix* output vector x
[in]precondmagma_d_preconditioner preconditioner
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_d_solver ( magma_d_matrix  A,
magma_d_matrix  b,
magma_d_matrix *  x,
magma_dopts *  zopts,
magma_queue_t  queue 
)

This is an interface that allows to use any iterative solver on the linear system Ax = b.

All linear algebra objects are expected to be on the device, the linear algebra objects are MAGMA-sparse specific structures (dense matrix b, dense matrix x, sparse/dense matrix A). The additional parameter zopts contains information about the solver and the preconditioner. the type of solver the relative / absolute stopping criterion the maximum number of iterations the preconditioner type ... Please see magmasparse_types.h for details about the fields and magma_dutil_sparse.cpp for the possible options.

Parameters
[in]Amagma_d_matrix sparse matrix A
[in]bmagma_d_matrix input vector b
[in]xmagma_d_matrix* output vector x
[in]zoptsmagma_dopts options for solver and preconditioner
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dapplycustomprecond_l ( magma_d_matrix  b,
magma_d_matrix *  x,
magma_d_preconditioner *  precond,
magma_queue_t  queue 
)

This is an interface to the left solve for any custom preconditioner.

It should compute x = FUNCTION(b) The vectors are located on the device.

Parameters
[in]bmagma_d_matrix RHS
[in,out]xmagma_d_matrix* vector to precondition
[in,out]precondmagma_d_preconditioner* preconditioner parameters
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dapplycustomprecond_r ( magma_d_matrix  b,
magma_d_matrix *  x,
magma_d_preconditioner *  precond,
magma_queue_t  queue 
)

This is an interface to the right solve for any custom preconditioner.

It should compute x = FUNCTION(b) The vectors are located on the device.

Parameters
[in]bmagma_d_matrix RHS
[in,out]xmagma_d_matrix* vector to precondition
[in,out]precondmagma_d_preconditioner* preconditioner parameters
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dcsrsplit ( magma_int_t  offset,
magma_int_t  bsize,
magma_d_matrix  A,
magma_d_matrix *  D,
magma_d_matrix *  R,
magma_queue_t  queue 
)

Splits a CSR matrix into two matrices, one containing the diagonal blocks with the diagonal element stored first, one containing the rest of the original matrix.

Parameters
[in]offsetmagma_int_t size of the first block
[in]bsizemagma_int_t size of the diagonal blocks
[in]Amagma_d_matrix CSR input matrix
[out]Dmagma_d_matrix* CSR matrix containing diagonal blocks
[out]Rmagma_d_matrix* CSR matrix containing rest
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_ddomainoverlap ( magma_index_t  num_rows,
magma_int_t *  num_indices,
magma_index_t *  rowptr,
magma_index_t *  colidx,
magma_index_t *  x,
magma_queue_t  queue 
)

Generates the update list.

Parameters
[in]xmagma_index_t* array to sort
[in]num_rowsmagma_int_t number of rows in matrix
[out]num_indicesmagma_int_t* number of indices in array
[in]rowptrmagma_index_t* rowpointer of matrix
[in]colidxmagma_index_t* colindices of matrix
[in]xmagma_index_t* array containing indices for domain overlap
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dmfree ( magma_d_matrix *  A,
magma_queue_t  queue 
)

Free the memory of a magma_d_matrix.

Parameters
[in,out]Amagma_d_matrix* matrix to free
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dprecondfree ( magma_d_preconditioner *  precond_par,
magma_queue_t  queue 
)

Free a preconditioner.

Parameters
[in,out]precond_parmagma_d_preconditioner* structure containing all preconditioner information
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dmprepare_batched ( magma_uplo_t  uplotype,
magma_trans_t  transtype,
magma_diag_t  diagtype,
magma_d_matrix  L,
magma_d_matrix  LC,
magma_index_t *  sizes,
magma_index_t *  locations,
double *  trisystems,
double *  rhs,
magma_queue_t  queue 
)

Takes a sparse matrix and generates an array containing the sizes of the different systems an array containing the indices with the locations in the sparse matrix where the data comes from and goes back to an array containing all the sparse triangular systems.

    - padded with zeros to size 32x32
  an array containing the RHS
Parameters
[in]uplotypemagma_uplo_t lower or upper triangular
[in]transtypemagma_trans_t possibility for transposed matrix
[in]diagtypemagma_diag_t unit diagonal or not
[in]Lmagma_d_matrix Matrix in CSR format
[in]LCmagma_d_matrix same matrix, also CSR, but col-major
[in,out]sizesmagma_int_t* Number of Elements that are replaced.
[in,out]locationsmagma_int_t* Array indicating the locations.
[in,out]trisystemsdouble* trisystems
[in,out]rhsdouble* right-hand sides
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dmtrisolve_batched ( magma_uplo_t  uplotype,
magma_trans_t  transtype,
magma_diag_t  diagtype,
magma_d_matrix  L,
magma_d_matrix  LC,
magma_index_t *  sizes,
magma_index_t *  locations,
double *  trisystems,
double *  rhs,
magma_queue_t  queue 
)

Does all triangular solves.

Parameters
[in]uplotypemagma_uplo_t lower or upper triangular
[in]transtypemagma_trans_t possibility for transposed matrix
[in]diagtypemagma_diag_t unit diagonal or not
[in]Lmagma_d_matrix Matrix in CSR format
[in]LCmagma_d_matrix same matrix, also CSR, but col-major
[out]sizesmagma_int_t* Number of Elements that are replaced.
[out]locationsmagma_int_t* Array indicating the locations.
[out]trisystemsdouble* trisystems
[out]rhsdouble* right-hand sides
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dmbackinsert_batched ( magma_uplo_t  uplotype,
magma_trans_t  transtype,
magma_diag_t  diagtype,
magma_d_matrix *  M,
magma_index_t *  sizes,
magma_index_t *  locations,
double *  trisystems,
double *  rhs,
magma_queue_t  queue 
)

Inserts the values into the preconditioner matrix.

Parameters
[in]uplotypemagma_uplo_t lower or upper triangular
[in]transtypemagma_trans_t possibility for transposed matrix
[in]diagtypemagma_diag_t unit diagonal or not
[in,out]Mmagma_d_matrix* SPAI preconditioner CSR col-major
[out]sizesmagma_int_t* Number of Elements that are replaced.
[out]locationsmagma_int_t* Array indicating the locations.
[out]trisystemsdouble* trisystems
[out]rhsdouble* right-hand sides
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dmiluspai_sizecheck ( magma_d_matrix  A,
magma_index_t  batchsize,
magma_index_t *  maxsize,
magma_queue_t  queue 
)

Checks for a matrix whether the batched ISAI works for a given thread-block size.

Parameters
[in]Amagma_d_matrix system matrix
[in]batchsizemagma_int_t Size of the batch (GPU thread block).
[out]maxsizemagma_int_t* maximum A(:,i) and A(i,:).
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dmisai_blockstruct ( magma_int_t  n,
magma_int_t  bs,
magma_int_t  offs,
magma_uplo_t  uplotype,
magma_d_matrix *  A,
magma_queue_t  queue 
)

Generates a block-diagonal sparsity pattern with block-size bs.

Parameters
[in]nmagma_int_t Size of the matrix.
[in]bsmagma_int_t Size of the diagonal blocks.
[in]offsmagma_int_t Size of the first diagonal block.
[in]uplotypemagma_uplo_t lower or upper triangular
[in,out]Amagma_d_matrix* Generated sparsity pattern matrix.
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dmatrix_cup ( magma_d_matrix  A,
magma_d_matrix  B,
magma_d_matrix *  U,
magma_queue_t  queue 
)

Generates a matrix U = A B.

If both matrices have a nonzero value in the same location, the value of A is used.

Parameters
[in]Amagma_d_matrix Input matrix 1.
[in]Bmagma_d_matrix Input matrix 2.
[out]Umagma_d_matrix* Not a real matrix, but the list of all matrix entries included in either A or B. No duplicates.
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dmatrix_cap ( magma_d_matrix  A,
magma_d_matrix  B,
magma_d_matrix *  U,
magma_queue_t  queue 
)

Generates a matrix with entries being in both matrices: U = A B.

The values in U are all ones.

Parameters
[in]Amagma_d_matrix Input matrix 1.
[in]Bmagma_d_matrix Input matrix 2.
[out]Umagma_d_matrix* Not a real matrix, but the list of all matrix entries included in both A and B.
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dmatrix_negcap ( magma_d_matrix  A,
magma_d_matrix  B,
magma_d_matrix *  U,
magma_queue_t  queue 
)

Generates a list of matrix entries being part of A but not of B.

U = A \ B The values of A are preserved.

Parameters
[in]Amagma_d_matrix Element part of this.
[in,out]Bmagma_d_matrix Not part of this.
[out]Umagma_d_matrix* Not a real matrix, but the list of all matrix entries included in A not in B.
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dmatrix_tril_negcap ( magma_d_matrix  A,
magma_d_matrix  B,
magma_d_matrix *  U,
magma_queue_t  queue 
)

Generates a list of matrix entries being part of tril(A) but not of B.

U = tril(A) \ B The values of A are preserved.

Parameters
[in]Amagma_d_matrix Element part of this.
[in,out]Bmagma_d_matrix Not part of this.
[out]Umagma_d_matrix* Not a real matrix, but the list of all matrix entries included in A not in B.
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dmatrix_triu_negcap ( magma_d_matrix  A,
magma_d_matrix  B,
magma_d_matrix *  U,
magma_queue_t  queue 
)

Generates a matrix with entries being part of triu(A) but not of B.

U = triu(A) \ B The values of A are preserved.

Parameters
[in]Amagma_d_matrix Element part of this.
[in]Bmagma_d_matrix Not part of this.
[out]Umagma_d_matrix*
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dmatrix_addrowindex ( magma_d_matrix *  A,
magma_queue_t  queue 
)

Adds to a CSR matrix an array containing the rowindexes.

Parameters
[in,out]Amagma_d_matrix* Matrix where rowindexes should be added.
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dcsrcoo_transpose ( magma_d_matrix  A,
magma_d_matrix *  B,
magma_queue_t  queue 
)

Transposes a matrix that already contains rowidx.

The idea is to use a linked list.

Parameters
[in]Amagma_d_matrix Matrix to transpose.
[out]Bmagma_d_matrix* Transposed matrix.
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dmatrix_createrowptr ( magma_int_t  n,
magma_index_t *  row,
magma_queue_t  queue 
)

This function generates a rowpointer out of a row-wise element count in parallel.

Parameters
[in]nmagma_indnt_t row-count.
[in,out]rowmagma_index_t* Input: Vector of size n+1 containing the row-counts (offset by one). Output: Rowpointer.
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dmatrix_swap ( magma_d_matrix *  A,
magma_d_matrix *  B,
magma_queue_t  queue 
)

Swaps two matrices.

Useful if a loop modifies the name of a matrix.

Parameters
[in,out]Amagma_d_matrix* Matrix to be swapped with B.
[in,out]Bmagma_d_matrix* Matrix to be swapped with A.
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dmatrix_tril ( magma_d_matrix  A,
magma_d_matrix *  L,
magma_queue_t  queue 
)

Extracts the lower triangular of a matrix: L = tril(A).

The values of A are preserved.

Parameters
[in]Amagma_d_matrix Element part of this.
[out]Lmagma_d_matrix* Lower triangular part of A.
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dmatrix_triu ( magma_d_matrix  A,
magma_d_matrix *  U,
magma_queue_t  queue 
)

Extracts the lower triangular of a matrix: U = triu(A).

The values of A are preserved.

Parameters
[in]Amagma_d_matrix Element part of this.
[out]Umagma_d_matrix* Lower triangular part of A.
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dmatrix_abssum ( magma_d_matrix  A,
double *  sum,
magma_queue_t  queue 
)

Computes the sum of the absolute values in a matrix.

Parameters
[in]Amagma_d_matrix Element list/matrix.
[out]sumdouble* Sum of the absolute values.
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dcsr_sort ( magma_d_matrix *  A,
magma_queue_t  queue 
)

SOrts the elements in a CSR matrix for increasing column index.

Parameters
[in,out]Amagma_d_matrix* CSR matrix, sorted on output.
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_drowentries ( magma_d_matrix *  A,
magma_queue_t  queue 
)

Checks the maximal number of nonzeros in a row of matrix A.

Inserts the data into max_nnz_row.

Parameters
[in,out]Amagma_d_matrix* sparse matrix
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_ddiameter ( magma_d_matrix *  A,
magma_queue_t  queue 
)

Computes the diameter of a sparse matrix and stores the value in diameter.

Parameters
[in,out]Amagma_d_matrix* sparse matrix
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_d_csr_compressor ( double **  val,
magma_index_t **  row,
magma_index_t **  col,
double **  valn,
magma_index_t **  rown,
magma_index_t **  coln,
magma_int_t *  n,
magma_queue_t  queue 
)

Helper function to compress CSR containing zero-entries.

Parameters
[in]valdouble** input val pointer to compress
[in]rowmagma_int_t** input row pointer to modify
[in]colmagma_int_t** input col pointer to compress
[in]valndouble** output val pointer
[out]rownmagma_int_t** output row pointer
[out]colnmagma_int_t** output col pointer
[out]nmagma_int_t* number of rows in matrix
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dmconvert ( magma_d_matrix  A,
magma_d_matrix *  B,
magma_storage_t  old_format,
magma_storage_t  new_format,
magma_queue_t  queue 
)

Converter between different sparse storage formats.

Parameters
[in]Amagma_d_matrix sparse matrix A
[out]Bmagma_d_matrix* copy of A in new format
[in]old_formatmagma_storage_t original storage format
[in]new_formatmagma_storage_t new storage format
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dmcsrcompressor ( magma_d_matrix *  A,
magma_queue_t  queue 
)

Removes zeros in a CSR matrix.

Parameters
[in,out]Amagma_d_matrix* input/output matrix
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dcsrset ( magma_int_t  m,
magma_int_t  n,
magma_index_t *  row,
magma_index_t *  col,
double *  val,
magma_d_matrix *  A,
magma_queue_t  queue 
)

Passes a CSR matrix to MAGMA.

Parameters
[in]mmagma_int_t number of rows
[in]nmagma_int_t number of columns
[in]rowmagma_index_t* row pointer
[in]colmagma_index_t* column indices
[in]valdouble* array containing matrix entries
[out]Amagma_d_matrix* matrix in magma sparse matrix format
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dcsrget ( magma_d_matrix  A,
magma_int_t *  m,
magma_int_t *  n,
magma_index_t **  row,
magma_index_t **  col,
double **  val,
magma_queue_t  queue 
)

Passes a MAGMA matrix to CSR structure.

Parameters
[in]Amagma_d_matrix magma sparse matrix in CSR format
[out]mmagma_int_t number of rows
[out]nmagma_int_t number of columns
[out]rowmagma_index_t* row pointer
[out]colmagma_index_t* column indices
[out]valdouble* array containing matrix entries
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dcsrset_gpu ( magma_int_t  m,
magma_int_t  n,
magmaIndex_ptr  row,
magmaIndex_ptr  col,
magmaDouble_ptr  val,
magma_d_matrix *  A,
magma_queue_t  queue 
)

Passes a CSR matrix to MAGMA (located on DEV).

Parameters
[in]mmagma_int_t number of rows
[in]nmagma_int_t number of columns
[in]rowmagmaIndex_ptr row pointer
[in]colmagmaIndex_ptr column indices
[in]valmagmaDouble_ptr array containing matrix entries
[out]Amagma_d_matrix* matrix in magma sparse matrix format
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dcsrget_gpu ( magma_d_matrix  A,
magma_int_t *  m,
magma_int_t *  n,
magmaIndex_ptr *  row,
magmaIndex_ptr *  col,
magmaDouble_ptr *  val,
magma_queue_t  queue 
)

Passes a MAGMA matrix to CSR structure (located on DEV).

Parameters
[in]Amagma_d_matrix magma sparse matrix in CSR format
[out]mmagma_int_t number of rows
[out]nmagma_int_t number of columns
[out]rowmagmaIndex_ptr row pointer
[out]colmagmaIndex_ptr column indices
[out]valmagmaDouble_ptr array containing matrix entries
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dmdiagdom ( magma_d_matrix  M,
double *  min_dd,
double *  max_dd,
double *  avg_dd,
magma_queue_t  queue 
)

This routine takes a CSR matrix and computes the average diagonal dominance.

For each row i, it computes the abs(d_ii)/sum_j(abs(a_ij)). It returns max, min, and average.

Parameters
[in]Mmagma_d_matrix System matrix.
[out]min_dddouble Smallest diagonal dominance.
[out]max_dddouble Largest diagonal dominance.
[out]avg_dddouble Average diagonal dominance.
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dmbdiagdom ( magma_d_matrix  M,
magma_d_matrix  blocksizes,
double *  min_dd,
double *  max_dd,
double *  avg_dd,
magma_queue_t  queue 
)

This routine takes a CSR matrix and computes the average block-diagonal dominance.

For each row i, it computes the abs( D_(i,:) ) / abs( A(i,:) \ D_(i,:) ). It returns max, min, and average. The input vector bsz contains the blocksizes.

Parameters
[in]Mmagma_d_matrix System matrix.
[in]blocksizesmagma_d_matrix Vector containing blocksizes (as DoubleComplex).
[out]min_dddouble Smallest diagonal dominance.
[out]max_dddouble Largest diagonal dominance.
[out]avg_dddouble Average diagonal dominance.
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dmdiff ( magma_d_matrix  A,
magma_d_matrix  B,
real_Double_t *  res,
magma_queue_t  queue 
)

Computes the Frobenius norm of the difference between the CSR matrices A and B.

They do not need to share the same sparsity pattern!

   res = ||A-B||_F = sqrt( sum_ij (A_ij-B_ij)^2 )
Parameters
[in]Amagma_d_matrix sparse matrix in CSR
[in]Bmagma_d_matrix sparse matrix in CSR
[out]resreal_Double_t* residual
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dmfrobenius ( magma_d_matrix  A,
magma_d_matrix  B,
magma_d_matrix  S,
double *  norm,
magma_queue_t  queue 
)

Computes the Frobenius norm || A - B ||_S on the sparsity pattern of S.

Parameters
[in]Amagma_d_matrix input sparse matrix in CSR
[in]Bmagma_d_matrix input sparse matrix in CSR
[in]Smagma_d_matrix input sparsity pattern in CSR
[out]normdouble* Frobenius norm of difference on sparsity pattern S
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dmgenerator ( magma_int_t  n,
magma_int_t  offdiags,
magma_index_t *  diag_offset,
double *  diag_vals,
magma_d_matrix *  A,
magma_queue_t  queue 
)

Generate a symmetric n x n CSR matrix for a stencil.

Parameters
[in]nmagma_int_t number of rows
[in]offdiagsmagma_int_t number of offdiagonals
[in]diag_offsetmagma_int_t* array containing the offsets
                            (length offsets+1)
[in]diag_valsdouble* array containing the values
                            (length offsets+1)
[out]Amagma_d_matrix* matrix to generate
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dm_27stencil ( magma_int_t  n,
magma_d_matrix *  A,
magma_queue_t  queue 
)

Generate a 27-point stencil for a 3D FD discretization.

Parameters
[in]nmagma_int_t number of rows
[out]Amagma_d_matrix* matrix to generate
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dm_5stencil ( magma_int_t  n,
magma_d_matrix *  A,
magma_queue_t  queue 
)

Generate a 5-point stencil for a 2D FD discretization.

Parameters
[in]nmagma_int_t number of rows
[out]Amagma_d_matrix* matrix to generate
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dsymbilu ( magma_d_matrix *  A,
magma_int_t  levels,
magma_d_matrix *  L,
magma_d_matrix *  U,
magma_queue_t  queue 
)

This routine performs a symbolic ILU factorization.

The algorithm is taken from an implementation written by Edmond Chow.

Parameters
[in,out]Amagma_d_matrix* matrix in magma sparse matrix format containing the original matrix on input, and L,U on output
[in]levelsmagma_magma_int_t_t fill in level
[out]Lmagma_d_matrix* output lower triangular matrix in magma sparse matrix format empty on function call
[out]Umagma_d_matrix* output upper triangular matrix in magma sparse matrix format empty on function call
[in]queuemagma_queue_t Queue to execute in.
magma_int_t read_d_csr_from_mtx ( magma_storage_t *  type,
magma_location_t *  location,
magma_int_t *  n_row,
magma_int_t *  n_col,
magma_int_t *  nnz,
double **  val,
magma_index_t **  row,
magma_index_t **  col,
const char *  filename,
magma_queue_t  queue 
)

Reads in a matrix stored in coo format from a Matrix Market (.mtx) file and converts it into CSR format.

It duplicates the off-diagonal entries in the symmetric case.

Parameters
[out]typemagma_storage_t* storage type of matrix
[out]locationmagma_location_t* location of matrix
[out]n_rowmagma_int_t* number of rows in matrix
[out]n_colmagma_int_t* number of columns in matrix
[out]nnzmagma_int_t* number of nonzeros in matrix
[out]valdouble** value array of CSR output
[out]rowmagma_index_t** row pointer of CSR output
[out]colmagma_index_t** column indices of CSR output
[in]filenameconst char* filname of the mtx matrix
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dwrite_csr_mtx ( magma_d_matrix  A,
magma_order_t  MajorType,
const char *  filename,
magma_queue_t  queue 
)

Writes a CSR matrix to a file using Matrix Market format.

Parameters
[in]Amagma_d_matrix matrix to write out
[in]MajorTypemagma_index_t Row or Column sort default: 0 = RowMajor, 1 = ColMajor TODO: use named constants (e.g., MagmaRowMajor), not numbers.
[in]filenameconst char* output-filname of the mtx matrix
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dprint_csr_mtx ( magma_int_t  n_row,
magma_int_t  n_col,
magma_int_t  nnz,
double **  val,
magma_index_t **  row,
magma_index_t **  col,
magma_order_t  MajorType,
magma_queue_t  queue 
)

Prints a CSR matrix in Matrix Market format.

Parameters
[in]n_rowmagma_int_t* number of rows in matrix
[in]n_colmagma_int_t* number of columns in matrix
[in]nnzmagma_int_t* number of nonzeros in matrix
[in]valdouble** value array of CSR
[in]rowmagma_index_t** row pointer of CSR
[in]colmagma_index_t** column indices of CSR
[in]MajorTypemagma_index_t Row or Column sort default: 0 = RowMajor, 1 = ColMajor
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dprint_csr ( magma_int_t  n_row,
magma_int_t  n_col,
magma_int_t  nnz,
double **  val,
magma_index_t **  row,
magma_index_t **  col,
magma_queue_t  queue 
)

Prints a CSR matrix in CSR format.

Parameters
[in]n_rowmagma_int_t* number of rows in matrix
[in]n_colmagma_int_t* number of columns in matrix
[in]nnzmagma_int_t* number of nonzeros in matrix
[in]valdouble** value array of CSR
[in]rowmagma_index_t** row pointer of CSR
[in]colmagma_index_t** column indices of CSR
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dprint_matrix ( magma_d_matrix  A,
magma_queue_t  queue 
)

Prints a sparse matrix in CSR format.

Parameters
[in]Amagma_d_matrix sparse matrix in Magma_CSR format
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_d_csr_mtx ( magma_d_matrix *  A,
const char *  filename,
magma_queue_t  queue 
)

Reads in a matrix stored in coo format from a Matrix Market (.mtx) file and converts it into CSR format.

It duplicates the off-diagonal entries in the symmetric case.

Parameters
[out]Amagma_d_matrix* matrix in magma sparse matrix format
[in]filenameconst char* filname of the mtx matrix
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_d_csr_mtxsymm ( magma_d_matrix *  A,
const char *  filename,
magma_queue_t  queue 
)

Reads in a SYMMETRIC matrix stored in coo format from a Matrix Market (.mtx) file and converts it into CSR format.

It does not duplicate the off-diagonal entries!

Parameters
[out]Amagma_d_matrix* matrix in magma sparse matrix format
[in]filenameconst char* filname of the mtx matrix
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dmlumerge ( magma_d_matrix  L,
magma_d_matrix  U,
magma_d_matrix *  A,
magma_queue_t  queue 
)

Takes an strictly lower triangular matrix L and an upper triangular matrix U and merges them into a matrix A containing the upper and lower triangular parts.

Parameters
[in]Lmagma_d_matrix input strictly lower triangular matrix L
[in]Umagma_d_matrix input upper triangular matrix U
[out]Amagma_d_matrix* output matrix
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dmscale ( magma_d_matrix *  A,
magma_scale_t  scaling,
magma_queue_t  queue 
)

Scales a matrix.

Parameters
[in,out]Amagma_d_matrix* input/output matrix
[in]scalingmagma_scale_t scaling type (unit rownorm / unit diagonal)
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dmscale_matrix_rhs ( magma_d_matrix *  A,
magma_d_matrix *  b,
magma_d_matrix *  scaling_factors,
magma_scale_t  scaling,
magma_queue_t  queue 
)

Scales a matrix and a right hand side vector of a Ax = b system.

Parameters
[in,out]Amagma_d_matrix* input/output matrix
[in,out]bmagma_d_matrix* input/output right hand side vector
[out]scaling_factorsmagma_d_matrix* output scaling factors vector
[in]scalingmagma_scale_t scaling type (unit rownorm / unit diagonal)
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dmdiagadd ( magma_d_matrix *  A,
double  add,
magma_queue_t  queue 
)

Adds a multiple of the Identity matrix to a matrix: A = A+add * I.

Parameters
[in,out]Amagma_d_matrix* input/output matrix
[in]adddouble scaling for the identity matrix
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dmscale_generate ( magma_int_t  n,
magma_scale_t *  scaling,
magma_side_t *  side,
magma_d_matrix *  A,
magma_d_matrix *  scaling_factors,
magma_queue_t  queue 
)

Generates n vectors of scaling factors from the A matrix and stores them in the factors matrix as column vectors in column major ordering.

Parameters
[in]nmagma_int_t number of diagonal scaling matrices
[in]scalingmagma_scale_t* array of scaling specifiers
[in]sidemagma_side_t* array of side specifiers
[in]Amagma_d_matrix* input matrix
[out]scaling_factorsmagma_d_matrix* array of diagonal matrices
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dmscale_apply ( magma_int_t  n,
magma_side_t *  side,
magma_d_matrix *  scaling_factors,
magma_d_matrix *  A,
magma_queue_t  queue 
)

Applies n diagonal scaling matrices to a matrix A; n=[1,2], factor[i] is applied to side[i] of the matrix.

Parameters
[in]nmagma_int_t number of diagonal scaling matrices
[in]sidemagma_side_t* array of side specifiers
[in]scaling_factorsmagma_d_matrix* array of diagonal matrices
[in,out]Amagma_d_matrix* input/output matrix
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_ddimv ( magma_d_matrix *  vecA,
magma_d_matrix *  vecB,
magma_queue_t  queue 
)

Multiplies a diagonal matrix (vecA) and a vector (vecB).

Parameters
[in]vecAmagma_d_matrix* input matrix
[in,out]vecBmagma_d_matrix* input/output matrix
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dmshrink ( magma_d_matrix  A,
magma_d_matrix *  B,
magma_queue_t  queue 
)

Shrinks a non-square matrix (m < n) to the smaller dimension.

Parameters
[in]Amagma_d_matrix sparse matrix A
[out]Bmagma_d_matrix* sparse matrix A
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dmslice ( magma_int_t  num_slices,
magma_int_t  slice,
magma_d_matrix  A,
magma_d_matrix *  B,
magma_d_matrix *  ALOC,
magma_d_matrix *  ANLOC,
magma_index_t *  comm_i,
double *  comm_v,
magma_int_t *  start,
magma_int_t *  end,
magma_queue_t  queue 
)

Takes a matrix and extracts a slice for solving the system in parallel:

B = A( i:i+n, : ) and ALOC = A(i:i+n,i:i+n) and ANLOCA(0:start - end:n,:)

B is of size n x n, ALOC of size end-start x end-start, ANLOC of size end-start x n

The last slice might be smaller. For the non-local parts, B is the identity. comm contains 1ess in the locations that are non-local but needed to solve local system.

Parameters
[in]num_slicesmagma_int_t number of slices
[in]slicemagma_int_t slice id (0.. num_slices-1)
[in]Amagma_d_matrix sparse matrix in CSR
[out]Bmagma_d_matrix* sparse matrix in CSR
[out]ALOCmagma_d_matrix* sparse matrix in CSR
[out]ANLOCmagma_d_matrix* sparse matrix in CSR
[in,out]comm_imagma_int_t* communication plan
[in,out]comm_vdouble* communication plan
[in]queuemagma_queue_t Queue to execute in.
[out]startmagma_int_t* start of slice (row-index)
[out]endmagma_int_t* end of slice (row-index)
magma_int_t magma_dmsupernodal ( magma_int_t *  max_bs,
magma_d_matrix  A,
magma_d_matrix *  S,
magma_queue_t  queue 
)

Generates a block-diagonal sparsity pattern with block-size bs.

Parameters
[in,out]max_bsmagma_int_t* Size of the largest diagonal block.
[in]Amagma_d_matrix System matrix.
[in,out]Smagma_d_matrix* Generated sparsity pattern matrix.
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dmvarsizeblockstruct ( magma_int_t  n,
magma_int_t *  bs,
magma_int_t  bsl,
magma_uplo_t  uplotype,
magma_d_matrix *  A,
magma_queue_t  queue 
)

Generates a block-diagonal sparsity pattern with variable block-size.

Parameters
[in]nmagma_int_t Size of the matrix.
[in]bsmagma_int_t* Vector containing the size of the diagonal blocks.
[in]bslmagma_int_t Size of the vector containing the block sizes.
[in]uplotypemagma_uplo_t lower or upper triangular
[in,out]Amagma_d_matrix* Generated sparsity pattern matrix.
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dmtransfer ( magma_d_matrix  A,
magma_d_matrix *  B,
magma_location_t  src,
magma_location_t  dst,
magma_queue_t  queue 
)

Copies a matrix from memory location src to memory location dst.

Parameters
[in]Amagma_d_matrix sparse matrix A
[out]Bmagma_d_matrix* copy of A
[in]srcmagma_location_t original location A
[in]dstmagma_location_t location of the copy of A
[in]queuemagma_queue_t Queue to execute in.
magma_int_t d_transpose_csr ( magma_int_t  n_rows,
magma_int_t  n_cols,
magma_int_t  nnz,
double *  values,
magma_index_t *  rowptr,
magma_index_t *  colind,
magma_int_t *  new_n_rows,
magma_int_t *  new_n_cols,
magma_int_t *  new_nnz,
double **  new_values,
magma_index_t **  new_rowptr,
magma_index_t **  new_colind,
magma_queue_t  queue 
)

Transposes a matrix stored in CSR format on the CPU host.

Parameters
[in]n_rowsmagma_int_t number of rows in input matrix
[in]n_colsmagma_int_t number of columns in input matrix
[in]nnzmagma_int_t number of nonzeros in input matrix
[in]valuesdouble* value array of input matrix
[in]rowptrmagma_index_t* row pointer of input matrix
[in]colindmagma_index_t* column indices of input matrix
[in]new_n_rowsmagma_index_t* number of rows in transposed matrix
[in]new_n_colsmagma_index_t* number of columns in transposed matrix
[in]new_nnzmagma_index_t* number of nonzeros in transposed matrix
[in]new_valuesdouble** value array of transposed matrix
[in]new_rowptrmagma_index_t** row pointer of transposed matrix
[in]new_colindmagma_index_t** column indices of transposed matrix
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dmtranspose ( magma_d_matrix  A,
magma_d_matrix *  B,
magma_queue_t  queue 
)

Interface to cuSPARSE transpose.

Parameters
[in]Amagma_d_matrix input matrix (CSR)
[out]Bmagma_d_matrix* output matrix (CSR)
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_d_cucsrtranspose ( magma_d_matrix  A,
magma_d_matrix *  B,
magma_queue_t  queue 
)

Helper function to transpose CSR matrix.

Using the CUSPARSE CSR2CSC function.

Parameters
[in]Amagma_d_matrix input matrix (CSR)
[out]Bmagma_d_matrix* output matrix (CSR)
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dmtransposeconjugate ( magma_d_matrix  A,
magma_d_matrix *  B,
magma_queue_t  queue 
)

This function forms the transpose conjugate of a matrix.

For a real-value matrix, the output is the transpose.

Parameters
[in]Amagma_d_matrix input matrix (CSR)
[out]Bmagma_d_matrix* output matrix (CSR)
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dmtranspose_cpu ( magma_d_matrix  A,
magma_d_matrix *  B,
magma_queue_t  queue 
)

Generates a transpose of A on the CPU.

Parameters
[in]Amagma_d_matrix input matrix (CSR)
[out]Bmagma_d_matrix* output matrix (CSR)
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dmtransposeconj_cpu ( magma_d_matrix  A,
magma_d_matrix *  B,
magma_queue_t  queue 
)

Generates a transpose conjugate of A on the CPU.

Parameters
[in]Amagma_d_matrix input matrix (CSR)
[out]Bmagma_d_matrix* output matrix (CSR)
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dmtransposestruct_cpu ( magma_d_matrix  A,
magma_d_matrix *  B,
magma_queue_t  queue 
)

Generates a transpose of the nonzero pattern of A on the CPU.

Parameters
[in]Amagma_d_matrix input matrix (CSR)
[out]Bmagma_d_matrix* output matrix (CSR)
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dmtransposeabs_cpu ( magma_d_matrix  A,
magma_d_matrix *  B,
magma_queue_t  queue 
)

Generates a transpose with absolute values of A on the CPU.

Parameters
[in]Amagma_d_matrix input matrix (CSR)
[out]Bmagma_d_matrix* output matrix (CSR)
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dparic_sweep ( magma_d_matrix  A,
magma_d_matrix *  L,
magma_queue_t  queue 
)

This function does one asynchronous ParILU sweep (symmetric case).

Input and output array is identical.

Parameters
[in]Amagma_d_matrix System matrix in COO.
[in]Lmagma_d_matrix* Current approximation for the lower triangular factor The format is sorted CSR.
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dparic_sweep_sync ( magma_d_matrix  A,
magma_d_matrix *  L,
magma_queue_t  queue 
)

This function does one synchronized ParILU sweep (symmetric case).

Input and output are different arrays.

Parameters
[in]Amagma_d_matrix System matrix in COO.
[in]Lmagma_d_matrix* Current approximation for the lower triangular factor The format is sorted CSR.
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dparict_candidates ( magma_d_matrix  L0,
magma_d_matrix  L,
magma_d_matrix  LT,
magma_d_matrix *  L_new,
magma_queue_t  queue 
)

This function identifies the candidates like they appear as ILU1 fill-in.

In this version, the matrices are assumed unordered, the linked list is traversed to acces the entries of a row.

Parameters
[in]L0magma_d_matrix tril( ILU(0) ) pattern of original system matrix.
[in]Lmagma_d_matrix Current lower triangular factor.
[in]LTmagma_d_matrix Transose of the lower triangular factor.
[in,out]L_newmagma_d_matrix* List of candidates for L in COO format.
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dparict_sweep_sync ( magma_d_matrix *  A,
magma_d_matrix *  L,
magma_queue_t  queue 
)

This function does one synchronized ParILU sweep.

Input and output are different arrays.

Parameters
[in]Amagma_d_matrix* System matrix.
[in]Lmagma_d_matrix* Current approximation for the lower triangular factor The format is sorted CSR.
[in]Umagma_d_matrix* Current approximation for the upper triangular factor The format is sorted CSC.
[out]L_newmagma_d_matrix* Current approximation for the lower triangular factor The format is unsorted CSR.
[out]U_newmagma_d_matrix* Current approximation for the upper triangular factor The format is unsorted CSC.
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dparilu_sweep ( magma_d_matrix  A,
magma_d_matrix *  L,
magma_d_matrix *  U,
magma_queue_t  queue 
)

This function does one asynchronous ParILU sweep.

Input and output array are identical.

Parameters
[in]Amagma_d_matrix System matrix in COO.
[in]Lmagma_d_matrix* Current approximation for the lower triangular factor The format is sorted CSR.
[in]Umagma_d_matrix* Current approximation for the upper triangular factor The format is sorted CSC (U^T in CSR).
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dparilu_sweep_sync ( magma_d_matrix  A,
magma_d_matrix *  L,
magma_d_matrix *  U,
magma_queue_t  queue 
)

This function does one synchronized ParILU sweep.

Input and output are different arrays.

Parameters
[in]Amagma_d_matrix System matrix in COO.
[in]Lmagma_d_matrix* Current approximation for the lower triangular factor The format is sorted CSR.
[in]Umagma_d_matrix* Current approximation for the upper triangular factor The format is sorted CSC (U^T in CSR).
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dparilut_sweep ( magma_d_matrix *  A,
magma_d_matrix *  L,
magma_d_matrix *  U,
magma_queue_t  queue 
)

This function does an ParILUT sweep.

The difference to the ParILU sweep is that the nonzero pattern of A and the incomplete factors L and U can be different. The pattern determing which elements are iterated are hence the pattern of L and U, not A.

This is the CPU version of the asynchronous ParILUT sweep.

Parameters
[in]Amagma_d_matrix* System matrix. The format is sorted CSR.
[in,out]Lmagma_d_matrix* Current approximation for the lower triangular factor The format is MAGMA_CSRCOO. This is sorted CSR plus the rowindexes being stored.
[in,out]Umagma_d_matrix* Current approximation for the lower triangular factor The format is MAGMA_CSRCOO. This is sorted CSR plus the rowindexes being stored.
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dparilut_sweep_sync ( magma_d_matrix *  A,
magma_d_matrix *  L,
magma_d_matrix *  U,
magma_queue_t  queue 
)

This function does an ParILUT sweep.

The difference to the ParILU sweep is that the nonzero pattern of A and the incomplete factors L and U can be different. The pattern determing which elements are iterated are hence the pattern of L and U, not A.

This is the CPU version of the synchronous ParILUT sweep.

Parameters
[in]Amagma_d_matrix* System matrix. The format is sorted CSR.
[in,out]Lmagma_d_matrix* Current approximation for the lower triangular factor The format is MAGMA_CSRCOO. This is sorted CSR plus the rowindexes being stored.
[in,out]Umagma_d_matrix* Current approximation for the lower triangular factor The format is MAGMA_CSRCOO. This is sorted CSR plus the rowindexes being stored.
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dparilut_residuals ( magma_d_matrix  A,
magma_d_matrix  L,
magma_d_matrix  U,
magma_d_matrix *  R,
magma_queue_t  queue 
)

This function computes the ILU residual in the locations included in the sparsity pattern of R.

Parameters
[in]Amagma_d_matrix System matrix A.
[in]Lmagma_d_matrix Current approximation for the lower triangular factor. The format is sorted CSR.
[in]Umagma_d_matrix Current approximation for the upper triangular factor. The format is sorted CSR.
[in,out]Rmagma_d_matrix* Sparsity pattern on which the ILU residual is computed. R is in COO format. On output, R contains the ILU residual.
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dparilut_thrsrm ( magma_int_t  order,
magma_d_matrix *  A,
double *  thrs,
magma_queue_t  queue 
)

Removes any element with absolute value smaller equal or larger equal thrs from the matrix and compacts the whole thing.

Parameters
[in]ordermagma_int_t order == 1: all elements smaller are discarded order == 0: all elements larger are discarded
[in,out]Amagma_d_matrix* Matrix where elements are removed.
[in]thrsdouble* Threshold: all elements smaller are discarded
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dparilut_thrsrm_U ( magma_int_t  order,
magma_d_matrix  L,
magma_d_matrix *  A,
double *  thrs,
magma_queue_t  queue 
)

Removes any element with absolute value smaller equal or larger equal thrs from the matrix and compacts the whole thing.

Parameters
[in]ordermagma_int_t order == 1: all elements smaller are discarded order == 0: all elements larger are discarded
[in,out]Amagma_d_matrix* Matrix where elements are removed.
[in]thrsdouble* Threshold: all elements smaller are discarded
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dparilut_thrsrm_semilinked ( magma_d_matrix *  U,
magma_d_matrix *  US,
double *  thrs,
magma_queue_t  queue 
)

Removes any element with absolute value smaller thrs from the matrix.

It only uses the linked list and skips the ``removed'' elements

Parameters
[in,out]Amagma_d_matrix* Matrix where elements are removed.
[in]thrsdouble* Threshold: all elements smaller are discarded
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dparilut_rmselected ( magma_d_matrix  R,
magma_d_matrix *  A,
magma_queue_t  queue 
)

Removes a selected list of elements from the matrix.

Parameters
[in]Rmagma_d_matrix Matrix containing elements to be removed.
[in,out]Amagma_d_matrix* Matrix where elements are removed.
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dparilut_selectoneperrow ( magma_int_t  order,
magma_d_matrix *  A,
magma_d_matrix *  oneA,
magma_queue_t  queue 
)

This function takes a list of candidates with residuals, and selects the largest in every row.

The output matrix only contains these largest elements (respectively a zero element if there is no candidate for a certain row).

Parameters
[in]ordermagma_int_t order==1 -> largest order==0 -> smallest
[in]Amagma_d_matrix* Matrix where elements are removed.
[out]oneAmagma_d_matrix* Matrix where elements are removed.
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dparilut_selecttwoperrow ( magma_int_t  order,
magma_d_matrix *  A,
magma_d_matrix *  oneA,
magma_queue_t  queue 
)

This function takes a list of candidates with residuals, and selects the largest in every row.

The output matrix only contains these largest elements (respectively a zero element if there is no candidate for a certain row).

Parameters
[in]ordermagma_int_t order==1 -> largest order==0 -> smallest
[in]Amagma_d_matrix* Matrix where elements are removed.
[out]oneAmagma_d_matrix* Matrix where elements are removed.
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dparilut_selectoneperrowthrs_lower ( magma_d_matrix  L,
magma_d_matrix  U,
magma_d_matrix *  A,
double  rtol,
magma_d_matrix *  oneA,
magma_queue_t  queue 
)

This function takes a list of candidates with residuals, and selects the largest in every row.

The output matrix only contains these largest elements (respectively a zero element if there is no candidate for a certain row).

Parameters
[in]Lmagma_d_matrix Current lower triangular factor.
[in]Umagma_d_matrix Current upper triangular factor.
[in]Amagma_d_matrix* All residuals in L.
[in]rtolthreshold rtol
[out]oneAmagma_d_matrix* at most one per row, if larger thrs.
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dparilut_selectoneperrowthrs_upper ( magma_d_matrix  L,
magma_d_matrix  U,
magma_d_matrix *  A,
double  rtol,
magma_d_matrix *  oneA,
magma_queue_t  queue 
)

This function takes a list of candidates with residuals, and selects the largest in every row.

The output matrix only contains these largest elements (respectively a zero element if there is no candidate for a certain row).

Parameters
[in]Lmagma_d_matrix Current lower triangular factor.
[in]Umagma_d_matrix Current upper triangular factor.
[in]Amagma_d_matrix* All residuals in L.
[in]rtolthreshold rtol
[out]oneAmagma_d_matrix* at most one per row, if larger thrs.
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dparilut_preselect ( magma_int_t  order,
magma_d_matrix *  A,
magma_d_matrix *  oneA,
magma_queue_t  queue 
)

This function takes a list of candidates with residuals, and selects the largest in every row.

The output matrix only contains these largest elements (respectively a zero element if there is no candidate for a certain row).

Parameters
[in]ordermagma_int_t order==0 lower triangular order==1 upper triangular
[in]Amagma_d_matrix* Matrix where elements are removed.
[out]oneAmagma_d_matrix* Matrix where elements are removed.
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dparilut_preselect_scale ( magma_d_matrix *  L,
magma_d_matrix *  oneL,
magma_d_matrix *  U,
magma_d_matrix *  oneU,
magma_queue_t  queue 
)

This function takes a list of candidates with residuals, and selects the largest in every row.

The output matrix only contains these largest elements (respectively a zero element if there is no candidate for a certain row).

Parameters
[in]Lmagma_d_matrix* Matrix where elements are removed.
[in]Umagma_d_matrix* Matrix where elements are removed.
[out]oneLmagma_d_matrix* Matrix where elements are removed.
[out]oneUmagma_d_matrix* Matrix where elements are removed.
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dparilut_transpose ( magma_d_matrix  A,
magma_d_matrix *  B,
magma_queue_t  queue 
)

Transposes a matrix that already contains rowidx.

The idea is to use a linked list.

Parameters
[in]Amagma_d_matrix Matrix to transpose.
[out]Bmagma_d_matrix* Transposed matrix.
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dparilut_transpose_select_one ( magma_d_matrix  A,
magma_d_matrix *  B,
magma_queue_t  queue 
)

This is a special routine with very limited scope.

For a set of fill-in candidates in row-major format, it transposes the a submatrix, i.e. the submatrix consisting of the largest element in every column. This function is only useful for delta<=1.

Parameters
[in]Amagma_d_matrix Matrix to transpose.
[out]Bmagma_d_matrix* Transposed matrix containing only largest elements in each col.
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dparilut_create_collinkedlist ( magma_d_matrix  A,
magma_d_matrix *  B,
magma_queue_t  queue 
)

For the matrix U in CSR (row-major) this creates B containing a row-ptr to the columns and a linked list for the elements.

Parameters
[in]Amagma_d_matrix Matrix to transpose.
[out]Bmagma_d_matrix* Transposed matrix.
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dparilut_sweep_semilinked ( magma_d_matrix *  A,
magma_d_matrix *  L,
magma_d_matrix *  US,
magma_queue_t  queue 
)

This function does an ParILU sweep.

Parameters
[in,out]Amagma_d_matrix* Current ILU approximation The format is unsorted CSR, the list array is used as linked list pointing to the respectively next entry.
[in,out]Lmagma_d_matrix* Current approximation for the lower triangular factor The format is unsorted CSR, the list array is used as linked list pointing to the respectively next entry.
[in,out]Umagma_d_matrix* Current approximation for the upper triangular factor The format is unsorted CSR, the list array is used as linked list pointing to the respectively next entry.
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dparilut_sweep_list ( magma_d_matrix *  A,
magma_d_matrix *  L,
magma_d_matrix *  U,
magma_queue_t  queue 
)

This function does an ParILU sweep.

Parameters
[in,out]Amagma_d_matrix* Current ILU approximation The format is unsorted CSR, the list array is used as linked list pointing to the respectively next entry.
[in,out]Lmagma_d_matrix* Current approximation for the lower triangular factor The format is unsorted CSR, the list array is used as linked list pointing to the respectively next entry.
[in,out]Umagma_d_matrix* Current approximation for the upper triangular factor The format is unsorted CSR, the list array is used as linked list pointing to the respectively next entry.
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dparilut_residuals_semilinked ( magma_d_matrix  A,
magma_d_matrix  L,
magma_d_matrix  US,
magma_d_matrix *  L_new,
magma_queue_t  queue 
)

This function computes the residuals.

Parameters
[in,out]Lmagma_d_matrix Current approximation for the lower triangular factor The format is unsorted CSR, the list array is used as linked list pointing to the respectively next entry.
[in,out]Umagma_d_matrix* Current approximation for the upper triangular factor The format is unsorted CSR, the list array is used as linked list pointing to the respectively next entry.
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dparilut_residuals_transpose ( magma_d_matrix  A,
magma_d_matrix  L,
magma_d_matrix  U,
magma_d_matrix *  U_new,
magma_queue_t  queue 
)

This function computes the residuals.

Parameters
[in,out]Lmagma_d_matrix Current approximation for the lower triangular factor The format is unsorted CSR, the list array is used as linked list pointing to the respectively next entry.
[in,out]Umagma_d_matrix* Current approximation for the upper triangular factor The format is unsorted CSR, the list array is used as linked list pointing to the respectively next entry.
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dparilut_residuals_list ( magma_d_matrix  A,
magma_d_matrix  L,
magma_d_matrix  U,
magma_d_matrix *  L_new,
magma_queue_t  queue 
)

This function computes the residuals.

Parameters
[in,out]Lmagma_d_matrix Current approximation for the lower triangular factor The format is unsorted CSR, the list array is used as linked list pointing to the respectively next entry.
[in,out]Umagma_d_matrix* Current approximation for the upper triangular factor The format is unsorted CSR, the list array is used as linked list pointing to the respectively next entry.
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dparilut_sweep_linkedlist ( magma_d_matrix *  A,
magma_d_matrix *  L,
magma_d_matrix *  U,
magma_queue_t  queue 
)

This function does an ParILU sweep.

Parameters
[in,out]Amagma_d_matrix* Current ILU approximation The format is unsorted CSR, the list array is used as linked list pointing to the respectively next entry.
[in,out]Lmagma_d_matrix* Current approximation for the lower triangular factor The format is unsorted CSR, the list array is used as linked list pointing to the respectively next entry.
[in,out]Umagma_d_matrix* Current approximation for the upper triangular factor The format is unsorted CSR, the list array is used as linked list pointing to the respectively next entry.
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dparilut_residuals_linkedlist ( magma_d_matrix  A,
magma_d_matrix  L,
magma_d_matrix  U,
magma_d_matrix *  L_new,
magma_queue_t  queue 
)

This function computes the residuals.

Parameters
[in,out]Lmagma_d_matrix Current approximation for the lower triangular factor The format is unsorted CSR, the list array is used as linked list pointing to the respectively next entry.
[in,out]Umagma_d_matrix* Current approximation for the upper triangular factor The format is unsorted CSR, the list array is used as linked list pointing to the respectively next entry.
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dparilut_colmajor ( magma_d_matrix  A,
magma_d_matrix *  AC,
magma_queue_t  queue 
)

This function creates a col-pointer and a linked list along the columns for a row-major CSR matrix.

Parameters
[in]Amagma_d_matrix The format is unsorted CSR, the list array is used as linked list pointing to the respectively next entry.
[in,out]ACmagma_d_matrix* The matrix A but with row-pointer being for col-major, same with linked list. The values, col and row indices are unchanged. The respective pointers point to the entities of A.
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dparilut_reorder ( magma_d_matrix *  LU,
magma_queue_t  queue 
)

This routine reorders the matrix (inplace) for easier access.

Parameters
[in]LUmagma_d_matrix* Current ILU approximation.
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dparilut_colmajorup ( magma_d_matrix  A,
magma_d_matrix *  AC,
magma_queue_t  queue 
)

This function creates a col-pointer and a linked list along the columns for a row-major CSR matrix.

Parameters
[in]Amagma_d_matrix The format is unsorted CSR, the list array is used as linked list pointing to the respectively next entry.
[in,out]ACmagma_d_matrix* The matrix A but with row-pointer being for col-major, same with linked list. The values, col and row indices are unchanged. The respective pointers point to the entities of A. Already allocated.
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dparilut_insert ( magma_int_t *  num_rmL,
magma_int_t *  num_rmU,
magma_index_t *  rm_locL,
magma_index_t *  rm_locU,
magma_d_matrix *  L_new,
magma_d_matrix *  U_new,
magma_d_matrix *  L,
magma_d_matrix *  U,
magma_d_matrix *  UR,
magma_queue_t  queue 
)

Inserts for the iterative dynamic ILU an new element in the (empty) place.

Parameters
[in]num_rmLmagma_int_t Number of Elements that are replaced in L.
[in]num_rmUmagma_int_t Number of Elements that are replaced in U.
[in]rm_locLmagma_index_t* List containing the locations of the deleted elements.
[in]rm_locUmagma_index_t* List containing the locations of the deleted elements.
[in]L_newmagma_d_matrix Elements that will be inserted in L stored in COO format (unsorted).
[in]U_newmagma_d_matrix Elements that will be inserted in U stored in COO format (unsorted).
[in,out]Lmagma_d_matrix* matrix where new elements are inserted. The format is unsorted CSR, list is used as linked list pointing to the respectively next entry.
[in,out]Umagma_d_matrix* matrix where new elements are inserted. Row-major. The format is unsorted CSR, list is used as linked list pointing to the respectively next entry.
[in,out]URmagma_d_matrix* Same matrix as U, but column-major. The format is unsorted CSR, list is used as linked list pointing to the respectively next entry.
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dparilut_candidates ( magma_d_matrix  L0,
magma_d_matrix  U0,
magma_d_matrix  L,
magma_d_matrix  U,
magma_d_matrix *  L_new,
magma_d_matrix *  U_new,
magma_queue_t  queue 
)

This function identifies the candidates like they appear as ILU1 fill-in.

In this version, the matrices are assumed unordered, the linked list is traversed to acces the entries of a row.

Parameters
[in]L0magma_d_matrix tril( ILU(0) ) pattern of original system matrix.
[in]U0magma_d_matrix triu( ILU(0) ) pattern of original system matrix.
[in]Lmagma_d_matrix Current lower triangular factor.
[in]Umagma_d_matrix Current upper triangular factor.
[in,out]LU_newmagma_d_matrix* List of candidates for L in COO format.
[in,out]LU_newmagma_d_matrix* List of candidates for U in COO format.
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dparilut_candidates_semilinked ( magma_d_matrix  L0,
magma_d_matrix  U0,
magma_d_matrix  L,
magma_d_matrix  U,
magma_d_matrix  UT,
magma_d_matrix *  L_new,
magma_d_matrix *  U_new,
magma_queue_t  queue 
)

This function identifies the candidates like they appear as ILU1 fill-in.

In this version, the matrices are assumed unordered, the linked list is traversed to acces the entries of a row.

Parameters
[in]L0magma_d_matrix tril( ILU(0) ) pattern of original system matrix.
[in]U0magma_d_matrix triu( ILU(0) ) pattern of original system matrix.
[in]Lmagma_d_matrix Current lower triangular factor.
[in]Umagma_d_matrix Current upper triangular factor transposed.
[in]URmagma_d_matrix Current upper triangular factor - col-pointer and col-list.
[in,out]LU_newmagma_d_matrix* List of candidates for L in COO format.
[in,out]LU_newmagma_d_matrix* List of candidates for U in COO format.
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dparilut_rm_thrs ( double *  thrs,
magma_int_t *  num_rm,
magma_d_matrix *  LU,
magma_d_matrix *  LU_new,
magma_index_t *  rm_loc,
magma_queue_t  queue 
)

This routine removes matrix entries from the structure that are smaller than the threshold.

It only counts the elements deleted, does not save the locations.

Parameters
[out]thrsdouble* Thrshold for removing elements.
[out]num_rmmagma_int_t* Number of Elements that have been removed.
[in,out]LUmagma_d_matrix* Current ILU approximation where the identified smallest components are deleted.
[in,out]LUCmagma_d_matrix* Corresponding col-list.
[in,out]LU_newmagma_d_matrix* List of candidates in COO format.
[out]rm_locmagma_index_t* List containing the locations of the elements deleted.
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dparilut_count ( magma_d_matrix  L,
magma_int_t *  num,
magma_queue_t  queue 
)

This is a helper routine counting elements in a matrix in unordered Magma_CSRLIST format.

Parameters
[in]Lmagma_d_matrix* Matrix in Magm_CSRLIST format
[out]nummagma_index_t* Number of elements counted.
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dparilut_select_candidates_L ( magma_int_t *  num_rm,
magma_index_t *  rm_loc,
magma_d_matrix *  L_new,
magma_queue_t  queue 
)

Screens the new candidates for multiple elements in the same row.

We allow for at most one new element per row. This changes the algorithm, but pays off in performance.

Parameters
[in]num_rmLmagma_int_t Number of Elements that are replaced.
[in]num_rmUmagma_int_t Number of Elements that are replaced.
[in]rm_locmagma_int_t* Number of Elements that are replaced by distinct threads.
[in]L_newmagma_d_matrix* Elements that will be inserted stored in COO format (unsorted).
[in]U_newmagma_d_matrix* Elements that will be inserted stored in COO format (unsorted).
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dparilut_select_candidates_U ( magma_int_t *  num_rm,
magma_index_t *  rm_loc,
magma_d_matrix *  L_new,
magma_queue_t  queue 
)

Screens the new candidates for multiple elements in the same row.

We allow for at most one new element per row. This changes the algorithm, but pays off in performance.

Parameters
[in]num_rmLmagma_int_t Number of Elements that are replaced.
[in]num_rmUmagma_int_t Number of Elements that are replaced.
[in]rm_locmagma_int_t* Number of Elements that are replaced by distinct threads.
[in]L_newmagma_d_matrix* Elements that will be inserted stored in COO format (unsorted).
[in]U_newmagma_d_matrix* Elements that will be inserted stored in COO format (unsorted).
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dparilut_set_approx_thrs ( magma_int_t  num_rm,
magma_d_matrix *  LU,
magma_int_t  order,
double *  thrs,
magma_queue_t  queue 
)

This routine approximates the threshold for removing num_rm elements.

Parameters
[in]num_rmmagma_int_t Number of Elements that are replaced.
[in]LUmagma_d_matrix* Current ILU approximation.
[in]ordermagma_int_t Sort goal function: 0 = smallest, 1 = largest.
[out]thrsdouble* Size of the num_rm-th smallest element.
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dparilut_set_thrs_randomselect ( magma_int_t  num_rm,
magma_d_matrix *  LU,
magma_int_t  order,
double *  thrs,
magma_queue_t  queue 
)

This routine approximates the threshold for removing num_rm elements.

Parameters
[in]num_rmmagma_int_t Number of Elements that are replaced.
[in]LUmagma_d_matrix* Current ILU approximation.
[in]ordermagma_int_t Sort goal function: 0 = smallest, 1 = largest.
[out]thrsdouble* Size of the num_rm-th smallest element.
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dparilut_set_thrs_L_scaled ( magma_int_t  num_rm,
magma_d_matrix *  L,
magma_d_matrix *  U,
magma_int_t  order,
double *  thrs,
magma_queue_t  queue 
)

This routine approximates the threshold for removing num_rm elements.

It takes into account the scaling with the diagonal.

Parameters
[in]num_rmmagma_int_t Number of Elements that are replaced.
[in]Lmagma_d_matrix* Current L approximation.
[in]Umagma_d_matrix* Current U approximation.
[in]ordermagma_int_t Sort goal function: 0 = smallest, 1 = largest.
[out]thrsdouble* Size of the num_rm-th smallest element.
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dparilut_set_thrs_randomselect_approx2 ( magma_int_t  num_rm,
magma_d_matrix *  LU,
magma_int_t  order,
double *  thrs,
magma_queue_t  queue 
)

This routine approximates the threshold for removing num_rm elements.

Parameters
[in]num_rmmagma_int_t Number of Elements that are replaced.
[in]LUmagma_d_matrix* Current ILU approximation.
[in]ordermagma_int_t Sort goal function: 0 = smallest, 1 = largest.
[out]thrsdouble* Size of the num_rm-th smallest element.
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dparilut_set_thrs_randomselect_approx ( magma_int_t  num_rm,
magma_d_matrix *  LU,
magma_int_t  order,
double *  thrs,
magma_queue_t  queue 
)

This routine approximates the threshold for removing num_rm elements.

Parameters
[in]num_rmmagma_int_t Number of Elements that are replaced.
[in]LUmagma_d_matrix* Current ILU approximation.
[in]ordermagma_int_t Sort goal function: 0 = smallest, 1 = largest.
[out]thrsdouble* Size of the num_rm-th smallest element.
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dparilut_set_thrs_randomselect_factors ( magma_int_t  num_rm,
magma_d_matrix *  L,
magma_d_matrix *  U,
magma_int_t  order,
double *  thrs,
magma_queue_t  queue 
)

This routine approximates the threshold for removing num_rm elements.

Parameters
[in]num_rmmagma_int_t Number of Elements that are replaced.
[in]LUmagma_d_matrix* Current ILU approximation.
[in]ordermagma_int_t Sort goal function: 0 = smallest, 1 = largest.
[out]thrsdouble* Size of the num_rm-th smallest element.
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dparilut_set_exact_thrs ( magma_int_t  num_rm,
magma_d_matrix *  LU,
magma_int_t  order,
double *  thrs,
magma_queue_t  queue 
)

This routine provides the exact threshold for removing num_rm elements.

Parameters
[in]num_rmmagma_int_t Number of Elements that are replaced.
[in]LUmagma_d_matrix* Current ILU approximation.
[in]ordermagma_int_t Sort goal function: 0 = smallest, 1 = largest.
[out]thrsdouble* Size of the num_rm-th smallest element.
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dparilut_set_approx_thrs_inc ( magma_int_t  num_rm,
magma_d_matrix *  LU,
magma_int_t  order,
double *  thrs,
magma_queue_t  queue 
)

This routine provides the exact threshold for removing num_rm elements.

Parameters
[in]num_rmmagma_int_t Number of Elements that are replaced.
[in]LUmagma_d_matrix* Current ILU approximation.
[in]ordermagma_int_t Sort goal function: 0 = smallest, 1 = largest.
[out]thrsdouble* Size of the num_rm-th smallest element.
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dparilut_align_residuals ( magma_d_matrix  L,
magma_d_matrix  U,
magma_d_matrix *  Lnew,
magma_d_matrix *  Unew,
magma_queue_t  queue 
)

This function scales the residuals of a lower triangular factor L with the diagonal of U.

The intention is to generate a good initial guess for inserting the elements.

Parameters
[in]Lmagma_d_matrix Current approximation for the lower triangular factor The format is sorted CSR.
[in]Umagma_d_matrix Current approximation for the upper triangular factor The format is sorted CSC.
[in]hLmagma_d_matrix* Current approximation for the lower triangular factor The format is sorted CSR.
[in]hUmagma_d_matrix* Current approximation for the upper triangular factor The format is sorted CSC.
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dfrobenius ( magma_d_matrix  A,
magma_d_matrix  B,
real_Double_t *  res,
magma_queue_t  queue 
)

Computes the Frobenius norm of the difference between the CSR matrices A and B.

They need to share the same sparsity pattern!

Parameters
[in]Amagma_d_matrix sparse matrix in CSR
[in]Bmagma_d_matrix sparse matrix in CSR
[out]resreal_Double_t* Frobenius norm of difference
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dnonlinres ( magma_d_matrix  A,
magma_d_matrix  L,
magma_d_matrix  U,
magma_d_matrix *  LU,
real_Double_t *  res,
magma_queue_t  queue 
)

Computes the nonlinear residual A - LU and returns the difference as well es the Frobenius norm of the difference.

Parameters
[in]Amagma_d_matrix input sparse matrix in CSR
[in]Lmagma_d_matrix input sparse matrix in CSR
[in]Umagma_d_matrix input sparse matrix in CSR
[out]LUmagma_d_matrix* output sparse matrix in A-LU in CSR
[out]resreal_Double_t* Frobenius norm of difference
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dilures ( magma_d_matrix  A,
magma_d_matrix  L,
magma_d_matrix  U,
magma_d_matrix *  LU,
real_Double_t *  res,
real_Double_t *  nonlinres,
magma_queue_t  queue 
)

Computes the ILU residual A - LU and returns the difference as well es the Frobenius norm of the difference.

Parameters
[in]Amagma_d_matrix input sparse matrix in CSR
[in]Lmagma_d_matrix input sparse matrix in CSR
[in]Umagma_d_matrix input sparse matrix in CSR
[out]LUmagma_d_matrix* output sparse matrix in A-LU in CSR
[out]resreal_Double_t* Frobenius norm of difference
[out]nonlinresreal_Double_t* Frobenius norm of difference
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dicres ( magma_d_matrix  A,
magma_d_matrix  C,
magma_d_matrix  CT,
magma_d_matrix *  LU,
real_Double_t *  res,
real_Double_t *  nonlinres,
magma_queue_t  queue 
)

Computes the IC residual A - CC^T and returns the difference as well es the Frobenius norm of the difference.

Parameters
[in]Amagma_d_matrix input sparse matrix in CSR
[in]Cmagma_d_matrix input sparse matrix in CSR
[in]CTmagma_d_matrix input sparse matrix in CSR
[in]LUmagma_d_matrix* output sparse matrix in A-LU in CSR
[out]resreal_Double_t* IC residual
[out]nonlinresreal_Double_t* nonlinear residual
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dinitguess ( magma_d_matrix  A,
magma_d_matrix *  L,
magma_d_matrix *  U,
magma_queue_t  queue 
)

Computes an initial guess for the ParILU/ParIC.

Parameters
[in]Amagma_d_matrix sparse matrix in CSR
[out]Lmagma_d_matrix* sparse matrix in CSR
[out]Umagma_d_matrix* sparse matrix in CSR
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dinitrecursiveLU ( magma_d_matrix  A,
magma_d_matrix *  B,
magma_queue_t  queue 
)

Using the iterative approach of computing ILU factorizations with increasing fill-in, it takes the input matrix A, containing the approximate factors, ( L and U as well ) computes a matrix with one higher level of fill-in, inserts the original approximation as initial guess, and provides the factors L and U also filled with the scaled initial guess.

Parameters
[in]Amagma_d_matrix* sparse matrix in CSR
[out]Bmagma_d_matrix* sparse matrix in CSR
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dmLdiagadd ( magma_d_matrix *  L,
magma_queue_t  queue 
)

Checks for a lower triangular matrix whether it is strictly lower triangular and in the negative case adds a unit diagonal.

It does this in-place.

Parameters
[in,out]Lmagma_d_matrix* sparse matrix in CSR
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dselect ( double *  a,
magma_int_t  size,
magma_int_t  k,
magma_queue_t  queue 
)

An efficient implementation of Blum, Floyd, Pratt, Rivest, and Tarjan's worst-case linear selection algorithm.

Derrick Coetzee, webma.nosp@m.ster.nosp@m.@moon.nosp@m.flar.nosp@m.e.com January 22, 2004 http://moonflare.com/code/select/select.pdf

Parameters
[in,out]adouble* array to select from
[in]sizemagma_int_t size of array
[in]kmagma_int_t k-th smallest element
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dselectrandom ( double *  a,
magma_int_t  size,
magma_int_t  k,
magma_queue_t  queue 
)

An efficient implementation of Blum, Floyd, Pratt, Rivest, and Tarjan's worst-case linear selection algorithm.

Derrick Coetzee, webma.nosp@m.ster.nosp@m.@moon.nosp@m.flar.nosp@m.e.com January 22, 2004 http://moonflare.com/code/select/select.pdf

Parameters
[in,out]adouble* array to select from
[in]sizemagma_int_t size of array
[in]kmagma_int_t k-th smallest element
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dsolverinfo ( magma_d_solver_par *  solver_par,
magma_d_preconditioner *  precond_par,
magma_queue_t  queue 
)

Prints information about a previously called solver.

Parameters
[in]solver_parmagma_d_solver_par* structure containing all solver information
[in,out]precond_parmagma_d_preconditioner* structure containing all preconditioner information
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dsolverinfo_free ( magma_d_solver_par *  solver_par,
magma_d_preconditioner *  precond_par,
magma_queue_t  queue 
)

Frees any memory assocoiated with the verbose mode of solver_par.

The other values are set to default.

Parameters
[in,out]solver_parmagma_d_solver_par* structure containing all solver information
[in,out]precond_parmagma_d_preconditioner* structure containing all preconditioner information
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dsolverinfo_init ( magma_d_solver_par *  solver_par,
magma_d_preconditioner *  precond_par,
magma_queue_t  queue 
)

Initializes all solver and preconditioner parameters.

Parameters
[in,out]solver_parmagma_d_solver_par* structure containing all solver information
[in,out]precond_parmagma_d_preconditioner* structure containing all preconditioner information
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_deigensolverinfo_init ( magma_d_solver_par *  solver_par,
magma_queue_t  queue 
)

Initializes space for eigensolvers.

Parameters
[in,out]solver_parmagma_d_solver_par* structure containing all solver information
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dsort ( double *  x,
magma_int_t  first,
magma_int_t  last,
magma_queue_t  queue 
)

Sorts an array of values in increasing order.

Parameters
[in,out]xdouble* array to sort
[in]firstmagma_int_t pointer to first element
[in]lastmagma_int_t pointer to last element
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dmsort ( double *  x,
magma_index_t *  col,
magma_index_t *  row,
magma_int_t  first,
magma_int_t  last,
magma_queue_t  queue 
)

Sorts an array of values in increasing order.

Parameters
[in,out]xdouble* array to sort
[in,out]colmagma_index_t* Target array, will be modified during operation.
[in,out]rowmagma_index_t* Target array, will be modified during operation.
[in]firstmagma_int_t pointer to first element
[in]lastmagma_int_t pointer to last element
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dindexsort ( magma_index_t *  x,
magma_int_t  first,
magma_int_t  last,
magma_queue_t  queue 
)

Sorts an array of integers in increasing order.

Parameters
[in,out]xmagma_index_t* array to sort
[in]firstmagma_int_t pointer to first element
[in]lastmagma_int_t pointer to last element
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dindexsortval ( magma_index_t *  x,
double *  y,
magma_int_t  first,
magma_int_t  last,
magma_queue_t  queue 
)

Sorts an array of integers, updates a respective array of values.

Parameters
[in,out]xmagma_index_t* array to sort
[in,out]ydouble* array to sort
[in]firstmagma_int_t pointer to first element
[in]lastmagma_int_t pointer to last element
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dmorderstatistics ( double *  val,
magma_index_t *  col,
magma_index_t *  row,
magma_int_t  length,
magma_int_t  k,
magma_int_t  r,
double *  element,
magma_queue_t  queue 
)

Identifies the kth smallest/largest element in an array and reorders such that these elements come to the front.

The related arrays col and row are also reordered.

Parameters
[in,out]valdouble* Target array, will be modified during operation.
[in,out]colmagma_index_t* Target array, will be modified during operation.
[in,out]rowmagma_index_t* Target array, will be modified during operation.
[in]lengthmagma_int_t Length of the target array.
[in]kmagma_int_t Element to be identified (largest/smallest).
[in]rmagma_int_t rule how to sort: '1' -> largest, '0' -> smallest
[out]elementdouble* location of the respective element
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dorderstatistics ( double *  val,
magma_int_t  length,
magma_int_t  k,
magma_int_t  r,
double *  element,
magma_queue_t  queue 
)

Identifies the kth smallest/largest element in an array.

Parameters
[in,out]valdouble* Target array, will be modified during operation.
[in]lengthmagma_int_t Length of the target array.
[in]kmagma_int_t Element to be identified (largest/smallest).
[in]rmagma_int_t rule how to sort: '1' -> largest, '0' -> smallest
[out]elementdouble* location of the respective element
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dorderstatistics_inc ( double *  val,
magma_int_t  length,
magma_int_t  k,
magma_int_t  inc,
magma_int_t  r,
double *  element,
magma_queue_t  queue 
)

Approximates the k-th smallest element in an array by using order-statistics with step-size inc.

Parameters
[in,out]valdouble* Target array, will be modified during operation.
[in]lengthmagma_int_t Length of the target array.
[in]kmagma_int_t Element to be identified (largest/smallest).
[in]incmagma_int_t Stepsize in the approximation.
[in]rmagma_int_t rule how to sort: '1' -> largest, '0' -> smallest
[out]elementdouble* location of the respective element
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dbitonic_sort ( magma_int_t  start,
magma_int_t  length,
double *  seq,
magma_int_t  flag,
magma_queue_t  queue 
)

Approximates the k-th smallest element in an array by using order-statistics with step-size inc.

Parameters
[in]startmagma_int_t Start position of the target array.
[in]lengthmagma_int_t Length of the target array.
[in,out]seqdouble* Target array, will be modified during operation.
[in]flagmagma_int_t ???
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dparse_opts ( int  argc,
char **  argv,
magma_dopts *  opts,
int *  matrices,
magma_queue_t  queue 
)

Parses input options for a solver.

Parameters
[in]argcint command line input
[in]argvchar** command line input
[in,out]optsmagma_dopts * magma solver options
[out]matricesint counter how many linear systems to process
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dvinit ( magma_d_matrix *  x,
magma_location_t  mem_loc,
magma_int_t  num_rows,
magma_int_t  num_cols,
double  values,
magma_queue_t  queue 
)

Allocates memory for magma_d_matrix and initializes it with the passed value.

Parameters
[out]xmagma_d_matrix* vector to initialize
[in]mem_locmagma_location_t memory for vector
[in]num_rowsmagma_int_t desired length of vector
[in]num_colsmagma_int_t desired width of vector-block (columns of dense matrix)
[in]valuesdouble entries in vector
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dvinit_rand ( magma_d_matrix *  x,
magma_location_t  mem_loc,
magma_int_t  num_rows,
magma_int_t  num_cols,
magma_queue_t  queue 
)

Allocates memory for magma_d_matrix and initializes it with random values.

Parameters
[out]xmagma_d_matrix* vector to initialize
[in]mem_locmagma_location_t memory for vector
[in]num_rowsmagma_int_t desired length of vector
[in]num_colsmagma_int_t desired width of vector-block (columns of dense matrix)
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dprint_vector ( magma_d_matrix  x,
magma_int_t  offset,
magma_int_t  visulen,
magma_queue_t  queue 
)

Visualizes part of a vector of type magma_d_matrix.

With input vector x , offset, visulen, the entries offset - (offset + visulen) of x are visualized.

Parameters
[in]xmagma_d_matrix vector to visualize
[in]offsetmagma_int_t start inex of visualization
[in]visulenmagma_int_t number of entries to visualize
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dvread ( magma_d_matrix *  x,
magma_int_t  length,
char *  filename,
magma_queue_t  queue 
)

Reads in a double vector of length "length".

Parameters
[out]xmagma_d_matrix * vector to read in
[in]lengthmagma_int_t length of vector
[in]filenamechar* file where vector is stored
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dvspread ( magma_d_matrix *  x,
const char *  filename,
magma_queue_t  queue 
)

Reads in a sparse vector-block stored in COO format.

Parameters
[out]xmagma_d_matrix * vector to read in
[in]filenamechar* file where vector is stored
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dwrite_vector ( magma_d_matrix  A,
const char *  filename,
magma_queue_t  queue 
)

Writes a vector to a file.

Parameters
[in]Amagma_d_matrix matrix to write out
[in]filenameconst char* output-filname of the mtx matrix
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dvset ( magma_int_t  m,
magma_int_t  n,
double *  val,
magma_d_matrix *  v,
magma_queue_t  queue 
)

Passes a vector to MAGMA.

Parameters
[in]mmagma_int_t number of rows
[in]nmagma_int_t number of columns
[in]valdouble* array containing vector entries
[out]vmagma_d_matrix* magma vector
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dvcopy ( magma_d_matrix  v,
magma_int_t *  m,
magma_int_t *  n,
double *  val,
magma_queue_t  queue 
)

Passes a MAGMA vector back.

This function requires the array val to be already allocated (of size m x n).

Parameters
[in]vmagma_d_matrix magma vector
[out]mmagma_int_t number of rows
[out]nmagma_int_t number of columns
[out]valdouble* array of size m x n the vector entries are copied into
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dvset_dev ( magma_int_t  m,
magma_int_t  n,
magmaDouble_ptr  val,
magma_d_matrix *  v,
magma_queue_t  queue 
)

Passes a vector to MAGMA (located on DEV).

Parameters
[in]mmagma_int_t number of rows
[in]nmagma_int_t number of columns
[in]valdouble* array containing vector entries
[out]vmagma_d_matrix* magma vector
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dvget ( magma_d_matrix  v,
magma_int_t *  m,
magma_int_t *  n,
double **  val,
magma_queue_t  queue 
)

Passes a MAGMA vector back.

Parameters
[in]vmagma_d_matrix magma vector
[out]mmagma_int_t number of rows
[out]nmagma_int_t number of columns
[out]valdouble* array containing vector entries
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dvget_dev ( magma_d_matrix  v,
magma_int_t *  m,
magma_int_t *  n,
magmaDouble_ptr *  val,
magma_queue_t  queue 
)

Passes a MAGMA vector back (located on DEV).

Parameters
[in]vmagma_d_matrix magma vector
[out]mmagma_int_t number of rows
[out]nmagma_int_t number of columns
[out]valmagmaDouble_ptr array containing vector entries
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dvcopy_dev ( magma_d_matrix  v,
magma_int_t *  m,
magma_int_t *  n,
magmaDouble_ptr  val,
magma_queue_t  queue 
)

Passes a MAGMA vector back (located on DEV).

This function requires the array val to be already allocated (of size m x n).

Parameters
[in]vmagma_d_matrix magma vector
[out]mmagma_int_t number of rows
[out]nmagma_int_t number of columns
[out]valdouble* array of size m x n on the device the vector entries are copied into
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dvtranspose ( magma_d_matrix  x,
magma_d_matrix *  y,
magma_queue_t  queue 
)

Transposes a vector from col to row major and vice versa.

Parameters
[in]xmagma_d_matrix input vector
[out]ymagma_d_matrix* output vector
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_disai_generator_regs ( magma_uplo_t  uplotype,
magma_trans_t  transtype,
magma_diag_t  diagtype,
magma_d_matrix  L,
magma_d_matrix *  M,
magma_queue_t  queue 
)

This routine is designet to combine all kernels into one.

Parameters
[in]uplotypemagma_uplo_t lower or upper triangular
[in]transtypemagma_trans_t possibility for transposed matrix
[in]diagtypemagma_diag_t unit diagonal or not
[in]Lmagma_d_matrix triangular factor for which the ISAI matrix is computed. Col-Major CSR storage.
[in,out]Mmagma_d_matrix* SPAI preconditioner CSR col-major
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dgeisai_maxblock ( magma_d_matrix  L,
magma_d_matrix *  MT,
magma_queue_t  queue 
)

This routine maximizes the pattern for the ISAI preconditioner.

Precisely, it computes L, L^2, L^3, L^4, L^5 and then selects the columns of M_L such that the nonzer-per-column are the lower max than the implementation-specific limit (32).

The input is the original matrix (row-major) The output is already col-major.

Parameters
[in,out]Lmagma_d_matrix Incomplete factor.
[in,out]MTmagma_d_matrix* SPAI preconditioner structure, CSR col-major.
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dmtrisolve_batched_gpu ( magma_uplo_t  uplotype,
magma_trans_t  transtype,
magma_diag_t  diagtype,
magma_d_matrix  L,
magma_d_matrix  LC,
magma_index_t *  sizes,
magma_index_t *  locations,
double *  trisystems,
double *  rhs,
magma_queue_t  queue 
)

Does all triangular solves.

Parameters
[in]uplotypemagma_uplo_t lower or upper triangular
[in]transtypemagma_trans_t possibility for transposed matrix
[in]diagtypemagma_diag_t unit diagonal or not
[in]Lmagma_d_matrix Matrix in CSR format
[in]LCmagma_d_matrix same matrix, also CSR, but col-major
[out]sizesmagma_int_t* Number of Elements that are replaced.
[out]locationsmagma_int_t* Array indicating the locations.
[out]trisystemsdouble* trisystems
[out]rhsdouble* right-hand sides
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dlobpcg_res ( magma_int_t  num_rows,
magma_int_t  num_vecs,
magmaDouble_ptr  evalues,
magmaDouble_ptr  X,
magmaDouble_ptr  R,
magmaDouble_ptr  res,
magma_queue_t  queue 
)

This routine computes for Block-LOBPCG, the set of residuals.

                    R = Ax - x evalues

It replaces: for(int i=0; i < n; i++) { magma_daxpy(m, MAGMA_D_MAKE(-evalues[i],0),blockX+i*m,1,blockR+i*m,1); } The memory layout of x is:

/ x1[0] x2[0] x3[0] \
| x1[1] x2[1] x3[1] |

x = | x1[2] x2[2] x3[2] | = x1[0] x1[1] x1[2] x1[3] x1[4] x2[0] x2[1] . | x1[3] x2[3] x3[3] | \ x1[4] x2[4] x3[4] /

Parameters
[in]num_rowsmagma_int_t number of rows
[in]num_vecsmagma_int_t number of vectors
[in]evaluesmagmaDouble_ptr array of eigenvalues/approximations
[in]XmagmaDouble_ptr block of eigenvector approximations
[in]RmagmaDouble_ptr block of residuals
[in]resmagmaDouble_ptr array of residuals
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dlobpcg_shift ( magma_int_t  num_rows,
magma_int_t  num_vecs,
magma_int_t  shift,
magmaDouble_ptr  x,
magma_queue_t  queue 
)

For a Block-LOBPCG, the set of residuals (entries consecutive in memory) shrinks and the vectors are shifted in case shift residuals drop below threshold.

The memory layout of x is:

/ x1[0] x2[0] x3[0] \ | x1[1] x2[1] x3[1] | x = | x1[2] x2[2] x3[2] | = x1[0] x2[0] x3[0] x1[1] x2[1] x3[1] x1[2] . | x1[3] x2[3] x3[3] | \ x1[4] x2[4] x3[4] /

Parameters
[in]num_rowsmagma_int_t number of rows
[in]num_vecsmagma_int_t number of vectors
[in]shiftmagma_int_t shift number
[in,out]xmagmaDouble_ptr input/output vector x
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dparilut_candidates_gpu ( magma_d_matrix  L0,
magma_d_matrix  U0,
magma_d_matrix  L,
magma_d_matrix  U,
magma_d_matrix *  L_new,
magma_d_matrix *  U_new,
magma_queue_t  queue 
)

This function identifies the locations with a potential nonzero ILU residual R = A - L*U where L and U are the current incomplete factors.

Nonzero ILU residuals are possible 1 where A is nonzero but L and U have no nonzero entry 2 where the product L*U has fill-in but the location is not included in L or U

We assume that the incomplete factors are exact fro the elements included in the current pattern.

This is the GPU implementation of the candidate search.

2 GPU kernels are used: the first is a dry run assessing the memory need, the second then computes the candidate locations, the third eliminates double entries. The fourth kernel ensures the elements in a row are sorted for increasing column index.

Parameters
[in]L0magma_d_matrix tril(ILU(0) ) pattern of original system matrix.
[in]U0magma_d_matrix triu(ILU(0) ) pattern of original system matrix.
[in]Lmagma_d_matrix Current lower triangular factor.
[in]Umagma_d_matrix Current upper triangular factor.
[in,out]L_newmagma_d_matrix* List of candidates for L in COO format.
[in,out]U_newmagma_d_matrix* List of candidates for U in COO format.
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dcopyscale ( magma_int_t  n,
magma_int_t  k,
magmaDouble_ptr  r,
magmaDouble_ptr  v,
magmaDouble_ptr  skp,
magma_queue_t  queue 
)

Computes the correction term of the pipelined GMRES according to P.

Ghysels and scales and copies the new search direction

Returns the vector v = r/ ( skp[k] - (sum_i=1^k skp[i]^2) ) .

Parameters
[in]nint length of v_i
[in]kint

skp entries v_i^T * r ( without r )

Parameters
[in]rmagmaDouble_ptr vector of length n
[in]vmagmaDouble_ptr vector of length n
[in]skpmagmaDouble_ptr array of parameters
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_ddiagcheck ( magma_d_matrix  dA,
magma_queue_t  queue 
)

This routine checks for a CSR matrix whether there exists a zero on the diagonal.

This can be the diagonal entry missing or an explicit zero.

Parameters
[in]dAmagma_d_matrix matrix in CSR format
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dmatrix_cup_gpu ( magma_d_matrix  A,
magma_d_matrix  B,
magma_d_matrix *  U,
magma_queue_t  queue 
)

Generates a matrix U = A B.

If both matrices have a nonzero value in the same location, the value of A is used.

This is the GPU version of the operation.

Parameters
[in]Amagma_d_matrix Input matrix 1.
[in]Bmagma_d_matrix Input matrix 2.
[out]Umagma_d_matrix* U = A B. If both matrices have a nonzero value in the same location, the value of A is used.
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dcsr_sort_gpu ( magma_d_matrix *  A,
magma_queue_t  queue 
)

Generates a matrix U = A B.

If both matrices have a nonzero value in the same location, the value of A is used.

This is the GPU version of the operation.

Parameters
[in]Amagma_d_matrix Input matrix 1.
[in]Bmagma_d_matrix Input matrix 2.
[out]Umagma_d_matrix* U = A B. If both matrices have a nonzero value in the same location, the value of A is used.
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dmconjugate ( magma_d_matrix *  A,
magma_queue_t  queue 
)

This function conjugates a matrix.

For a real matrix, no value is changed.

Parameters
[in,out]Amagma_d_matrix* input/output matrix
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dmcsrcompressor_gpu ( magma_d_matrix *  A,
magma_queue_t  queue 
)

Removes zeros in a CSR matrix.

This is a GPU implementation of the CSR compressor.

Parameters
[in,out]Amagma_d_matrix* input/output matrix
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dpreselect_gpu ( magma_int_t  order,
magma_d_matrix *  A,
magma_d_matrix *  oneA,
magma_queue_t  queue 
)

This function takes a list of candidates with residuals, and selects the largest in every row.

The output matrix only contains these largest elements (respectively a zero element if there is no candidate for a certain row).

Parameters
[in]ordermagma_int_t order==0 lower triangular order==1 upper triangular
[in]Amagma_d_matrix* Matrix where elements are removed.
[out]oneAmagma_d_matrix* Matrix where elements are removed.
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dsampleselect ( magma_int_t  total_size,
magma_int_t  subset_size,
double *  val,
double *  thrs,
magma_ptr *  tmp_ptr,
magma_int_t *  tmp_size,
magma_queue_t  queue 
)

This routine selects a threshold separating the subset_size smallest magnitude elements from the rest.

Parameters
[in]total_sizemagma_int_t size of array val
[in]subset_sizemagma_int_t number of smallest elements to separate
[in]valdouble array containing the values
[out]thrsdouble* computed threshold
[in,out]tmp_ptrmagma_ptr* pointer to pointer to temporary storage. May be reallocated during execution.
[in,out]tmp_sizemagma_int_t* pointer to size of temporary storage. May be increased during execution.
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dsampleselect_approx ( magma_int_t  total_size,
magma_int_t  subset_size,
double *  val,
double *  thrs,
magma_ptr *  tmp_ptr,
magma_int_t *  tmp_size,
magma_queue_t  queue 
)

This routine selects an approximate threshold separating the subset_size smallest magnitude elements from the rest.

Parameters
[in]total_sizemagma_int_t size of array val
[in]subset_sizemagma_int_t number of smallest elements to separate
[in]valdouble array containing the values
[out]thrsdouble* computed threshold
[in,out]tmp_ptrmagma_ptr* pointer to pointer to temporary storage. May be reallocated during execution.
[in,out]tmp_sizemagma_int_t* pointer to size of temporary storage. May be increased during execution.
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dsampleselect_nodp ( magma_int_t  total_size,
magma_int_t  subset_size,
double *  val,
double *  thrs,
magma_ptr *  tmp_ptr,
magma_int_t *  tmp_size,
magma_queue_t  queue 
)

This routine selects a threshold separating the subset_size smallest magnitude elements from the rest.

This routine does not use dynamic parallelism (DP)

Parameters
[in]total_sizemagma_int_t size of array val
[in]subset_sizemagma_int_t number of smallest elements to separate
[in]valdouble array containing the values
[out]thrsdouble* computed threshold
[in,out]tmp_ptrmagma_ptr* pointer to pointer to temporary storage. May be reallocated during execution.
[in,out]tmp_sizemagma_int_t* pointer to size of temporary storage. May be increased during execution.
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dsampleselect_approx_nodp ( magma_int_t  total_size,
magma_int_t  subset_size,
double *  val,
double *  thrs,
magma_ptr *  tmp_ptr,
magma_int_t *  tmp_size,
magma_queue_t  queue 
)

This routine selects an approximate threshold separating the subset_size smallest magnitude elements from the rest.

This routine does not use dynamic parallelism (DP)

Parameters
[in]total_sizemagma_int_t size of array val
[in]subset_sizemagma_int_t number of smallest elements to separate
[in]valdouble array containing the values
[out]thrsdouble* computed threshold
[in,out]tmp_ptrmagma_ptr* pointer to pointer to temporary storage. May be reallocated during execution.
[in,out]tmp_sizemagma_int_t* pointer to size of temporary storage. May be increased during execution.
[in]queuemagma_queue_t Queue to execute in.
magma_int_t magma_dthrsholdrm_gpu ( magma_int_t  order,
magma_d_matrix *  A,
double *  thrs,
magma_queue_t  queue 
)

Purpose

This routine selects a threshold separating the subset_size smallest magnitude elements from the rest.

@param[in]
order       magma_int_t 
            dummy variable for now.

@param[in,out]
A           magma_d_matrix*  
            input/output matrix where elements are removed

@param[out]
thrs        double*  
            computed threshold

@param[in]
queue       magma_queue_t
            Queue to execute in.