def _(element, vector_is_mixed): if len(element._elements) != 2: raise ValueError( "Enriched elements with more than two components not handled") A, B = element._elements return FIAT.EnrichedElement(create_element(A, vector_is_mixed), create_element(B, vector_is_mixed))
def fiat_equivalent(self): if self.is_mixed: # EnrichedElement is actually a MixedElement return FIAT.MixedElement( [e.element.fiat_equivalent for e in self.elements], ref_el=self.cell) else: return FIAT.EnrichedElement(*(e.fiat_equivalent for e in self.elements))
def fiat_equivalent(self): # Avoid circular import dependency from finat.mixed import MixedSubElement if all(isinstance(e, MixedSubElement) for e in self.elements): # EnrichedElement is actually a MixedElement return FIAT.MixedElement([e.element.fiat_equivalent for e in self.elements], ref_el=self.cell) else: return FIAT.EnrichedElement(*(e.fiat_equivalent for e in self.elements))
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 _create_enriched_finiteelement( element: ufl.EnrichedElement) -> FIAT.EnrichedElement: elements = [create_element(e) for e in element._elements] return FIAT.EnrichedElement(*elements)
def convert_enrichedelement(element, vector_is_mixed): return FIAT.EnrichedElement(*(create_element(e, vector_is_mixed) for e in element._elements))