Example #1
0
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())
Example #2
0
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)