Developer Reference for Intel® oneAPI Math Kernel Library for Fortran

ID 766686
Date 7/13/2023
Public

A newer version of this document is available. Customers should click here to go to the newest version.

Document Table of Contents

dcsrilut

ILUT preconditioner based on the incomplete LU factorization with a threshold of a sparse matrix.

Syntax

call dcsrilut(n, a, ia, ja, bilut, ibilut, jbilut, tol, maxfil, ipar, dpar, ierr)

Include Files

  • Fortran: mkl_rci.fi, mkl_rci.f90

Description

The routine dcsrilut computes a preconditioner B [Saad03] of a given sparse matrix A stored in the format accepted in the direct sparse solvers:

A~B=L*U , where L is a lower triangular matrix with unit diagonal and U is an upper triangular matrix with non-unit diagonal.

The following threshold criteria are used to generate the incomplete factors L and U:

1) the resulting entry must be greater than the matrix current row norm multiplied by the parameter tol, and

2) the number of the non-zero elements in each row of the resulting L and U factors must not be greater than the value of the parameter maxfil.

CAUTION:

This routine supports only one-based indexing of the array parameters.

Input Parameters

n

INTEGER. Size (number of rows or columns) of the original square n-by-n matrix A.

a

DOUBLE PRECISION. Array containing all non-zero elements of the matrix A. The length of the array is equal to their number. Refer to values array description in the Sparse Matrix Storage Format section for more details.

ia

INTEGER. Array of size (n+1) containing indices of non-zero elements in the array a. ia(i) is the index of the first non-zero element from the row i. The value of the last element ia(n+1) is equal to the number of non-zeros in the matrix A, plus one. Refer to the rowIndex array description in the Sparse Matrix Storage Format for more details.

ja

INTEGER. Array of size equal to the size of the array a. This array contains the column numbers for each non-zero element of the matrix A. It is important that the indices are in increasing order per row. Refer to the columns array description in the Sparse Matrix Storage Format for more details.

CAUTION:

If column indices are not stored in ascending order for each row of matrix, the result of the routine might not be correct.

tol

DOUBLE PRECISION. Tolerance for threshold criterion for the resulting entries of the preconditioner.

maxfil

INTEGER. Maximum fill-in, which is half of the preconditioner bandwidth. The number of non-zero elements in the rows of the preconditioner cannot exceed (2*maxfil+1).

ipar

INTEGER. Array of size 128. This parameter is used to specify the integer set of data for both the ILUT and RCI FGMRES computations. Refer to the ipar array description in the FGMRES Common Parameters for more details on FGMRES parameter entries. The entries specific to ILUT are listed below.

ipar(31)

specifies how the routine operates if the value of the computed diagonal element is less than the current matrix row norm multiplied by the value of the parameter tol. If ipar(31) = 0, then the calculation is stopped and the routine returns non-zero error value. Otherwise, the value of the diagonal element is set to a value determined by dpar(31) (see its description below), and the calculations continue.

NOTE:

There is no default value for ipar(31) even if the preconditioner is used within the RCI ISS context. Always set the value of this entry.

NOTE:

You must declare the array ipar with length 128. While defining the array in the code as INTEGERipar(31)works, there is no guarantee of future compatibility with Intel® oneAPI Math Kernel Library (oneMKL).

dpar

DOUBLE PRECISION. Array of size 128. This parameter specifies the double precision set of data for both ILUT and RCI FGMRES computations. Refer to the dpar array description in the FGMRES Common Parameters for more details on FGMRES parameter entries. The entries that are specific to ILUT are listed below.

dpar(31)

used to adjust the value of small diagonal elements. Diagonal elements with a value less than the current matrix row norm multiplied by tol are replaced with the value of dpar(31) multiplied by the matrix row norm.

NOTE:

There is no default value for dpar(31) entry even if the preconditioner is used within RCI ISS context. Always set the value of this entry.

NOTE:

You must declare the array dpar with length 128. While defining the array in the code as DOUBLE PRECISIONipar(31)works, there is no guarantee of future compatibility with Intel® oneAPI Math Kernel Library (oneMKL).

Output Parameters

bilut

DOUBLE PRECISION. Array containing non-zero elements of the resulting preconditioning matrix B, stored in the format accepted in the direct sparse solvers. Refer to the values array description in the Sparse Matrix Storage Format for more details. The size of the array is equal to (2*maxfil+1)*n-maxfil*(maxfil+1)+1.

NOTE:

Provide enough memory for this array before calling the routine. Otherwise, the routine may fail to complete successfully with a correct result.

ibilut

INTEGER. Array of size (n+1) containing indices of non-zero elements in the array bilut. ibilut(i) is the index of the first non-zero element from the row i. The value of the last element ibilut(n+1) is equal to the number of non-zeros in the matrix B, plus one. Refer to the rowIndex array description in the Sparse Matrix Storage Format for more details.

jbilut

INTEGER. Array, its size is equal to the size of the array bilut. This array contains the column numbers for each non-zero element of the matrix B. Refer to the columns array description in the Sparse Matrix Storage Format for more details.

ierr

INTEGER. Error flag, gives information about the routine completion.

Return Values

ierr=0

Indicates that the task completed normally.

ierr=-101

Indicates that the routine was interrupted because of an error: the number of elements in some matrix row specified in the sparse format is equal to or less than 0.

ierr=-102

Indicates that the routine was interrupted because the value of the computed diagonal element is less than the product of the given tolerance and the current matrix row norm, and it cannot be replaced as ipar(31)=0.

ierr=-103

Indicates that the routine was interrupted because the element ia(i + 1) is less than or equal to the element ia(i) (see Sparse Matrix Storage Format).

ierr=-104

Indicates that the routine was interrupted because the memory is insufficient for the internal work arrays.

ierr=-105

Indicates that the routine was interrupted because the input value of maxfil is less than 0.

ierr=-106

Indicates that the routine was interrupted because the size n of the input matrix is less than 0.

ierr=-107

Indicates that the routine was interrupted because an element of the array ja is less than 1, or greater than n (see Sparse Matrix Storage Format).

ierr=101

The value of maxfil is greater than or equal to n. The calculation is performed with the value of maxfil set to (n-1).

ierr=102

The value of tol is less than 0. The calculation is performed with the value of the parameter set to (-tol)

ierr=103

The absolute value of tol is greater than value of dpar(31); it can result in instability of the calculation.

ierr=104

The value of dpar(31) is equal to 0. It can cause calculations to fail.

Interfaces

FORTRAN 77 and Fortran 95:

SUBROUTINE dcsrilut (n, a, ia, ja, bilut, ibilut, jbilut, tol, maxfil, ipar, dpar, ierr)
INTEGER n, ierr, ipar(*), maxfil
INTEGER ia(*), ja(*), ibilut(*), jbilut(*)
DOUBLE PRECISION a(*), bilut(*), dpar(*), tol