diff --git a/grudge/dt_utils.py b/grudge/dt_utils.py index d54851f9ac8bf3503bdf9fc42bf231a1ab75c40f..e245ad2592972d90c2a89255adddfeb95d26821d 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 07b94f022b96d7f92bbf2eb7dfffadd4dc5651b3..d544d7ca605da4be76ad7f538638c7ad2b941592 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 af9cbb6b4b88384d568ad6aa3158914cb7577fdf..63eb4b4c3643112e182ad458fc97e0c8ff46db32 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):