def get_line_nodes(V): # Return the Line nodes for Q, DQ, RTCF/E, NCF/E from FIAT.reference_element import UFCInterval from FIAT import quadrature use_tensorproduct, N, ndim, sub_families, variant = tensor_product_space_query( V) assert use_tensorproduct cell = UFCInterval() if variant == "equispaced" and sub_families <= { "Q", "DQ", "Lagrange", "Discontinuous Lagrange" }: return [cell.make_points(1, 0, N + 1)] * ndim elif sub_families <= {"Q", "Lagrange"}: rule = quadrature.GaussLobattoLegendreQuadratureLineRule(cell, N + 1) return [rule.get_points()] * ndim elif sub_families <= {"DQ", "Discontinuous Lagrange"}: rule = quadrature.GaussLegendreQuadratureLineRule(cell, N + 1) return [rule.get_points()] * ndim elif sub_families < {"RTCF", "NCF"}: cg = quadrature.GaussLobattoLegendreQuadratureLineRule(cell, N + 1) dg = quadrature.GaussLegendreQuadratureLineRule(cell, N) return [cg.get_points()] + [dg.get_points()] * (ndim - 1) elif sub_families < {"RTCE", "NCE"}: cg = quadrature.GaussLobattoLegendreQuadratureLineRule(cell, N + 1) dg = quadrature.GaussLegendreQuadratureLineRule(cell, N) return [dg.get_points()] + [cg.get_points()] * (ndim - 1) else: raise ValueError("Don't know how to get line nodes for %s" % V.ufl_element())
def get_line_nodes(V): # Return the corresponding nodes in the Line for CG / DG from FIAT.reference_element import UFCInterval from FIAT import quadrature use_tensorproduct, N, family, variant = tensor_product_space_query(V) assert use_tensorproduct cell = UFCInterval() if variant == "equispaced": return cell.make_points(1, 0, N + 1) elif family <= {"Q", "Lagrange"}: rule = quadrature.GaussLobattoLegendreQuadratureLineRule(cell, N + 1) return rule.get_points() elif family <= {"DQ", "Discontinuous Lagrange"}: rule = quadrature.GaussLegendreQuadratureLineRule(cell, N + 1) return rule.get_points() else: raise ValueError("Don't know how to get line nodes for %r" % family)