PyAMG: Algebraic Multigrid Solvers in Python
PyAMG requires numpy
and scipy
pip install pyamg
or from source:
pip install .
(python setup.py install
will no longer work)
or with conda (see details below)
conda config --add channels conda-forge
conda install pyamg
PyAMG is a library of Algebraic Multigrid (AMG) solvers with a convenient Python interface.
PyAMG is currently developed and maintained by
Luke Olson,
Jacob Schroder, and
Ben Southworth.
The organization of the project can be found in organization.md
and
examples of use can be found in pyamg-examples
.
Acknowledgements: PyAMG was created by Nathan Bell, Luke Olson, and Jacob Schroder. Portions of the project were partially supported by the NSF under award DMS-0612448.
If you use PyAMG in your work, please consider using the following citation:
@article{BeOlScSo2023, author = {Nathan Bell and Luke N. Olson and Jacob Schroder and Ben S. Southworth}, title = {{PyAMG}: Algebraic Multigrid Solvers in Python}, journal = {Journal of Open Source Software}, year = {2023}, publisher = {The Open Journal}, note = {submitted}, } @article{BeOlSc2022, author = {Nathan Bell and Luke N. Olson and Jacob Schroder}, title = {{PyAMG}: Algebraic Multigrid Solvers in Python}, journal = {Journal of Open Source Software}, year = {2022}, publisher = {The Open Journal}, volume = {7}, number = {72}, pages = {4142}, doi = {10.21105/joss.04142}, url = {https://doi.org/10.21105/joss.04142}, }
For documentation see http://pyamg.readthedocs.io/en/latest/.
Create an issue.
Look at the Tutorial or the examples (for instance the 0_start_here example).
Run the unit tests (pip install pytest
):
import pyamg
pyamg.test()
pip install -e .
):pytest .
AMG is a multilevel technique for solving large-scale linear systems with optimal or near-optimal efficiency. Unlike geometric multigrid, AMG requires little or no geometric information about the underlying problem and develops a sequence of coarser grids directly from the input matrix. This feature is especially important for problems discretized on unstructured meshes and irregular grids.
PyAMG features implementations of:
and experimental support for:
The predominant portion of PyAMG is written in Python with a smaller amount of supporting C++ code for performance critical operations.
PyAMG is easy to use! The following code constructs a two-dimensional Poisson problem and solves the resulting linear system with Classical AMG.
import pyamg
import numpy as np
A = pyamg.gallery.poisson((500,500), format='csr') # 2D Poisson problem on 500x500 grid
ml = pyamg.ruge_stuben_solver(A) # construct the multigrid hierarchy
print(ml) # print hierarchy information
b = np.random.rand(A.shape[0]) # pick a random right hand side
x = ml.solve(b, tol=1e-10) # solve Ax=b to a tolerance of 1e-10
print("residual: ", np.linalg.norm(b-A*x)) # compute norm of residual vector
Program output:
multilevel_solver Number of Levels: 9 Operator Complexity: 2.199 Grid Complexity: 1.667 Coarse Solver: 'pinv2' level unknowns nonzeros 0 250000 1248000 [45.47%] 1 125000 1121002 [40.84%] 2 31252 280662 [10.23%] 3 7825 70657 [ 2.57%] 4 1937 17971 [ 0.65%] 5 483 4725 [ 0.17%] 6 124 1352 [ 0.05%] 7 29 293 [ 0.01%] 8 7 41 [ 0.00%] residual: 1.24748994988e-08
More information can be found at conda-forge/pyamg-feedstock.
Installing pyamg
from the conda-forge
channel can be achieved by adding conda-forge
to your channels with:
conda config --add channels conda-forge
Once the conda-forge
channel has been enabled, pyamg
can be installed with:
conda install pyamg
It is possible to list all of the versions of pyamg
available on your platform with:
conda search pyamg --channel conda-forge