block_diag_ilu is a C++ implementation of an incomplete LU factorization, ILU(0).
Project description
block_diag_ilu
==============
.. image:: http://hera.physchem.kth.se:9090/api/badges/chemreac/block_diag_ilu/status.svg
:target: http://hera.physchem.kth.se:9090/chemreac/block_diag_ilu
:alt: Build status
``block_diag_ilu`` is an open source `C++ single header-file implementation
<https://github.com/chemreac/block_diag_ilu/tree/master/block_diag_ilu/include>`_ 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:
.. image:: https://raw.githubusercontent.com/bjodah/block_diag_ilu/master/scripts/matrix.png
:scale: 50%
:alt: Diagonally dominant block diagonal matrix with sub- and super-diagonals
then its LU decomposition then looks like this:
.. image:: https://raw.githubusercontent.com/bjodah/block_diag_ilu/master/scripts/matrix_lu.png
:scale: 50%
:alt: LU decomposition of same matrix
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 |undefined |
| |``std::vector`` as underlying data structure. | |
+---------------------------+-----------------------------------------------+---------------+
|BLOCK_DIAG_ILUT_WITH_OPENMP|factorize blocks in parallel. Set the |undefined |
| |environment variable | |
| |`BLOCK_DIAG_ILU_NUM_THREADS` to control number | |
| |of threads. | |
+---------------------------+-----------------------------------------------+---------------+
|BLOCK_DIAG_ILU_WITH_GETRF |Use unblocked (parallell) internal |undefined |
| |implementation of LAPACK's ``dgetrf``. | |
+---------------------------+-----------------------------------------------+---------------+
``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
Author
------
Björn Dahlgren, contact:
- gmail adress: bjodah
- kth.se adress: bda
==============
.. image:: http://hera.physchem.kth.se:9090/api/badges/chemreac/block_diag_ilu/status.svg
:target: http://hera.physchem.kth.se:9090/chemreac/block_diag_ilu
:alt: Build status
``block_diag_ilu`` is an open source `C++ single header-file implementation
<https://github.com/chemreac/block_diag_ilu/tree/master/block_diag_ilu/include>`_ 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:
.. image:: https://raw.githubusercontent.com/bjodah/block_diag_ilu/master/scripts/matrix.png
:scale: 50%
:alt: Diagonally dominant block diagonal matrix with sub- and super-diagonals
then its LU decomposition then looks like this:
.. image:: https://raw.githubusercontent.com/bjodah/block_diag_ilu/master/scripts/matrix_lu.png
:scale: 50%
:alt: LU decomposition of same matrix
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 |undefined |
| |``std::vector`` as underlying data structure. | |
+---------------------------+-----------------------------------------------+---------------+
|BLOCK_DIAG_ILUT_WITH_OPENMP|factorize blocks in parallel. Set the |undefined |
| |environment variable | |
| |`BLOCK_DIAG_ILU_NUM_THREADS` to control number | |
| |of threads. | |
+---------------------------+-----------------------------------------------+---------------+
|BLOCK_DIAG_ILU_WITH_GETRF |Use unblocked (parallell) internal |undefined |
| |implementation of LAPACK's ``dgetrf``. | |
+---------------------------+-----------------------------------------------+---------------+
``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
Author
------
Björn Dahlgren, contact:
- gmail adress: bjodah
- kth.se adress: bda
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.
Source Distribution
block_diag_ilu-0.3.4.tar.gz
(87.3 kB
view details)
File details
Details for the file block_diag_ilu-0.3.4.tar.gz.
File metadata
- Download URL: block_diag_ilu-0.3.4.tar.gz
- Upload date:
- Size: 87.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
438dd0d54ddbc741c2407a34a680721439a607fc0294cff00b1d849cc67941fb
|
|
| MD5 |
2dff496d4cfa6a35a6f96e30a4602523
|
|
| BLAKE2b-256 |
8776d04bae1cd28816cbc28c88d3b494fb4622ee3c8663e46063efadc0aa4e4c
|