diff --git a/meshmode/mesh/__init__.py b/meshmode/mesh/__init__.py index e1a9566d047948a2e99a577ecae6013f3c6210c2..4a9279cb85341b5518f01807aff532606bcf129a 100644 --- a/meshmode/mesh/__init__.py +++ b/meshmode/mesh/__init__.py @@ -660,6 +660,24 @@ class Mesh(Record): assert test_volume_mesh_element_orientations(self), \ "negatively oriented elements found" + def get_copy_kwargs(self, **kwargs): + def set_if_not_present(name, from_name=None): + if from_name is None: + from_name = name + if name not in kwargs: + kwargs[name] = getattr(self, from_name) + + set_if_not_present("vertices") + if "groups" not in kwargs: + kwargs["groups"] = [group.copy() for group in self.groups] + set_if_not_present("boundary_tags") + set_if_not_present("nodal_adjacency", "_nodal_adjacency") + set_if_not_present("facial_adjacency_groups", "_facial_adjacency_groups") + set_if_not_present("vertex_id_dtype") + set_if_not_present("element_id_dtype") + + return kwargs + @property def ambient_dim(self): return self.vertices.shape[0] diff --git a/test/test_meshmode.py b/test/test_meshmode.py index 5178cf406512547e0bd1424ba983e0759a9eb617..84b14ec9c735d19fe8b6e93eba36bc834465d9c2 100644 --- a/test/test_meshmode.py +++ b/test/test_meshmode.py @@ -793,6 +793,12 @@ def test_box_mesh(ctx_getter, visualize=False): # }}} +def test_mesh_copy(): + from meshmode.mesh.generation import generate_box_mesh + mesh = generate_box_mesh(3*(np.linspace(0, 1, 5),)) + mesh.copy() + + # {{{ as_python stringification def test_as_python():