Hi Ed, On 26/07/18 09:24, Ham, David A wrote:
The DM is the one you found. The rest of this is more a PETSc4py question than a Firedrake question and I have to say that I’m not the PETSc4py expert. However I note that the DM you get from the FunctionSpace has a viewFromOptions method. I think that’s what you’re after.
As well as what David says here, you can also get at the DMPlex object. A little explanation. The DM attached to every FunctionSpace (W.dm in your code) is a DMShell that describes the dof layout (as well as having a global vector, it also has a default section (W.dm.getDefaultSection()). It also has the relevant callback hooks attached to it to do fieldsplitting, as well as coarsen/refine (if you built with a MeshHierarchy). As well as this DMShell, there is also a DMPlex hanging around, that describes the mesh topology. But this is attached to the mesh object you made, rather than the FunctionSpace. You can get at it via mesh._plex: So: from firedrake import * mesh = UnitSquareMesh(...) V = FunctionSpace(mesh, "Lagrange", 2) V.dm.view() # DMShell describing dof layout topology = mesh._plex # or topology = V.ufl_domain()._plex topology.view() # DMPlex describing topology Thanks, Lawrence