From 01a59e0b7a73810f8004071a9519c4fa43bbd72c Mon Sep 17 00:00:00 2001
From: Matt Smith <mjsmith6@illinois.edu>
Date: Fri, 20 May 2022 17:37:57 -0500
Subject: [PATCH] make dt_geometric_factors work with empty meshes (#257)

---
 grudge/dt_utils.py    | 8 ++++++--
 grudge/op.py          | 2 +-
 test/test_dt_utils.py | 5 +++++
 3 files changed, 12 insertions(+), 3 deletions(-)

diff --git a/grudge/dt_utils.py b/grudge/dt_utils.py
index d54851f9..e245ad25 100644
--- a/grudge/dt_utils.py
+++ b/grudge/dt_utils.py
@@ -288,7 +288,9 @@ def dt_geometric_factors(
                 actx.einsum(
                     "fej->e",
                     face_ae_i.reshape(
-                        vgrp.mesh_el_group.nfaces, vgrp.nelements, -1),
+                        vgrp.mesh_el_group.nfaces,
+                        vgrp.nelements,
+                        face_ae_i.shape[-1]),
                     tagged=(FirstAxisIsElementsTag(),))
 
                 for vgrp, face_ae_i in zip(volm_discr.groups, face_areas)
@@ -307,7 +309,9 @@ def dt_geometric_factors(
                 actx.einsum(
                     "fej->e",
                     face_ae_i.reshape(
-                        vgrp.mesh_el_group.nfaces, vgrp.nelements, -1
+                        vgrp.mesh_el_group.nfaces,
+                        vgrp.nelements,
+                        face_ae_i.shape[-1]
                     ) / afgrp.nunit_dofs,
                     tagged=(FirstAxisIsElementsTag(),))
 
diff --git a/grudge/op.py b/grudge/op.py
index 07b94f02..d544d7ca 100644
--- a/grudge/op.py
+++ b/grudge/op.py
@@ -874,7 +874,7 @@ def _apply_face_mass_operator(dcoll: DiscretizationCollection, dd, vec):
                         surf_ae_i.reshape(
                                 vgrp.mesh_el_group.nfaces,
                                 vgrp.nelements,
-                                -1),
+                                surf_ae_i.shape[-1]),
                         vec_i.reshape(
                                 vgrp.mesh_el_group.nfaces,
                                 vgrp.nelements,
diff --git a/test/test_dt_utils.py b/test/test_dt_utils.py
index af9cbb6b..63eb4b4c 100644
--- a/test/test_dt_utils.py
+++ b/test/test_dt_utils.py
@@ -85,6 +85,11 @@ def test_geometric_factors_regular_refinement(actx_factory, name):
     ratios = min_factors[:-1] / min_factors[1:]
     assert np.all(np.isclose(ratios, 2))
 
+    # Make sure it works with empty meshes
+    mesh = builder.get_mesh(0, builder.mesh_order)
+    dcoll = DiscretizationCollection(actx, mesh, order=builder.order)
+    factors = thaw(dt_geometric_factors(dcoll), actx)  # noqa: F841
+
 
 @pytest.mark.parametrize("name", ["interval", "box2d", "box3d"])
 def test_non_geometric_factors(actx_factory, name):
-- 
GitLab