def __init__(self, ref_el, m): if m < 2: raise ValueError( "Gauss-Labotto-Legendre quadrature invalid for fewer than 2 points") Ref1 = reference_element.DefaultLine() verts = Ref1.get_vertices() if m > 2: # Calculate the recursion coefficients. alpha, beta = orthopoly.rec_jacobi(m, 0, 0) xs_ref, ws_ref = orthopoly.lobatto(alpha, beta, verts[0][0], verts[1][0]) else: # Special case for lowest order. xs_ref = [v[0] for v in verts[:]] ws_ref = (0.5 * (xs_ref[1] - xs_ref[0]), ) * 2 A, b = reference_element.make_affine_mapping(Ref1.get_vertices(), ref_el.get_vertices()) mapping = lambda x: numpy.dot(A, x) + b scale = numpy.linalg.det(A) xs = tuple([tuple(mapping(x_ref)[0]) for x_ref in xs_ref]) ws = tuple([scale * w for w in ws_ref]) QuadratureRule.__init__(self, ref_el, xs, ws)
def __init__(self, ref_el): if ref_el.get_spatial_dimension() != 1: raise Exception("Must have a line") self.ref_el = ref_el self.base_ref_el = reference_element.DefaultLine() v1 = ref_el.get_vertices() v2 = self.base_ref_el.get_vertices() self.A, self.b = reference_element.make_affine_mapping(v1, v2) self.mapping = lambda x: numpy.dot(self.A, x) + self.b self.scale = numpy.sqrt(numpy.linalg.det(self.A))
def __init__(self, ref_el, m): # this gives roots on the default (-1,1) reference element # (xs_ref, ws_ref) = compute_gauss_jacobi_rule(a, b, m) (xs_ref, ws_ref) = compute_gauss_jacobi_rule(0., 0., m) Ref1 = reference_element.DefaultLine() A, b = reference_element.make_affine_mapping(Ref1.get_vertices(), ref_el.get_vertices()) mapping = lambda x: numpy.dot(A, x) + b scale = numpy.linalg.det(A) xs = tuple([tuple(mapping(x_ref)[0]) for x_ref in xs_ref]) ws = tuple([scale * w for w in ws_ref]) QuadratureRule.__init__(self, ref_el, xs, ws)
def create_data(): ps = polynomial_set.ONPolynomialSet( ref_el=reference_element.DefaultLine(), degree=3) return ps.dmats