From 6021fd55ae0bdd650984966157083d59a6d00923 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Schartum=20Dokken?= Date: Tue, 24 Sep 2024 10:59:09 +0200 Subject: [PATCH] Fix mesh constructor again (#3432) * Fix mesh constructor again * Ruff * Add trest --- python/dolfinx/mesh.py | 4 +++- python/test/unit/refinement/test_refinement.py | 11 +++++++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/python/dolfinx/mesh.py b/python/dolfinx/mesh.py index 8ad6fe3c02d..28b9eb759ea 100644 --- a/python/dolfinx/mesh.py +++ b/python/dolfinx/mesh.py @@ -557,7 +557,9 @@ def refine( mesh1, parent_cell, parent_facet = _cpp.refinement.refine( mesh._cpp_object, edges, redistribute, ghost_mode, option ) - return Mesh(mesh1, mesh._ufl_domain), parent_cell, parent_facet + # Create new ufl domain as it will carry a reference to the C++ mesh in the ufl_cargo + ufl_domain = ufl.Mesh(mesh._ufl_domain.ufl_coordinate_element()) # type: ignore + return Mesh(mesh1, ufl_domain), parent_cell, parent_facet def create_mesh( diff --git a/python/test/unit/refinement/test_refinement.py b/python/test/unit/refinement/test_refinement.py index 440057ce265..6aaa4090dfb 100644 --- a/python/test/unit/refinement/test_refinement.py +++ b/python/test/unit/refinement/test_refinement.py @@ -1,5 +1,5 @@ -# Copyright (C) 2018-2021 Chris N Richardson and Jørgen S. Dokken -# +# Copyright (C) 2018-2024 Chris N Richardson and Jørgen S. Dokken + # This file is part of DOLFINx (https://www.fenicsproject.org) # # SPDX-License-Identifier: LGPL-3.0-or-later @@ -212,3 +212,10 @@ def test_refine_cell_meshtag(tdim, refine_plaza_wrapper): new_meshtag = transfer_meshtag(meshtag, fine_mesh, parent_cell) assert sum(new_meshtag.values) == (tdim * 4 - 4) * sum(meshtag.values) assert len(new_meshtag.indices) == (tdim * 4 - 4) * len(meshtag.indices) + + +def test_refine_ufl_cargo(): + mesh = create_unit_cube(MPI.COMM_WORLD, 4, 3, 3) + mesh.topology.create_entities(1) + refined_mesh, _, _ = refine(mesh, redistribute=False) + assert refined_mesh.ufl_domain().ufl_cargo() != mesh.ufl_domain().ufl_cargo()