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 by Luke Olson and Jacob Schroder.
If you use PyAMG in your work, please consider using the following citation:
@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):- With PyAMG installed and from a non-source directory:
import pyamg pyamg.test()
- From the PyAMG source directory and installed (e.g. with
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:
- Ruge-Stuben (RS) or Classical AMG
- AMG based on Smoothed Aggregation (SA)
and experimental support for:
- Adaptive Smoothed Aggregation (αSA)
- Compatible Relaxation (CR)
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 vectorProgram 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
