Skip to content

Commit c262efb

Browse files
committed
Fix surface GlobalElementID mapping; preserve cell data when exporting surfaces
Simulation surfaces now retain ModelFaceID and GlobalElementID arrays when saved, instead of stripping them. In extract_faces: - Use numpy.int32 dtype for GlobalElementID to ensure VTK/PyVista compatibility. - Correct cap surface mapping: index by cap_surface.faces and assign GlobalElementID on cap_surface. - Compute and assign GlobalElementID for lumen surface faces (new).
1 parent 89006d3 commit c262efb

File tree

2 files changed

+12
-7
lines changed

2 files changed

+12
-7
lines changed

svv/simulation/simulation.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -686,8 +686,8 @@ def write_3d_fluid_simulation(self, *args):
686686
for name, face in fluid_mesh.faces.items():
687687
#face.cell_data["ModelFaceID"] = face.cell_data["ModelFaceID"].astype(numpy.int32)
688688
#face.cell_data["GlobalElementID"] = face.cell_data["GlobalElementID"].astype(numpy.int32)
689-
face.cell_data.remove("ModelFaceID")
690-
face.cell_data.remove("GlobalElementID")
689+
#face.cell_data.remove("ModelFaceID")
690+
#face.cell_data.remove("GlobalElementID")
691691
if isinstance(face, pyvista.PolyData):
692692
face.save(self.file_path + os.sep + "mesh" + os.sep + fluid_mesh.name + os.sep + "mesh-surfaces" + os.sep + "{}.vtp".format(name))
693693
else:

svv/simulation/utils/extract_faces.py

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -427,7 +427,7 @@ def compute_circularity(loop_polydata):
427427
wall_faces = numpy.sort(wall_faces, axis=1)
428428
_, indices = tet_face_tree.query(wall_faces)
429429
wall_surface.cell_data["GlobalElementID"] = indices // 4
430-
wall_surface.cell_data["GlobalElementID"] = wall_surface.cell_data["GlobalElementID"].astype(int)
430+
wall_surface.cell_data["GlobalElementID"] = wall_surface.cell_data["GlobalElementID"].astype(numpy.int32)
431431
boundaries = wall_surface.extract_feature_edges(boundary_edges=True, manifold_edges=False,
432432
feature_edges=False, non_manifold_edges=False)
433433
boundaries = boundaries.split_bodies()
@@ -451,13 +451,12 @@ def compute_circularity(loop_polydata):
451451
_, indices = global_node_tree.query(cap_surface.points)
452452
cap_surface.point_data["GlobalNodeID"] = indices.astype(int)
453453
# Assign Global Element IDs
454-
cap_faces = cap_surface.point_data["GlobalNodeID"][wall_surface.faces]
454+
cap_faces = cap_surface.point_data["GlobalNodeID"][cap_surface.faces]
455455
cap_faces = cap_faces.reshape(-1, 4)[:, 1:]
456456
cap_faces = numpy.sort(cap_faces, axis=1)
457457
_, indices = tet_face_tree.query(cap_faces)
458-
wall_surface.cell_data["GlobalElementID"] = indices // 4
459-
wall_surface.cell_data["GlobalElementID"] = wall_surface.cell_data["GlobalElementID"].astype(int)
460-
# Assign Global Element IDs
458+
cap_surface.cell_data["GlobalElementID"] = indices // 4
459+
cap_surface.cell_data["GlobalElementID"] = cap_surface.cell_data["GlobalElementID"].astype(numpy.int32)
461460
boundaries = cap_surface.extract_feature_edges(boundary_edges=True, manifold_edges=False,
462461
feature_edges=False, non_manifold_edges=False)
463462
boundaries = boundaries.split_bodies()
@@ -482,6 +481,12 @@ def compute_circularity(loop_polydata):
482481
_, indices = global_node_tree.query(lumen_surface.points)
483482
lumen_surface.point_data["GlobalNodeID"] = indices.astype(int)
484483
# Assign Global Element IDs
484+
lumen_faces = lumen_surface.point_data["GlobalNodeID"][lumen_surface.faces]
485+
lumen_faces = lumen_faces.reshape(-1, 4)[:, 1:]
486+
lumen_faces = numpy.sort(lumen_faces, axis=1)
487+
_, indices = tet_face_tree.query(lumen_faces)
488+
lumen_surface.cell_data["GlobalElementID"] = indices // 4
489+
lumen_surface.cell_data["GlobalElementID"] = lumen_surface.cell_data["GlobalElementID"].astype(numpy.int32)
485490
boundaries = lumen_surface.extract_feature_edges(boundary_edges=True, manifold_edges=False,
486491
feature_edges=False, non_manifold_edges=False)
487492
boundaries = boundaries.split_bodies()

0 commit comments

Comments
 (0)