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.