diff --git a/meshmode/discretization/connection/opposite_face.py b/meshmode/discretization/connection/opposite_face.py index 1b1c9c9dc877e10bba79acb691aa353ef549db6c..e084525ba9a6eb5001548f432c25a0a8f861173e 100644 --- a/meshmode/discretization/connection/opposite_face.py +++ b/meshmode/discretization/connection/opposite_face.py @@ -350,9 +350,14 @@ def make_opposite_face_connection(volume_to_bdry_conn): # inter-group connections. adj_tgt_flags = adj.element_faces == i_face_tgt - adj_els = adj.elements[adj_tgt_flags] - vbc_els = vbc_tgt_grp_face_batch.from_element_indices.get(queue=queue) + if adj_els.size == 0: + # NOTE: this case can happen for inter-group boundaries + # when all elements are adjacent on the same face + # index, so all other ones will be empty + continue + + vbc_els = vbc_tgt_grp_face_batch.from_element_indices.get(queue) if len(adj_els) == len(vbc_els): # Same length: assert (below) that the two use the same @@ -362,8 +367,9 @@ def make_opposite_face_connection(volume_to_bdry_conn): else: # Genuine subset: figure out an index mapping. vbc_els_sort_idx = np.argsort(vbc_els) - vbc_used_els = vbc_els_sort_idx[ - np.searchsorted(vbc_els, adj_els, sorter=vbc_els_sort_idx)] + vbc_used_els = vbc_els_sort_idx[np.searchsorted( + vbc_els, adj_els, sorter=vbc_els_sort_idx + )] assert np.array_equal(vbc_els[vbc_used_els], adj_els) diff --git a/test/test_meshmode.py b/test/test_meshmode.py index 7dab556460aa459251c59c1ab7a0eb382dd31bce..06b7bcfab7373837d45b61fcc7d929e1746b4333 100644 --- a/test/test_meshmode.py +++ b/test/test_meshmode.py @@ -1352,12 +1352,17 @@ def test_mesh_multiple_groups(ctx_factory, ambient_dim, visualize=False): check_connection(opposite) op_bdry_f = opposite(queue, bdry_f) - assert abs(cl.array.sum(bdry_f - op_bdry_f).get(queue)) < 1.0e-14 + error = abs(cl.array.sum(bdry_f - op_bdry_f).get(queue)) + assert error < 1.0e-11, error if boundary_tag == FACE_RESTR_ALL: embedding = make_face_to_all_faces_embedding(conn, conn.to_discr) check_connection(embedding) + em_bdry_f = embedding(queue, bdry_f) + error = abs(cl.array.sum(bdry_f - em_bdry_f).get(queue)) + assert error < 1.0e-11, error + if __name__ == "__main__": import sys