Ejemplo n.º 1
0
def test_mixed_is_not_nodal():
    element = MixedElement([
        EnrichedElement(
            RaviartThomas(T, 1),
            RestrictedElement(RaviartThomas(T, 2),
                              restriction_domain="interior")),
        DiscontinuousLagrange(T, 1)
    ])

    assert not element.is_nodal()
Ejemplo n.º 2
0
def test_mixed_is_not_nodal():
    element = MixedElement([
        EnrichedElement(
            RaviartThomas(T, 1),
            RestrictedElement(RaviartThomas(T, 2), restriction_domain="interior")
        ),
        DiscontinuousLagrange(T, 1)
    ])

    assert not element.is_nodal()
Ejemplo n.º 3
0
def create_element(ufl_element):

    # Create element signature for caching (just use UFL element)
    element_signature = ufl_element

    # Check cache
    if element_signature in _cache:
        logger.debug("Reusing element from cache")
        return _cache[element_signature]

    if isinstance(ufl_element, ufl.FiniteElement):
        element = _create_fiat_element(ufl_element)
    elif isinstance(ufl_element, ufl.MixedElement):
        elements = _extract_elements(ufl_element)
        element = MixedElement(elements)
    elif isinstance(ufl_element, ufl.EnrichedElement):
        elements = [create_element(e) for e in ufl_element._elements]
        element = EnrichedElement(*elements)
    elif isinstance(ufl_element, ufl.NodalEnrichedElement):
        elements = [create_element(e) for e in ufl_element._elements]
        element = NodalEnrichedElement(*elements)
    elif isinstance(ufl_element, ufl.RestrictedElement):
        element = _create_restricted_element(ufl_element)
        raise RuntimeError("Cannot handle this element type: {}".format(ufl_element))

    # Store in cache
    _cache[element_signature] = element

    return element
Ejemplo n.º 4
0
def _create_restricted_element(ufl_element):
    """Create an FFC representation for an UFL RestrictedElement."""

    if not isinstance(ufl_element, ufl.RestrictedElement):
        raise RuntimeError("create_restricted_element expects an ufl.RestrictedElement")

    base_element = ufl_element.sub_element()
    restriction_domain = ufl_element.restriction_domain()

    # If simple element -> create RestrictedElement from fiat_element
    if isinstance(base_element, ufl.FiniteElement):
        element = _create_fiat_element(base_element)
        return RestrictedElement(element, restriction_domain=restriction_domain)

    # If restricted mixed element -> convert to mixed restricted element
    if isinstance(base_element, ufl.MixedElement):
        elements = _extract_elements(base_element, restriction_domain)
        return MixedElement(elements)

    raise RuntimeError("Cannot create restricted element from: {}".format(ufl_element))
Ejemplo n.º 5
0
def create_element(ufl_element):

    # Create element signature for caching (just use UFL element)
    element_signature = ufl_element

    # Check cache
    if element_signature in _cache:
        debug("Reusing element from cache")
        return _cache[element_signature]

    # Create regular FIAT finite element
    if isinstance(ufl_element, ufl.FiniteElement):
        element = _create_fiat_element(ufl_element)

    # Create mixed element (implemented by FFC)
    elif isinstance(ufl_element, ufl.MixedElement):
        elements = _extract_elements(ufl_element)
        element = MixedElement(elements)

    # Create element union
    elif isinstance(ufl_element, ufl.EnrichedElement):
        elements = [create_element(e) for e in ufl_element._elements]
        element = EnrichedElement(*elements)

    # Create nodal element union
    elif isinstance(ufl_element, ufl.NodalEnrichedElement):
        elements = [create_element(e) for e in ufl_element._elements]
        element = NodalEnrichedElement(*elements)

    # Create restricted element
    elif isinstance(ufl_element, ufl.RestrictedElement):
        element = _create_restricted_element(ufl_element)

    else:
        error("Cannot handle this element type: %s" % str(ufl_element))

    # Store in cache
    _cache[element_signature] = element

    return element
Ejemplo n.º 6
0
def test_mixed_is_nodal():
    element = MixedElement([DiscontinuousLagrange(T, 1), RaviartThomas(T, 2)])

    assert element.is_nodal()
Ejemplo n.º 7
0
def test_mixed_is_nodal():
    element = MixedElement([DiscontinuousLagrange(T, 1), RaviartThomas(T, 2)])

    assert element.is_nodal()