diff --git a/finat/quadrature_element.py b/finat/quadrature_element.py index d56dd024..818a70dd 100644 --- a/finat/quadrature_element.py +++ b/finat/quadrature_element.py @@ -31,7 +31,12 @@ def make_quadrature_element(fiat_ref_cell, degree, scheme="default", codim=0): else: rule_ref_cell = fiat_ref_cell - rule = make_quadrature(rule_ref_cell, degree, scheme=scheme) + if isinstance(scheme, AbstractQuadratureRule): + rule = scheme + assert rule.ref_el == rule_ref_cell + else: + rule = make_quadrature(rule_ref_cell, degree, scheme=scheme) + return QuadratureElement(fiat_ref_cell, rule) diff --git a/test/finat/test_quadrature_element.py b/test/finat/test_quadrature_element.py new file mode 100644 index 00000000..f6834b08 --- /dev/null +++ b/test/finat/test_quadrature_element.py @@ -0,0 +1,23 @@ +import pytest + +from FIAT import ufc_cell +from finat.quadrature import make_quadrature +from finat.quadrature_element import make_quadrature_element + + +@pytest.fixture(params=["interval", "triangle", "interval * interval", "triangle * interval"]) +def cell(request): + return ufc_cell(request.param) + + +def test_create_from_quadrature(cell): + degree = 4 + scheme = "default" + fe1 = make_quadrature_element(cell, degree, scheme=scheme) + + quadrature = make_quadrature(cell, degree, scheme=scheme) + fe2 = make_quadrature_element(cell, degree, scheme=quadrature) + + Q1, ps1 = fe1.dual_basis + Q2, ps2 = fe2.dual_basis + assert ps1.almost_equal(ps2)