From dcf7414960dc941dfe66f8f1cbfb4b8a9d0999d6 Mon Sep 17 00:00:00 2001 From: Henrik Finsberg Date: Thu, 23 Apr 2026 11:19:54 +0200 Subject: [PATCH 1/2] Add cmap compatibility due to https://github.com/FEniCS/dolfinx/pull/4169 --- .github/workflows/check_formatting.yml | 2 +- src/io4dolfinx/checkpointing.py | 4 +++- src/io4dolfinx/compat.py | 9 +++++++++ src/io4dolfinx/original_checkpoint.py | 3 ++- src/io4dolfinx/writers.py | 8 +++++--- 5 files changed, 20 insertions(+), 6 deletions(-) create mode 100644 src/io4dolfinx/compat.py diff --git a/.github/workflows/check_formatting.yml b/.github/workflows/check_formatting.yml index f1de9f7..0000bce 100644 --- a/.github/workflows/check_formatting.yml +++ b/.github/workflows/check_formatting.yml @@ -54,4 +54,4 @@ jobs: ruff format --check . - name: Mypy check - run: python3 -m mypy -v + run: python3 -m mypy diff --git a/src/io4dolfinx/checkpointing.py b/src/io4dolfinx/checkpointing.py index b0ea907..0d68d5f 100644 --- a/src/io4dolfinx/checkpointing.py +++ b/src/io4dolfinx/checkpointing.py @@ -19,6 +19,7 @@ import ufl from packaging.version import Version +from . import compat from .backends import FileMode, ReadMode, get_backend from .comm_helpers import ( send_and_recv_cell_perm, @@ -157,7 +158,8 @@ def write_meshtags( local_start = mesh.comm.exscan(num_saved_tag_entities, op=MPI.SUM) local_start = local_start if mesh.comm.rank != 0 else 0 global_num_tag_entities = mesh.comm.allreduce(num_saved_tag_entities, op=MPI.SUM) - dof_layout = mesh.geometry.cmap.create_dof_layout() + + dof_layout = compat.cmap(mesh).create_dof_layout() if hasattr(dof_layout, "num_entity_closure_dofs"): num_dofs_per_entity = dof_layout.num_entity_closure_dofs(dim) else: diff --git a/src/io4dolfinx/compat.py b/src/io4dolfinx/compat.py new file mode 100644 index 0000000..5dbcc52 --- /dev/null +++ b/src/io4dolfinx/compat.py @@ -0,0 +1,9 @@ +import dolfinx.mesh + + +def cmap(mesh) -> dolfinx.fem.element.CoordinateElement: + # Due to https://github.com/FEniCS/dolfinx/pull/4169 + try: + return mesh.geometry.cmap() + except TypeError: + return mesh.geometry.cmap diff --git a/src/io4dolfinx/original_checkpoint.py b/src/io4dolfinx/original_checkpoint.py index a361e04..261bc10 100644 --- a/src/io4dolfinx/original_checkpoint.py +++ b/src/io4dolfinx/original_checkpoint.py @@ -14,6 +14,7 @@ import dolfinx import numpy as np +from . import compat from .backends import FileMode, get_backend from .comm_helpers import numpy_to_mpi from .structures import FunctionData, MeshData @@ -178,7 +179,7 @@ def create_original_mesh_data(mesh: dolfinx.mesh.Mesh) -> MeshData: del _geometry, recv_nodes assert local_node_range[1] - local_node_range[0] == geometry.shape[0] - cmap = mesh.geometry.cmap + cmap = compat.cmap(mesh) cell_to_output_comm.Free() geometry_to_owner_comm.Free() diff --git a/src/io4dolfinx/writers.py b/src/io4dolfinx/writers.py index d3b84a9..5042041 100644 --- a/src/io4dolfinx/writers.py +++ b/src/io4dolfinx/writers.py @@ -13,6 +13,7 @@ import numpy as np from packaging.version import Version +from . import compat from .backends import FileMode, get_backend from .structures import FunctionData, MeshData @@ -40,7 +41,8 @@ def prepare_meshdata_for_storage(mesh: dolfinx.mesh.Mesh, store_partition_info: num_cells_local = mesh.topology.index_map(mesh.topology.dim).size_local num_cells_global = mesh.topology.index_map(mesh.topology.dim).size_global cell_range = mesh.topology.index_map(mesh.topology.dim).local_range - cmap = mesh.geometry.cmap + cmap = compat.cmap(mesh) + geom_layout = cmap.create_dof_layout() if hasattr(geom_layout, "num_entity_closure_dofs"): num_dofs_per_cell = geom_layout.num_entity_closure_dofs(mesh.topology.dim) @@ -94,8 +96,8 @@ def prepare_meshdata_for_storage(mesh: dolfinx.mesh.Mesh, store_partition_info: local_topology_pos=cell_range, num_cells_global=num_cells_global, cell_type=mesh.topology.cell_name(), - degree=mesh.geometry.cmap.degree, - lagrange_variant=mesh.geometry.cmap.variant, + degree=cmap.degree, + lagrange_variant=cmap.variant, store_partition=store_partition_info, partition_processes=partition_processes, ownership_array=ownership_array, From 98f4beadeebe0e304630bc8169c899ff9aac5d16 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Schartum=20Dokken?= Date: Thu, 23 Apr 2026 12:10:37 +0200 Subject: [PATCH 2/2] Try explicit handling instead of generic try except MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Jørgen Schartum Dokken --- src/io4dolfinx/compat.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/io4dolfinx/compat.py b/src/io4dolfinx/compat.py index 5dbcc52..918ab79 100644 --- a/src/io4dolfinx/compat.py +++ b/src/io4dolfinx/compat.py @@ -3,7 +3,7 @@ def cmap(mesh) -> dolfinx.fem.element.CoordinateElement: # Due to https://github.com/FEniCS/dolfinx/pull/4169 - try: + if callable(mesh.geometry.cmap): return mesh.geometry.cmap() - except TypeError: + else: return mesh.geometry.cmap