pub unsafe extern "C" fn cusparseCcsric02(
handle: cusparseHandle_t,
m: c_int,
nnz: c_int,
descrA: cusparseMatDescr_t,
csrSortedValA_valM: *mut cuComplex,
csrSortedRowPtrA: *const c_int,
csrSortedColIndA: *const c_int,
info: csric02Info_t,
policy: cusparseSolvePolicy_t,
pBuffer: *mut c_void,
) -> cusparseStatus_tExpand description
This function performs the solve phase of the computing the incomplete-Cholesky factorization with $0$ fill-in and no pivoting:
This function requires a buffer size returned by csric02_bufferSize(). The address of pBuffer must be a multiple of 128 bytes. If not, cusparseStatus_t::CUSPARSE_STATUS_INVALID_VALUE is returned.
Although csric02() can be done without level information, the user still needs to be aware of consistency. If csric02_analysis() is called with policy cusparseSolvePolicy_t::CUSPARSE_SOLVE_POLICY_USE_LEVEL, csric02() can be run with or without levels. On the other hand, if csric02_analysis() is called with cusparseSolvePolicy_t::CUSPARSE_SOLVE_POLICY_NO_LEVEL, csric02() can only accept cusparseSolvePolicy_t::CUSPARSE_SOLVE_POLICY_NO_LEVEL; otherwise, cusparseStatus_t::CUSPARSE_STATUS_INVALID_VALUE is returned.
Function csric02() reports the first numerical zero, including a structural zero. The user must call cusparseXcsric02_zeroPivot to know where the numerical zero is.
Function csric02() only takes the lower triangular part of matrix A to perform factorization. The matrix type must be cusparseMatrixType_t::CUSPARSE_MATRIX_TYPE_GENERAL, the fill mode and diagonal type are ignored, and the strictly upper triangular part is ignored and never touched. It does not matter if A is Hermitian or not. In other words, from the point of view of csric02()``A is Hermitian and only the lower triangular part is provided.
For example, suppose A is a real m times m matrix, the following code solves the precondition system M*y = x where M is the product of Cholesky factorization L and its transpose.
The function supports the following properties if pBuffer != NULL:
- This function requires temporary extra storage that is allocated internally.
- The routine supports asynchronous execution if the Stream Ordered Memory Allocator is available.
- The routine supports CUDA graph capture if the Stream Ordered Memory Allocator is available.