Convenience wrapper module for the PyAMG library.
Requires a Python installation with scipy and pyamg.
If an Anconda distribution is used (including the Conda.jl package manager)
then pyamg should be automatically installed on first use. Otherwise, follow
the straightforward instructions.
In all examples it is assumed that A is a sparse matrix
and b a vector and amg is an AMGSolver instance constructed from A.
The classical example would be the Dirichlet problem on a square,
using SparseArrays, LinearAlgebra
N = 100
L1 = spdiagm( -1 => -ones(N-1),
0 => 2*ones(N),
1 => -ones(N-1) ) * N^2
Id = sparse(1.0*I, N, N)
A = kron(Id, L1) + kron(L1, Id)
b = ones(size(A,1))using PyAMG
x = PyAMG.solve(A, b)To initialise, call
using PyAMG
amg = RugeStubenSolver(A)Then the system Ax=b can be solved using
x = amg \ b
x = solve(amg, b; tol=1e-6)or, one can specify a different 'outer solver'
x = solve(amg, b; tol=1e-6, accel="cg")see ?solve for more options. In particular, note the that default keyword
arguments can be set via set_kwargs! or in the construction of the AMG
solver, which will then be used by both \ and solve. E.g.,
amg = RugeStubenSolver(A, tol=1e-6, accel="cg")
x = amg \ bAfter initialising, we can construct a preconditioner via
M = aspreconditioner(amg)The line M \ b then performes a single MG cycle.
This is e.g. compatible with the IterativeSolvers package:
using PyAMG, IterativeSolvers
TOL = 1e-3
M = aspreconditioner(RugeStubenSolver(A))
IterativeSolvers.cg(A, b, M; tol=TOL)To extract the solver history as a vector of residuals, use
amg = RugeStubenSolver(A)
r = Float64[]
x = PyAMG.solve(amg, b, residuals=r)
@show r
Since version 3.2.1.dev0+2227b77 the residuals can also be returned for
the blackbox solver variant.
(NOTE: although pyamg needs residuals to be a list, PyAMG.jl will detect
if residuals is a numpy vector and replace it with a list, then
convert back to a types Julia vector.)
(this section is incomplete)
AMGSolver{T}: encapsulates the pyamg solver PyObjectRugeStubenSolver: typealias forAMGSolver{RugeStuben}SmoothedAggregationSolver: typealias forAMGSolver{SmoothedAggregation}AMGPreconditioner: encapsulates the output ofaspreconditionerto use PyAMG as a preconditioner for iterative linear algebra.