PyAMG 5.3.1.dev20+g0c02134#
Installation#
PyAMG requires numpy and scipy
pip install pyamg
or from source:
pip install .
or with conda (see details below)
conda config --add channels conda-forge
conda install pyamg
For an editable install use:
pip install meson-python meson ninja pybind11 versioningit pytest
pip install --no-build-isolation -e .
Introduction#
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` <organization.md>`_ and examples of use can be found in ``pyamg-examples` <pyamg/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.
Citing#
If you use PyAMG in your work, please consider using the following citation:
@article{pyamg2023,
author = {Nathan Bell and Luke N. Olson and Jacob Schroder and Ben Southworth},
title = {{PyAMG}: Algebraic Multigrid Solvers in Python},
journal = {Journal of Open Source Software},
year = {2023},
publisher = {The Open Journal},
volume = {8},
number = {87},
pages = {5495},
doi = {10.21105/joss.05495},
url = {https://doi.org/10.21105/joss.05495},
}
Getting Help#
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):From Python with PyAMG installed and from a non-source directory: .. code-block:: python
import pyamg pyamg.test()
From the PyAMG source directory and an editable install: (e.g. with
pip install -e .):pip install --no-build-isolation -e ".[test]" pytest .
From the PyAMG source directory and a regular install: (e.g. with
pip install -e .):pip install ".[test]" pytest --pyargs pyamg --basetemp=temp
What is AMG?#
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#
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.
Example Usage#
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:
MultilevelSolver
Number of Levels: 9
Operator Complexity: 2.198
Grid Complexity: 1.667
Coarse Solver: 'pinv'
level unknowns nonzeros
0 250000 1248000 [45.50%]
1 125000 1121002 [40.87%]
2 31372 280840 [10.24%]
3 7814 69818 [2.55%]
4 1953 17559 [0.64%]
5 481 4421 [0.16%]
6 123 1145 [0.04%]
7 30 282 [0.01%]
8 10 76 [0.00%]
residual: 4.772211803542084e-09
Conda#
More information can be found at conda-forge/pyamg-feedstock.
Linux:
OSX:
Windows:
Version:
Downloads:
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
Reference#
- PyAMG Reference
- Multigrid data structure (“The Multilevel Hierarchy”)
- Core AMG Methods
- pyamg.aggregation
adaptive_sa_solver()balanced_lloyd_aggregation()energy_prolongation_smoother()fit_candidates()jacobi_prolongation_smoother()lloyd_aggregation()metis_aggregation()naive_aggregation()pairwise_solver()richardson_prolongation_smoother()rootnode_solver()smoothed_aggregation_solver()standard_aggregation()
- pyamg.classical
- pyamg.aggregation
- Common AMG Components
- Helper Routings
- Krylov Methods
- Gallery Problems
- amg_core
- pyamg.amg_core
apply_absolute_distance_filter()apply_distance_filter()apply_givens()apply_householders()approx_ideal_restriction_pass1()approx_ideal_restriction_pass2()bellman_ford()bellman_ford_balanced()block_approx_ideal_restriction_pass2()block_gauss_seidel()block_jacobi()block_jacobi_indexed()breadth_first_search()bsr_gauss_seidel()bsr_jacobi()bsr_jacobi_indexed()calc_BtB()center_nodes()classical_strength_of_connection_abs()classical_strength_of_connection_min()cljp_naive_splitting()connected_components()cr_helper()csc_scale_columns()csc_scale_rows()evolution_strength_helper()extract_subblocks()filter_matrix_rows()fit_candidates()floyd_warshall()gauss_seidel()gauss_seidel_indexed()gauss_seidel_ne()gauss_seidel_nr()householder_hornerscheme()incomplete_mat_mult_bsr()incomplete_mat_mult_csr()jacobi()jacobi_indexed()jacobi_ne()maximal_independent_set_k_parallel()maximal_independent_set_parallel()maximal_independent_set_serial()maximum_row_value()min_blocks()most_interior_nodes()naive_aggregation()one_point_interpolation()overlapping_schwarz_csr()pairwise_aggregation()pinv_array()remove_strong_FF_connections()rs_cf_splitting()rs_cf_splitting_pass2()rs_classical_interpolation_pass1()rs_classical_interpolation_pass2()rs_direct_interpolation_pass1()rs_direct_interpolation_pass2()satisfy_constraints_helper()sor_gauss_seidel()standard_aggregation()symmetric_strength_of_connection()truncate_rows_csr()vertex_coloring_LDF()vertex_coloring_jones_plassmann()vertex_coloring_mis()
- pyamg.amg_core