Example #1
0
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))
Example #2
0
 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))
Example #3
0
    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))
Example #4
0
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))
Example #5
0
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))
Example #6
0
def _create_enriched_finiteelement(
        element: ufl.EnrichedElement) -> FIAT.EnrichedElement:
    elements = [create_element(e) for e in element._elements]
    return FIAT.EnrichedElement(*elements)
Example #7
0
def convert_enrichedelement(element, vector_is_mixed):
    return FIAT.EnrichedElement(*(create_element(e, vector_is_mixed)
                                  for e in element._elements))