From 6f83b2c3f7eca30639cb67a8cd3395f87215c857 Mon Sep 17 00:00:00 2001
From: Andreas Kloeckner <inform@tiker.net>
Date: Sun, 3 Jan 2016 23:35:08 -0600
Subject: [PATCH] Fixes for zero-sized groups and multiple groups

---
 meshmode/discretization/__init__.py | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/meshmode/discretization/__init__.py b/meshmode/discretization/__init__.py
index 6f388fdd..eb448d9a 100644
--- a/meshmode/discretization/__init__.py
+++ b/meshmode/discretization/__init__.py
@@ -225,6 +225,9 @@ class Discretization(object):
         result = self.empty(dtype=vec.dtype)
 
         for grp in self.groups:
+            if grp.nelements == 0:
+                continue
+
             mat = None
             for ref_axis in ref_axes:
                 next_mat = grp.diff_matrices()[ref_axis]
@@ -243,13 +246,17 @@ class Discretization(object):
             knl = lp.make_kernel(
                 "{[k,i]: 0<=k<nelements and 0<=i<ndiscr_nodes}",
                 "result[k,i] = weights[i]",
-                name="quad_weights")
+                name="quad_weights",
+                default_offset=lp.auto)
 
             knl = lp.split_iname(knl, "i", 16, inner_tag="l.0")
             return lp.tag_inames(knl, dict(k="g.0"))
 
         result = self.empty(dtype=self.real_dtype)
         for grp in self.groups:
+            if grp.nelements == 0:
+                continue
+
             knl()(queue, result=grp.view(result), weights=grp.weights)
         return result
 
@@ -280,6 +287,9 @@ class Discretization(object):
 
         with cl.CommandQueue(self.cl_context) as queue:
             for grp in self.groups:
+                if grp.nelements == 0:
+                    continue
+
                 meg = grp.mesh_el_group
                 knl()(queue,
                         resampling_mat=grp.from_mesh_interp_matrix(),
-- 
GitLab