From 20741342b48ff56b8d44db892ea868d262f9ad5c Mon Sep 17 00:00:00 2001 From: Alexandru Fikl <alexfikl@gmail.com> Date: Thu, 2 Jul 2020 14:27:38 -0500 Subject: [PATCH] add failing test for assignment aggregation --- test/test_grudge.py | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/test/test_grudge.py b/test/test_grudge.py index 4e6f8097..6537ee2c 100644 --- a/test/test_grudge.py +++ b/test/test_grudge.py @@ -1155,6 +1155,8 @@ def test_operator_compiler_overwrite(ctx_factory): n=(8,)*ambient_dim, order=1) discr = DGDiscretizationWithBoundaries(ctx, mesh, order=target_order) + # {{{ test + sym_u = sym.nodes(ambient_dim) sym_div_u = sum(d(u) for d, u in zip(sym.nabla(ambient_dim), sym_u)) @@ -1162,6 +1164,44 @@ def test_operator_compiler_overwrite(ctx_factory): error = la.norm(div_u.get(queue) - discr.dim) logger.info("error: %.5e", error) + # }}} + + +@pytest.mark.parametrize("ambient_dim", [2, 3]) +def test_incorrect_assignment_aggregation(ctx_factory, ambient_dim): + """Tests that the greedy assignemnt aggregation code works on a non-trivial + expression (on which it didn't work at the time of writing). + """ + + ctx = ctx_factory() + queue = cl.CommandQueue(ctx) + + target_order = 4 + + from meshmode.mesh.generation import generate_regular_rect_mesh + mesh = generate_regular_rect_mesh( + a=(-0.5,)*ambient_dim, b=(0.5,)*ambient_dim, + n=(8,)*ambient_dim, order=1) + discr = DGDiscretizationWithBoundaries(ctx, mesh, order=target_order) + + # {{{ test + + dd = sym.DD_VOLUME + sym_y = sym.make_sym_array("y", ambient_dim, dd=dd) + sym_minv_y = sym.cse(sym.InverseMassOperator()(sym_y), "minv_y") + + sym_u = make_obj_array([0.5 * sym.Ones(dd), 0.0, 0.0])[:ambient_dim] + sym_div_u = sum(d(u) for d, u in zip(sym.nabla(ambient_dim), sym_u)) + + sym_op = sym.MassOperator(dd)(sym_u) \ + + sym.MassOperator(dd)(sym_minv_y * sym_div_u) + logger.info("%s", sym.pretty(sym_op)) + + y = make_obj_array(discr.discr_from_dd(dd).nodes()) + bind(discr, sym_op)(queue, y=y) + + # }}} + # You can test individual routines by typing # $ python test_grudge.py 'test_routine()' -- GitLab