@@ -239,18 +239,20 @@ def uxgrid_point_in_cell(grid, y: np.ndarray, x: np.ndarray, yi: np.ndarray, xi:
239239 axis = - 1 ,
240240 )
241241
242- # Get projection points onto element plane
243- # for the projection, all points are computed relative to v0
244- r1 = np . squeeze ( face_vertices [:, 1 , :] - face_vertices [:, 0 , :]) # (M,3)
245- r2 = np . squeeze ( face_vertices [:, 2 , :] - face_vertices [:, 0 , :]) # (M,3)
242+ # Get projection points onto element plane. Keep the leading
243+ # dimension even for single-face queries so shapes remain (M,3).
244+ r1 = face_vertices [:, 1 , :] - face_vertices [:, 0 , :]
245+ r2 = face_vertices [:, 2 , :] - face_vertices [:, 0 , :]
246246 nhat = np .cross (r1 , r2 )
247247 norm = np .linalg .norm (nhat , axis = - 1 )
248+ # Avoid division by zero for degenerate faces
249+ norm = np .where (norm == 0.0 , 1.0 , norm )
248250 nhat = nhat / norm [:, None ]
249251 # Calculate the component of the points in the direction of nhat
250- ptilde = points - np . squeeze ( face_vertices [:, 0 , :])
252+ ptilde = points - face_vertices [:, 0 , :]
251253 pdotnhat = np .sum (ptilde * nhat , axis = - 1 )
252254 # Reconstruct points with normal component removed.
253- points = ptilde - pdotnhat [:, None ] * nhat + np . squeeze ( face_vertices [:, 0 , :])
255+ points = ptilde - pdotnhat [:, None ] * nhat + face_vertices [:, 0 , :]
254256
255257 else :
256258 nids = grid .uxgrid .face_node_connectivity [xi ].values
0 commit comments