block_diag_ilu is a C++ implementation of an incomplete LU factorization, ILU(0).
Project description
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:
then 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.
Conditional compilation
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_ILUT_WITH_OPENMP |
factorize blocks in parallel. Set the environment variable BLOCK_DIAG_ILU_NUM_THREADS to control number of threads. |
undefined |
setup.py will set these when envinronment variables with those are set to “1”.
License
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
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.