dolfin team mailing list archive
-
dolfin team
-
Mailing list archive
-
Message #12332
dolfin <-> scipy <-> pyamg
Did you know that dolfin can be used together with scipy and pyamg to solve
the eg. the Poisson equation with AMG in Python. The attached example by
Luke Olson does this! This is so cool!
Should we add a webpage at www.fenics.org where we list up software
packages that
can be used with FEniCS software (and nice examples where possible).
There are quite a few, eg. VMTK and Netgen can create meshes.
Itk/Debiosee is getting some support at the moment. Scipy and PyAMG. Of
course all the linear algebra backends and mesh formats etc.
Kent
# Luke Olson
# lukeo@xxxxxxxx
# http://www.pyamg.com
from dolfin import *
from scipy.sparse import csr_matrix
from pyamg import smoothed_aggregation_solver
from pylab import figure, show, semilogy
############################################################
# Dolfin
dolfin_set("linear algebra backend","uBLAS")
mesh = UnitSquare(75, 75)
V = FunctionSpace(mesh, "CG", 1)
# Define Dirichlet boundary (x = 0 or x = 1)
class DirichletBoundary(SubDomain):
def inside(self, x, on_boundary):
return x[0] < DOLFIN_EPS or x[0] > 1.0 - DOLFIN_EPS
u0 = Constant(mesh, 0.0)
bc = DirichletBC(V, u0, DirichletBoundary())
v = TestFunction(V)
u = TrialFunction(V)
f = Function(V, "500.0 * exp(-(pow(x[0] - 0.5, 2) + pow(x[1] - 0.5, 2)) / 0.02)")
a = dot(grad(v), grad(u))*dx
L = v*f*dx
A, rhs = assemble_system(a,L,bc,mesh)
############################################################
# PyAMG
(row,col,data) = A.data() # get sparse data
n = A.size(0)
Asp = csr_matrix( (data,col.view('intc'),row.view('intc')), shape=(n,n))
b = rhs.data()
residuals = []
ml = smoothed_aggregation_solver(Asp,max_coarse=10)
x = ml.solve(b,tol=1e-10,accel='cg',residuals=residuals)
residuals = residuals/residuals[0]
print ml
figure(2)
semilogy(residuals)
show()
Follow ups