Source code for ufl.finiteelement.restrictedelement

# -*- coding: utf-8 -*-
"This module defines the UFL finite element classes."

# Copyright (C) 2008-2016 Martin Sandve Alnæs
#
# This file is part of UFL (https://www.fenicsproject.org)
#
# SPDX-License-Identifier:    LGPL-3.0-or-later
#
# Modified by Kristian B. Oelgaard
# Modified by Marie E. Rognes 2010, 2012
# Modified by Massimiliano Leoni, 2016

from ufl.finiteelement.finiteelementbase import FiniteElementBase
from ufl.log import error

valid_restriction_domains = ("interior", "facet", "face", "edge", "vertex")


[docs]class RestrictedElement(FiniteElementBase): "Represents the restriction of a finite element to a type of cell entity." def __init__(self, element, restriction_domain): if not isinstance(element, FiniteElementBase): error("Expecting a finite element instance.") if restriction_domain not in valid_restriction_domains: error("Expecting one of the strings %s." % (valid_restriction_domains,)) FiniteElementBase.__init__(self, "RestrictedElement", element.cell(), element.degree(), element.quadrature_scheme(), element.value_shape(), element.reference_value_shape()) self._element = element self._restriction_domain = restriction_domain self._repr = "RestrictedElement(%s, %s)" % ( repr(self._element), repr(self._restriction_domain))
[docs] def is_cellwise_constant(self): """Return whether the basis functions of this element is spatially constant over each cell. """ return self._element.is_cellwise_constant()
[docs] def sub_element(self): "Return the element which is restricted." return self._element
[docs] def mapping(self): return self._element.mapping()
[docs] def restriction_domain(self): "Return the domain onto which the element is restricted." return self._restriction_domain
[docs] def reconstruct(self, **kwargs): element = self._element.reconstruct(**kwargs) return RestrictedElement(element, self._restriction_domain)
def __str__(self): "Format as string for pretty printing." return "<%s>|_{%s}" % (self._element, self._restriction_domain)
[docs] def shortstr(self): "Format as string for pretty printing." return "<%s>|_{%s}" % (self._element.shortstr(), self._restriction_domain)
[docs] def symmetry(self): """Return the symmetry dict, which is a mapping :math:`c_0 \\to c_1` meaning that component :math:`c_0` is represented by component :math:`c_1`. A component is a tuple of one or more ints. """ return self._element.symmetry()
[docs] def num_sub_elements(self): "Return number of sub elements." return self._element.num_sub_elements()
[docs] def sub_elements(self): "Return list of sub elements." return self._element.sub_elements()
[docs] def num_restricted_sub_elements(self): # FIXME: Use this where intended, for disambiguation # w.r.t. different sub_elements meanings. "Return number of restricted sub elements." return 1
[docs] def restricted_sub_elements(self): # FIXME: Use this where intended, for disambiguation # w.r.t. different sub_elements meanings. "Return list of restricted sub elements." return (self._element,)