DAPPLY_ILU_SDIA (job, p, ip, ndim, nz, x, y, n)
job integer*4 On entry, defines the operation to be performed. If the lower triangular part of the matrix A is stored, the preconditioner is of the form L * transp(L), where L is a lower triangular matrix. In this case: job = 0 : y = inverse(L) * x job = 1 : y = inverse(transp(L)) * x If the upper triangular part of the matrix A is stored, the preconditioner is of the form transp(U) * U, where U is an upper triangular matrix. In this case: job = 0 : y = inverse(U) * x job = 1 : y = inverse(transp(U)) * x On exit, job is unchanged. p real*8 On entry, a two-dimensional array with dimensions ndim by nz containing information for use by the Incomplete Cholesky preconditioner. On exit, p is unchanged. ip integer*4 On entry, a one-dimensional array of length at least nz, containing the distances of the diagonals in array P from the main diagonal. On exit, ip is unchanged. ndim integer*4 On entry, the leading dimension of array A, as declared in the calling subprogram; ndim >= n. On exit, ndim is unchanged. nz integer*4 On entry, the number of diagonals stored in array P. On exit, nz is unchanged. x real*8 On entry, a one-dimensional array of length at least n, containing the elements of vector x, accessed with unit increment. On exit, x is unchanged. y real*8 On entry, a one-dimensional array of length at least n. On exit, array Y is overwritten by the output vector y. The elements of array Y are accessed with unit increment. n integer*4 On entry, the order of the matrix A. On exit, n is unchanged.
DAPPLY_ILU_SDIA applies the Incomplete Cholesky preconditioner for a sparse matrix stored using the symmetric diagonal storage scheme. The input arrays, P and IP, contain information for use by the routine. These arrays are generated by a call to the routine DCREATE_ILU_SDIA prior to a call to one of the iterative solvers with Incomplete Cholesky preconditioning. Depending on the value of the input parameter job, DAPPLY_ILU_SDIA operates on either the matrix or its transpose. The symmetric diagonal storage scheme, SDIA, allows either the lower or upper triangular part of the matrix to be stored. If the lower triangular part is stored, the routine DCREATE_ILU_SDIA creates the incomplete Cholesky preconditioner in the form L* transp(L), where L is a lower triangular matrix. In this case, job = 0 implies y = inverse(L) * x and job = 1 implies y = inverse(trans(L)) * x. If the upper triangular part of the matrix A is stored, the routine DCREATE_ILU_SDIA creates the incomplete Cholesky preconditioner in the form transp(U) * U, where U is an upper triangular matrix. In this case, job = 0 implies y = inverse(U) * x and job = 1 implies y = inverse(transp(U)) * x.