Source code for FIAT.discontinuous
# Copyright (C) 2014 Andrew T. T. McRae (Imperial College London)
#
# This file is part of FIAT (https://www.fenicsproject.org)
#
# SPDX-License-Identifier: LGPL-3.0-or-later
from FIAT.finite_element import CiarletElement
from FIAT.dual_set import DualSet
[docs]
class DiscontinuousElement(CiarletElement):
"""A copy of an existing element where all dofs are associated with the cell"""
def __init__(self, element):
self._element = element
new_entity_ids = {}
topology = element.get_reference_element().get_topology()
for dim in sorted(topology):
new_entity_ids[dim] = {}
for ent in sorted(topology[dim]):
new_entity_ids[dim][ent] = []
new_entity_ids[dim][0] = list(range(element.space_dimension()))
# re-initialise the dual, so entity_closure_dofs is recalculated
self.dual = DualSet(element.dual_basis(), element.get_reference_element(), new_entity_ids)
# fully discontinuous
self.formdegree = element.get_reference_element().get_spatial_dimension()
[docs]
def degree(self):
"Return the degree of the (embedding) polynomial space."
return self._element.degree()
[docs]
def get_reference_element(self):
"Return the reference element for the finite element."
return self._element.get_reference_element()
[docs]
def get_nodal_basis(self):
"""Return the nodal basis, encoded as a PolynomialSet object,
for the finite element."""
return self._element.get_nodal_basis()
[docs]
def get_order(self):
"Return the order of the element (may be different from the degree)"
return self._element.get_order()
[docs]
def get_coeffs(self):
"""Return the expansion coefficients for the basis of the
finite element."""
return self._element.get_coeffs()
[docs]
def mapping(self):
"""Return a list of appropriate mappings from the reference
element to a physical element for each basis function of the
finite element."""
return self._element.mapping()
[docs]
def num_sub_elements(self):
"Return the number of sub-elements."
return self._element.num_sub_elements()
[docs]
def space_dimension(self):
"Return the dimension of the finite element space."
return self._element.space_dimension()
[docs]
def tabulate(self, order, points, entity=None):
"""Return tabulated values of derivatives up to given order of
basis functions at given points."""
return self._element.tabulate(order, points, entity)
[docs]
def value_shape(self):
"Return the value shape of the finite element functions."
return self._element.value_shape()
[docs]
def dmats(self):
"""Return dmats: expansion coefficients for basis function
derivatives."""
return self._element.dmats()
[docs]
def get_num_members(self, arg):
"Return number of members of the expansion set."
return self._element.get_num_members()