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