Developer Reference for Intel® oneAPI Math Kernel Library for C
mkl_sparse_?_lu_smoother
Computes an action of a preconditioner which corresponds to the approximate matrix decomposition
\[A \approx (L+D) \cdot E \cdot (U+D)\]
for the system \(Ax=b\) where \(A=(L+D+U)\) and \(E\approx D^{-1}\). (See full description below).
Syntax
sparse_status_t mkl_sparse_s_lu_smoother ( const sparse_operation_t op,
const sparse_matrix_t A,
const struct matrix descr descr,
const float *diag,
const float *approx_diag_inverse,
float *x,
const float *b );
sparse_status_t mkl_sparse_d_lu_smoother ( const sparse_operation_t op,
const sparse_matrix_t A,
const struct matrix descr descr,
const double *diag,
const double *approx_diag_inverse,
double *x,
const double *b );
sparse_status_t mkl_sparse_c_lu_smoother ( const sparse_operation_t op,
const sparse_matrix_t A,
const struct matrix descr descr,
const MKL_Complex8 *diag,
const MKL_Complex8 *approx_diag_inverse,
MKL_Complex8 *x,
const MKL_Complex8 *b );
sparse_status_t mkl_sparse_z_lu_smoother ( const sparse_operation_t op,
const sparse_matrix_t A,
const struct matrix descr descr,
const MKL_Complex16 *diag,
const MKL_Complex16 *approx_diag_inverse,
MKL_Complex16 *x,
const MKL_Complex16 *b );
Include Files
mkl_spblas.h
Description
This routine computes an update for an iterative solution x of the system Ax=b by means of applying one iteration of an approximate preconditioner which is based on the following approximation:
\[A\approx (L+D)\cdot E \cdot (U+D)\]
, where \(E\) is an approximate inverse of the diagonal (using exact inverse will result in Gauss-Seidel preconditioner), \(L\) and \(U\) are lower/upper triangular parts of \(A\), \(D\) is the diagonal (block diagonal in case of BSR format) of \(A\) .
The mkl_sparse_?_lu_smoother routine performs these operations:
r = b - A*x /* 1. Computes the residual */
(L+D)*E*(U+D)*dx = r /* 2. Finds the update dx by solving the system */
y = x + dx /* 3. Performs an update */
This is also equal to the Symmetric Gauss-Seidel operation in the case of a CSR format and 1x1 diagonal blocks:
(L + D)*x1 = b - U*x /* Lower solve for intermediate x1 using x input */
(U + D)*x = b - L*x1 /* Upper solve for x using x1 */
Input Parameters
operation
Specifies operation op() on input matrix:
operation |
Description |
|---|---|
SPARSE_OPERATION_NON_TRANSPOSE |
\(op(A) = A\) |
SPARSE_OPERATION_TRANSPOSE |
\(op(A) = A^{T}\) |
SPARSE_OPERATION_CONJUGATE_TRANSPOSE |
\(op(A) = A^{H}\) |
A
Handle which contains the sparse matrix A .
descr
Descriptor specifying sparse matrix properties.
sparse_matrix_type_t type |
Specifies the type of a sparse matrix:
|
sparse_fill_mode_t mode |
Specifies the triangular matrix part for symmetric, Hermitian, triangular, and block-triangular matrices:
|
sparse_diag_type_t diag |
Specifies diagonal type for non-general matrices:
|
diag
Array of size at least \(m\) , where \(m\) is the number of rows (or nrows * block_size * block_size in case of BSR format) of matrix \(A\) . The array diag must contain the diagonal values of matrix A .
approx_diag_inverse
Array of size at least \(m\) , where \(m\) is the number of rows (or nrows * block_size * block_size in case of BSR format) of matrix \(A\) . The array approx_diag_inverse will be used as E , the approximate inverse of the diagonal of the matrix \(A\) .
x
Array of size at least \(k\) , where \(k\) is the number of columns (or ncols * block_size in case of BSR format) of matrix \(A\) . On entry, the array x must contain the input vector.
b
Array of size at least \(m\) , where \(m\) is the number of rows ( or nrows * block_size in case of BSR format ) of matrix \(A\) . The array b must contain the values of the right-hand side of the system.
Output Parameters
x
Overwritten by the computed vector solution, y.
Return Values
The function returns a value indicating whether the operation was successful or not, and why.
SPARSE_STATUS_SUCCESS |
The operation was successful. |
SPARSE_STATUS_NOT_INITIALIZED |
The routine encountered an empty handle or matrix array. |
SPARSE_STATUS_ALLOC_FAILED |
Internal memory allocation failed. |
SPARSE_STATUS_INVALID_VALUE |
The input parameters contain an invalid value. |
SPARSE_STATUS_EXECUTION_FAILED |
Execution failed. |
SPARSE_STATUS_INTERNAL_ERROR |
An error in algorithm implementation occurred. |
SPARSE_STATUS_NOT_SUPPORTED |
The requested operation is not supported. |