From 94dca1c7aabdb72d9be0d86b45b02771ee489e16 Mon Sep 17 00:00:00 2001 From: Kaustubh Tangsali Date: Tue, 18 Aug 2026 11:51:38 +0530 Subject: [PATCH 1/2] fix(domino): handle three-field SDF results --- .../cfd/evaluation/models/wrappers/domino/inference.py | 8 ++++---- physicsnemo/cfd/postprocessing_tools/metrics/l2_errors.py | 2 +- workflows/domino_design_sensitivities/design_datapipe.py | 6 +++--- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/physicsnemo/cfd/evaluation/models/wrappers/domino/inference.py b/physicsnemo/cfd/evaluation/models/wrappers/domino/inference.py index 2559c2a..ff366aa 100644 --- a/physicsnemo/cfd/evaluation/models/wrappers/domino/inference.py +++ b/physicsnemo/cfd/evaluation/models/wrappers/domino/inference.py @@ -151,7 +151,7 @@ def build_domin_surface_datadict( normed_stl_vertices_cp = normalize(stl_vertices_t, s_max, s_min) surf_grid_normed = normalize(surf_grid, s_max, s_min) - sdf_surf_grid, _ = signed_distance_field( + sdf_surf_grid, _, _ = signed_distance_field( normed_stl_vertices_cp, mesh_indices_flattened_t, surf_grid_normed, @@ -329,7 +329,7 @@ def build_domin_volume_datadict( normed_stl_vertices_cp = normalize(stl_vertices_t, s_max, s_min) surf_grid_normed = normalize(surf_grid, s_max, s_min) - sdf_surf_grid, _ = signed_distance_field( + sdf_surf_grid, _, _ = signed_distance_field( normed_stl_vertices_cp, mesh_indices_flattened_t, surf_grid_normed, @@ -426,14 +426,14 @@ def build_domin_volume_datadict( center_of_mass_normalized = center_of_mass normed_stl_vertices_vol = stl_vertices_t - sdf_grid, _ = signed_distance_field( + sdf_grid, _, _ = signed_distance_field( normed_stl_vertices_vol, mesh_indices_flattened_t, grid, use_sign_winding_number=True, ) - sdf_nodes, sdf_node_closest_point = signed_distance_field( + sdf_nodes, sdf_node_closest_point, _ = signed_distance_field( normed_stl_vertices_vol, mesh_indices_flattened_t, volume_coordinates, diff --git a/physicsnemo/cfd/postprocessing_tools/metrics/l2_errors.py b/physicsnemo/cfd/postprocessing_tools/metrics/l2_errors.py index af21798..ea7ed5f 100644 --- a/physicsnemo/cfd/postprocessing_tools/metrics/l2_errors.py +++ b/physicsnemo/cfd/postprocessing_tools/metrics/l2_errors.py @@ -337,7 +337,7 @@ def compute_error_vs_sdf( query_points_np, dtype=torch.float32, device=torch_device ) - sdf_field, _ = signed_distance_field( + sdf_field, _, _ = signed_distance_field( stl_vertices, stl_indices, query_points, use_sign_winding_number=True ) sdf_field = sdf_field.detach().cpu().numpy() diff --git a/workflows/domino_design_sensitivities/design_datapipe.py b/workflows/domino_design_sensitivities/design_datapipe.py index 9315649..ea469a0 100644 --- a/workflows/domino_design_sensitivities/design_datapipe.py +++ b/workflows/domino_design_sensitivities/design_datapipe.py @@ -64,8 +64,8 @@ def _compute_sdf_np( Thin numpy-in / numpy-out wrapper around the v2 ``physicsnemo.nn.functional.signed_distance_field`` op, which is itself - torch-only and always returns ``(sdf, hit_points)`` (no - ``include_hit_points`` kwarg). + torch-only and returns ``(sdf, hit_points, hit_faces)`` (no + ``include_hit_points`` kwarg). This wrapper discards ``hit_faces``. Args: mesh_vertices: Mesh vertex coordinates, shape ``(n_vertices, 3)``. @@ -87,7 +87,7 @@ def _compute_sdf_np( ``input_points.shape[:-1]`` and ``hit_points`` has shape ``input_points.shape``. Returned on CPU regardless of input device. """ - sdf, hit_points = signed_distance_field( + sdf, hit_points, _ = signed_distance_field( mesh_vertices=torch.as_tensor(mesh_vertices, device=device), mesh_indices=torch.as_tensor(mesh_indices, device=device), input_points=torch.as_tensor(input_points, device=device), From 6872f456830ad91a132c88c7874859c4c126f61c Mon Sep 17 00:00:00 2001 From: Kaustubh Tangsali Date: Tue, 18 Aug 2026 12:42:40 +0530 Subject: [PATCH 2/2] fix(domino): support legacy SDF return values --- .../cfd/evaluation/models/wrappers/domino/inference.py | 8 ++++---- physicsnemo/cfd/postprocessing_tools/metrics/l2_errors.py | 2 +- workflows/domino_design_sensitivities/design_datapipe.py | 7 ++++--- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/physicsnemo/cfd/evaluation/models/wrappers/domino/inference.py b/physicsnemo/cfd/evaluation/models/wrappers/domino/inference.py index ff366aa..e544b0e 100644 --- a/physicsnemo/cfd/evaluation/models/wrappers/domino/inference.py +++ b/physicsnemo/cfd/evaluation/models/wrappers/domino/inference.py @@ -151,7 +151,7 @@ def build_domin_surface_datadict( normed_stl_vertices_cp = normalize(stl_vertices_t, s_max, s_min) surf_grid_normed = normalize(surf_grid, s_max, s_min) - sdf_surf_grid, _, _ = signed_distance_field( + sdf_surf_grid, *_ = signed_distance_field( normed_stl_vertices_cp, mesh_indices_flattened_t, surf_grid_normed, @@ -329,7 +329,7 @@ def build_domin_volume_datadict( normed_stl_vertices_cp = normalize(stl_vertices_t, s_max, s_min) surf_grid_normed = normalize(surf_grid, s_max, s_min) - sdf_surf_grid, _, _ = signed_distance_field( + sdf_surf_grid, *_ = signed_distance_field( normed_stl_vertices_cp, mesh_indices_flattened_t, surf_grid_normed, @@ -426,14 +426,14 @@ def build_domin_volume_datadict( center_of_mass_normalized = center_of_mass normed_stl_vertices_vol = stl_vertices_t - sdf_grid, _, _ = signed_distance_field( + sdf_grid, *_ = signed_distance_field( normed_stl_vertices_vol, mesh_indices_flattened_t, grid, use_sign_winding_number=True, ) - sdf_nodes, sdf_node_closest_point, _ = signed_distance_field( + sdf_nodes, sdf_node_closest_point, *_ = signed_distance_field( normed_stl_vertices_vol, mesh_indices_flattened_t, volume_coordinates, diff --git a/physicsnemo/cfd/postprocessing_tools/metrics/l2_errors.py b/physicsnemo/cfd/postprocessing_tools/metrics/l2_errors.py index ea7ed5f..c14f732 100644 --- a/physicsnemo/cfd/postprocessing_tools/metrics/l2_errors.py +++ b/physicsnemo/cfd/postprocessing_tools/metrics/l2_errors.py @@ -337,7 +337,7 @@ def compute_error_vs_sdf( query_points_np, dtype=torch.float32, device=torch_device ) - sdf_field, _, _ = signed_distance_field( + sdf_field, *_ = signed_distance_field( stl_vertices, stl_indices, query_points, use_sign_winding_number=True ) sdf_field = sdf_field.detach().cpu().numpy() diff --git a/workflows/domino_design_sensitivities/design_datapipe.py b/workflows/domino_design_sensitivities/design_datapipe.py index ea469a0..fc9ee0d 100644 --- a/workflows/domino_design_sensitivities/design_datapipe.py +++ b/workflows/domino_design_sensitivities/design_datapipe.py @@ -64,8 +64,9 @@ def _compute_sdf_np( Thin numpy-in / numpy-out wrapper around the v2 ``physicsnemo.nn.functional.signed_distance_field`` op, which is itself - torch-only and returns ``(sdf, hit_points, hit_faces)`` (no - ``include_hit_points`` kwarg). This wrapper discards ``hit_faces``. + torch-only and returns at least ``(sdf, hit_points)`` (no + ``include_hit_points`` kwarg). This wrapper discards any additional + return values provided by newer PhysicsNeMo versions. Args: mesh_vertices: Mesh vertex coordinates, shape ``(n_vertices, 3)``. @@ -87,7 +88,7 @@ def _compute_sdf_np( ``input_points.shape[:-1]`` and ``hit_points`` has shape ``input_points.shape``. Returned on CPU regardless of input device. """ - sdf, hit_points, _ = signed_distance_field( + sdf, hit_points, *_ = signed_distance_field( mesh_vertices=torch.as_tensor(mesh_vertices, device=device), mesh_indices=torch.as_tensor(mesh_indices, device=device), input_points=torch.as_tensor(input_points, device=device),