Source code for ffc.uflacs.backends.ffc.common

# -*- coding: utf-8 -*-
# Copyright (C) 2011-2017 Martin Sandve Alnæs
#
# This file is part of UFLACS.
#
# UFLACS is free software: you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# UFLACS is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with UFLACS. If not, see <http://www.gnu.org/licenses/>

"""FFC/UFC specific symbol naming."""


from ffc.log import error


# TODO: Move somewhere else
[docs]def num_coordinate_component_dofs(coordinate_element): """Get the number of dofs for a coordinate component for this degree. This is a local hack that works for Lagrange 1-3, better would be to get this passed by ffc from fiat through the ir. The table data is to messy to figure out a clean design for that quickly. """ from ufl.cell import num_cell_entities degree = coordinate_element.degree() cell = coordinate_element.cell() tdim = cell.topological_dimension() cellname = cell.cellname() d = 0 for entity_dim in range(tdim+1): # n = dofs per cell entity if entity_dim == 0: n = 1 elif entity_dim == 1: n = degree - 1 elif entity_dim == 2: n = (degree - 2)*(degree - 1) // 2 elif entity_dim == 3: n = (degree - 3)*(degree - 2)*(degree - 1) // 6 else: error("Entity dimension out of range") # Accumulate num_entities = num_cell_entities[cellname][entity_dim] d += num_entities * n
return d # TODO: Get restriction postfix from somewhere central
[docs]def ufc_restriction_offset(restriction, length): if restriction == "-": return length else:
return 0