Skip to content

Instantly share code, notes, and snippets.

@wence-
Created April 25, 2014 09:35
Show Gist options
  • Select an option

  • Save wence-/11283718 to your computer and use it in GitHub Desktop.

Select an option

Save wence-/11283718 to your computer and use it in GitHub Desktop.
diff --git a/firedrake/dmplex.pyx b/firedrake/dmplex.pyx
index 576405f..42760d2 100644
--- a/firedrake/dmplex.pyx
+++ b/firedrake/dmplex.pyx
@@ -104,7 +104,7 @@ def facet_numbering(PETSc.DM plex, kind,
# Second cell
if facet_cells.shape[1] > 1:
cell = facet_cells[f,1]
- if cell > 0:
+ if cell >= 0:
fi = 0
for c in range(nclosure):
if cell_closures[cell, c] == facets[f]:
@@ -458,7 +458,7 @@ def get_facet_nodes(np.ndarray[np.int32_t, ndim=2] facet_cells,
# Second parent cell for internal facets
if ncells > 1:
cell = facet_cells[f, 1]
- if cell > 0:
+ if cell >= 0:
for i in range(ndofs):
facet_nodes[f, ndofs+i] = cell_nodes[cell, i]
else:
diff --git a/firedrake/mesh.py b/firedrake/mesh.py
index 9ff547c..f8ebcb2 100644
--- a/firedrake/mesh.py
+++ b/firedrake/mesh.py
@@ -258,22 +258,29 @@ class Mesh(object):
def _from_dmplex(self, plex, geometric_dim=0, periodic_coords=None):
""" Create mesh from DMPlex object """
- self._plex = plex
self.uid = utils._new_uid()
if geometric_dim == 0:
- geometric_dim = self._plex.getDimension()
-
- # Mark exterior and interior facets
- dmplex.label_facets(self._plex)
+ geometric_dim = plex.getDimension()
# Distribute the dm to all ranks
if op2.MPI.comm.size > 1:
- self.parallel_sf = self._plex.distribute(overlap=1)
+ self.parallel_sf = plex.distribute(overlap=1)
+ else:
+ # For non-1D meshes in serial, reorder using RCM
+ if plex.getDimension() > 1:
+ perm = plex.getOrdering(PETSc.Mat.OrderingType.RCM)
+ plex = plex.permute(perm)
+
+ self._plex = plex
+
+ # Mark exterior and interior facets
+ dmplex.label_facets(self._plex)
# Mark OP2 entities and derive the resulting Plex renumbering
dmplex.mark_entity_classes(self._plex)
- self._plex_renumbering = dmplex.plex_renumbering(plex)
+ self._plex_renumbering = dmplex.plex_renumbering(self._plex)
cStart, cEnd = self._plex.getHeightStratum(0) # cells
cell_vertices = self._plex.getConeSize(cStart)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment