diff --git a/tests/firedrake/macro/test_macro_solve.py b/tests/firedrake/macro/test_macro_solve.py index 454e04a285..b30c2a74c1 100644 --- a/tests/firedrake/macro/test_macro_solve.py +++ b/tests/firedrake/macro/test_macro_solve.py @@ -151,7 +151,7 @@ def test_stokes(mh, variant, mixed_element): Z, [Z.sub(0), VectorSpaceBasis(constant=True, comm=COMM_WORLD)] ) - solve(a == L, zh, bcs=bcs, nullspace=nullspace, solver_parameters={"ksp_type": "preonly", "pc_type": "cholesky", "pc_factor_mat_solver_type": "mumps"}) + solve(a == L, zh, bcs=bcs, nullspace=nullspace) uh, ph = zh.subfunctions u_err.append(errornorm(as_vector(uexact), uh)) diff --git a/tests/firedrake/regression/test_facet_orientation.py b/tests/firedrake/regression/test_facet_orientation.py index 438613302c..7f5f05dba0 100644 --- a/tests/firedrake/regression/test_facet_orientation.py +++ b/tests/firedrake/regression/test_facet_orientation.py @@ -3,28 +3,31 @@ """ from os.path import abspath, dirname, join +from functools import partial import pytest import numpy as np from firedrake import * cwd = abspath(dirname(__file__)) +meshes = [ + partial(UnitSquareMesh, 5, 5, quadrilateral=False), + partial(UnitSquareMesh, 5, 5, quadrilateral=True), + partial(UnitIcosahedralSphereMesh, 2), + partial(UnitCubedSphereMesh, 3), + partial(Mesh, join(cwd, "..", "meshes", "unitsquare_unstructured_quadrilaterals.msh")), +] -@pytest.mark.parametrize('mesh_thunk', - [lambda: UnitSquareMesh(5, 5, quadrilateral=False), - lambda: UnitSquareMesh(5, 5, quadrilateral=True), - lambda: UnitIcosahedralSphereMesh(2), - lambda: UnitCubedSphereMesh(3), - lambda: Mesh(join(cwd, "..", "meshes", - "unitsquare_unstructured_quadrilaterals.msh"))]) -def test_consistent_facet_orientation(mesh_thunk): - mesh = mesh_thunk() + +def run_consistent_facet_orientation(mesh_thunk, variant="equispaced", **kwargs): + mesh = mesh_thunk(**kwargs) x = SpatialCoordinate(mesh) degree = 3 - fe_cg = FiniteElement("CG", mesh.ufl_cell(), degree, variant="equispaced") - V = FunctionSpace(mesh, fe_cg) # continuous space - fe_dg = FiniteElement("DG", mesh.ufl_cell(), degree, variant="equispaced") - W = FunctionSpace(mesh, fe_dg) # discontinuous space + V = FunctionSpace(mesh, "CG", degree, variant=variant) # continuous space + if variant == "equispaced": + W = FunctionSpace(mesh, "DG", degree, variant=variant) # discontinuous space + else: + W = FunctionSpace(mesh, BrokenElement(V.ufl_element())) # discontinuous space Q = FunctionSpace(mesh, "DG", 0) # result space @@ -32,7 +35,7 @@ def test_consistent_facet_orientation(mesh_thunk): f = Function(V).interpolate(expression) g = Function(W).interpolate(expression) - q = Function(Q).interpolate(Constant(0.0)) + q = Function(Q) domain = "{[i]: 0 <= i < C.dofs}" instructions = """ @@ -43,3 +46,16 @@ def test_consistent_facet_orientation(mesh_thunk): par_loop((domain, instructions), dx, {'C': (f, READ), 'D': (g, READ), 'R': (q, RW)}) assert np.allclose(q.dat.data, 0.0) + + +@pytest.mark.parametrize('mesh_thunk', meshes) +def test_consistent_facet_orientation(mesh_thunk): + run_consistent_facet_orientation(mesh_thunk) + + +@pytest.mark.parallel(nprocs=2) +@pytest.mark.parametrize('variant', ("equispaced", "integral")) +@pytest.mark.parametrize('mesh_thunk', meshes) +def test_consistent_facet_orientation_parallel(mesh_thunk, variant): + dp = {"overlap_type": (DistributedMeshOverlapType.NONE, 0)} + run_consistent_facet_orientation(mesh_thunk, variant=variant, distribution_parameters=dp)