Created
April 25, 2014 09:35
-
-
Save wence-/11283718 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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