Exemplo n.º 1
0
    def create(self, normalizer, faults=None):
        """
    Hook for creating mesh.
    """
        from pylith.utils.profiling import resourceUsageString
        from pylith.mpi.Communicator import petsc_comm_world
        comm = petsc_comm_world()

        self._setupLogging()
        logEvent = "%screate" % self._loggingPrefix
        self._eventLogger.eventBegin(logEvent)

        # Read mesh
        mesh = self.reader.read(self.debug, self.interpolate)
        if self.debug:
            mesh.view()

        # Reorder mesh
        if self.reorderMesh:
            logEvent2 = "%sreorder" % self._loggingPrefix
            self._eventLogger.eventBegin(logEvent2)
            self._debug.log(resourceUsageString())
            if 0 == comm.rank:
                self._info.log("Reordering cells and vertices.")
            from pylith.topology.ReverseCuthillMcKee import ReverseCuthillMcKee
            ordering = ReverseCuthillMcKee()
            ordering.reorder(mesh)
            self._eventLogger.eventEnd(logEvent2)

        # Adjust topology
        self._debug.log(resourceUsageString())
        if 0 == comm.rank:
            self._info.log("Adjusting topology.")
        self._adjustTopology(mesh, faults)

        # Distribute mesh
        if comm.size > 1:
            if 0 == comm.rank:
                self._info.log("Distributing mesh.")
            mesh = self.distributor.distribute(mesh, normalizer)
            if self.debug:
                mesh.view()
            mesh.memLoggingStage = "DistributedMesh"

        # Refine mesh (if necessary)
        newMesh = self.refiner.refine(mesh)
        if not newMesh == mesh:
            mesh.cleanup()
            newMesh.memLoggingStage = "RefinedMesh"

        # Can't reorder mesh again, because we do not have routine to
        # unmix normal and hybrid cells.

        # Nondimensionalize mesh (coordinates of vertices).
        from pylith.topology.topology import MeshOps_nondimensionalize
        MeshOps_nondimensionalize(newMesh, normalizer)

        self._eventLogger.eventEnd(logEvent)
        return newMesh
Exemplo n.º 2
0
 def test_constructor(self):
     field = ReverseCuthillMcKee()
     self.assertTrue(not field is None)