dolfin team mailing list archive
-
dolfin team
-
Mailing list archive
-
Message #22760
[Bug 768233] [NEW] PETScUserPreconditioner does not work with PETScKrylovMatrix
Public bug reported:
There seems to be a problem with passing matrix-free preconditioners to
PETSc: The combination of PETScKrylovMatrix and PETScUserPreconditioner
fails with the following error:
[0]PETSC ERROR: No support for this operation for this object type!
[0]PETSC ERROR: Matrix format shell does not have a built-in PETSc direct solver!
Here's a minimal example which triggers the error:
from dolfin import *
mesh = UnitSquare(32, 32)
V = FunctionSpace(mesh, 'CG', 1)
bc = DirichletBC(V, Constant(0.0), lambda x, on_boundary: on_boundary)
u = TrialFunction(V); v = TestFunction(V);
A, b = assemble_system( inner(grad(u), grad(v))*dx, Constant(1.0)*v*dx, bc)
class KrylovMatrix(PETScKrylovMatrix) :
def __init__(self) :
PETScKrylovMatrix.__init__(self, V.dim(), V.dim())
def mult(self, *args) :
y = PETScVector(V.dim())
A.mult(args[0],y)
args[1].set_local(y.array())
class IdentityPreconditioner(PETScUserPreconditioner) :
def __init__(self) :
PETScUserPreconditioner.__init__(self)
def solve(self, *args) :
args[0].set_local(args[1])
y = Function(V)
solve(A,y.vector(),b)
x_petsc = PETScVector(V.dim())
MyPrecon = IdentityPreconditioner()
KrylovSolver = PETScKrylovSolver("cg", MyPrecon)
KrylovSolver.solve(KrylovMatrix(), x_petsc, down_cast(b)) # fails
KrylovSolver.solve(A, x_petsc, down_cast(b)) # works
** Affects: dolfin
Importance: Undecided
Status: New
** Tags: matrix-free petsc preconditioner
--
You received this bug notification because you are a member of DOLFIN
Team, which is subscribed to DOLFIN.
https://bugs.launchpad.net/bugs/768233
Title:
PETScUserPreconditioner does not work with PETScKrylovMatrix
Status in DOLFIN:
New
Bug description:
There seems to be a problem with passing matrix-free preconditioners
to PETSc: The combination of PETScKrylovMatrix and
PETScUserPreconditioner fails with the following error:
[0]PETSC ERROR: No support for this operation for this object type!
[0]PETSC ERROR: Matrix format shell does not have a built-in PETSc direct solver!
Here's a minimal example which triggers the error:
from dolfin import *
mesh = UnitSquare(32, 32)
V = FunctionSpace(mesh, 'CG', 1)
bc = DirichletBC(V, Constant(0.0), lambda x, on_boundary: on_boundary)
u = TrialFunction(V); v = TestFunction(V);
A, b = assemble_system( inner(grad(u), grad(v))*dx, Constant(1.0)*v*dx, bc)
class KrylovMatrix(PETScKrylovMatrix) :
def __init__(self) :
PETScKrylovMatrix.__init__(self, V.dim(), V.dim())
def mult(self, *args) :
y = PETScVector(V.dim())
A.mult(args[0],y)
args[1].set_local(y.array())
class IdentityPreconditioner(PETScUserPreconditioner) :
def __init__(self) :
PETScUserPreconditioner.__init__(self)
def solve(self, *args) :
args[0].set_local(args[1])
y = Function(V)
solve(A,y.vector(),b)
x_petsc = PETScVector(V.dim())
MyPrecon = IdentityPreconditioner()
KrylovSolver = PETScKrylovSolver("cg", MyPrecon)
KrylovSolver.solve(KrylovMatrix(), x_petsc, down_cast(b)) # fails
KrylovSolver.solve(A, x_petsc, down_cast(b)) # works
Follow ups
References