This package lets you solve sparse linear systems using Algebraic Multigrid (AMG). This works especially well for symmetric positive definite matrices.
using AlgebraicMultigrid
A = poisson(1000) # Creates a sample symmetric positive definite sparse matrix
ml = ruge_stuben(A) # Construct a Ruge-Stuben solver
# Multilevel Solver
# -----------------
# Operator Complexity: 1.9859906604402935
# Grid Complexity: 1.99
# No. of Levels: 8
# Coarse Solver: AMG.Pinv()
# Level Unknowns NonZeros
# ----- -------- --------
# 1 1000 2998 [50.35%]
# 2 500 1498 [25.16%]
# 3 250 748 [12.56%]
# 4 125 373 [ 6.26%]
# 5 62 184 [ 3.09%]
# 6 31 91 [ 1.53%]
# 7 15 43 [ 0.72%]
# 8 7 19 [ 0.32%]
solve(ml, A * ones(1000)) # should return ones(1000)
You can use AMG as a preconditioner for Krylov methods such as Conjugate Gradients.
import IterativeSolvers: cg
p = aspreconditioner(ml)
c = cg(A, A*ones(1000), Pl = p)
This package currently supports:
AMG Styles:
- Ruge-Stuben Solver
- Smoothed Aggregation (SA)
Strength of Connection:
- Classical Strength of Connection
- Symmetric Strength of Connection
Smoothers:
- Gauss Seidel (Symmetric, Forward, Backward)
- Damped Jacobi
Cycling:
- V cycle
In the future, this package will support:
- Other splitting methods (like CLJP)
- SOR smoother
- W, F, AMLI cycles
This package has been heavily inspired by the PyAMG
project.