def test_quad_rtcf(): W0_h = FIAT.Lagrange(UFCInterval(), 1) W1_h = FIAT.DiscontinuousLagrange(UFCInterval(), 0) W0_v = FIAT.DiscontinuousLagrange(UFCInterval(), 0) W0 = FIAT.Hdiv(FIAT.TensorProductElement(W0_h, W0_v)) W1_v = FIAT.Lagrange(UFCInterval(), 1) W1 = FIAT.Hdiv(FIAT.TensorProductElement(W1_h, W1_v)) elem = FIAT.EnrichedElement(W0, W1) assert {0: [0, 1, 2], 1: [0, 1, 3]} == entity_support_dofs(elem, (1, 0)) assert {0: [0, 2, 3], 1: [1, 2, 3]} == entity_support_dofs(elem, (0, 1))
def test_prism_hcurl(space, degree, horiz_expected, vert_expected): W0_h = FIAT.Lagrange(UFCTriangle(), degree) W1_h = FIAT.supported_elements[space](UFCTriangle(), degree) W0_v = FIAT.DiscontinuousLagrange(UFCInterval(), degree - 1) W0 = FIAT.Hcurl(FIAT.TensorProductElement(W0_h, W0_v)) W1_v = FIAT.Lagrange(UFCInterval(), degree) W1 = FIAT.Hcurl(FIAT.TensorProductElement(W1_h, W1_v)) elem = FIAT.EnrichedElement(W0, W1) assert horiz_expected == entity_support_dofs(elem, (2, 0)) assert vert_expected == entity_support_dofs(elem, (1, 1))
def _(element, vector_is_mixed): cell = element.cell() if type(cell) is not ufl.TensorProductCell: raise ValueError("TPE not on TPC?") A, B = element.sub_elements() return FIAT.TensorProductElement(create_element(A, vector_is_mixed), create_element(B, vector_is_mixed))
def test_quad(base, extr, horiz_expected, vert_expected): elem_A = FIAT.supported_elements[base[0]](UFCInterval(), base[1]) elem_B = FIAT.supported_elements[extr[0]](UFCInterval(), extr[1]) elem = FIAT.TensorProductElement(elem_A, elem_B) assert horiz_expected == entity_support_dofs(elem, (1, 0)) assert vert_expected == entity_support_dofs(elem, (0, 1))
def _create_tp_finiteelement(element) -> FIAT.TensorProductElement: e0, e1 = element.sub_elements() return FIAT.TensorProductElement(_create_element(e0), _create_element(e1))
def fiat_equivalent(self): # FIAT TensorProductElement support only 2 factors A, B = self.factors return FIAT.TensorProductElement(A.fiat_equivalent, B.fiat_equivalent)