Source code for FIAT.P0
# Copyright (C) 2005 The University of Chicago
#
# This file is part of FIAT (https://www.fenicsproject.org)
#
# SPDX-License-Identifier: LGPL-3.0-or-later
#
# Written by Robert C. Kirby
# Modified by Andrew T. T. McRae (Imperial College London)
#
# This work is partially supported by the US Department of Energy
# under award number DE-FG02-04ER25650
from FIAT import dual_set, functional, polynomial_set, finite_element
import numpy
[docs]
class P0Dual(dual_set.DualSet):
def __init__(self, ref_el):
entity_ids = {}
nodes = []
vs = numpy.array(ref_el.get_vertices())
if ref_el.get_dimension() == 0:
bary = ()
else:
bary = tuple(numpy.average(vs, 0))
nodes = [functional.PointEvaluation(ref_el, bary)]
entity_ids = {}
top = ref_el.get_topology()
for dim in sorted(top):
entity_ids[dim] = {}
for entity in sorted(top[dim]):
entity_ids[dim][entity] = []
entity_ids[dim] = {0: [0]}
super(P0Dual, self).__init__(nodes, ref_el, entity_ids)
[docs]
class P0(finite_element.CiarletElement):
def __init__(self, ref_el):
poly_set = polynomial_set.ONPolynomialSet(ref_el, 0)
dual = P0Dual(ref_el)
degree = 0
formdegree = ref_el.get_spatial_dimension() # n-form
super(P0, self).__init__(poly_set, dual, degree, formdegree)