FEniCS / fiat

FIAT is now maintained at https://github.com/firedrakeproject/
https://fenicsproject.org/
GNU Lesser General Public License v3.0
33 stars 21 forks source link

Basis derivative tabulation is broken in 1D #17

Closed chrisrichardson closed 8 years ago

chrisrichardson commented 9 years ago

Original report by Matthew Knepley (Bitbucket: knepley, GitHub: knepley).


Here is a small test that shows that 'master' disagrees with FIAT 0.9.9 and with common sense:

import numpy
from FIAT.polynomial_set import mis
from FIAT.reference_element import default_simplex
from FIAT.quadrature import make_quadrature

order = 1
quadrature = make_quadrature(default_simplex(1), order)

from FIAT.lagrange import Lagrange

degree = 1
element = Lagrange(default_simplex(1), degree)

vertices = [n.get_point_dict().keys()[0] for n in element.dual.get_nodes()]

quadpts = numpy.array(quadrature.get_points(), dtype=numpy.float64)
quadwts = numpy.array(quadrature.get_weights(), dtype=numpy.float64)
numQuadPts = len(quadpts)
evals = element.get_nodal_basis().tabulate(quadrature.get_points(), 1)
basis = numpy.array(evals[mis(1, 0)[0]], dtype=numpy.float64).transpose()
numBasis = element.get_nodal_basis().get_num_members()
basisDeriv = numpy.array([evals[alpha] for alpha in mis(1, 1)],
dtype=numpy.float64).transpose()

print "order: %d" % order
print "degree: %d" % degree
print "numQuadPts: %d" % numQuadPts
print "basis:"
print basis
print "basisDeriv:"
print basisDeriv
chrisrichardson commented 8 years ago

Original comment by Garth N. Wells (Bitbucket: garth-wells, GitHub: garth-wells).


Fixed in c84d5ce.