meshpy icon indicating copy to clipboard operation
meshpy copied to clipboard

generate tuples for quadrilateral elements

Open mghadam opened this issue 8 years ago • 1 comments

Hello,

I'm trying to work on adding support for quadrilateral elements (Quadrangle, Quadrangle8, Quadrangle9)

How can I generate appropriate tuples with generate_nonnegative_integer_tuples_summing_to_at_most tool?

I have added

def generate_quadrangle_vertex_tuples(order):
    yield (0, 0)
    yield (order, 0)
    yield (order,order)
    yield (0, order)


def generate_quadrangle_edge_tuples(order):
    for i in range(1, order):
        yield (i, 0)
    for i in range(1, order):
        yield (order, i)
    for i in range(1, order):
        yield (i, order)
    for i in range(1, order):
        yield (0, i)


def generate_quadrangle_volume_tuples(order):
    for i in range(1, order):
        for j in range(1, order):
            yield (j, i)

and

class GmshIncompleteQuadrilateralElement(GmshElementBase):
    dimensions = 2

    def __init__(self, order):
        self.order = order

    @memoize_method
    def gmsh_node_tuples(self):
        result = []
        for tup in generate_quadrangle_vertex_tuples(self.order):
            result.append(tup)
        for tup in generate_quadrangle_edge_tuples(self.order):
            result.append(tup)
        return result


class GmshQuadrilateralElement(GmshElementBase):
    dimensions = 2

    @memoize_method
    def gmsh_node_tuples(self):
        result = []
        for tup in generate_quadrangle_vertex_tuples(self.order):
            result.append(tup)
        for tup in generate_quadrangle_edge_tuples(self.order):
            result.append(tup)
        for tup in generate_quadrangle_volume_tuples(self.order):
            result.append(tup)
        return result

which generate:

el = GmshQuadrilateralElement(1)
el.gmsh_node_tuples()

[(0, 0), (1, 0), (1, 1), (0, 1)]

el = GmshQuadrilateralElement(2)
el.gmsh_node_tuples()

[(0, 0), (2, 0), (2, 2), (0, 2), (1, 0), (2, 1), (1, 2), (0, 1), (1, 1)]

el = GmshIncompleteQuadrilateralElement(2)
el.gmsh_node_tuples()

[(0, 0), (2, 0), (2, 2), (0, 2), (1, 0), (2, 1), (1, 2), (0, 1)]

but the node numbering is not compatible (sum of integers > self.order | self.dimension) with tuples returned by lexicographic_node_tuples.

Thanks

mghadam avatar Mar 05 '16 15:03 mghadam

For quadrilaterals I think you want generate_nonnegative_integer_tuples_below:

https://github.com/inducer/pytools/blob/8c1ffcd02513bbe1d19ce804aae69cdb743439f7/pytools/init.py#L1090

inducer avatar Mar 06 '16 00:03 inducer