GetILUT
This routine builds the ILUT precondition.
ILUT: Incomplete LU factorization with dual truncation strategy.
caution
The diagonal elements of the input matrix must be nonzero (at least 'structurally').
Dual drop strategy works as follows:
- Theresholding in L and U as set by
droptol. Any element whose MAGNITUDE is less than some tolerance (relative to the abs value of diagonal element in U) is dropped, that is
note
you can use droptol between and
- Keeping only the largest
lfilelements in the ith row of L and the largestlfilelements in the ith row ofU(excluding diagonal elements).
note
You can use lfil between 5 ans 10. Higher value of lfil is more reliable.
- Flexibility: one can use
droptol=0to get a strategy based on keeping the largest elements in each row ofLandU. - Taking
droptol .ne. 0butlfil=nwill give the usual threshold strategy (however, fill-in is then not predictible).
Sparse matrix in modified sparse row storage format:
Interface
- ܀ Interface 1
- ܀ Interface 2
- ↢
INTERFACE
MODULE SUBROUTINE GetILUT(obj, ALU, JLU, JU, lfil, droptol)
TYPE(CSRMatrix_), INTENT(INOUT) :: obj
REAL(DFP), ALLOCATABLE, INTENT(INOUT) :: ALU(:)
INTEGER(I4B), ALLOCATABLE, INTENT(INOUT) :: JLU(:)
INTEGER(I4B), ALLOCATABLE, INTENT(INOUT) :: JU(:)
INTEGER(I4B), INTENT(IN) :: lfil
REAL(DFP), INTENT(IN) :: droptol
END SUBROUTINE GetILUT
END INTERFACE
objmatrix stored in Compressed Sparse Row format.lfilis a fill-in parameter. Each row of L and each row of U will have a maximum of lfil elements (excluding the diagonal element). lfil must be .ge. 0.droptolsets the threshold for dropping small terms in the factorization. See below for details on dropping strategy.ALU,JLU, matrix stored in Modified Sparse Row (MSR) Format containing the L and U factors together. The diagonal (stored inALU(1:n)) is inverted. Each ith row of theALU,JLUmatrix contains the ith row of L (excluding the diagonal entry=1) followed by the ith row of U.JUis an integer array of length n containing the pointers to the beginning of each row of U in the matrix ALU,JLU.
Dual drop strategy works as follows:
- Theresholding in L and U as set by
droptol. Any element whose MAGNITUDE is less than some tolerance (relative to the abs value of diagonal element in U) is dropped. - Keeping only the largest
lfilelements in the ith row of L and the largestlfilelements in the ith row ofU(excluding diagonal elements). - Flexibility: one can use
droptol=0to get a strategy based on keeping the largest elements in each row ofLandU. - Taking
droptol .ne. 0butlfil=nwill give the usual threshold strategy (however, fill-in is then mpredictible).
INTERFACE
MODULE SUBROUTINE GetILUT(obj, Pmat, lfil, droptol)
TYPE(CSRMatrix_), INTENT(INOUT) :: obj
TYPE(CSRMatrix_), INTENT(INOUT) :: Pmat
INTEGER(I4B), INTENT(IN) :: lfil
REAL(DFP), INTENT(IN) :: droptol
END SUBROUTINE GetILUT
END INTERFACE
This method is similar to interface 1, but in this case we return ILU factorization in CSRMatrix_ form.