From 17a12bfdd68a97e4d03a2f6e06110d926babb230 Mon Sep 17 00:00:00 2001 From: Tyagi Date: Fri, 27 Jun 2025 11:18:31 +1000 Subject: [PATCH 1/2] updated checkpoint_xdmf method save discontinuous fields properly --- src/underworld3/discretisation.py | 33 ++++++++++++++++++++++--------- 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/src/underworld3/discretisation.py b/src/underworld3/discretisation.py index 6a195abb..469f3b97 100644 --- a/src/underworld3/discretisation.py +++ b/src/underworld3/discretisation.py @@ -2893,40 +2893,55 @@ def checkpoint_xdmf( """ ## The mesh Var attributes + + def get_cell_field_size(h5_filename): + with h5py.File(h5_filename, 'r') as f: + size = f[f'cell_fields/{var.clean_name}_{var.clean_name}'].shape[0] + return size attributes = "" for var in meshVars: - var_filename = filename + f"mesh.{var.clean_name}.{index:05}.h5" + var_filename = filename + f".mesh.{var.clean_name}.{index:05}.h5" + if var.num_components == 1: variable_type = "Scalar" else: variable_type = "Vector" - # We should add a tensor type here ... + + # Determine if data is stored on nodes (vertex_fields) or cells (cell_fields) + if not getattr(var, "continuous") or getattr(var, "degree")==0: + center = "Cell" + numItems = get_cell_field_size(var_filename) + field_group = "cell_fields" + else: + center = "Node" + numItems = numVertices + field_group = "vertex_fields" var_attribute = f""" + Center="{center}"> + Dimensions="1 {numItems} {var.num_components}" + Type="HyperSlab"> 0 0 0 1 1 1 - 1 {numVertices} {var.num_components} + 1 {numItems} {var.num_components} - &{var.clean_name+"_Data"};:/vertex_fields/{var.clean_name+"_"+var.clean_name} + &{var.clean_name+"_Data"};:/{field_group}/{var.clean_name+"_"+var.clean_name} - """ + """ attributes += var_attribute for var in swarmVars: From aa65291a38853723fc29850d92e75a0ce3beec5a Mon Sep 17 00:00:00 2001 From: Tyagi Date: Fri, 27 Jun 2025 11:50:04 +1000 Subject: [PATCH 2/2] added var as argument to def --- src/underworld3/discretisation.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/underworld3/discretisation.py b/src/underworld3/discretisation.py index 469f3b97..5cd34da4 100644 --- a/src/underworld3/discretisation.py +++ b/src/underworld3/discretisation.py @@ -2894,9 +2894,9 @@ def checkpoint_xdmf( ## The mesh Var attributes - def get_cell_field_size(h5_filename): + def get_cell_field_size(h5_filename, mesh_var): with h5py.File(h5_filename, 'r') as f: - size = f[f'cell_fields/{var.clean_name}_{var.clean_name}'].shape[0] + size = f[f'cell_fields/{mesh_var.clean_name}_{mesh_var.clean_name}'].shape[0] return size attributes = "" @@ -2911,7 +2911,7 @@ def get_cell_field_size(h5_filename): # Determine if data is stored on nodes (vertex_fields) or cells (cell_fields) if not getattr(var, "continuous") or getattr(var, "degree")==0: center = "Cell" - numItems = get_cell_field_size(var_filename) + numItems = get_cell_field_size(var_filename, var) field_group = "cell_fields" else: center = "Node"