Source code for FIAT.bubble
# Copyright (C) 2013 Andrew T. T. McRae (Imperial College London)
# Copyright (C) 2015 Jan Blechta
# Copyright (C) 2018 Patrick E. Farrell
#
# This file is part of FIAT (https://www.fenicsproject.org)
#
# SPDX-License-Identifier: LGPL-3.0-or-later
from FIAT.lagrange import Lagrange
from FIAT.restricted import RestrictedElement
from itertools import chain
[docs]
class CodimBubble(RestrictedElement):
"""Bubbles of a certain codimension."""
def __init__(self, ref_el, degree, codim):
element = Lagrange(ref_el, degree)
cell_dim = ref_el.get_dimension()
assert cell_dim == max(element.entity_dofs().keys())
dofs = list(sorted(chain(*element.entity_dofs()[cell_dim - codim].values())))
if len(dofs) == 0:
raise RuntimeError('Bubble element of degree %d and codimension %d has no dofs' % (degree, codim))
super(CodimBubble, self).__init__(element, indices=dofs)
[docs]
class Bubble(CodimBubble):
"""The bubble finite element: the dofs of the Lagrange FE in the interior of the cell"""
def __init__(self, ref_el, degree):
super(Bubble, self).__init__(ref_el, degree, codim=0)
[docs]
class FacetBubble(CodimBubble):
"""The facet bubble finite element: the dofs of the Lagrange FE in the interior of the facets"""
def __init__(self, ref_el, degree):
super(FacetBubble, self).__init__(ref_el, degree, codim=1)