Skip to content
7 changes: 6 additions & 1 deletion finat/quadrature_element.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)


Expand Down
23 changes: 23 additions & 0 deletions test/finat/test_quadrature_element.py
Original file line number Diff line number Diff line change
@@ -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)