pyrtid.utils.get_super_ilu_preconditioner#
- pyrtid.utils.get_super_ilu_preconditioner(mat: Union[csc_array, csc_matrix], **kwargs) Tuple[Optional[SuperLU], Optional[LinearOperator]][source]#
Get an incomplete LU preconditioner for the given sparse matrix.
Reference: Meijerink and van der Vorst [1981].
Note
As wikipedia states, for a typical sparse matrix, the LU factors can be much less sparse than the original matrix — a phenomenon called fill-in. The memory requirements for using a direct solver can then become a bottleneck in solving linear systems. One can combat this problem by using fill-reducing reorderings of the matrix’s unknowns, such as the Minimum degree algorithm.
An incomplete factorization instead seeks triangular matrices L, U such that A ≈ L U Approx LU rather than A = L U A=LU. Solving for L U x = b LUx=b can be done quickly but does not yield the exact solution to A x = b Ax=b. So, we instead use the matrix M = L U M=LU as a preconditioner in another iterative solution algorithm such as the conjugate gradient method or GMRES.