- changed status to wontfix
Mumps solver segfaults
Following code segfaults on master. The default LUSolver
runs with no problems.
from dolfin import *
mesh = UnitSquareMesh(100,100)
V = FunctionSpace(mesh, "CG", 1)
u = TrialFunction(V)
v = TestFunction(V)
bc = DirichletBC(V, 0, "on_boundary")
A, b = assemble_system(inner(grad(u), grad(v))*dx, v*dx, bc)
sol = LUSolver("mumps")
u_ = Function(V)
sol.solve(A, u_.vector(), b) # < segfaults
Error in `/home/mikael/.hashdist/bld/profile/kqc6o23ygvky/bin/python2.7': double free or corruption (out): 0x0000000002b5c240 Process received signal
Comments (9)
-
-
reporter Ok @garth-wells, didn't know it was buggy. I had very good experience with it before, though, so I might just have a look.
-
Problems are often related to (MUMPS bug) + (ParMETIS bug). MUMPS refuse to update to recent ParMETIS.
-
reporter Yes, current one is a parmetis bug.
-
Does HashDist install ParMETIS, or does it let PETSc download and configure it?
-
HashDist can do both, but fenics-install.sh is set to let HashDist install ParMETIS.
-
Letting HashDist install ParMETIS and using PETSc will end in poorly. PETSc should install the dependencies because PETSc cherry-picks versions that work together, and in cases applies bug fixes.
-
@garth-wells, agree about poor maintenance of MUMPS but MUMPS is one of two solvers in DOLFIN with parallel Cholesky. Ironically PETSc wrappers for MUMPS in symmetric mode were buggy until recently.
Other one is PaStiX. I haven't experience there. Do you think that PaStiX can be a good alternative?
-
I have very good experience with PaStiX for elasticity. It's hybrid threaded/MPI mode works very well, using much less memory than pure MPI.
A problem is that the PETSc PasTiX wrappers weren't very good or well maintained. Also, getting good performance from PaStiX depends on some tuning of parameters related to BLAS, and last time I checked these weren't exposed in PETSc.
- Log in to comment
Don't use a buggy solver, i.e. don't use MUMPS.
You can report a bug to the MUMPS team, but don't hold your breath. Use SuperLU-dist instead.