def tabulate(self, order, points, entity=None): # This overrides the default with a more numerically stable algorithm if hasattr(self.dual, "gll_points"): if entity is None: entity = (self.ref_el.get_dimension(), 0) entity_dim, entity_id = entity transform = self.ref_el.get_entity_transform(entity_dim, entity_id) xsrc = self.dual.gll_points xdst = numpy.array(list(map(transform, points))).flatten() tabulation = barycentric_interpolation(xsrc, xdst, order=order) for key in tabulation: tabulation[key] = numpy.dot(self.dual.gll_tabulation, tabulation[key]) return tabulation else: return super(FDMLagrange, self).tabulate(order, points, entity)
def tabulate(self, order, points, entity=None): # This overrides the default with a more numerically stable algorithm if entity is None: entity = (self.ref_el.get_dimension(), 0) entity_dim, entity_id = entity transform = self.ref_el.get_entity_transform(entity_dim, entity_id) xsrc = [] for node in self.dual.nodes: # Assert singleton point for each node. (pt, ), = node.get_point_dict().keys() xsrc.append(pt) xsrc = numpy.asarray(xsrc) xdst = numpy.array(list(map(transform, points))).flatten() return barycentric_interpolation(xsrc, xdst, order=order)