diff --git a/meshmode/mesh/io.py b/meshmode/mesh/io.py index 38617cca6a6e8d6f3a215bb38c6786630783b870..96e333ddb4fdcf2c240d57b7cc3def0558d2e862 100644 --- a/meshmode/mesh/io.py +++ b/meshmode/mesh/io.py @@ -39,6 +39,7 @@ __doc__ = """ .. autofunction:: read_gmsh .. autofunction:: generate_gmsh +.. autofunction:: from_meshpy """ @@ -179,6 +180,8 @@ class GmshMeshReceiver(GmshMeshReceiverBase): # }}} +# {{{ gmsh + def read_gmsh(filename, force_ambient_dim=None): """Read a gmsh mesh file from *filename* and return a :class:`meshmode.mesh.Mesh`. @@ -229,3 +232,32 @@ def generate_gmsh(source, dimensions, order=None, other_options=[], break return mesh + +# }}} + + +# {{{ meshpy + +def from_meshpy(mesh_info, order): + """Imports a mesh from a :mod:`meshpy` *mesh_info* data structure, + which may be generated by either :mod:`meshpy.triangle` or + :mod:`meshpy_tet`. + """ + from meshmode.mesh import Mesh + from meshmode.mesh.generation import make_group_from_vertices + + vertices = np.array(mesh_info.points).T + elements = np.array(mesh_info.elements, np.int32) + + grp = make_group_from_vertices(vertices, elements, order) + + # FIXME: Should transfer boundary/volume markers + + return Mesh( + vertices=vertices, groups=[grp], + nodal_adjacency=None, + facial_adjacency_groups=None) + +# }}} + +# vim: foldmethod=marker