From dc987c88aa30d52bc733fa9719dceca98db4f170 Mon Sep 17 00:00:00 2001 From: Pablo Brubeck Date: Fri, 25 Oct 2024 18:22:49 +0100 Subject: [PATCH] Test H(curl div) element --- .github/workflows/build.yml | 7 ++++--- tests/regression/test_tensor_elements.py | 26 +++++++++++++++++------- 2 files changed, 23 insertions(+), 10 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index f35ef985dd..6ab1a782a3 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -83,9 +83,10 @@ jobs: --install defcon \ --install gadopt \ --install asQ \ - --package-branch fiat pbrubeck/h1curl \ - --package-branch finat pbrubeck/hhj \ - --package-branch tsfc pbrubeck/hhj \ + --package-branch fiat pbrubeck/hcurldiv \ + --package-branch finat pbrubeck/hcurldiv \ + --package-branch tsfc pbrubeck/hcurldiv \ + --package-branch ufl pbrubeck/hcurldiv \ || (cat firedrake-install.log && /bin/false) - name: Install test dependencies run: | diff --git a/tests/regression/test_tensor_elements.py b/tests/regression/test_tensor_elements.py index a0bb5352b6..6c0a6f99ff 100644 --- a/tests/regression/test_tensor_elements.py +++ b/tests/regression/test_tensor_elements.py @@ -15,25 +15,37 @@ def mesh(request): raise ValueError("Unrecognized mesh type") -@pytest.mark.parametrize("degree", (0, 1, 2)) -@pytest.mark.parametrize("family", ("Regge", "HHJ")) +@pytest.mark.parametrize("family, degree", [ + ("Regge", 0), + ("Regge", 1), + ("Regge", 2), + ("HHJ", 0), + ("HHJ", 1), + ("HHJ", 2), + ("GLS", 1), + ("GLS", 2), + ]) def test_tensor_continuity(mesh, family, degree): V = FunctionSpace(mesh, family, degree) u = rg.beta(V, 1.0, 2.0) - dim = mesh.topological_dimension() n = FacetNormal(mesh) space = V.ufl_element().sobolev_space if space == HDivDiv: utrace = dot(n, dot(u, n)) elif space == HEin: - if dim == 2: - t = dot(as_matrix([[0, -1], [1, 0]]), n) - utrace = dot(t, dot(u, t)) + if mesh.topological_dimension() == 2: + t = perp(n) else: t = as_matrix([[0, n[2], -n[1]], [-n[2], 0, n[0]], [n[1], -n[0], 0]]) - utrace = dot(t, dot(u, t.T)) + utrace = dot(t, dot(u, t)) + else: + if mesh.topological_dimension() == 2: + t = perp(n) + utrace = dot(t, dot(u, n)) + else: + utrace = cross(n, dot(u, n)) ujump = utrace('+') - utrace('-') assert assemble(inner(ujump, ujump)*dS) < 1E-10