Readme

Algebraic Multigrid (AMG)

This package lets you solve sparse linear systems using Algebraic Multigrid (AMG). This works especially well for symmetric positive definite matrices.

Usage

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)

As a Preconditioner

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)

Features and Roadmap

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

Acknowledgements