dcsrilu0

ILU0 preconditioner based on incomplete LU factorization of a sparse matrix.

Syntax

Fortran:

call dcsrilu0(n, a, ia, ja, bilu0, ipar, dpar, ierr)

C:

dcsrilu0(&n, a, ia, ja, bilu0, ipar, dpar, &ierr);

Include Files

The Fortran interface is specified in the mkl_rci.fi include file and the C interface is specified in the mkl_rci.h include file.

Description

The routine dcsrilu0 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 a unit diagonal, U is an upper triangular matrix with a non-unit diagonal, and the portrait of the original matrix A is used to store the incomplete factors L and U.

Input Parameters

n

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

a

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

ia

INTEGER. Array of size (n+1) containing begin indices of rows of the matrix A such that ia(i) is the index in the array A 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-zero elements in the matrix A plus one. Refer to the rowIndex array description in the Sparse Matrix Storage Format for more details.

ja

INTEGER. Array containing the column indices for each non-zero element of the matrix A. Its size is equal to the size of the array a. Refer to the columns array description in the Sparse Matrix Storage Format for more details.

Note iconNote

Column indices must be in ascending order for each row of matrix.

ipar

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

ipar(31)

specifies how the routine operates when a zero diagonal element occurs during calculation. If this parameter is set to 0 (the default value set by the routine dfgmres_init), then the calculations are stopped and the routine returns a non-zero error value. Otherwise, the diagonal element is set to the value of dpar(32) and the calculations continue.

Note iconNote

You must declare the array ipar with length 128. While defining the array in the code as INTEGER ipar(31) works, there is no guarantee of future compatibility with Intel MKL.

dpar

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

dpar(31)

specifies a small value, which is compared with the computed diagonal elements. When ipar(31) is not 0, then diagonal elements less than dpar(31) are set to dpar(32). The default value is 1.0D-16.

Note iconNote

This parameter can be set to the negative value, because the calculation uses its absolute value.

If this parameter is set to 0, the comparison with the diagonal element is not performed.

dpar(32)

specifies the value that is assigned to the diagonal element if its value is less than dpar(31) (see above). The default value is 1.0D-10.

Note iconNote

You must declare the array dpar with length 128. While defining the array in the code as DOUBLE PRECISION ipar(32) works, there is no guarantee of future compatibility with Intel MKL.

Output Parameters

bilu0

DOUBLE PRECISION. Array B containing non-zero elements of the resulting preconditioning matrix B, stored in the format accepted in direct sparse solvers. Its size is equal to the number of non-zero elements in the matrix A. Refer to the values array description in the Sparse Matrix Storage Format section for more details.

ierr

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

Note iconNote

To present the resulting preconditioning matrix in the CSR format the arrays ia (row indices) and ja (column indices) of the input matrix must be used.

Return Values

ierr=0

Indicates that the task completed normally.

ierr=-101

Indicates that the routine was interrupted and that error occurred: at least one diagonal element is omitted from the matrix in CSR format (see Sparse Matrix Storage Format).

ierr=-102

Indicates that the routine was interrupted because the matrix contains a diagonal element with the value of zero.

ierr=-103

Indicates that the routine was interrupted because the matrix contains a diagonal element which is so small that it could cause an overflow, or that it would cause a bad approximation to ILU0.

ierr=-104

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

ierr=-105

Indicates that the routine was because the input matrix size n is less than or equal to 0.

ierr=-106

Indicates that the routine was because the column indices ja are not in the ascending order.

Interfaces

FORTRAN 77 and Fortran 95:

SUBROUTINE dcsrilu0 (n, a, ia, ja, bilu0, ipar, dpar, ierr)
INTEGER n, ierr, ipar(128)
INTEGER ia(*), ja(*)
DOUBLE PRECISION a(*), bilu0(*), dpar(128)

C:

void dcsrilu0 (int *n, double *a, int *ia, int *ja, double *bilu0, int *ipar, double *dpar, int *ierr);


Submit feedback on this help topic

Copyright © 1994 - 2011, Intel Corporation. All rights reserved.