block_diag_ilu is a C++ implementation of an incomplete LU factorization.
block_diag_ilu is an open source C++ single header-file implementation of an incomplete LU decomposition routine suitable for diagonally dominant (square) block diagonal matrices with sub- and super diagonals of small magnitude. It is useful for preconditioning linear systems. The use-case in mind is for integrating discretized PDEs of mixed chemical kinetics / diffusion problems where the diffusion process may be accurately considered a mild perturbation.
A picture is worth a thousand words, so if your matrix looks anything like this:
its LU decomposition then looks like this:
then block_diag_ilu should be able to save quite a bit of time when solving linear systems approximately, e.g. for preconditioning.
The following macros affect the compilation:
|Macro name||Action (when defined)||Default|
|NDEBUG||use std::unique_ptr instead of std::vector as underlying data structure.||undefined|
|BLOCK_DIAG_ILU_WITH_DGETRF||Use unblocked (parallell) internal implementation of LAPACK’s dgetrf.||undefined|
The source code is Open Source and is released under the very permissive “simplified (2-clause) BSD license”. See LICENSE.txt for further details.
Contributors are welcome to suggest improvements at https://github.com/chemreac/block_diag_ilu