From 1a76f94fe65f3ab6b6dcb53cde645bdada244ac4 Mon Sep 17 00:00:00 2001 From: Alexandru Fikl <alexfikl@gmail.com> Date: Mon, 1 Jun 2020 15:54:16 -0500 Subject: [PATCH] skip empty adjacent element batches --- .../discretization/connection/opposite_face.py | 14 ++++++++++---- test/test_meshmode.py | 7 ++++++- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/meshmode/discretization/connection/opposite_face.py b/meshmode/discretization/connection/opposite_face.py index 1b1c9c9d..e084525b 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 7dab5564..06b7bcfa 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 -- GitLab