def create_mesh(comm: _MPI.Comm, cells: typing.Union[np.ndarray, _cpp.graph.AdjacencyList_int64], x: np.ndarray, domain: ufl.Mesh, ghost_mode=GhostMode.shared_facet, partitioner=_cpp.mesh.create_cell_partitioner()) -> Mesh: """ Create a mesh from topology and geometry arrays Args: comm: MPI communicator to define the mesh on cells: Cells of the mesh x: Mesh geometry ('node' coordinates), with shape ``(gdim, num_nodes)`` domain: UFL mesh ghost_mode: The ghost mode used in the mesh partitioning partitioner: Function that computes the parallel distribution of cells across MPI ranks Returns: A new mesh """ ufl_element = domain.ufl_coordinate_element() cell_shape = ufl_element.cell().cellname() cell_degree = ufl_element.degree() cmap = _cpp.fem.CoordinateElement(_uflcell_to_dolfinxcell[cell_shape], cell_degree) try: mesh = _cpp.mesh.create_mesh(comm, cells, cmap, x, ghost_mode, partitioner) except TypeError: mesh = _cpp.mesh.create_mesh(comm, _cpp.graph.AdjacencyList_int64(np.cast['int64'](cells)), cmap, x, ghost_mode, partitioner) domain._ufl_cargo = mesh return Mesh.from_cpp(mesh, domain)
def __init__(self, comm: _MPI.Comm, topology: _cpp.mesh.Topology, geometry: _cpp.mesh.Geometry, domain: ufl.Mesh): """A class for representing meshes Args: comm: The MPI communicator topology: The mesh topology geometry: The mesh geometry domain: The MPI communicator Note: Mesh objects are not generally created using this class directly. """ super().__init__(comm, topology, geometry) self._ufl_domain = domain domain._ufl_cargo = self
def from_cpp(cls, obj: _cpp.mesh.Mesh, domain: ufl.Mesh) -> Mesh: """Create Mesh object from a C++ Mesh object""" obj._ufl_domain = domain obj.__class__ = Mesh domain._ufl_cargo = obj return obj