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
def test_constructor(self): field = ReverseCuthillMcKee() self.assertTrue(not field is None)