diff --git a/contrib/gmsh-node-tuples.py b/contrib/gmsh-node-tuples.py new file mode 100644 index 0000000..78d6c75 --- /dev/null +++ b/contrib/gmsh-node-tuples.py @@ -0,0 +1,161 @@ +import gmsh + + +OUTPUT_TEMPLATE = """# GENERATED by gmsh_interop/contrib/gmsh-node-tuples.py +# GMSH_VERSION: %s +# DO NOT EDIT + +triangle_data = %s + +tetrahedron_data = %s + +quadrangle_data = %s + +hexahedron_data = %s +""" + + +TRIANGLE_ELEMENTS = { + "MSH_TRI_3": 2, + "MSH_TRI_6": 9, + "MSH_TRI_10": 21, + "MSH_TRI_15": 23, + "MSH_TRI_21": 25, + "MSH_TRI_28": 42, + "MSH_TRI_36": 43, + "MSH_TRI_45": 44, + "MSH_TRI_55": 45, + "MSH_TRI_66": 46, + } + + +TETRAHEDRON_ELEMENTS = { + "MSH_TET_4": 4, + "MSH_TET_10": 11, + "MSH_TET_20": 29, + "MSH_TET_35": 30, + "MSH_TET_56": 31, + "MSH_TET_84": 71, + "MSH_TET_120": 72, + "MSH_TET_165": 73, + "MSH_TET_220": 74, + "MSH_TET_286": 75, + } + + +QUADRANGLE_ELEMENTS = { + "MSH_QUA_4": 3, + "MSH_QUA_9": 10, + "MSH_QUA_16": 36, + "MSH_QUA_25": 37, + "MSH_QUA_36": 38, + "MSH_QUA_49": 47, + "MSH_QUA_64": 48, + "MSH_QUA_81": 49, + "MSH_QUA_100": 50, + "MSH_QUA_121": 51, + } + + +HEXAHEHEDRON_ELEMENTS = { + "MSH_HEX_8": 5, + "MSH_HEX_27": 12, + "MSH_HEX_64": 92, + "MSH_HEX_125": 93, + "MSH_HEX_216": 94, + "MSH_HEX_343": 95, + "MSH_HEX_512": 96, + "MSH_HEX_729": 97, + "MSH_HEX_1000": 98, + } + + +def generate_node_tuples_from_gmsh(eltype, eldim, elvertices, domain="unit"): + # {{{ get element + + name, dim, order, nnodes, nodes, nvertices = \ + gmsh.model.mesh.getElementProperties(eltype) + assert dim == eldim + assert nvertices == elvertices + + if domain == "unit": + pass + elif domain == "biunit": + nodes = (1.0 + nodes) / 2.0 + else: + raise ValueError(f"unknown domain: '{domain}'") + + nodes = nodes.reshape(nnodes, dim) * order + + # }}} + + return [tuple(node) for node in nodes.astype(int)] + + +def generate_node_tuples(filename): + tri_data = {} + tet_data = {} + qua_data = {} + hex_data = {} + + gmsh.initialize() + gmsh.option.setNumber("General.Terminal", 1) + + for order, (name, eltype) in enumerate(TRIANGLE_ELEMENTS.items()): + node_tuples = generate_node_tuples_from_gmsh(eltype, 2, 3) + tri_data[order + 1] = { + "node_tuples": node_tuples, + "element_type": eltype, + "element_name": name, + } + + for order, (name, eltype) in enumerate(TETRAHEDRON_ELEMENTS.items()): + node_tuples = generate_node_tuples_from_gmsh(eltype, 3, 4) + tet_data[order + 1] = { + "node_tuples": node_tuples, + "element_type": eltype, + "element_name": name, + } + + for order, (name, eltype) in enumerate(QUADRANGLE_ELEMENTS.items()): + node_tuples = generate_node_tuples_from_gmsh(eltype, 2, 4, domain="biunit") + qua_data[order + 1] = { + "node_tuples": node_tuples, + "element_type": eltype, + "element_name": name, + } + + for order, (name, eltype) in enumerate(HEXAHEHEDRON_ELEMENTS.items()): + node_tuples = generate_node_tuples_from_gmsh(eltype, 3, 8, domain="biunit") + hex_data[order + 1] = { + "node_tuples": node_tuples, + "element_type": eltype, + "element_name": name, + } + + gmsh.finalize() + + from pprint import pformat + txt = (OUTPUT_TEMPLATE % ( + gmsh.GMSH_API_VERSION, + pformat(tri_data, width=80), + pformat(tet_data, width=80), + pformat(qua_data, width=80), + pformat(hex_data, width=80), + )).replace('"', "") + + if filename is None: + print(txt) + else: + with open(filename, "w") as fd: + fd.write(txt) + + +if __name__ == "__main__": + import argparse + + parser = argparse.ArgumentParser() + parser.add_argument("filename", nargs="?", default=None) + args = parser.parse_args() + + generate_node_tuples(args.filename) diff --git a/gmsh_interop/node_tuples.py b/gmsh_interop/node_tuples.py new file mode 100644 index 0000000..20b6f49 --- /dev/null +++ b/gmsh_interop/node_tuples.py @@ -0,0 +1,5042 @@ +# GENERATED by gmsh_interop/contrib/gmsh-node-tuples.py +# GMSH_VERSION: 4.7.0 +# DO NOT EDIT + +triangle_data = { + 1: { + "element_name": "MSH_TRI_3", + "element_type": 2, + "node_tuples": [(0, 0), (1, 0), (0, 1)], + }, + 2: { + "element_name": "MSH_TRI_6", + "element_type": 9, + "node_tuples": [(0, 0), (2, 0), (0, 2), (1, 0), (1, 1), (0, 1)], + }, + 3: { + "element_name": "MSH_TRI_10", + "element_type": 21, + "node_tuples": [ + (0, 0), + (3, 0), + (0, 3), + (1, 0), + (2, 0), + (2, 1), + (1, 2), + (0, 2), + (0, 1), + (1, 1), + ], + }, + 4: { + "element_name": "MSH_TRI_15", + "element_type": 23, + "node_tuples": [ + (0, 0), + (4, 0), + (0, 4), + (1, 0), + (2, 0), + (3, 0), + (3, 1), + (2, 2), + (1, 3), + (0, 3), + (0, 2), + (0, 1), + (1, 1), + (2, 1), + (1, 2), + ], + }, + 5: { + "element_name": "MSH_TRI_21", + "element_type": 25, + "node_tuples": [ + (0, 0), + (5, 0), + (0, 5), + (1, 0), + (2, 0), + (3, 0), + (4, 0), + (4, 1), + (3, 2), + (2, 3), + (1, 4), + (0, 4), + (0, 3), + (0, 2), + (0, 1), + (1, 1), + (3, 1), + (1, 3), + (2, 1), + (2, 2), + (1, 2), + ], + }, + 6: { + "element_name": "MSH_TRI_28", + "element_type": 42, + "node_tuples": [ + (0, 0), + (6, 0), + (0, 6), + (1, 0), + (2, 0), + (3, 0), + (4, 0), + (5, 0), + (5, 1), + (4, 2), + (3, 3), + (2, 4), + (1, 5), + (0, 5), + (0, 4), + (0, 3), + (0, 2), + (0, 1), + (1, 1), + (4, 1), + (1, 4), + (2, 1), + (3, 1), + (3, 2), + (2, 3), + (1, 3), + (1, 2), + (2, 2), + ], + }, + 7: { + "element_name": "MSH_TRI_36", + "element_type": 43, + "node_tuples": [ + (0, 0), + (7, 0), + (0, 7), + (1, 0), + (2, 0), + (3, 0), + (4, 0), + (4, 0), + (6, 0), + (6, 1), + (4, 2), + (4, 3), + (3, 4), + (2, 4), + (1, 6), + (0, 6), + (0, 4), + (0, 4), + (0, 3), + (0, 2), + (0, 1), + (1, 1), + (4, 1), + (1, 4), + (2, 1), + (3, 1), + (4, 1), + (4, 2), + (3, 3), + (2, 4), + (1, 4), + (1, 3), + (1, 2), + (2, 2), + (3, 2), + (2, 3), + ], + }, + 8: { + "element_name": "MSH_TRI_45", + "element_type": 44, + "node_tuples": [ + (0, 0), + (8, 0), + (0, 8), + (1, 0), + (2, 0), + (3, 0), + (4, 0), + (5, 0), + (6, 0), + (7, 0), + (7, 1), + (6, 2), + (5, 3), + (4, 4), + (3, 5), + (2, 6), + (1, 7), + (0, 7), + (0, 6), + (0, 5), + (0, 4), + (0, 3), + (0, 2), + (0, 1), + (1, 1), + (6, 1), + (1, 6), + (2, 1), + (3, 1), + (4, 1), + (5, 1), + (5, 2), + (4, 3), + (3, 4), + (2, 5), + (1, 5), + (1, 4), + (1, 3), + (1, 2), + (2, 2), + (4, 2), + (2, 4), + (3, 2), + (3, 3), + (2, 3), + ], + }, + 9: { + "element_name": "MSH_TRI_55", + "element_type": 45, + "node_tuples": [ + (0, 0), + (9, 0), + (0, 9), + (1, 0), + (2, 0), + (3, 0), + (4, 0), + (5, 0), + (6, 0), + (6, 0), + (8, 0), + (8, 1), + (6, 2), + (6, 3), + (5, 4), + (4, 5), + (3, 6), + (2, 6), + (1, 8), + (0, 8), + (0, 6), + (0, 6), + (0, 5), + (0, 4), + (0, 3), + (0, 2), + (0, 1), + (1, 1), + (6, 1), + (1, 6), + (2, 1), + (3, 1), + (4, 1), + (5, 1), + (6, 1), + (6, 2), + (5, 3), + (4, 4), + (3, 5), + (2, 6), + (1, 6), + (1, 5), + (1, 4), + (1, 3), + (1, 2), + (2, 2), + (5, 2), + (2, 5), + (3, 2), + (4, 2), + (4, 3), + (3, 4), + (2, 4), + (2, 3), + (3, 3), + ], + }, + 10: { + "element_name": "MSH_TRI_66", + "element_type": 46, + "node_tuples": [ + (0, 0), + (10, 0), + (0, 10), + (1, 0), + (2, 0), + (3, 0), + (4, 0), + (5, 0), + (6, 0), + (7, 0), + (8, 0), + (9, 0), + (9, 1), + (8, 2), + (7, 3), + (6, 4), + (5, 5), + (4, 6), + (3, 7), + (2, 8), + (1, 9), + (0, 9), + (0, 8), + (0, 7), + (0, 6), + (0, 5), + (0, 4), + (0, 3), + (0, 2), + (0, 1), + (1, 1), + (8, 1), + (1, 8), + (2, 1), + (3, 1), + (4, 1), + (5, 1), + (6, 1), + (7, 1), + (7, 2), + (6, 3), + (5, 4), + (4, 5), + (3, 6), + (2, 7), + (1, 7), + (1, 6), + (1, 5), + (1, 4), + (1, 3), + (1, 2), + (2, 2), + (6, 2), + (2, 6), + (3, 2), + (4, 2), + (5, 2), + (5, 3), + (4, 4), + (3, 5), + (2, 5), + (2, 4), + (2, 3), + (3, 3), + (4, 3), + (3, 4), + ], + }, +} + +tetrahedron_data = { + 1: { + "element_name": "MSH_TET_4", + "element_type": 4, + "node_tuples": [(0, 0, 0), (1, 0, 0), (0, 1, 0), (0, 0, 1)], + }, + 2: { + "element_name": "MSH_TET_10", + "element_type": 11, + "node_tuples": [ + (0, 0, 0), + (2, 0, 0), + (0, 2, 0), + (0, 0, 2), + (1, 0, 0), + (1, 1, 0), + (0, 1, 0), + (0, 0, 1), + (0, 1, 1), + (1, 0, 1), + ], + }, + 3: { + "element_name": "MSH_TET_20", + "element_type": 29, + "node_tuples": [ + (0, 0, 0), + (3, 0, 0), + (0, 3, 0), + (0, 0, 3), + (1, 0, 0), + (2, 0, 0), + (2, 1, 0), + (1, 2, 0), + (0, 2, 0), + (0, 1, 0), + (0, 0, 2), + (0, 0, 1), + (0, 1, 2), + (0, 2, 1), + (1, 0, 2), + (2, 0, 1), + (1, 1, 0), + (1, 0, 1), + (0, 1, 1), + (1, 1, 1), + ], + }, + 4: { + "element_name": "MSH_TET_35", + "element_type": 30, + "node_tuples": [ + (0, 0, 0), + (4, 0, 0), + (0, 4, 0), + (0, 0, 4), + (1, 0, 0), + (2, 0, 0), + (3, 0, 0), + (3, 1, 0), + (2, 2, 0), + (1, 3, 0), + (0, 3, 0), + (0, 2, 0), + (0, 1, 0), + (0, 0, 3), + (0, 0, 2), + (0, 0, 1), + (0, 1, 3), + (0, 2, 2), + (0, 3, 1), + (1, 0, 3), + (2, 0, 2), + (3, 0, 1), + (1, 1, 0), + (1, 2, 0), + (2, 1, 0), + (1, 0, 1), + (2, 0, 1), + (1, 0, 2), + (0, 1, 1), + (0, 1, 2), + (0, 2, 1), + (1, 1, 2), + (2, 1, 1), + (1, 2, 1), + (1, 1, 1), + ], + }, + 5: { + "element_name": "MSH_TET_56", + "element_type": 31, + "node_tuples": [ + (0, 0, 0), + (5, 0, 0), + (0, 5, 0), + (0, 0, 5), + (1, 0, 0), + (2, 0, 0), + (3, 0, 0), + (4, 0, 0), + (4, 1, 0), + (3, 2, 0), + (2, 3, 0), + (1, 4, 0), + (0, 4, 0), + (0, 3, 0), + (0, 2, 0), + (0, 1, 0), + (0, 0, 4), + (0, 0, 3), + (0, 0, 2), + (0, 0, 1), + (0, 1, 4), + (0, 2, 3), + (0, 3, 2), + (0, 4, 1), + (1, 0, 4), + (2, 0, 3), + (3, 0, 2), + (4, 0, 1), + (1, 1, 0), + (1, 3, 0), + (3, 1, 0), + (1, 2, 0), + (2, 2, 0), + (2, 1, 0), + (1, 0, 1), + (3, 0, 1), + (1, 0, 3), + (2, 0, 1), + (2, 0, 2), + (1, 0, 2), + (0, 1, 1), + (0, 1, 3), + (0, 3, 1), + (0, 1, 2), + (0, 2, 2), + (0, 2, 1), + (1, 1, 3), + (3, 1, 1), + (1, 3, 1), + (2, 1, 2), + (2, 2, 1), + (1, 2, 2), + (1, 1, 1), + (2, 1, 1), + (1, 2, 1), + (1, 1, 2), + ], + }, + 6: { + "element_name": "MSH_TET_84", + "element_type": 71, + "node_tuples": [ + (0, 0, 0), + (6, 0, 0), + (0, 6, 0), + (0, 0, 6), + (1, 0, 0), + (2, 0, 0), + (3, 0, 0), + (4, 0, 0), + (5, 0, 0), + (5, 1, 0), + (4, 2, 0), + (3, 3, 0), + (2, 4, 0), + (1, 5, 0), + (0, 5, 0), + (0, 4, 0), + (0, 3, 0), + (0, 2, 0), + (0, 1, 0), + (0, 0, 5), + (0, 0, 4), + (0, 0, 3), + (0, 0, 2), + (0, 0, 1), + (0, 1, 5), + (0, 2, 4), + (0, 3, 3), + (0, 4, 2), + (0, 5, 1), + (1, 0, 5), + (2, 0, 4), + (3, 0, 3), + (4, 0, 2), + (5, 0, 1), + (1, 1, 0), + (1, 4, 0), + (4, 1, 0), + (1, 2, 0), + (1, 3, 0), + (2, 3, 0), + (3, 2, 0), + (3, 1, 0), + (2, 1, 0), + (2, 2, 0), + (1, 0, 1), + (4, 0, 1), + (1, 0, 4), + (2, 0, 1), + (3, 0, 1), + (3, 0, 2), + (2, 0, 3), + (1, 0, 3), + (1, 0, 2), + (2, 0, 2), + (0, 1, 1), + (0, 1, 4), + (0, 4, 1), + (0, 1, 2), + (0, 1, 3), + (0, 2, 3), + (0, 3, 2), + (0, 3, 1), + (0, 2, 1), + (0, 2, 2), + (1, 1, 4), + (4, 1, 1), + (1, 4, 1), + (2, 1, 3), + (3, 1, 2), + (3, 2, 1), + (2, 3, 1), + (1, 3, 2), + (1, 2, 3), + (2, 2, 2), + (1, 1, 1), + (3, 1, 1), + (1, 3, 1), + (1, 1, 3), + (2, 1, 1), + (2, 2, 1), + (1, 2, 1), + (1, 1, 2), + (1, 2, 2), + (2, 1, 2), + ], + }, + 7: { + "element_name": "MSH_TET_120", + "element_type": 72, + "node_tuples": [ + (0, 0, 0), + (7, 0, 0), + (0, 7, 0), + (0, 0, 7), + (1, 0, 0), + (2, 0, 0), + (3, 0, 0), + (4, 0, 0), + (4, 0, 0), + (6, 0, 0), + (6, 1, 0), + (4, 2, 0), + (4, 3, 0), + (3, 4, 0), + (2, 4, 0), + (1, 6, 0), + (0, 6, 0), + (0, 4, 0), + (0, 4, 0), + (0, 3, 0), + (0, 2, 0), + (0, 1, 0), + (0, 0, 6), + (0, 0, 4), + (0, 0, 4), + (0, 0, 3), + (0, 0, 2), + (0, 0, 1), + (0, 1, 6), + (0, 2, 4), + (0, 3, 4), + (0, 4, 3), + (0, 4, 2), + (0, 6, 1), + (1, 0, 6), + (2, 0, 4), + (3, 0, 4), + (4, 0, 3), + (4, 0, 2), + (6, 0, 1), + (1, 1, 0), + (1, 4, 0), + (4, 1, 0), + (1, 2, 0), + (1, 3, 0), + (1, 4, 0), + (2, 4, 0), + (3, 3, 0), + (4, 2, 0), + (4, 1, 0), + (3, 1, 0), + (2, 1, 0), + (2, 2, 0), + (2, 3, 0), + (3, 2, 0), + (1, 0, 1), + (4, 0, 1), + (1, 0, 4), + (2, 0, 1), + (3, 0, 1), + (4, 0, 1), + (4, 0, 2), + (3, 0, 3), + (2, 0, 4), + (1, 0, 4), + (1, 0, 3), + (1, 0, 2), + (2, 0, 2), + (3, 0, 2), + (2, 0, 3), + (0, 1, 1), + (0, 1, 4), + (0, 4, 1), + (0, 1, 2), + (0, 1, 3), + (0, 1, 4), + (0, 2, 4), + (0, 3, 3), + (0, 4, 2), + (0, 4, 1), + (0, 3, 1), + (0, 2, 1), + (0, 2, 2), + (0, 2, 3), + (0, 3, 2), + (1, 1, 4), + (4, 1, 1), + (1, 4, 1), + (2, 1, 4), + (3, 1, 3), + (4, 1, 2), + (4, 2, 1), + (3, 3, 1), + (2, 4, 1), + (1, 4, 2), + (1, 3, 3), + (1, 2, 4), + (2, 2, 3), + (3, 2, 2), + (2, 3, 2), + (1, 1, 1), + (4, 1, 1), + (1, 4, 1), + (1, 1, 4), + (2, 1, 1), + (3, 1, 1), + (3, 2, 1), + (2, 3, 1), + (1, 3, 1), + (1, 2, 1), + (1, 1, 3), + (1, 1, 2), + (1, 2, 3), + (1, 3, 2), + (2, 1, 3), + (3, 1, 2), + (2, 2, 1), + (2, 1, 2), + (1, 2, 2), + (2, 2, 2), + ], + }, + 8: { + "element_name": "MSH_TET_165", + "element_type": 73, + "node_tuples": [ + (0, 0, 0), + (8, 0, 0), + (0, 8, 0), + (0, 0, 8), + (1, 0, 0), + (2, 0, 0), + (3, 0, 0), + (4, 0, 0), + (5, 0, 0), + (6, 0, 0), + (7, 0, 0), + (7, 1, 0), + (6, 2, 0), + (5, 3, 0), + (4, 4, 0), + (3, 5, 0), + (2, 6, 0), + (1, 7, 0), + (0, 7, 0), + (0, 6, 0), + (0, 5, 0), + (0, 4, 0), + (0, 3, 0), + (0, 2, 0), + (0, 1, 0), + (0, 0, 7), + (0, 0, 6), + (0, 0, 5), + (0, 0, 4), + (0, 0, 3), + (0, 0, 2), + (0, 0, 1), + (0, 1, 7), + (0, 2, 6), + (0, 3, 5), + (0, 4, 4), + (0, 5, 3), + (0, 6, 2), + (0, 7, 1), + (1, 0, 7), + (2, 0, 6), + (3, 0, 5), + (4, 0, 4), + (5, 0, 3), + (6, 0, 2), + (7, 0, 1), + (1, 1, 0), + (1, 6, 0), + (6, 1, 0), + (1, 2, 0), + (1, 3, 0), + (1, 4, 0), + (1, 5, 0), + (2, 5, 0), + (3, 4, 0), + (4, 3, 0), + (5, 2, 0), + (5, 1, 0), + (4, 1, 0), + (3, 1, 0), + (2, 1, 0), + (2, 2, 0), + (2, 4, 0), + (4, 2, 0), + (2, 3, 0), + (3, 3, 0), + (3, 2, 0), + (1, 0, 1), + (6, 0, 1), + (1, 0, 6), + (2, 0, 1), + (3, 0, 1), + (4, 0, 1), + (5, 0, 1), + (5, 0, 2), + (4, 0, 3), + (3, 0, 4), + (2, 0, 5), + (1, 0, 5), + (1, 0, 4), + (1, 0, 3), + (1, 0, 2), + (2, 0, 2), + (4, 0, 2), + (2, 0, 4), + (3, 0, 2), + (3, 0, 3), + (2, 0, 3), + (0, 1, 1), + (0, 1, 6), + (0, 6, 1), + (0, 1, 2), + (0, 1, 3), + (0, 1, 4), + (0, 1, 5), + (0, 2, 5), + (0, 3, 4), + (0, 4, 3), + (0, 5, 2), + (0, 5, 1), + (0, 4, 1), + (0, 3, 1), + (0, 2, 1), + (0, 2, 2), + (0, 2, 4), + (0, 4, 2), + (0, 2, 3), + (0, 3, 3), + (0, 3, 2), + (1, 1, 6), + (6, 1, 1), + (1, 6, 1), + (2, 1, 5), + (3, 1, 4), + (4, 1, 3), + (5, 1, 2), + (5, 2, 1), + (4, 3, 1), + (3, 4, 1), + (2, 5, 1), + (1, 5, 2), + (1, 4, 3), + (1, 3, 4), + (1, 2, 5), + (2, 2, 4), + (4, 2, 2), + (2, 4, 2), + (3, 2, 3), + (3, 3, 2), + (2, 3, 3), + (1, 1, 1), + (5, 1, 1), + (1, 5, 1), + (1, 1, 5), + (2, 1, 1), + (3, 1, 1), + (4, 1, 1), + (4, 2, 1), + (3, 3, 1), + (2, 4, 1), + (1, 4, 1), + (1, 3, 1), + (1, 2, 1), + (1, 1, 4), + (1, 1, 3), + (1, 1, 2), + (1, 2, 4), + (1, 3, 3), + (1, 4, 2), + (2, 1, 4), + (3, 1, 3), + (4, 1, 2), + (2, 2, 1), + (2, 3, 1), + (3, 2, 1), + (2, 1, 2), + (3, 1, 2), + (2, 1, 3), + (1, 2, 2), + (1, 2, 3), + (1, 3, 2), + (2, 2, 3), + (3, 2, 2), + (2, 3, 2), + (2, 2, 2), + ], + }, + 9: { + "element_name": "MSH_TET_220", + "element_type": 74, + "node_tuples": [ + (0, 0, 0), + (9, 0, 0), + (0, 9, 0), + (0, 0, 9), + (1, 0, 0), + (2, 0, 0), + (3, 0, 0), + (4, 0, 0), + (5, 0, 0), + (6, 0, 0), + (6, 0, 0), + (8, 0, 0), + (8, 1, 0), + (6, 2, 0), + (6, 3, 0), + (5, 4, 0), + (4, 5, 0), + (3, 6, 0), + (2, 6, 0), + (1, 8, 0), + (0, 8, 0), + (0, 6, 0), + (0, 6, 0), + (0, 5, 0), + (0, 4, 0), + (0, 3, 0), + (0, 2, 0), + (0, 1, 0), + (0, 0, 8), + (0, 0, 6), + (0, 0, 6), + (0, 0, 5), + (0, 0, 4), + (0, 0, 3), + (0, 0, 2), + (0, 0, 1), + (0, 1, 8), + (0, 2, 6), + (0, 3, 6), + (0, 4, 5), + (0, 5, 4), + (0, 6, 3), + (0, 6, 2), + (0, 8, 1), + (1, 0, 8), + (2, 0, 6), + (3, 0, 6), + (4, 0, 5), + (5, 0, 4), + (6, 0, 3), + (6, 0, 2), + (8, 0, 1), + (1, 1, 0), + (1, 6, 0), + (6, 1, 0), + (1, 2, 0), + (1, 3, 0), + (1, 4, 0), + (1, 5, 0), + (1, 6, 0), + (2, 6, 0), + (3, 5, 0), + (4, 4, 0), + (5, 3, 0), + (6, 2, 0), + (6, 1, 0), + (5, 1, 0), + (4, 1, 0), + (3, 1, 0), + (2, 1, 0), + (2, 2, 0), + (2, 5, 0), + (5, 2, 0), + (2, 3, 0), + (2, 4, 0), + (3, 4, 0), + (4, 3, 0), + (4, 2, 0), + (3, 2, 0), + (3, 3, 0), + (1, 0, 1), + (6, 0, 1), + (1, 0, 6), + (2, 0, 1), + (3, 0, 1), + (4, 0, 1), + (5, 0, 1), + (6, 0, 1), + (6, 0, 2), + (5, 0, 3), + (4, 0, 4), + (3, 0, 5), + (2, 0, 6), + (1, 0, 6), + (1, 0, 5), + (1, 0, 4), + (1, 0, 3), + (1, 0, 2), + (2, 0, 2), + (5, 0, 2), + (2, 0, 5), + (3, 0, 2), + (4, 0, 2), + (4, 0, 3), + (3, 0, 4), + (2, 0, 4), + (2, 0, 3), + (3, 0, 3), + (0, 1, 1), + (0, 1, 6), + (0, 6, 1), + (0, 1, 2), + (0, 1, 3), + (0, 1, 4), + (0, 1, 5), + (0, 1, 6), + (0, 2, 6), + (0, 3, 5), + (0, 4, 4), + (0, 5, 3), + (0, 6, 2), + (0, 6, 1), + (0, 5, 1), + (0, 4, 1), + (0, 3, 1), + (0, 2, 1), + (0, 2, 2), + (0, 2, 5), + (0, 5, 2), + (0, 2, 3), + (0, 2, 4), + (0, 3, 4), + (0, 4, 3), + (0, 4, 2), + (0, 3, 2), + (0, 3, 3), + (1, 1, 6), + (6, 1, 1), + (1, 6, 1), + (2, 1, 6), + (3, 1, 5), + (4, 1, 4), + (5, 1, 3), + (6, 1, 2), + (6, 2, 1), + (5, 3, 1), + (4, 4, 1), + (3, 5, 1), + (2, 6, 1), + (1, 6, 2), + (1, 5, 3), + (1, 4, 4), + (1, 3, 5), + (1, 2, 6), + (2, 2, 5), + (5, 2, 2), + (2, 5, 2), + (3, 2, 4), + (4, 2, 3), + (4, 3, 2), + (3, 4, 2), + (2, 4, 3), + (2, 3, 4), + (3, 3, 3), + (1, 1, 1), + (6, 1, 1), + (1, 6, 1), + (1, 1, 6), + (2, 1, 1), + (3, 1, 1), + (4, 1, 1), + (5, 1, 1), + (5, 2, 1), + (4, 3, 1), + (3, 4, 1), + (2, 5, 1), + (1, 5, 1), + (1, 4, 1), + (1, 3, 1), + (1, 2, 1), + (1, 1, 5), + (1, 1, 4), + (1, 1, 3), + (1, 1, 2), + (1, 2, 5), + (1, 3, 4), + (1, 4, 3), + (1, 5, 2), + (2, 1, 5), + (3, 1, 4), + (4, 1, 3), + (5, 1, 2), + (2, 2, 1), + (2, 4, 1), + (4, 2, 1), + (2, 3, 1), + (3, 3, 1), + (3, 2, 1), + (2, 1, 2), + (4, 1, 2), + (2, 1, 4), + (3, 1, 2), + (3, 1, 3), + (2, 1, 3), + (1, 2, 2), + (1, 2, 4), + (1, 4, 2), + (1, 2, 3), + (1, 3, 3), + (1, 3, 2), + (2, 2, 4), + (4, 2, 2), + (2, 4, 2), + (3, 2, 3), + (3, 3, 2), + (2, 3, 3), + (2, 2, 2), + (3, 2, 2), + (2, 3, 2), + (2, 2, 3), + ], + }, + 10: { + "element_name": "MSH_TET_286", + "element_type": 75, + "node_tuples": [ + (0, 0, 0), + (10, 0, 0), + (0, 10, 0), + (0, 0, 10), + (1, 0, 0), + (2, 0, 0), + (3, 0, 0), + (4, 0, 0), + (5, 0, 0), + (6, 0, 0), + (7, 0, 0), + (8, 0, 0), + (9, 0, 0), + (9, 1, 0), + (8, 2, 0), + (7, 3, 0), + (6, 4, 0), + (5, 5, 0), + (4, 6, 0), + (3, 7, 0), + (2, 8, 0), + (1, 9, 0), + (0, 9, 0), + (0, 8, 0), + (0, 7, 0), + (0, 6, 0), + (0, 5, 0), + (0, 4, 0), + (0, 3, 0), + (0, 2, 0), + (0, 1, 0), + (0, 0, 9), + (0, 0, 8), + (0, 0, 7), + (0, 0, 6), + (0, 0, 5), + (0, 0, 4), + (0, 0, 3), + (0, 0, 2), + (0, 0, 1), + (0, 1, 9), + (0, 2, 8), + (0, 3, 7), + (0, 4, 6), + (0, 5, 5), + (0, 6, 4), + (0, 7, 3), + (0, 8, 2), + (0, 9, 1), + (1, 0, 9), + (2, 0, 8), + (3, 0, 7), + (4, 0, 6), + (5, 0, 5), + (6, 0, 4), + (7, 0, 3), + (8, 0, 2), + (9, 0, 1), + (1, 1, 0), + (1, 8, 0), + (8, 1, 0), + (1, 2, 0), + (1, 3, 0), + (1, 4, 0), + (1, 5, 0), + (1, 6, 0), + (1, 7, 0), + (2, 7, 0), + (3, 6, 0), + (4, 5, 0), + (5, 4, 0), + (6, 3, 0), + (7, 2, 0), + (7, 1, 0), + (6, 1, 0), + (5, 1, 0), + (4, 1, 0), + (3, 1, 0), + (2, 1, 0), + (2, 2, 0), + (2, 6, 0), + (6, 2, 0), + (2, 3, 0), + (2, 4, 0), + (2, 5, 0), + (3, 5, 0), + (4, 4, 0), + (5, 3, 0), + (5, 2, 0), + (4, 2, 0), + (3, 2, 0), + (3, 3, 0), + (3, 4, 0), + (4, 3, 0), + (1, 0, 1), + (8, 0, 1), + (1, 0, 8), + (2, 0, 1), + (3, 0, 1), + (4, 0, 1), + (5, 0, 1), + (6, 0, 1), + (7, 0, 1), + (7, 0, 2), + (6, 0, 3), + (5, 0, 4), + (4, 0, 5), + (3, 0, 6), + (2, 0, 7), + (1, 0, 7), + (1, 0, 6), + (1, 0, 5), + (1, 0, 4), + (1, 0, 3), + (1, 0, 2), + (2, 0, 2), + (6, 0, 2), + (2, 0, 6), + (3, 0, 2), + (4, 0, 2), + (5, 0, 2), + (5, 0, 3), + (4, 0, 4), + (3, 0, 5), + (2, 0, 5), + (2, 0, 4), + (2, 0, 3), + (3, 0, 3), + (4, 0, 3), + (3, 0, 4), + (0, 1, 1), + (0, 1, 8), + (0, 8, 1), + (0, 1, 2), + (0, 1, 3), + (0, 1, 4), + (0, 1, 5), + (0, 1, 6), + (0, 1, 7), + (0, 2, 7), + (0, 3, 6), + (0, 4, 5), + (0, 5, 4), + (0, 6, 3), + (0, 7, 2), + (0, 7, 1), + (0, 6, 1), + (0, 5, 1), + (0, 4, 1), + (0, 3, 1), + (0, 2, 1), + (0, 2, 2), + (0, 2, 6), + (0, 6, 2), + (0, 2, 3), + (0, 2, 4), + (0, 2, 5), + (0, 3, 5), + (0, 4, 4), + (0, 5, 3), + (0, 5, 2), + (0, 4, 2), + (0, 3, 2), + (0, 3, 3), + (0, 3, 4), + (0, 4, 3), + (1, 1, 8), + (8, 1, 1), + (1, 8, 1), + (2, 1, 7), + (3, 1, 6), + (4, 1, 5), + (5, 1, 4), + (6, 1, 3), + (7, 1, 2), + (7, 2, 1), + (6, 3, 1), + (5, 4, 1), + (4, 5, 1), + (3, 6, 1), + (2, 7, 1), + (1, 7, 2), + (1, 6, 3), + (1, 5, 4), + (1, 4, 5), + (1, 3, 6), + (1, 2, 7), + (2, 2, 6), + (6, 2, 2), + (2, 6, 2), + (3, 2, 5), + (4, 2, 4), + (5, 2, 3), + (5, 3, 2), + (4, 4, 2), + (3, 5, 2), + (2, 5, 3), + (2, 4, 4), + (2, 3, 5), + (3, 3, 4), + (4, 3, 3), + (3, 4, 3), + (1, 1, 1), + (7, 1, 1), + (1, 7, 1), + (1, 1, 7), + (2, 1, 1), + (3, 1, 1), + (4, 1, 1), + (5, 1, 1), + (6, 1, 1), + (6, 2, 1), + (5, 3, 1), + (4, 4, 1), + (3, 5, 1), + (2, 6, 1), + (1, 6, 1), + (1, 5, 1), + (1, 4, 1), + (1, 3, 1), + (1, 2, 1), + (1, 1, 6), + (1, 1, 5), + (1, 1, 4), + (1, 1, 3), + (1, 1, 2), + (1, 2, 6), + (1, 3, 5), + (1, 4, 4), + (1, 5, 3), + (1, 6, 2), + (2, 1, 6), + (3, 1, 5), + (4, 1, 4), + (5, 1, 3), + (6, 1, 2), + (2, 2, 1), + (2, 5, 1), + (5, 2, 1), + (2, 3, 1), + (2, 4, 1), + (3, 4, 1), + (4, 3, 1), + (4, 2, 1), + (3, 2, 1), + (3, 3, 1), + (2, 1, 2), + (5, 1, 2), + (2, 1, 5), + (3, 1, 2), + (4, 1, 2), + (4, 1, 3), + (3, 1, 4), + (2, 1, 4), + (2, 1, 3), + (3, 1, 3), + (1, 2, 2), + (1, 2, 5), + (1, 5, 2), + (1, 2, 3), + (1, 2, 4), + (1, 3, 4), + (1, 4, 3), + (1, 4, 2), + (1, 3, 2), + (1, 3, 3), + (2, 2, 5), + (5, 2, 2), + (2, 5, 2), + (3, 2, 4), + (4, 2, 3), + (4, 3, 2), + (3, 4, 2), + (2, 4, 3), + (2, 3, 4), + (3, 3, 3), + (2, 2, 2), + (4, 2, 2), + (2, 4, 2), + (2, 2, 4), + (3, 2, 2), + (3, 3, 2), + (2, 3, 2), + (2, 2, 3), + (2, 3, 3), + (3, 2, 3), + ], + }, +} + +quadrangle_data = { + 1: { + "element_name": "MSH_QUA_4", + "element_type": 3, + "node_tuples": [(0, 0), (1, 0), (1, 1), (0, 1)], + }, + 2: { + "element_name": "MSH_QUA_9", + "element_type": 10, + "node_tuples": [ + (0, 0), + (2, 0), + (2, 2), + (0, 2), + (1, 0), + (2, 1), + (1, 2), + (0, 1), + (1, 1), + ], + }, + 3: { + "element_name": "MSH_QUA_16", + "element_type": 36, + "node_tuples": [ + (0, 0), + (3, 0), + (3, 3), + (0, 3), + (1, 0), + (2, 0), + (3, 1), + (3, 2), + (2, 3), + (1, 3), + (0, 2), + (0, 1), + (1, 1), + (2, 1), + (2, 2), + (1, 2), + ], + }, + 4: { + "element_name": "MSH_QUA_25", + "element_type": 37, + "node_tuples": [ + (0, 0), + (4, 0), + (4, 4), + (0, 4), + (1, 0), + (2, 0), + (3, 0), + (4, 1), + (4, 2), + (4, 3), + (3, 4), + (2, 4), + (1, 4), + (0, 3), + (0, 2), + (0, 1), + (1, 1), + (3, 1), + (3, 3), + (1, 3), + (2, 1), + (3, 2), + (2, 3), + (1, 2), + (2, 2), + ], + }, + 5: { + "element_name": "MSH_QUA_36", + "element_type": 38, + "node_tuples": [ + (0, 0), + (5, 0), + (5, 5), + (0, 5), + (1, 0), + (2, 0), + (3, 0), + (4, 0), + (5, 1), + (5, 2), + (5, 3), + (5, 4), + (4, 5), + (3, 5), + (2, 5), + (1, 5), + (0, 4), + (0, 3), + (0, 2), + (0, 1), + (1, 1), + (4, 1), + (4, 4), + (1, 4), + (2, 1), + (3, 1), + (4, 2), + (4, 3), + (3, 4), + (2, 4), + (1, 3), + (1, 2), + (2, 2), + (3, 2), + (3, 3), + (2, 3), + ], + }, + 6: { + "element_name": "MSH_QUA_49", + "element_type": 47, + "node_tuples": [ + (0, 0), + (6, 0), + (6, 6), + (0, 6), + (0, 0), + (2, 0), + (3, 0), + (4, 0), + (5, 0), + (6, 0), + (6, 2), + (6, 3), + (6, 4), + (6, 5), + (5, 6), + (4, 6), + (3, 6), + (2, 6), + (0, 6), + (0, 5), + (0, 4), + (0, 3), + (0, 2), + (0, 0), + (0, 0), + (5, 0), + (5, 5), + (0, 5), + (2, 0), + (3, 0), + (4, 0), + (5, 2), + (5, 3), + (5, 4), + (4, 5), + (3, 5), + (2, 5), + (0, 4), + (0, 3), + (0, 2), + (2, 2), + (4, 2), + (4, 4), + (2, 4), + (3, 2), + (4, 3), + (3, 4), + (2, 3), + (3, 3), + ], + }, + 7: { + "element_name": "MSH_QUA_64", + "element_type": 48, + "node_tuples": [ + (0, 0), + (7, 0), + (7, 7), + (0, 7), + (1, 0), + (2, 0), + (3, 0), + (4, 0), + (4, 0), + (6, 0), + (7, 1), + (7, 2), + (7, 3), + (7, 4), + (7, 4), + (7, 6), + (6, 7), + (4, 7), + (4, 7), + (3, 7), + (2, 7), + (1, 7), + (0, 6), + (0, 4), + (0, 4), + (0, 3), + (0, 2), + (0, 1), + (1, 1), + (6, 1), + (6, 6), + (1, 6), + (2, 1), + (3, 1), + (4, 1), + (4, 1), + (6, 2), + (6, 3), + (6, 4), + (6, 4), + (4, 6), + (4, 6), + (3, 6), + (2, 6), + (1, 4), + (1, 4), + (1, 3), + (1, 2), + (2, 2), + (4, 2), + (4, 4), + (2, 4), + (3, 2), + (4, 2), + (4, 3), + (4, 4), + (4, 4), + (3, 4), + (2, 4), + (2, 3), + (3, 3), + (4, 3), + (4, 4), + (3, 4), + ], + }, + 8: { + "element_name": "MSH_QUA_81", + "element_type": 49, + "node_tuples": [ + (0, 0), + (8, 0), + (8, 8), + (0, 8), + (1, 0), + (2, 0), + (3, 0), + (4, 0), + (5, 0), + (6, 0), + (7, 0), + (8, 1), + (8, 2), + (8, 3), + (8, 4), + (8, 5), + (8, 6), + (8, 7), + (7, 8), + (6, 8), + (5, 8), + (4, 8), + (3, 8), + (2, 8), + (1, 8), + (0, 7), + (0, 6), + (0, 5), + (0, 4), + (0, 3), + (0, 2), + (0, 1), + (1, 1), + (7, 1), + (7, 7), + (1, 7), + (2, 1), + (3, 1), + (4, 1), + (5, 1), + (6, 1), + (7, 2), + (7, 3), + (7, 4), + (7, 5), + (7, 6), + (6, 7), + (5, 7), + (4, 7), + (3, 7), + (2, 7), + (1, 6), + (1, 5), + (1, 4), + (1, 3), + (1, 2), + (2, 2), + (6, 2), + (6, 6), + (2, 6), + (3, 2), + (4, 2), + (5, 2), + (6, 3), + (6, 4), + (6, 5), + (5, 6), + (4, 6), + (3, 6), + (2, 5), + (2, 4), + (2, 3), + (3, 3), + (5, 3), + (5, 5), + (3, 5), + (4, 3), + (5, 4), + (4, 5), + (3, 4), + (4, 4), + ], + }, + 9: { + "element_name": "MSH_QUA_100", + "element_type": 50, + "node_tuples": [ + (0, 0), + (9, 0), + (9, 9), + (0, 9), + (1, 0), + (2, 0), + (3, 0), + (4, 0), + (5, 0), + (6, 0), + (6, 0), + (8, 0), + (9, 1), + (9, 2), + (9, 3), + (9, 4), + (9, 5), + (9, 6), + (9, 6), + (9, 8), + (8, 9), + (6, 9), + (6, 9), + (5, 9), + (4, 9), + (3, 9), + (2, 9), + (1, 9), + (0, 8), + (0, 6), + (0, 6), + (0, 5), + (0, 4), + (0, 3), + (0, 2), + (0, 1), + (1, 1), + (8, 1), + (8, 8), + (1, 8), + (2, 1), + (3, 1), + (4, 1), + (5, 1), + (6, 1), + (6, 1), + (8, 2), + (8, 3), + (8, 4), + (8, 5), + (8, 6), + (8, 6), + (6, 8), + (6, 8), + (5, 8), + (4, 8), + (3, 8), + (2, 8), + (1, 6), + (1, 6), + (1, 5), + (1, 4), + (1, 3), + (1, 2), + (2, 2), + (6, 2), + (6, 6), + (2, 6), + (3, 2), + (4, 2), + (5, 2), + (6, 2), + (6, 3), + (6, 4), + (6, 5), + (6, 6), + (6, 6), + (5, 6), + (4, 6), + (3, 6), + (2, 6), + (2, 5), + (2, 4), + (2, 3), + (3, 3), + (6, 3), + (6, 6), + (3, 6), + (4, 3), + (5, 3), + (6, 4), + (6, 5), + (5, 6), + (4, 6), + (3, 5), + (3, 4), + (4, 4), + (5, 4), + (5, 5), + (4, 5), + ], + }, + 10: { + "element_name": "MSH_QUA_121", + "element_type": 51, + "node_tuples": [ + (0, 0), + (10, 0), + (10, 10), + (0, 10), + (0, 0), + (2, 0), + (3, 0), + (4, 0), + (5, 0), + (6, 0), + (7, 0), + (8, 0), + (9, 0), + (10, 0), + (10, 2), + (10, 3), + (10, 4), + (10, 5), + (10, 6), + (10, 7), + (10, 8), + (10, 9), + (9, 10), + (8, 10), + (7, 10), + (6, 10), + (5, 10), + (4, 10), + (3, 10), + (2, 10), + (0, 10), + (0, 9), + (0, 8), + (0, 7), + (0, 6), + (0, 5), + (0, 4), + (0, 3), + (0, 2), + (0, 0), + (0, 0), + (9, 0), + (9, 9), + (0, 9), + (2, 0), + (3, 0), + (4, 0), + (5, 0), + (6, 0), + (7, 0), + (8, 0), + (9, 2), + (9, 3), + (9, 4), + (9, 5), + (9, 6), + (9, 7), + (9, 8), + (8, 9), + (7, 9), + (6, 9), + (5, 9), + (4, 9), + (3, 9), + (2, 9), + (0, 8), + (0, 7), + (0, 6), + (0, 5), + (0, 4), + (0, 3), + (0, 2), + (2, 2), + (8, 2), + (8, 8), + (2, 8), + (3, 2), + (4, 2), + (5, 2), + (6, 2), + (7, 2), + (8, 3), + (8, 4), + (8, 5), + (8, 6), + (8, 7), + (7, 8), + (6, 8), + (5, 8), + (4, 8), + (3, 8), + (2, 7), + (2, 6), + (2, 5), + (2, 4), + (2, 3), + (3, 3), + (7, 3), + (7, 7), + (3, 7), + (4, 3), + (5, 3), + (6, 3), + (7, 4), + (7, 5), + (7, 6), + (6, 7), + (5, 7), + (4, 7), + (3, 6), + (3, 5), + (3, 4), + (4, 4), + (6, 4), + (6, 6), + (4, 6), + (5, 4), + (6, 5), + (5, 6), + (4, 5), + (5, 5), + ], + }, +} + +hexahedron_data = { + 1: { + "element_name": "MSH_HEX_8", + "element_type": 5, + "node_tuples": [ + (0, 0, 0), + (1, 0, 0), + (1, 1, 0), + (0, 1, 0), + (0, 0, 1), + (1, 0, 1), + (1, 1, 1), + (0, 1, 1), + ], + }, + 2: { + "element_name": "MSH_HEX_27", + "element_type": 12, + "node_tuples": [ + (0, 0, 0), + (2, 0, 0), + (2, 2, 0), + (0, 2, 0), + (0, 0, 2), + (2, 0, 2), + (2, 2, 2), + (0, 2, 2), + (1, 0, 0), + (0, 1, 0), + (0, 0, 1), + (2, 1, 0), + (2, 0, 1), + (1, 2, 0), + (2, 2, 1), + (0, 2, 1), + (1, 0, 2), + (0, 1, 2), + (2, 1, 2), + (1, 2, 2), + (1, 1, 0), + (1, 0, 1), + (0, 1, 1), + (2, 1, 1), + (1, 2, 1), + (1, 1, 2), + (1, 1, 1), + ], + }, + 3: { + "element_name": "MSH_HEX_64", + "element_type": 92, + "node_tuples": [ + (0, 0, 0), + (3, 0, 0), + (3, 3, 0), + (0, 3, 0), + (0, 0, 3), + (3, 0, 3), + (3, 3, 3), + (0, 3, 3), + (1, 0, 0), + (2, 0, 0), + (0, 1, 0), + (0, 2, 0), + (0, 0, 1), + (0, 0, 2), + (3, 1, 0), + (3, 2, 0), + (3, 0, 1), + (3, 0, 2), + (2, 3, 0), + (1, 3, 0), + (3, 3, 1), + (3, 3, 2), + (0, 3, 1), + (0, 3, 2), + (1, 0, 3), + (2, 0, 3), + (0, 1, 3), + (0, 2, 3), + (3, 1, 3), + (3, 2, 3), + (2, 3, 3), + (1, 3, 3), + (1, 1, 0), + (1, 2, 0), + (2, 2, 0), + (2, 1, 0), + (1, 0, 1), + (2, 0, 1), + (2, 0, 2), + (1, 0, 2), + (0, 1, 1), + (0, 1, 2), + (0, 2, 2), + (0, 2, 1), + (3, 1, 1), + (3, 2, 1), + (3, 2, 2), + (3, 1, 2), + (2, 3, 1), + (1, 3, 1), + (1, 3, 2), + (2, 3, 2), + (1, 1, 3), + (2, 1, 3), + (2, 2, 3), + (1, 2, 3), + (1, 1, 1), + (2, 1, 1), + (2, 2, 1), + (1, 2, 1), + (1, 1, 2), + (2, 1, 2), + (2, 2, 2), + (1, 2, 2), + ], + }, + 4: { + "element_name": "MSH_HEX_125", + "element_type": 93, + "node_tuples": [ + (0, 0, 0), + (4, 0, 0), + (4, 4, 0), + (0, 4, 0), + (0, 0, 4), + (4, 0, 4), + (4, 4, 4), + (0, 4, 4), + (1, 0, 0), + (2, 0, 0), + (3, 0, 0), + (0, 1, 0), + (0, 2, 0), + (0, 3, 0), + (0, 0, 1), + (0, 0, 2), + (0, 0, 3), + (4, 1, 0), + (4, 2, 0), + (4, 3, 0), + (4, 0, 1), + (4, 0, 2), + (4, 0, 3), + (3, 4, 0), + (2, 4, 0), + (1, 4, 0), + (4, 4, 1), + (4, 4, 2), + (4, 4, 3), + (0, 4, 1), + (0, 4, 2), + (0, 4, 3), + (1, 0, 4), + (2, 0, 4), + (3, 0, 4), + (0, 1, 4), + (0, 2, 4), + (0, 3, 4), + (4, 1, 4), + (4, 2, 4), + (4, 3, 4), + (3, 4, 4), + (2, 4, 4), + (1, 4, 4), + (1, 1, 0), + (1, 3, 0), + (3, 3, 0), + (3, 1, 0), + (1, 2, 0), + (2, 3, 0), + (3, 2, 0), + (2, 1, 0), + (2, 2, 0), + (1, 0, 1), + (3, 0, 1), + (3, 0, 3), + (1, 0, 3), + (2, 0, 1), + (3, 0, 2), + (2, 0, 3), + (1, 0, 2), + (2, 0, 2), + (0, 1, 1), + (0, 1, 3), + (0, 3, 3), + (0, 3, 1), + (0, 1, 2), + (0, 2, 3), + (0, 3, 2), + (0, 2, 1), + (0, 2, 2), + (4, 1, 1), + (4, 3, 1), + (4, 3, 3), + (4, 1, 3), + (4, 2, 1), + (4, 3, 2), + (4, 2, 3), + (4, 1, 2), + (4, 2, 2), + (3, 4, 1), + (1, 4, 1), + (1, 4, 3), + (3, 4, 3), + (2, 4, 1), + (1, 4, 2), + (2, 4, 3), + (3, 4, 2), + (2, 4, 2), + (1, 1, 4), + (3, 1, 4), + (3, 3, 4), + (1, 3, 4), + (2, 1, 4), + (3, 2, 4), + (2, 3, 4), + (1, 2, 4), + (2, 2, 4), + (1, 1, 1), + (3, 1, 1), + (3, 3, 1), + (1, 3, 1), + (1, 1, 3), + (3, 1, 3), + (3, 3, 3), + (1, 3, 3), + (2, 1, 1), + (1, 2, 1), + (1, 1, 2), + (3, 2, 1), + (3, 1, 2), + (2, 3, 1), + (3, 3, 2), + (1, 3, 2), + (2, 1, 3), + (1, 2, 3), + (3, 2, 3), + (2, 3, 3), + (2, 2, 1), + (2, 1, 2), + (1, 2, 2), + (3, 2, 2), + (2, 3, 2), + (2, 2, 3), + (2, 2, 2), + ], + }, + 5: { + "element_name": "MSH_HEX_216", + "element_type": 94, + "node_tuples": [ + (0, 0, 0), + (5, 0, 0), + (5, 5, 0), + (0, 5, 0), + (0, 0, 5), + (5, 0, 5), + (5, 5, 5), + (0, 5, 5), + (1, 0, 0), + (2, 0, 0), + (3, 0, 0), + (4, 0, 0), + (0, 1, 0), + (0, 2, 0), + (0, 3, 0), + (0, 4, 0), + (0, 0, 1), + (0, 0, 2), + (0, 0, 3), + (0, 0, 4), + (5, 1, 0), + (5, 2, 0), + (5, 3, 0), + (5, 4, 0), + (5, 0, 1), + (5, 0, 2), + (5, 0, 3), + (5, 0, 4), + (4, 5, 0), + (3, 5, 0), + (2, 5, 0), + (1, 5, 0), + (5, 5, 1), + (5, 5, 2), + (5, 5, 3), + (5, 5, 4), + (0, 5, 1), + (0, 5, 2), + (0, 5, 3), + (0, 5, 4), + (1, 0, 5), + (2, 0, 5), + (3, 0, 5), + (4, 0, 5), + (0, 1, 5), + (0, 2, 5), + (0, 3, 5), + (0, 4, 5), + (5, 1, 5), + (5, 2, 5), + (5, 3, 5), + (5, 4, 5), + (4, 5, 5), + (3, 5, 5), + (2, 5, 5), + (1, 5, 5), + (1, 1, 0), + (1, 4, 0), + (4, 4, 0), + (4, 1, 0), + (1, 2, 0), + (1, 3, 0), + (2, 4, 0), + (3, 4, 0), + (4, 3, 0), + (4, 2, 0), + (3, 1, 0), + (2, 1, 0), + (2, 2, 0), + (2, 3, 0), + (3, 3, 0), + (3, 2, 0), + (1, 0, 1), + (4, 0, 1), + (4, 0, 4), + (1, 0, 4), + (2, 0, 1), + (3, 0, 1), + (4, 0, 2), + (4, 0, 3), + (3, 0, 4), + (2, 0, 4), + (1, 0, 3), + (1, 0, 2), + (2, 0, 2), + (3, 0, 2), + (3, 0, 3), + (2, 0, 3), + (0, 1, 1), + (0, 1, 4), + (0, 4, 4), + (0, 4, 1), + (0, 1, 2), + (0, 1, 3), + (0, 2, 4), + (0, 3, 4), + (0, 4, 3), + (0, 4, 2), + (0, 3, 1), + (0, 2, 1), + (0, 2, 2), + (0, 2, 3), + (0, 3, 3), + (0, 3, 2), + (5, 1, 1), + (5, 4, 1), + (5, 4, 4), + (5, 1, 4), + (5, 2, 1), + (5, 3, 1), + (5, 4, 2), + (5, 4, 3), + (5, 3, 4), + (5, 2, 4), + (5, 1, 3), + (5, 1, 2), + (5, 2, 2), + (5, 3, 2), + (5, 3, 3), + (5, 2, 3), + (4, 5, 1), + (1, 5, 1), + (1, 5, 4), + (4, 5, 4), + (3, 5, 1), + (2, 5, 1), + (1, 5, 2), + (1, 5, 3), + (2, 5, 4), + (3, 5, 4), + (4, 5, 3), + (4, 5, 2), + (3, 5, 2), + (2, 5, 2), + (2, 5, 3), + (3, 5, 3), + (1, 1, 5), + (4, 1, 5), + (4, 4, 5), + (1, 4, 5), + (2, 1, 5), + (3, 1, 5), + (4, 2, 5), + (4, 3, 5), + (3, 4, 5), + (2, 4, 5), + (1, 3, 5), + (1, 2, 5), + (2, 2, 5), + (3, 2, 5), + (3, 3, 5), + (2, 3, 5), + (1, 1, 1), + (4, 1, 1), + (4, 4, 1), + (1, 4, 1), + (1, 1, 4), + (4, 1, 4), + (4, 4, 4), + (1, 4, 4), + (2, 1, 1), + (3, 1, 1), + (1, 2, 1), + (1, 3, 1), + (1, 1, 2), + (1, 1, 3), + (4, 2, 1), + (4, 3, 1), + (4, 1, 2), + (4, 1, 3), + (3, 4, 1), + (2, 4, 1), + (4, 4, 2), + (4, 4, 3), + (1, 4, 2), + (1, 4, 3), + (2, 1, 4), + (3, 1, 4), + (1, 2, 4), + (1, 3, 4), + (4, 2, 4), + (4, 3, 4), + (3, 4, 4), + (2, 4, 4), + (2, 2, 1), + (2, 3, 1), + (3, 3, 1), + (3, 2, 1), + (2, 1, 2), + (3, 1, 2), + (3, 1, 3), + (2, 1, 3), + (1, 2, 2), + (1, 2, 3), + (1, 3, 3), + (1, 3, 2), + (4, 2, 2), + (4, 3, 2), + (4, 3, 3), + (4, 2, 3), + (3, 4, 2), + (2, 4, 2), + (2, 4, 3), + (3, 4, 3), + (2, 2, 4), + (3, 2, 4), + (3, 3, 4), + (2, 3, 4), + (2, 2, 2), + (3, 2, 2), + (3, 3, 2), + (2, 3, 2), + (2, 2, 3), + (3, 2, 3), + (3, 3, 3), + (2, 3, 3), + ], + }, + 6: { + "element_name": "MSH_HEX_343", + "element_type": 95, + "node_tuples": [ + (0, 0, 0), + (6, 0, 0), + (6, 6, 0), + (0, 6, 0), + (0, 0, 6), + (6, 0, 6), + (6, 6, 6), + (0, 6, 6), + (0, 0, 0), + (2, 0, 0), + (3, 0, 0), + (4, 0, 0), + (5, 0, 0), + (0, 0, 0), + (0, 2, 0), + (0, 3, 0), + (0, 4, 0), + (0, 5, 0), + (0, 0, 0), + (0, 0, 2), + (0, 0, 3), + (0, 0, 4), + (0, 0, 5), + (6, 0, 0), + (6, 2, 0), + (6, 3, 0), + (6, 4, 0), + (6, 5, 0), + (6, 0, 0), + (6, 0, 2), + (6, 0, 3), + (6, 0, 4), + (6, 0, 5), + (5, 6, 0), + (4, 6, 0), + (3, 6, 0), + (2, 6, 0), + (0, 6, 0), + (6, 6, 0), + (6, 6, 2), + (6, 6, 3), + (6, 6, 4), + (6, 6, 5), + (0, 6, 0), + (0, 6, 2), + (0, 6, 3), + (0, 6, 4), + (0, 6, 5), + (0, 0, 6), + (2, 0, 6), + (3, 0, 6), + (4, 0, 6), + (5, 0, 6), + (0, 0, 6), + (0, 2, 6), + (0, 3, 6), + (0, 4, 6), + (0, 5, 6), + (6, 0, 6), + (6, 2, 6), + (6, 3, 6), + (6, 4, 6), + (6, 5, 6), + (5, 6, 6), + (4, 6, 6), + (3, 6, 6), + (2, 6, 6), + (0, 6, 6), + (0, 0, 0), + (0, 5, 0), + (5, 5, 0), + (5, 0, 0), + (0, 2, 0), + (0, 3, 0), + (0, 4, 0), + (2, 5, 0), + (3, 5, 0), + (4, 5, 0), + (5, 4, 0), + (5, 3, 0), + (5, 2, 0), + (4, 0, 0), + (3, 0, 0), + (2, 0, 0), + (2, 2, 0), + (2, 4, 0), + (4, 4, 0), + (4, 2, 0), + (2, 3, 0), + (3, 4, 0), + (4, 3, 0), + (3, 2, 0), + (3, 3, 0), + (0, 0, 0), + (5, 0, 0), + (5, 0, 5), + (0, 0, 5), + (2, 0, 0), + (3, 0, 0), + (4, 0, 0), + (5, 0, 2), + (5, 0, 3), + (5, 0, 4), + (4, 0, 5), + (3, 0, 5), + (2, 0, 5), + (0, 0, 4), + (0, 0, 3), + (0, 0, 2), + (2, 0, 2), + (4, 0, 2), + (4, 0, 4), + (2, 0, 4), + (3, 0, 2), + (4, 0, 3), + (3, 0, 4), + (2, 0, 3), + (3, 0, 3), + (0, 0, 0), + (0, 0, 5), + (0, 5, 5), + (0, 5, 0), + (0, 0, 2), + (0, 0, 3), + (0, 0, 4), + (0, 2, 5), + (0, 3, 5), + (0, 4, 5), + (0, 5, 4), + (0, 5, 3), + (0, 5, 2), + (0, 4, 0), + (0, 3, 0), + (0, 2, 0), + (0, 2, 2), + (0, 2, 4), + (0, 4, 4), + (0, 4, 2), + (0, 2, 3), + (0, 3, 4), + (0, 4, 3), + (0, 3, 2), + (0, 3, 3), + (6, 0, 0), + (6, 5, 0), + (6, 5, 5), + (6, 0, 5), + (6, 2, 0), + (6, 3, 0), + (6, 4, 0), + (6, 5, 2), + (6, 5, 3), + (6, 5, 4), + (6, 4, 5), + (6, 3, 5), + (6, 2, 5), + (6, 0, 4), + (6, 0, 3), + (6, 0, 2), + (6, 2, 2), + (6, 4, 2), + (6, 4, 4), + (6, 2, 4), + (6, 3, 2), + (6, 4, 3), + (6, 3, 4), + (6, 2, 3), + (6, 3, 3), + (5, 6, 0), + (0, 6, 0), + (0, 6, 5), + (5, 6, 5), + (4, 6, 0), + (3, 6, 0), + (2, 6, 0), + (0, 6, 2), + (0, 6, 3), + (0, 6, 4), + (2, 6, 5), + (3, 6, 5), + (4, 6, 5), + (5, 6, 4), + (5, 6, 3), + (5, 6, 2), + (4, 6, 2), + (2, 6, 2), + (2, 6, 4), + (4, 6, 4), + (3, 6, 2), + (2, 6, 3), + (3, 6, 4), + (4, 6, 3), + (3, 6, 3), + (0, 0, 6), + (5, 0, 6), + (5, 5, 6), + (0, 5, 6), + (2, 0, 6), + (3, 0, 6), + (4, 0, 6), + (5, 2, 6), + (5, 3, 6), + (5, 4, 6), + (4, 5, 6), + (3, 5, 6), + (2, 5, 6), + (0, 4, 6), + (0, 3, 6), + (0, 2, 6), + (2, 2, 6), + (4, 2, 6), + (4, 4, 6), + (2, 4, 6), + (3, 2, 6), + (4, 3, 6), + (3, 4, 6), + (2, 3, 6), + (3, 3, 6), + (0, 0, 0), + (5, 0, 0), + (5, 5, 0), + (0, 5, 0), + (0, 0, 5), + (5, 0, 5), + (5, 5, 5), + (0, 5, 5), + (2, 0, 0), + (3, 0, 0), + (4, 0, 0), + (0, 2, 0), + (0, 3, 0), + (0, 4, 0), + (0, 0, 2), + (0, 0, 3), + (0, 0, 4), + (5, 2, 0), + (5, 3, 0), + (5, 4, 0), + (5, 0, 2), + (5, 0, 3), + (5, 0, 4), + (4, 5, 0), + (3, 5, 0), + (2, 5, 0), + (5, 5, 2), + (5, 5, 3), + (5, 5, 4), + (0, 5, 2), + (0, 5, 3), + (0, 5, 4), + (2, 0, 5), + (3, 0, 5), + (4, 0, 5), + (0, 2, 5), + (0, 3, 5), + (0, 4, 5), + (5, 2, 5), + (5, 3, 5), + (5, 4, 5), + (4, 5, 5), + (3, 5, 5), + (2, 5, 5), + (2, 2, 0), + (2, 4, 0), + (4, 4, 0), + (4, 2, 0), + (2, 3, 0), + (3, 4, 0), + (4, 3, 0), + (3, 2, 0), + (3, 3, 0), + (2, 0, 2), + (4, 0, 2), + (4, 0, 4), + (2, 0, 4), + (3, 0, 2), + (4, 0, 3), + (3, 0, 4), + (2, 0, 3), + (3, 0, 3), + (0, 2, 2), + (0, 2, 4), + (0, 4, 4), + (0, 4, 2), + (0, 2, 3), + (0, 3, 4), + (0, 4, 3), + (0, 3, 2), + (0, 3, 3), + (5, 2, 2), + (5, 4, 2), + (5, 4, 4), + (5, 2, 4), + (5, 3, 2), + (5, 4, 3), + (5, 3, 4), + (5, 2, 3), + (5, 3, 3), + (4, 5, 2), + (2, 5, 2), + (2, 5, 4), + (4, 5, 4), + (3, 5, 2), + (2, 5, 3), + (3, 5, 4), + (4, 5, 3), + (3, 5, 3), + (2, 2, 5), + (4, 2, 5), + (4, 4, 5), + (2, 4, 5), + (3, 2, 5), + (4, 3, 5), + (3, 4, 5), + (2, 3, 5), + (3, 3, 5), + (2, 2, 2), + (4, 2, 2), + (4, 4, 2), + (2, 4, 2), + (2, 2, 4), + (4, 2, 4), + (4, 4, 4), + (2, 4, 4), + (3, 2, 2), + (2, 3, 2), + (2, 2, 3), + (4, 3, 2), + (4, 2, 3), + (3, 4, 2), + (4, 4, 3), + (2, 4, 3), + (3, 2, 4), + (2, 3, 4), + (4, 3, 4), + (3, 4, 4), + (3, 3, 2), + (3, 2, 3), + (2, 3, 3), + (4, 3, 3), + (3, 4, 3), + (3, 3, 4), + (3, 3, 3), + ], + }, + 7: { + "element_name": "MSH_HEX_512", + "element_type": 96, + "node_tuples": [ + (0, 0, 0), + (7, 0, 0), + (7, 7, 0), + (0, 7, 0), + (0, 0, 7), + (7, 0, 7), + (7, 7, 7), + (0, 7, 7), + (1, 0, 0), + (2, 0, 0), + (3, 0, 0), + (4, 0, 0), + (4, 0, 0), + (6, 0, 0), + (0, 1, 0), + (0, 2, 0), + (0, 3, 0), + (0, 4, 0), + (0, 4, 0), + (0, 6, 0), + (0, 0, 1), + (0, 0, 2), + (0, 0, 3), + (0, 0, 4), + (0, 0, 4), + (0, 0, 6), + (7, 1, 0), + (7, 2, 0), + (7, 3, 0), + (7, 4, 0), + (7, 4, 0), + (7, 6, 0), + (7, 0, 1), + (7, 0, 2), + (7, 0, 3), + (7, 0, 4), + (7, 0, 4), + (7, 0, 6), + (6, 7, 0), + (4, 7, 0), + (4, 7, 0), + (3, 7, 0), + (2, 7, 0), + (1, 7, 0), + (7, 7, 1), + (7, 7, 2), + (7, 7, 3), + (7, 7, 4), + (7, 7, 4), + (7, 7, 6), + (0, 7, 1), + (0, 7, 2), + (0, 7, 3), + (0, 7, 4), + (0, 7, 4), + (0, 7, 6), + (1, 0, 7), + (2, 0, 7), + (3, 0, 7), + (4, 0, 7), + (4, 0, 7), + (6, 0, 7), + (0, 1, 7), + (0, 2, 7), + (0, 3, 7), + (0, 4, 7), + (0, 4, 7), + (0, 6, 7), + (7, 1, 7), + (7, 2, 7), + (7, 3, 7), + (7, 4, 7), + (7, 4, 7), + (7, 6, 7), + (6, 7, 7), + (4, 7, 7), + (4, 7, 7), + (3, 7, 7), + (2, 7, 7), + (1, 7, 7), + (1, 1, 0), + (1, 6, 0), + (6, 6, 0), + (6, 1, 0), + (1, 2, 0), + (1, 3, 0), + (1, 4, 0), + (1, 4, 0), + (2, 6, 0), + (3, 6, 0), + (4, 6, 0), + (4, 6, 0), + (6, 4, 0), + (6, 4, 0), + (6, 3, 0), + (6, 2, 0), + (4, 1, 0), + (4, 1, 0), + (3, 1, 0), + (2, 1, 0), + (2, 2, 0), + (2, 4, 0), + (4, 4, 0), + (4, 2, 0), + (2, 3, 0), + (2, 4, 0), + (3, 4, 0), + (4, 4, 0), + (4, 4, 0), + (4, 3, 0), + (4, 2, 0), + (3, 2, 0), + (3, 3, 0), + (3, 4, 0), + (4, 4, 0), + (4, 3, 0), + (1, 0, 1), + (6, 0, 1), + (6, 0, 6), + (1, 0, 6), + (2, 0, 1), + (3, 0, 1), + (4, 0, 1), + (4, 0, 1), + (6, 0, 2), + (6, 0, 3), + (6, 0, 4), + (6, 0, 4), + (4, 0, 6), + (4, 0, 6), + (3, 0, 6), + (2, 0, 6), + (1, 0, 4), + (1, 0, 4), + (1, 0, 3), + (1, 0, 2), + (2, 0, 2), + (4, 0, 2), + (4, 0, 4), + (2, 0, 4), + (3, 0, 2), + (4, 0, 2), + (4, 0, 3), + (4, 0, 4), + (4, 0, 4), + (3, 0, 4), + (2, 0, 4), + (2, 0, 3), + (3, 0, 3), + (4, 0, 3), + (4, 0, 4), + (3, 0, 4), + (0, 1, 1), + (0, 1, 6), + (0, 6, 6), + (0, 6, 1), + (0, 1, 2), + (0, 1, 3), + (0, 1, 4), + (0, 1, 4), + (0, 2, 6), + (0, 3, 6), + (0, 4, 6), + (0, 4, 6), + (0, 6, 4), + (0, 6, 4), + (0, 6, 3), + (0, 6, 2), + (0, 4, 1), + (0, 4, 1), + (0, 3, 1), + (0, 2, 1), + (0, 2, 2), + (0, 2, 4), + (0, 4, 4), + (0, 4, 2), + (0, 2, 3), + (0, 2, 4), + (0, 3, 4), + (0, 4, 4), + (0, 4, 4), + (0, 4, 3), + (0, 4, 2), + (0, 3, 2), + (0, 3, 3), + (0, 3, 4), + (0, 4, 4), + (0, 4, 3), + (7, 1, 1), + (7, 6, 1), + (7, 6, 6), + (7, 1, 6), + (7, 2, 1), + (7, 3, 1), + (7, 4, 1), + (7, 4, 1), + (7, 6, 2), + (7, 6, 3), + (7, 6, 4), + (7, 6, 4), + (7, 4, 6), + (7, 4, 6), + (7, 3, 6), + (7, 2, 6), + (7, 1, 4), + (7, 1, 4), + (7, 1, 3), + (7, 1, 2), + (7, 2, 2), + (7, 4, 2), + (7, 4, 4), + (7, 2, 4), + (7, 3, 2), + (7, 4, 2), + (7, 4, 3), + (7, 4, 4), + (7, 4, 4), + (7, 3, 4), + (7, 2, 4), + (7, 2, 3), + (7, 3, 3), + (7, 4, 3), + (7, 4, 4), + (7, 3, 4), + (6, 7, 1), + (1, 7, 1), + (1, 7, 6), + (6, 7, 6), + (4, 7, 1), + (4, 7, 1), + (3, 7, 1), + (2, 7, 1), + (1, 7, 2), + (1, 7, 3), + (1, 7, 4), + (1, 7, 4), + (2, 7, 6), + (3, 7, 6), + (4, 7, 6), + (4, 7, 6), + (6, 7, 4), + (6, 7, 4), + (6, 7, 3), + (6, 7, 2), + (4, 7, 2), + (2, 7, 2), + (2, 7, 4), + (4, 7, 4), + (4, 7, 2), + (3, 7, 2), + (2, 7, 3), + (2, 7, 4), + (3, 7, 4), + (4, 7, 4), + (4, 7, 4), + (4, 7, 3), + (4, 7, 3), + (3, 7, 3), + (3, 7, 4), + (4, 7, 4), + (1, 1, 7), + (6, 1, 7), + (6, 6, 7), + (1, 6, 7), + (2, 1, 7), + (3, 1, 7), + (4, 1, 7), + (4, 1, 7), + (6, 2, 7), + (6, 3, 7), + (6, 4, 7), + (6, 4, 7), + (4, 6, 7), + (4, 6, 7), + (3, 6, 7), + (2, 6, 7), + (1, 4, 7), + (1, 4, 7), + (1, 3, 7), + (1, 2, 7), + (2, 2, 7), + (4, 2, 7), + (4, 4, 7), + (2, 4, 7), + (3, 2, 7), + (4, 2, 7), + (4, 3, 7), + (4, 4, 7), + (4, 4, 7), + (3, 4, 7), + (2, 4, 7), + (2, 3, 7), + (3, 3, 7), + (4, 3, 7), + (4, 4, 7), + (3, 4, 7), + (1, 1, 1), + (6, 1, 1), + (6, 6, 1), + (1, 6, 1), + (1, 1, 6), + (6, 1, 6), + (6, 6, 6), + (1, 6, 6), + (2, 1, 1), + (3, 1, 1), + (4, 1, 1), + (4, 1, 1), + (1, 2, 1), + (1, 3, 1), + (1, 4, 1), + (1, 4, 1), + (1, 1, 2), + (1, 1, 3), + (1, 1, 4), + (1, 1, 4), + (6, 2, 1), + (6, 3, 1), + (6, 4, 1), + (6, 4, 1), + (6, 1, 2), + (6, 1, 3), + (6, 1, 4), + (6, 1, 4), + (4, 6, 1), + (4, 6, 1), + (3, 6, 1), + (2, 6, 1), + (6, 6, 2), + (6, 6, 3), + (6, 6, 4), + (6, 6, 4), + (1, 6, 2), + (1, 6, 3), + (1, 6, 4), + (1, 6, 4), + (2, 1, 6), + (3, 1, 6), + (4, 1, 6), + (4, 1, 6), + (1, 2, 6), + (1, 3, 6), + (1, 4, 6), + (1, 4, 6), + (6, 2, 6), + (6, 3, 6), + (6, 4, 6), + (6, 4, 6), + (4, 6, 6), + (4, 6, 6), + (3, 6, 6), + (2, 6, 6), + (2, 2, 1), + (2, 4, 1), + (4, 4, 1), + (4, 2, 1), + (2, 3, 1), + (2, 4, 1), + (3, 4, 1), + (4, 4, 1), + (4, 4, 1), + (4, 3, 1), + (4, 2, 1), + (3, 2, 1), + (3, 3, 1), + (3, 4, 1), + (4, 4, 1), + (4, 3, 1), + (2, 1, 2), + (4, 1, 2), + (4, 1, 4), + (2, 1, 4), + (3, 1, 2), + (4, 1, 2), + (4, 1, 3), + (4, 1, 4), + (4, 1, 4), + (3, 1, 4), + (2, 1, 4), + (2, 1, 3), + (3, 1, 3), + (4, 1, 3), + (4, 1, 4), + (3, 1, 4), + (1, 2, 2), + (1, 2, 4), + (1, 4, 4), + (1, 4, 2), + (1, 2, 3), + (1, 2, 4), + (1, 3, 4), + (1, 4, 4), + (1, 4, 4), + (1, 4, 3), + (1, 4, 2), + (1, 3, 2), + (1, 3, 3), + (1, 3, 4), + (1, 4, 4), + (1, 4, 3), + (6, 2, 2), + (6, 4, 2), + (6, 4, 4), + (6, 2, 4), + (6, 3, 2), + (6, 4, 2), + (6, 4, 3), + (6, 4, 4), + (6, 4, 4), + (6, 3, 4), + (6, 2, 4), + (6, 2, 3), + (6, 3, 3), + (6, 4, 3), + (6, 4, 4), + (6, 3, 4), + (4, 6, 2), + (2, 6, 2), + (2, 6, 4), + (4, 6, 4), + (4, 6, 2), + (3, 6, 2), + (2, 6, 3), + (2, 6, 4), + (3, 6, 4), + (4, 6, 4), + (4, 6, 4), + (4, 6, 3), + (4, 6, 3), + (3, 6, 3), + (3, 6, 4), + (4, 6, 4), + (2, 2, 6), + (4, 2, 6), + (4, 4, 6), + (2, 4, 6), + (3, 2, 6), + (4, 2, 6), + (4, 3, 6), + (4, 4, 6), + (4, 4, 6), + (3, 4, 6), + (2, 4, 6), + (2, 3, 6), + (3, 3, 6), + (4, 3, 6), + (4, 4, 6), + (3, 4, 6), + (2, 2, 2), + (4, 2, 2), + (4, 4, 2), + (2, 4, 2), + (2, 2, 4), + (4, 2, 4), + (4, 4, 4), + (2, 4, 4), + (3, 2, 2), + (4, 2, 2), + (2, 3, 2), + (2, 4, 2), + (2, 2, 3), + (2, 2, 4), + (4, 3, 2), + (4, 4, 2), + (4, 2, 3), + (4, 2, 4), + (4, 4, 2), + (3, 4, 2), + (4, 4, 3), + (4, 4, 4), + (2, 4, 3), + (2, 4, 4), + (3, 2, 4), + (4, 2, 4), + (2, 3, 4), + (2, 4, 4), + (4, 3, 4), + (4, 4, 4), + (4, 4, 4), + (3, 4, 4), + (3, 3, 2), + (3, 4, 2), + (4, 4, 2), + (4, 3, 2), + (3, 2, 3), + (4, 2, 3), + (4, 2, 4), + (3, 2, 4), + (2, 3, 3), + (2, 3, 4), + (2, 4, 4), + (2, 4, 3), + (4, 3, 3), + (4, 4, 3), + (4, 4, 4), + (4, 3, 4), + (4, 4, 3), + (3, 4, 3), + (3, 4, 4), + (4, 4, 4), + (3, 3, 4), + (4, 3, 4), + (4, 4, 4), + (3, 4, 4), + (3, 3, 3), + (4, 3, 3), + (4, 4, 3), + (3, 4, 3), + (3, 3, 4), + (4, 3, 4), + (4, 4, 4), + (3, 4, 4), + ], + }, + 8: { + "element_name": "MSH_HEX_729", + "element_type": 97, + "node_tuples": [ + (0, 0, 0), + (8, 0, 0), + (8, 8, 0), + (0, 8, 0), + (0, 0, 8), + (8, 0, 8), + (8, 8, 8), + (0, 8, 8), + (1, 0, 0), + (2, 0, 0), + (3, 0, 0), + (4, 0, 0), + (5, 0, 0), + (6, 0, 0), + (7, 0, 0), + (0, 1, 0), + (0, 2, 0), + (0, 3, 0), + (0, 4, 0), + (0, 5, 0), + (0, 6, 0), + (0, 7, 0), + (0, 0, 1), + (0, 0, 2), + (0, 0, 3), + (0, 0, 4), + (0, 0, 5), + (0, 0, 6), + (0, 0, 7), + (8, 1, 0), + (8, 2, 0), + (8, 3, 0), + (8, 4, 0), + (8, 5, 0), + (8, 6, 0), + (8, 7, 0), + (8, 0, 1), + (8, 0, 2), + (8, 0, 3), + (8, 0, 4), + (8, 0, 5), + (8, 0, 6), + (8, 0, 7), + (7, 8, 0), + (6, 8, 0), + (5, 8, 0), + (4, 8, 0), + (3, 8, 0), + (2, 8, 0), + (1, 8, 0), + (8, 8, 1), + (8, 8, 2), + (8, 8, 3), + (8, 8, 4), + (8, 8, 5), + (8, 8, 6), + (8, 8, 7), + (0, 8, 1), + (0, 8, 2), + (0, 8, 3), + (0, 8, 4), + (0, 8, 5), + (0, 8, 6), + (0, 8, 7), + (1, 0, 8), + (2, 0, 8), + (3, 0, 8), + (4, 0, 8), + (5, 0, 8), + (6, 0, 8), + (7, 0, 8), + (0, 1, 8), + (0, 2, 8), + (0, 3, 8), + (0, 4, 8), + (0, 5, 8), + (0, 6, 8), + (0, 7, 8), + (8, 1, 8), + (8, 2, 8), + (8, 3, 8), + (8, 4, 8), + (8, 5, 8), + (8, 6, 8), + (8, 7, 8), + (7, 8, 8), + (6, 8, 8), + (5, 8, 8), + (4, 8, 8), + (3, 8, 8), + (2, 8, 8), + (1, 8, 8), + (1, 1, 0), + (1, 7, 0), + (7, 7, 0), + (7, 1, 0), + (1, 2, 0), + (1, 3, 0), + (1, 4, 0), + (1, 5, 0), + (1, 6, 0), + (2, 7, 0), + (3, 7, 0), + (4, 7, 0), + (5, 7, 0), + (6, 7, 0), + (7, 6, 0), + (7, 5, 0), + (7, 4, 0), + (7, 3, 0), + (7, 2, 0), + (6, 1, 0), + (5, 1, 0), + (4, 1, 0), + (3, 1, 0), + (2, 1, 0), + (2, 2, 0), + (2, 6, 0), + (6, 6, 0), + (6, 2, 0), + (2, 3, 0), + (2, 4, 0), + (2, 5, 0), + (3, 6, 0), + (4, 6, 0), + (5, 6, 0), + (6, 5, 0), + (6, 4, 0), + (6, 3, 0), + (5, 2, 0), + (4, 2, 0), + (3, 2, 0), + (3, 3, 0), + (3, 5, 0), + (5, 5, 0), + (5, 3, 0), + (3, 4, 0), + (4, 5, 0), + (5, 4, 0), + (4, 3, 0), + (4, 4, 0), + (1, 0, 1), + (7, 0, 1), + (7, 0, 7), + (1, 0, 7), + (2, 0, 1), + (3, 0, 1), + (4, 0, 1), + (5, 0, 1), + (6, 0, 1), + (7, 0, 2), + (7, 0, 3), + (7, 0, 4), + (7, 0, 5), + (7, 0, 6), + (6, 0, 7), + (5, 0, 7), + (4, 0, 7), + (3, 0, 7), + (2, 0, 7), + (1, 0, 6), + (1, 0, 5), + (1, 0, 4), + (1, 0, 3), + (1, 0, 2), + (2, 0, 2), + (6, 0, 2), + (6, 0, 6), + (2, 0, 6), + (3, 0, 2), + (4, 0, 2), + (5, 0, 2), + (6, 0, 3), + (6, 0, 4), + (6, 0, 5), + (5, 0, 6), + (4, 0, 6), + (3, 0, 6), + (2, 0, 5), + (2, 0, 4), + (2, 0, 3), + (3, 0, 3), + (5, 0, 3), + (5, 0, 5), + (3, 0, 5), + (4, 0, 3), + (5, 0, 4), + (4, 0, 5), + (3, 0, 4), + (4, 0, 4), + (0, 1, 1), + (0, 1, 7), + (0, 7, 7), + (0, 7, 1), + (0, 1, 2), + (0, 1, 3), + (0, 1, 4), + (0, 1, 5), + (0, 1, 6), + (0, 2, 7), + (0, 3, 7), + (0, 4, 7), + (0, 5, 7), + (0, 6, 7), + (0, 7, 6), + (0, 7, 5), + (0, 7, 4), + (0, 7, 3), + (0, 7, 2), + (0, 6, 1), + (0, 5, 1), + (0, 4, 1), + (0, 3, 1), + (0, 2, 1), + (0, 2, 2), + (0, 2, 6), + (0, 6, 6), + (0, 6, 2), + (0, 2, 3), + (0, 2, 4), + (0, 2, 5), + (0, 3, 6), + (0, 4, 6), + (0, 5, 6), + (0, 6, 5), + (0, 6, 4), + (0, 6, 3), + (0, 5, 2), + (0, 4, 2), + (0, 3, 2), + (0, 3, 3), + (0, 3, 5), + (0, 5, 5), + (0, 5, 3), + (0, 3, 4), + (0, 4, 5), + (0, 5, 4), + (0, 4, 3), + (0, 4, 4), + (8, 1, 1), + (8, 7, 1), + (8, 7, 7), + (8, 1, 7), + (8, 2, 1), + (8, 3, 1), + (8, 4, 1), + (8, 5, 1), + (8, 6, 1), + (8, 7, 2), + (8, 7, 3), + (8, 7, 4), + (8, 7, 5), + (8, 7, 6), + (8, 6, 7), + (8, 5, 7), + (8, 4, 7), + (8, 3, 7), + (8, 2, 7), + (8, 1, 6), + (8, 1, 5), + (8, 1, 4), + (8, 1, 3), + (8, 1, 2), + (8, 2, 2), + (8, 6, 2), + (8, 6, 6), + (8, 2, 6), + (8, 3, 2), + (8, 4, 2), + (8, 5, 2), + (8, 6, 3), + (8, 6, 4), + (8, 6, 5), + (8, 5, 6), + (8, 4, 6), + (8, 3, 6), + (8, 2, 5), + (8, 2, 4), + (8, 2, 3), + (8, 3, 3), + (8, 5, 3), + (8, 5, 5), + (8, 3, 5), + (8, 4, 3), + (8, 5, 4), + (8, 4, 5), + (8, 3, 4), + (8, 4, 4), + (7, 8, 1), + (1, 8, 1), + (1, 8, 7), + (7, 8, 7), + (6, 8, 1), + (5, 8, 1), + (4, 8, 1), + (3, 8, 1), + (2, 8, 1), + (1, 8, 2), + (1, 8, 3), + (1, 8, 4), + (1, 8, 5), + (1, 8, 6), + (2, 8, 7), + (3, 8, 7), + (4, 8, 7), + (5, 8, 7), + (6, 8, 7), + (7, 8, 6), + (7, 8, 5), + (7, 8, 4), + (7, 8, 3), + (7, 8, 2), + (6, 8, 2), + (2, 8, 2), + (2, 8, 6), + (6, 8, 6), + (5, 8, 2), + (4, 8, 2), + (3, 8, 2), + (2, 8, 3), + (2, 8, 4), + (2, 8, 5), + (3, 8, 6), + (4, 8, 6), + (5, 8, 6), + (6, 8, 5), + (6, 8, 4), + (6, 8, 3), + (5, 8, 3), + (3, 8, 3), + (3, 8, 5), + (5, 8, 5), + (4, 8, 3), + (3, 8, 4), + (4, 8, 5), + (5, 8, 4), + (4, 8, 4), + (1, 1, 8), + (7, 1, 8), + (7, 7, 8), + (1, 7, 8), + (2, 1, 8), + (3, 1, 8), + (4, 1, 8), + (5, 1, 8), + (6, 1, 8), + (7, 2, 8), + (7, 3, 8), + (7, 4, 8), + (7, 5, 8), + (7, 6, 8), + (6, 7, 8), + (5, 7, 8), + (4, 7, 8), + (3, 7, 8), + (2, 7, 8), + (1, 6, 8), + (1, 5, 8), + (1, 4, 8), + (1, 3, 8), + (1, 2, 8), + (2, 2, 8), + (6, 2, 8), + (6, 6, 8), + (2, 6, 8), + (3, 2, 8), + (4, 2, 8), + (5, 2, 8), + (6, 3, 8), + (6, 4, 8), + (6, 5, 8), + (5, 6, 8), + (4, 6, 8), + (3, 6, 8), + (2, 5, 8), + (2, 4, 8), + (2, 3, 8), + (3, 3, 8), + (5, 3, 8), + (5, 5, 8), + (3, 5, 8), + (4, 3, 8), + (5, 4, 8), + (4, 5, 8), + (3, 4, 8), + (4, 4, 8), + (1, 1, 1), + (7, 1, 1), + (7, 7, 1), + (1, 7, 1), + (1, 1, 7), + (7, 1, 7), + (7, 7, 7), + (1, 7, 7), + (2, 1, 1), + (3, 1, 1), + (4, 1, 1), + (5, 1, 1), + (6, 1, 1), + (1, 2, 1), + (1, 3, 1), + (1, 4, 1), + (1, 5, 1), + (1, 6, 1), + (1, 1, 2), + (1, 1, 3), + (1, 1, 4), + (1, 1, 5), + (1, 1, 6), + (7, 2, 1), + (7, 3, 1), + (7, 4, 1), + (7, 5, 1), + (7, 6, 1), + (7, 1, 2), + (7, 1, 3), + (7, 1, 4), + (7, 1, 5), + (7, 1, 6), + (6, 7, 1), + (5, 7, 1), + (4, 7, 1), + (3, 7, 1), + (2, 7, 1), + (7, 7, 2), + (7, 7, 3), + (7, 7, 4), + (7, 7, 5), + (7, 7, 6), + (1, 7, 2), + (1, 7, 3), + (1, 7, 4), + (1, 7, 5), + (1, 7, 6), + (2, 1, 7), + (3, 1, 7), + (4, 1, 7), + (5, 1, 7), + (6, 1, 7), + (1, 2, 7), + (1, 3, 7), + (1, 4, 7), + (1, 5, 7), + (1, 6, 7), + (7, 2, 7), + (7, 3, 7), + (7, 4, 7), + (7, 5, 7), + (7, 6, 7), + (6, 7, 7), + (5, 7, 7), + (4, 7, 7), + (3, 7, 7), + (2, 7, 7), + (2, 2, 1), + (2, 6, 1), + (6, 6, 1), + (6, 2, 1), + (2, 3, 1), + (2, 4, 1), + (2, 5, 1), + (3, 6, 1), + (4, 6, 1), + (5, 6, 1), + (6, 5, 1), + (6, 4, 1), + (6, 3, 1), + (5, 2, 1), + (4, 2, 1), + (3, 2, 1), + (3, 3, 1), + (3, 5, 1), + (5, 5, 1), + (5, 3, 1), + (3, 4, 1), + (4, 5, 1), + (5, 4, 1), + (4, 3, 1), + (4, 4, 1), + (2, 1, 2), + (6, 1, 2), + (6, 1, 6), + (2, 1, 6), + (3, 1, 2), + (4, 1, 2), + (5, 1, 2), + (6, 1, 3), + (6, 1, 4), + (6, 1, 5), + (5, 1, 6), + (4, 1, 6), + (3, 1, 6), + (2, 1, 5), + (2, 1, 4), + (2, 1, 3), + (3, 1, 3), + (5, 1, 3), + (5, 1, 5), + (3, 1, 5), + (4, 1, 3), + (5, 1, 4), + (4, 1, 5), + (3, 1, 4), + (4, 1, 4), + (1, 2, 2), + (1, 2, 6), + (1, 6, 6), + (1, 6, 2), + (1, 2, 3), + (1, 2, 4), + (1, 2, 5), + (1, 3, 6), + (1, 4, 6), + (1, 5, 6), + (1, 6, 5), + (1, 6, 4), + (1, 6, 3), + (1, 5, 2), + (1, 4, 2), + (1, 3, 2), + (1, 3, 3), + (1, 3, 5), + (1, 5, 5), + (1, 5, 3), + (1, 3, 4), + (1, 4, 5), + (1, 5, 4), + (1, 4, 3), + (1, 4, 4), + (7, 2, 2), + (7, 6, 2), + (7, 6, 6), + (7, 2, 6), + (7, 3, 2), + (7, 4, 2), + (7, 5, 2), + (7, 6, 3), + (7, 6, 4), + (7, 6, 5), + (7, 5, 6), + (7, 4, 6), + (7, 3, 6), + (7, 2, 5), + (7, 2, 4), + (7, 2, 3), + (7, 3, 3), + (7, 5, 3), + (7, 5, 5), + (7, 3, 5), + (7, 4, 3), + (7, 5, 4), + (7, 4, 5), + (7, 3, 4), + (7, 4, 4), + (6, 7, 2), + (2, 7, 2), + (2, 7, 6), + (6, 7, 6), + (5, 7, 2), + (4, 7, 2), + (3, 7, 2), + (2, 7, 3), + (2, 7, 4), + (2, 7, 5), + (3, 7, 6), + (4, 7, 6), + (5, 7, 6), + (6, 7, 5), + (6, 7, 4), + (6, 7, 3), + (5, 7, 3), + (3, 7, 3), + (3, 7, 5), + (5, 7, 5), + (4, 7, 3), + (3, 7, 4), + (4, 7, 5), + (5, 7, 4), + (4, 7, 4), + (2, 2, 7), + (6, 2, 7), + (6, 6, 7), + (2, 6, 7), + (3, 2, 7), + (4, 2, 7), + (5, 2, 7), + (6, 3, 7), + (6, 4, 7), + (6, 5, 7), + (5, 6, 7), + (4, 6, 7), + (3, 6, 7), + (2, 5, 7), + (2, 4, 7), + (2, 3, 7), + (3, 3, 7), + (5, 3, 7), + (5, 5, 7), + (3, 5, 7), + (4, 3, 7), + (5, 4, 7), + (4, 5, 7), + (3, 4, 7), + (4, 4, 7), + (2, 2, 2), + (6, 2, 2), + (6, 6, 2), + (2, 6, 2), + (2, 2, 6), + (6, 2, 6), + (6, 6, 6), + (2, 6, 6), + (3, 2, 2), + (4, 2, 2), + (5, 2, 2), + (2, 3, 2), + (2, 4, 2), + (2, 5, 2), + (2, 2, 3), + (2, 2, 4), + (2, 2, 5), + (6, 3, 2), + (6, 4, 2), + (6, 5, 2), + (6, 2, 3), + (6, 2, 4), + (6, 2, 5), + (5, 6, 2), + (4, 6, 2), + (3, 6, 2), + (6, 6, 3), + (6, 6, 4), + (6, 6, 5), + (2, 6, 3), + (2, 6, 4), + (2, 6, 5), + (3, 2, 6), + (4, 2, 6), + (5, 2, 6), + (2, 3, 6), + (2, 4, 6), + (2, 5, 6), + (6, 3, 6), + (6, 4, 6), + (6, 5, 6), + (5, 6, 6), + (4, 6, 6), + (3, 6, 6), + (3, 3, 2), + (3, 5, 2), + (5, 5, 2), + (5, 3, 2), + (3, 4, 2), + (4, 5, 2), + (5, 4, 2), + (4, 3, 2), + (4, 4, 2), + (3, 2, 3), + (5, 2, 3), + (5, 2, 5), + (3, 2, 5), + (4, 2, 3), + (5, 2, 4), + (4, 2, 5), + (3, 2, 4), + (4, 2, 4), + (2, 3, 3), + (2, 3, 5), + (2, 5, 5), + (2, 5, 3), + (2, 3, 4), + (2, 4, 5), + (2, 5, 4), + (2, 4, 3), + (2, 4, 4), + (6, 3, 3), + (6, 5, 3), + (6, 5, 5), + (6, 3, 5), + (6, 4, 3), + (6, 5, 4), + (6, 4, 5), + (6, 3, 4), + (6, 4, 4), + (5, 6, 3), + (3, 6, 3), + (3, 6, 5), + (5, 6, 5), + (4, 6, 3), + (3, 6, 4), + (4, 6, 5), + (5, 6, 4), + (4, 6, 4), + (3, 3, 6), + (5, 3, 6), + (5, 5, 6), + (3, 5, 6), + (4, 3, 6), + (5, 4, 6), + (4, 5, 6), + (3, 4, 6), + (4, 4, 6), + (3, 3, 3), + (5, 3, 3), + (5, 5, 3), + (3, 5, 3), + (3, 3, 5), + (5, 3, 5), + (5, 5, 5), + (3, 5, 5), + (4, 3, 3), + (3, 4, 3), + (3, 3, 4), + (5, 4, 3), + (5, 3, 4), + (4, 5, 3), + (5, 5, 4), + (3, 5, 4), + (4, 3, 5), + (3, 4, 5), + (5, 4, 5), + (4, 5, 5), + (4, 4, 3), + (4, 3, 4), + (3, 4, 4), + (5, 4, 4), + (4, 5, 4), + (4, 4, 5), + (4, 4, 4), + ], + }, + 9: { + "element_name": "MSH_HEX_1000", + "element_type": 98, + "node_tuples": [ + (0, 0, 0), + (9, 0, 0), + (9, 9, 0), + (0, 9, 0), + (0, 0, 9), + (9, 0, 9), + (9, 9, 9), + (0, 9, 9), + (1, 0, 0), + (2, 0, 0), + (3, 0, 0), + (4, 0, 0), + (5, 0, 0), + (6, 0, 0), + (6, 0, 0), + (8, 0, 0), + (0, 1, 0), + (0, 2, 0), + (0, 3, 0), + (0, 4, 0), + (0, 5, 0), + (0, 6, 0), + (0, 6, 0), + (0, 8, 0), + (0, 0, 1), + (0, 0, 2), + (0, 0, 3), + (0, 0, 4), + (0, 0, 5), + (0, 0, 6), + (0, 0, 6), + (0, 0, 8), + (9, 1, 0), + (9, 2, 0), + (9, 3, 0), + (9, 4, 0), + (9, 5, 0), + (9, 6, 0), + (9, 6, 0), + (9, 8, 0), + (9, 0, 1), + (9, 0, 2), + (9, 0, 3), + (9, 0, 4), + (9, 0, 5), + (9, 0, 6), + (9, 0, 6), + (9, 0, 8), + (8, 9, 0), + (6, 9, 0), + (6, 9, 0), + (5, 9, 0), + (4, 9, 0), + (3, 9, 0), + (2, 9, 0), + (1, 9, 0), + (9, 9, 1), + (9, 9, 2), + (9, 9, 3), + (9, 9, 4), + (9, 9, 5), + (9, 9, 6), + (9, 9, 6), + (9, 9, 8), + (0, 9, 1), + (0, 9, 2), + (0, 9, 3), + (0, 9, 4), + (0, 9, 5), + (0, 9, 6), + (0, 9, 6), + (0, 9, 8), + (1, 0, 9), + (2, 0, 9), + (3, 0, 9), + (4, 0, 9), + (5, 0, 9), + (6, 0, 9), + (6, 0, 9), + (8, 0, 9), + (0, 1, 9), + (0, 2, 9), + (0, 3, 9), + (0, 4, 9), + (0, 5, 9), + (0, 6, 9), + (0, 6, 9), + (0, 8, 9), + (9, 1, 9), + (9, 2, 9), + (9, 3, 9), + (9, 4, 9), + (9, 5, 9), + (9, 6, 9), + (9, 6, 9), + (9, 8, 9), + (8, 9, 9), + (6, 9, 9), + (6, 9, 9), + (5, 9, 9), + (4, 9, 9), + (3, 9, 9), + (2, 9, 9), + (1, 9, 9), + (1, 1, 0), + (1, 8, 0), + (8, 8, 0), + (8, 1, 0), + (1, 2, 0), + (1, 3, 0), + (1, 4, 0), + (1, 5, 0), + (1, 6, 0), + (1, 6, 0), + (2, 8, 0), + (3, 8, 0), + (4, 8, 0), + (5, 8, 0), + (6, 8, 0), + (6, 8, 0), + (8, 6, 0), + (8, 6, 0), + (8, 5, 0), + (8, 4, 0), + (8, 3, 0), + (8, 2, 0), + (6, 1, 0), + (6, 1, 0), + (5, 1, 0), + (4, 1, 0), + (3, 1, 0), + (2, 1, 0), + (2, 2, 0), + (2, 6, 0), + (6, 6, 0), + (6, 2, 0), + (2, 3, 0), + (2, 4, 0), + (2, 5, 0), + (2, 6, 0), + (3, 6, 0), + (4, 6, 0), + (5, 6, 0), + (6, 6, 0), + (6, 6, 0), + (6, 5, 0), + (6, 4, 0), + (6, 3, 0), + (6, 2, 0), + (5, 2, 0), + (4, 2, 0), + (3, 2, 0), + (3, 3, 0), + (3, 6, 0), + (6, 6, 0), + (6, 3, 0), + (3, 4, 0), + (3, 5, 0), + (4, 6, 0), + (5, 6, 0), + (6, 5, 0), + (6, 4, 0), + (5, 3, 0), + (4, 3, 0), + (4, 4, 0), + (4, 5, 0), + (5, 5, 0), + (5, 4, 0), + (1, 0, 1), + (8, 0, 1), + (8, 0, 8), + (1, 0, 8), + (2, 0, 1), + (3, 0, 1), + (4, 0, 1), + (5, 0, 1), + (6, 0, 1), + (6, 0, 1), + (8, 0, 2), + (8, 0, 3), + (8, 0, 4), + (8, 0, 5), + (8, 0, 6), + (8, 0, 6), + (6, 0, 8), + (6, 0, 8), + (5, 0, 8), + (4, 0, 8), + (3, 0, 8), + (2, 0, 8), + (1, 0, 6), + (1, 0, 6), + (1, 0, 5), + (1, 0, 4), + (1, 0, 3), + (1, 0, 2), + (2, 0, 2), + (6, 0, 2), + (6, 0, 6), + (2, 0, 6), + (3, 0, 2), + (4, 0, 2), + (5, 0, 2), + (6, 0, 2), + (6, 0, 3), + (6, 0, 4), + (6, 0, 5), + (6, 0, 6), + (6, 0, 6), + (5, 0, 6), + (4, 0, 6), + (3, 0, 6), + (2, 0, 6), + (2, 0, 5), + (2, 0, 4), + (2, 0, 3), + (3, 0, 3), + (6, 0, 3), + (6, 0, 6), + (3, 0, 6), + (4, 0, 3), + (5, 0, 3), + (6, 0, 4), + (6, 0, 5), + (5, 0, 6), + (4, 0, 6), + (3, 0, 5), + (3, 0, 4), + (4, 0, 4), + (5, 0, 4), + (5, 0, 5), + (4, 0, 5), + (0, 1, 1), + (0, 1, 8), + (0, 8, 8), + (0, 8, 1), + (0, 1, 2), + (0, 1, 3), + (0, 1, 4), + (0, 1, 5), + (0, 1, 6), + (0, 1, 6), + (0, 2, 8), + (0, 3, 8), + (0, 4, 8), + (0, 5, 8), + (0, 6, 8), + (0, 6, 8), + (0, 8, 6), + (0, 8, 6), + (0, 8, 5), + (0, 8, 4), + (0, 8, 3), + (0, 8, 2), + (0, 6, 1), + (0, 6, 1), + (0, 5, 1), + (0, 4, 1), + (0, 3, 1), + (0, 2, 1), + (0, 2, 2), + (0, 2, 6), + (0, 6, 6), + (0, 6, 2), + (0, 2, 3), + (0, 2, 4), + (0, 2, 5), + (0, 2, 6), + (0, 3, 6), + (0, 4, 6), + (0, 5, 6), + (0, 6, 6), + (0, 6, 6), + (0, 6, 5), + (0, 6, 4), + (0, 6, 3), + (0, 6, 2), + (0, 5, 2), + (0, 4, 2), + (0, 3, 2), + (0, 3, 3), + (0, 3, 6), + (0, 6, 6), + (0, 6, 3), + (0, 3, 4), + (0, 3, 5), + (0, 4, 6), + (0, 5, 6), + (0, 6, 5), + (0, 6, 4), + (0, 5, 3), + (0, 4, 3), + (0, 4, 4), + (0, 4, 5), + (0, 5, 5), + (0, 5, 4), + (9, 1, 1), + (9, 8, 1), + (9, 8, 8), + (9, 1, 8), + (9, 2, 1), + (9, 3, 1), + (9, 4, 1), + (9, 5, 1), + (9, 6, 1), + (9, 6, 1), + (9, 8, 2), + (9, 8, 3), + (9, 8, 4), + (9, 8, 5), + (9, 8, 6), + (9, 8, 6), + (9, 6, 8), + (9, 6, 8), + (9, 5, 8), + (9, 4, 8), + (9, 3, 8), + (9, 2, 8), + (9, 1, 6), + (9, 1, 6), + (9, 1, 5), + (9, 1, 4), + (9, 1, 3), + (9, 1, 2), + (9, 2, 2), + (9, 6, 2), + (9, 6, 6), + (9, 2, 6), + (9, 3, 2), + (9, 4, 2), + (9, 5, 2), + (9, 6, 2), + (9, 6, 3), + (9, 6, 4), + (9, 6, 5), + (9, 6, 6), + (9, 6, 6), + (9, 5, 6), + (9, 4, 6), + (9, 3, 6), + (9, 2, 6), + (9, 2, 5), + (9, 2, 4), + (9, 2, 3), + (9, 3, 3), + (9, 6, 3), + (9, 6, 6), + (9, 3, 6), + (9, 4, 3), + (9, 5, 3), + (9, 6, 4), + (9, 6, 5), + (9, 5, 6), + (9, 4, 6), + (9, 3, 5), + (9, 3, 4), + (9, 4, 4), + (9, 5, 4), + (9, 5, 5), + (9, 4, 5), + (8, 9, 1), + (1, 9, 1), + (1, 9, 8), + (8, 9, 8), + (6, 9, 1), + (6, 9, 1), + (5, 9, 1), + (4, 9, 1), + (3, 9, 1), + (2, 9, 1), + (1, 9, 2), + (1, 9, 3), + (1, 9, 4), + (1, 9, 5), + (1, 9, 6), + (1, 9, 6), + (2, 9, 8), + (3, 9, 8), + (4, 9, 8), + (5, 9, 8), + (6, 9, 8), + (6, 9, 8), + (8, 9, 6), + (8, 9, 6), + (8, 9, 5), + (8, 9, 4), + (8, 9, 3), + (8, 9, 2), + (6, 9, 2), + (2, 9, 2), + (2, 9, 6), + (6, 9, 6), + (6, 9, 2), + (5, 9, 2), + (4, 9, 2), + (3, 9, 2), + (2, 9, 3), + (2, 9, 4), + (2, 9, 5), + (2, 9, 6), + (3, 9, 6), + (4, 9, 6), + (5, 9, 6), + (6, 9, 6), + (6, 9, 6), + (6, 9, 5), + (6, 9, 4), + (6, 9, 3), + (6, 9, 3), + (3, 9, 3), + (3, 9, 6), + (6, 9, 6), + (5, 9, 3), + (4, 9, 3), + (3, 9, 4), + (3, 9, 5), + (4, 9, 6), + (5, 9, 6), + (6, 9, 5), + (6, 9, 4), + (5, 9, 4), + (4, 9, 4), + (4, 9, 5), + (5, 9, 5), + (1, 1, 9), + (8, 1, 9), + (8, 8, 9), + (1, 8, 9), + (2, 1, 9), + (3, 1, 9), + (4, 1, 9), + (5, 1, 9), + (6, 1, 9), + (6, 1, 9), + (8, 2, 9), + (8, 3, 9), + (8, 4, 9), + (8, 5, 9), + (8, 6, 9), + (8, 6, 9), + (6, 8, 9), + (6, 8, 9), + (5, 8, 9), + (4, 8, 9), + (3, 8, 9), + (2, 8, 9), + (1, 6, 9), + (1, 6, 9), + (1, 5, 9), + (1, 4, 9), + (1, 3, 9), + (1, 2, 9), + (2, 2, 9), + (6, 2, 9), + (6, 6, 9), + (2, 6, 9), + (3, 2, 9), + (4, 2, 9), + (5, 2, 9), + (6, 2, 9), + (6, 3, 9), + (6, 4, 9), + (6, 5, 9), + (6, 6, 9), + (6, 6, 9), + (5, 6, 9), + (4, 6, 9), + (3, 6, 9), + (2, 6, 9), + (2, 5, 9), + (2, 4, 9), + (2, 3, 9), + (3, 3, 9), + (6, 3, 9), + (6, 6, 9), + (3, 6, 9), + (4, 3, 9), + (5, 3, 9), + (6, 4, 9), + (6, 5, 9), + (5, 6, 9), + (4, 6, 9), + (3, 5, 9), + (3, 4, 9), + (4, 4, 9), + (5, 4, 9), + (5, 5, 9), + (4, 5, 9), + (1, 1, 1), + (8, 1, 1), + (8, 8, 1), + (1, 8, 1), + (1, 1, 8), + (8, 1, 8), + (8, 8, 8), + (1, 8, 8), + (2, 1, 1), + (3, 1, 1), + (4, 1, 1), + (5, 1, 1), + (6, 1, 1), + (6, 1, 1), + (1, 2, 1), + (1, 3, 1), + (1, 4, 1), + (1, 5, 1), + (1, 6, 1), + (1, 6, 1), + (1, 1, 2), + (1, 1, 3), + (1, 1, 4), + (1, 1, 5), + (1, 1, 6), + (1, 1, 6), + (8, 2, 1), + (8, 3, 1), + (8, 4, 1), + (8, 5, 1), + (8, 6, 1), + (8, 6, 1), + (8, 1, 2), + (8, 1, 3), + (8, 1, 4), + (8, 1, 5), + (8, 1, 6), + (8, 1, 6), + (6, 8, 1), + (6, 8, 1), + (5, 8, 1), + (4, 8, 1), + (3, 8, 1), + (2, 8, 1), + (8, 8, 2), + (8, 8, 3), + (8, 8, 4), + (8, 8, 5), + (8, 8, 6), + (8, 8, 6), + (1, 8, 2), + (1, 8, 3), + (1, 8, 4), + (1, 8, 5), + (1, 8, 6), + (1, 8, 6), + (2, 1, 8), + (3, 1, 8), + (4, 1, 8), + (5, 1, 8), + (6, 1, 8), + (6, 1, 8), + (1, 2, 8), + (1, 3, 8), + (1, 4, 8), + (1, 5, 8), + (1, 6, 8), + (1, 6, 8), + (8, 2, 8), + (8, 3, 8), + (8, 4, 8), + (8, 5, 8), + (8, 6, 8), + (8, 6, 8), + (6, 8, 8), + (6, 8, 8), + (5, 8, 8), + (4, 8, 8), + (3, 8, 8), + (2, 8, 8), + (2, 2, 1), + (2, 6, 1), + (6, 6, 1), + (6, 2, 1), + (2, 3, 1), + (2, 4, 1), + (2, 5, 1), + (2, 6, 1), + (3, 6, 1), + (4, 6, 1), + (5, 6, 1), + (6, 6, 1), + (6, 6, 1), + (6, 5, 1), + (6, 4, 1), + (6, 3, 1), + (6, 2, 1), + (5, 2, 1), + (4, 2, 1), + (3, 2, 1), + (3, 3, 1), + (3, 6, 1), + (6, 6, 1), + (6, 3, 1), + (3, 4, 1), + (3, 5, 1), + (4, 6, 1), + (5, 6, 1), + (6, 5, 1), + (6, 4, 1), + (5, 3, 1), + (4, 3, 1), + (4, 4, 1), + (4, 5, 1), + (5, 5, 1), + (5, 4, 1), + (2, 1, 2), + (6, 1, 2), + (6, 1, 6), + (2, 1, 6), + (3, 1, 2), + (4, 1, 2), + (5, 1, 2), + (6, 1, 2), + (6, 1, 3), + (6, 1, 4), + (6, 1, 5), + (6, 1, 6), + (6, 1, 6), + (5, 1, 6), + (4, 1, 6), + (3, 1, 6), + (2, 1, 6), + (2, 1, 5), + (2, 1, 4), + (2, 1, 3), + (3, 1, 3), + (6, 1, 3), + (6, 1, 6), + (3, 1, 6), + (4, 1, 3), + (5, 1, 3), + (6, 1, 4), + (6, 1, 5), + (5, 1, 6), + (4, 1, 6), + (3, 1, 5), + (3, 1, 4), + (4, 1, 4), + (5, 1, 4), + (5, 1, 5), + (4, 1, 5), + (1, 2, 2), + (1, 2, 6), + (1, 6, 6), + (1, 6, 2), + (1, 2, 3), + (1, 2, 4), + (1, 2, 5), + (1, 2, 6), + (1, 3, 6), + (1, 4, 6), + (1, 5, 6), + (1, 6, 6), + (1, 6, 6), + (1, 6, 5), + (1, 6, 4), + (1, 6, 3), + (1, 6, 2), + (1, 5, 2), + (1, 4, 2), + (1, 3, 2), + (1, 3, 3), + (1, 3, 6), + (1, 6, 6), + (1, 6, 3), + (1, 3, 4), + (1, 3, 5), + (1, 4, 6), + (1, 5, 6), + (1, 6, 5), + (1, 6, 4), + (1, 5, 3), + (1, 4, 3), + (1, 4, 4), + (1, 4, 5), + (1, 5, 5), + (1, 5, 4), + (8, 2, 2), + (8, 6, 2), + (8, 6, 6), + (8, 2, 6), + (8, 3, 2), + (8, 4, 2), + (8, 5, 2), + (8, 6, 2), + (8, 6, 3), + (8, 6, 4), + (8, 6, 5), + (8, 6, 6), + (8, 6, 6), + (8, 5, 6), + (8, 4, 6), + (8, 3, 6), + (8, 2, 6), + (8, 2, 5), + (8, 2, 4), + (8, 2, 3), + (8, 3, 3), + (8, 6, 3), + (8, 6, 6), + (8, 3, 6), + (8, 4, 3), + (8, 5, 3), + (8, 6, 4), + (8, 6, 5), + (8, 5, 6), + (8, 4, 6), + (8, 3, 5), + (8, 3, 4), + (8, 4, 4), + (8, 5, 4), + (8, 5, 5), + (8, 4, 5), + (6, 8, 2), + (2, 8, 2), + (2, 8, 6), + (6, 8, 6), + (6, 8, 2), + (5, 8, 2), + (4, 8, 2), + (3, 8, 2), + (2, 8, 3), + (2, 8, 4), + (2, 8, 5), + (2, 8, 6), + (3, 8, 6), + (4, 8, 6), + (5, 8, 6), + (6, 8, 6), + (6, 8, 6), + (6, 8, 5), + (6, 8, 4), + (6, 8, 3), + (6, 8, 3), + (3, 8, 3), + (3, 8, 6), + (6, 8, 6), + (5, 8, 3), + (4, 8, 3), + (3, 8, 4), + (3, 8, 5), + (4, 8, 6), + (5, 8, 6), + (6, 8, 5), + (6, 8, 4), + (5, 8, 4), + (4, 8, 4), + (4, 8, 5), + (5, 8, 5), + (2, 2, 8), + (6, 2, 8), + (6, 6, 8), + (2, 6, 8), + (3, 2, 8), + (4, 2, 8), + (5, 2, 8), + (6, 2, 8), + (6, 3, 8), + (6, 4, 8), + (6, 5, 8), + (6, 6, 8), + (6, 6, 8), + (5, 6, 8), + (4, 6, 8), + (3, 6, 8), + (2, 6, 8), + (2, 5, 8), + (2, 4, 8), + (2, 3, 8), + (3, 3, 8), + (6, 3, 8), + (6, 6, 8), + (3, 6, 8), + (4, 3, 8), + (5, 3, 8), + (6, 4, 8), + (6, 5, 8), + (5, 6, 8), + (4, 6, 8), + (3, 5, 8), + (3, 4, 8), + (4, 4, 8), + (5, 4, 8), + (5, 5, 8), + (4, 5, 8), + (2, 2, 2), + (6, 2, 2), + (6, 6, 2), + (2, 6, 2), + (2, 2, 6), + (6, 2, 6), + (6, 6, 6), + (2, 6, 6), + (3, 2, 2), + (4, 2, 2), + (5, 2, 2), + (6, 2, 2), + (2, 3, 2), + (2, 4, 2), + (2, 5, 2), + (2, 6, 2), + (2, 2, 3), + (2, 2, 4), + (2, 2, 5), + (2, 2, 6), + (6, 3, 2), + (6, 4, 2), + (6, 5, 2), + (6, 6, 2), + (6, 2, 3), + (6, 2, 4), + (6, 2, 5), + (6, 2, 6), + (6, 6, 2), + (5, 6, 2), + (4, 6, 2), + (3, 6, 2), + (6, 6, 3), + (6, 6, 4), + (6, 6, 5), + (6, 6, 6), + (2, 6, 3), + (2, 6, 4), + (2, 6, 5), + (2, 6, 6), + (3, 2, 6), + (4, 2, 6), + (5, 2, 6), + (6, 2, 6), + (2, 3, 6), + (2, 4, 6), + (2, 5, 6), + (2, 6, 6), + (6, 3, 6), + (6, 4, 6), + (6, 5, 6), + (6, 6, 6), + (6, 6, 6), + (5, 6, 6), + (4, 6, 6), + (3, 6, 6), + (3, 3, 2), + (3, 6, 2), + (6, 6, 2), + (6, 3, 2), + (3, 4, 2), + (3, 5, 2), + (4, 6, 2), + (5, 6, 2), + (6, 5, 2), + (6, 4, 2), + (5, 3, 2), + (4, 3, 2), + (4, 4, 2), + (4, 5, 2), + (5, 5, 2), + (5, 4, 2), + (3, 2, 3), + (6, 2, 3), + (6, 2, 6), + (3, 2, 6), + (4, 2, 3), + (5, 2, 3), + (6, 2, 4), + (6, 2, 5), + (5, 2, 6), + (4, 2, 6), + (3, 2, 5), + (3, 2, 4), + (4, 2, 4), + (5, 2, 4), + (5, 2, 5), + (4, 2, 5), + (2, 3, 3), + (2, 3, 6), + (2, 6, 6), + (2, 6, 3), + (2, 3, 4), + (2, 3, 5), + (2, 4, 6), + (2, 5, 6), + (2, 6, 5), + (2, 6, 4), + (2, 5, 3), + (2, 4, 3), + (2, 4, 4), + (2, 4, 5), + (2, 5, 5), + (2, 5, 4), + (6, 3, 3), + (6, 6, 3), + (6, 6, 6), + (6, 3, 6), + (6, 4, 3), + (6, 5, 3), + (6, 6, 4), + (6, 6, 5), + (6, 5, 6), + (6, 4, 6), + (6, 3, 5), + (6, 3, 4), + (6, 4, 4), + (6, 5, 4), + (6, 5, 5), + (6, 4, 5), + (6, 6, 3), + (3, 6, 3), + (3, 6, 6), + (6, 6, 6), + (5, 6, 3), + (4, 6, 3), + (3, 6, 4), + (3, 6, 5), + (4, 6, 6), + (5, 6, 6), + (6, 6, 5), + (6, 6, 4), + (5, 6, 4), + (4, 6, 4), + (4, 6, 5), + (5, 6, 5), + (3, 3, 6), + (6, 3, 6), + (6, 6, 6), + (3, 6, 6), + (4, 3, 6), + (5, 3, 6), + (6, 4, 6), + (6, 5, 6), + (5, 6, 6), + (4, 6, 6), + (3, 5, 6), + (3, 4, 6), + (4, 4, 6), + (5, 4, 6), + (5, 5, 6), + (4, 5, 6), + (3, 3, 3), + (6, 3, 3), + (6, 6, 3), + (3, 6, 3), + (3, 3, 6), + (6, 3, 6), + (6, 6, 6), + (3, 6, 6), + (4, 3, 3), + (5, 3, 3), + (3, 4, 3), + (3, 5, 3), + (3, 3, 4), + (3, 3, 5), + (6, 4, 3), + (6, 5, 3), + (6, 3, 4), + (6, 3, 5), + (5, 6, 3), + (4, 6, 3), + (6, 6, 4), + (6, 6, 5), + (3, 6, 4), + (3, 6, 5), + (4, 3, 6), + (5, 3, 6), + (3, 4, 6), + (3, 5, 6), + (6, 4, 6), + (6, 5, 6), + (5, 6, 6), + (4, 6, 6), + (4, 4, 3), + (4, 5, 3), + (5, 5, 3), + (5, 4, 3), + (4, 3, 4), + (5, 3, 4), + (5, 3, 5), + (4, 3, 5), + (3, 4, 4), + (3, 4, 5), + (3, 5, 5), + (3, 5, 4), + (6, 4, 4), + (6, 5, 4), + (6, 5, 5), + (6, 4, 5), + (5, 6, 4), + (4, 6, 4), + (4, 6, 5), + (5, 6, 5), + (4, 4, 6), + (5, 4, 6), + (5, 5, 6), + (4, 5, 6), + (4, 4, 4), + (5, 4, 4), + (5, 5, 4), + (4, 5, 4), + (4, 4, 5), + (5, 4, 5), + (5, 5, 5), + (4, 5, 5), + ], + }, +} diff --git a/gmsh_interop/reader.py b/gmsh_interop/reader.py index 620f07a..ddbc730 100644 --- a/gmsh_interop/reader.py +++ b/gmsh_interop/reader.py @@ -162,17 +162,28 @@ class GmshElementBase: def __init__(self, order): self.order = order + @property + def element_type(self): + raise NotImplementedError + def vertex_count(self): - raise NotImplementedError() + raise NotImplementedError def node_count(self): - raise NotImplementedError() + raise NotImplementedError def lexicographic_node_tuples(self): - raise NotImplementedError() + raise NotImplementedError + @memoize_method def get_lexicographic_gmsh_node_indices(self): - raise NotImplementedError() + gmsh_tup_to_index = { + tup: i + for i, tup in enumerate(self.gmsh_node_tuples())} + + return np.array([ + gmsh_tup_to_index[tup] for tup in self.lexicographic_node_tuples()], + dtype=np.intp) # {{{ simplices @@ -193,28 +204,20 @@ def node_count(self): @memoize_method def lexicographic_node_tuples(self): from pytools import \ - generate_nonnegative_integer_tuples_summing_to_at_most - result = list( - generate_nonnegative_integer_tuples_summing_to_at_most( - self.order, self.dimensions)) + generate_nonnegative_integer_tuples_summing_to_at_most as gnitstam + result = list(gnitstam(self.order, self.dimensions)) assert len(result) == self.node_count() return result - @memoize_method - def get_lexicographic_gmsh_node_indices(self): - gmsh_tup_to_index = { - tup: i - for i, tup in enumerate(self.gmsh_node_tuples())} - - return np.array([gmsh_tup_to_index[tup] - for tup in self.lexicographic_node_tuples()], - dtype=np.intp) - class GmshPoint(GmshSimplexElementBase): dimensions = 0 + @property + def element_type(self): + return 15 + @memoize_method def gmsh_node_tuples(self): return [()] @@ -223,6 +226,11 @@ def gmsh_node_tuples(self): class GmshIntervalElement(GmshSimplexElementBase): dimensions = 1 + @property + @memoize_method + def element_type(self): + return [1, 8, 26, 27, 28, 62, 63, 64, 65, 66][self.order - 1] + @memoize_method def gmsh_node_tuples(self): return [(0,), (self.order,), ] + [ @@ -235,6 +243,11 @@ class GmshIncompleteTriangularElement(GmshSimplexElementBase): def __init__(self, order): self.order = order + @property + @memoize_method + def element_type(self): + return {3: 20, 4: 22, 5: 24}[self.order] + @memoize_method def gmsh_node_tuples(self): result = [] @@ -248,66 +261,31 @@ def gmsh_node_tuples(self): class GmshTriangularElement(GmshSimplexElementBase): dimensions = 2 + @property + @memoize_method + def element_type(self): + from gmsh_interop.node_tuples import triangle_data + return triangle_data[self.order]["element_type"] + @memoize_method def gmsh_node_tuples(self): - return { - 1: [ - (0, 0), (1, 0), (0, 1), - ], - 2: [ - (0, 0), (2, 0), (0, 2), (1, 0), (1, 1), (0, 1), - ], - 3: [ - (0, 0), (3, 0), (0, 3), (1, 0), (2, 0), (2, 1), (1, 2), (0, 2), - (0, 1), (1, 1), - ], - 4: [ - (0, 0), (4, 0), (0, 4), (1, 0), (2, 0), (3, 0), (3, 1), (2, 2), - (1, 3), (0, 3), (0, 2), (0, 1), (1, 1), (2, 1), (1, 2), - ], - 5: [ - (0, 0), (5, 0), (0, 5), (1, 0), (2, 0), (3, 0), (4, 0), (4, 1), - (3, 2), (2, 3), (1, 4), (0, 4), (0, 3), (0, 2), (0, 1), (1, 1), - (3, 1), (1, 3), (2, 1), (2, 2), (1, 2), - ], - }[self.order] + from gmsh_interop.node_tuples import triangle_data + return triangle_data[self.order]["node_tuples"] class GmshTetrahedralElement(GmshSimplexElementBase): dimensions = 3 + @property + @memoize_method + def element_type(self): + from gmsh_interop.node_tuples import tetrahedron_data + return tetrahedron_data[self.order]["element_type"] + @memoize_method def gmsh_node_tuples(self): - # gmsh's node ordering is on crack - return { - 1: [(0, 0, 0), (1, 0, 0), (0, 1, 0), (0, 0, 1)], - 2: [ - (0, 0, 0), (2, 0, 0), (0, 2, 0), (0, 0, 2), (1, 0, 0), (1, 1, 0), - (0, 1, 0), (0, 0, 1), (0, 1, 1), (1, 0, 1)], - 3: [ - (0, 0, 0), (3, 0, 0), (0, 3, 0), (0, 0, 3), (1, 0, 0), (2, 0, 0), - (2, 1, 0), (1, 2, 0), (0, 2, 0), (0, 1, 0), (0, 0, 2), (0, 0, 1), - (0, 1, 2), (0, 2, 1), (1, 0, 2), (2, 0, 1), (1, 1, 0), (1, 0, 1), - (0, 1, 1), (1, 1, 1)], - 4: [ - (0, 0, 0), (4, 0, 0), (0, 4, 0), (0, 0, 4), (1, 0, 0), (2, 0, 0), - (3, 0, 0), (3, 1, 0), (2, 2, 0), (1, 3, 0), (0, 3, 0), (0, 2, 0), - (0, 1, 0), (0, 0, 3), (0, 0, 2), (0, 0, 1), (0, 1, 3), (0, 2, 2), - (0, 3, 1), (1, 0, 3), (2, 0, 2), (3, 0, 1), (1, 1, 0), (1, 2, 0), - (2, 1, 0), (1, 0, 1), (2, 0, 1), (1, 0, 2), (0, 1, 1), (0, 1, 2), - (0, 2, 1), (1, 1, 2), (2, 1, 1), (1, 2, 1), (1, 1, 1)], - 5: [ - (0, 0, 0), (5, 0, 0), (0, 5, 0), (0, 0, 5), (1, 0, 0), (2, 0, 0), - (3, 0, 0), (4, 0, 0), (4, 1, 0), (3, 2, 0), (2, 3, 0), (1, 4, 0), - (0, 4, 0), (0, 3, 0), (0, 2, 0), (0, 1, 0), (0, 0, 4), (0, 0, 3), - (0, 0, 2), (0, 0, 1), (0, 1, 4), (0, 2, 3), (0, 3, 2), (0, 4, 1), - (1, 0, 4), (2, 0, 3), (3, 0, 2), (4, 0, 1), (1, 1, 0), (1, 3, 0), - (3, 1, 0), (1, 2, 0), (2, 2, 0), (2, 1, 0), (1, 0, 1), (3, 0, 1), - (1, 0, 3), (2, 0, 1), (2, 0, 2), (1, 0, 2), (0, 1, 1), (0, 1, 3), - (0, 3, 1), (0, 1, 2), (0, 2, 2), (0, 2, 1), (1, 1, 3), (3, 1, 1), - (1, 3, 1), (2, 1, 2), (2, 2, 1), (1, 2, 2), (1, 1, 1), (2, 1, 1), - (1, 2, 1), (1, 1, 2)], - }[self.order] + from gmsh_interop.node_tuples import tetrahedron_data + return tetrahedron_data[self.order]["node_tuples"] # }}} @@ -329,137 +307,41 @@ def lexicographic_node_tuples(self): of the element. The tuples constituents are non-negative integers whose sum is less than or equal to the order of the element. """ - from pytools import \ - generate_nonnegative_integer_tuples_below - result = list( - generate_nonnegative_integer_tuples_below( - self.order+1, self.dimensions)) + from pytools import generate_nonnegative_integer_tuples_below as gnitb + result = list(gnitb(self.order + 1, self.dimensions)) assert len(result) == self.node_count() return result - @memoize_method - def get_lexicographic_gmsh_node_indices(self): - gmsh_tup_to_index = { - tup: i - for i, tup in enumerate(self.gmsh_node_tuples())} - - return np.array([gmsh_tup_to_index[tup] - for tup in self.lexicographic_node_tuples()], - dtype=np.intp) - class GmshQuadrilateralElement(GmshTensorProductElementBase): dimensions = 2 + @property + @memoize_method + def element_type(self): + from gmsh_interop.node_tuples import quadrangle_data + return quadrangle_data[self.order]["element_type"] + @memoize_method def gmsh_node_tuples(self): - # gmsh's node ordering is still on crack - return { - 1: [(0, 0), (0, 1), (1, 1), (1, 0), ], - 2: [ - # start index 0: vertices - (0, 0), (0, 2), (2, 2), (2, 0), - # start index 4: edges - (1, 0), (2, 1), (1, 2), (0, 1), - # start index 8: volume - (1, 1)], - 3: [ - # vertices - (0, 0), (0, 3), (3, 3), (3, 0), - # edges - (1, 0), (2, 0), - (3, 1), (3, 2), - (1, 3), (2, 3), - (0, 1), (0, 2), - # volume - (1, 1), (2, 1), - (1, 2), (2, 2), - ], - }[self.order] + from gmsh_interop.node_tuples import quadrangle_data + return quadrangle_data[self.order]["node_tuples"] class GmshHexahedralElement(GmshTensorProductElementBase): dimensions = 3 + @property + @memoize_method + def element_type(self): + from gmsh_interop.node_tuples import hexahedron_data + return hexahedron_data[self.order]["element_type"] + @memoize_method def gmsh_node_tuples(self): - # gmsh's node ordering is always on crack - - # obtained by using the files in - # contrib/extract-gmsh-node-order - # with gmsh 2.7.1 - - return { - 1: [ - (0, 0, 0), (0, 1, 0), (1, 1, 0), (1, 0, 0), - (0, 0, 1), (0, 1, 1), (1, 1, 1), (1, 0, 1), - ], - - 2: [ - (0, 0, 0), (0, 0, 2), (2, 0, 2), (2, 0, 0), - (0, 2, 0), (0, 2, 2), (2, 2, 2), (2, 2, 0), - (0, 0, 1), (1, 0, 0), (0, 1, 0), (1, 0, 2), - (0, 1, 2), (2, 0, 1), (2, 1, 2), (2, 1, 0), - (0, 2, 1), (1, 2, 0), (1, 2, 2), (2, 2, 1), - (1, 0, 1), (0, 1, 1), (1, 1, 0), (1, 1, 2), - (2, 1, 1), (1, 2, 1), (1, 1, 1), - ], - - 3: [ - (0, 3, 3), (3, 3, 3), (3, 0, 3), (0, 0, 3), - (0, 3, 0), (3, 3, 0), (3, 0, 0), (0, 0, 0), - (1, 3, 3), (2, 3, 3), (0, 2, 3), (0, 1, 3), - (0, 3, 2), (0, 3, 1), (3, 2, 3), (3, 1, 3), - (3, 3, 2), (3, 3, 1), (2, 0, 3), (1, 0, 3), - (3, 0, 2), (3, 0, 1), (0, 0, 2), (0, 0, 1), - (1, 3, 0), (2, 3, 0), (0, 2, 0), (0, 1, 0), - (3, 2, 0), (3, 1, 0), (2, 0, 0), (1, 0, 0), - (1, 2, 3), (1, 1, 3), (2, 1, 3), (2, 2, 3), - (1, 3, 2), (2, 3, 2), (2, 3, 1), (1, 3, 1), - (0, 2, 2), (0, 2, 1), (0, 1, 1), (0, 1, 2), - (3, 2, 2), (3, 1, 2), (3, 1, 1), (3, 2, 1), - (2, 0, 2), (1, 0, 2), (1, 0, 1), (2, 0, 1), - (1, 2, 0), (2, 2, 0), (2, 1, 0), (1, 1, 0), - (1, 2, 2), (2, 2, 2), (2, 1, 2), (1, 1, 2), - (1, 2, 1), (2, 2, 1), (2, 1, 1), (1, 1, 1), - ], - 4: [ - (4, 0, 0), (4, 4, 0), (0, 4, 0), (0, 0, 0), - (4, 0, 4), (4, 4, 4), (0, 4, 4), (0, 0, 4), - (4, 1, 0), (4, 2, 0), (4, 3, 0), (3, 0, 0), - (2, 0, 0), (1, 0, 0), (4, 0, 1), (4, 0, 2), - (4, 0, 3), (3, 4, 0), (2, 4, 0), (1, 4, 0), - (4, 4, 1), (4, 4, 2), (4, 4, 3), (0, 3, 0), - (0, 2, 0), (0, 1, 0), (0, 4, 1), (0, 4, 2), - (0, 4, 3), (0, 0, 1), (0, 0, 2), (0, 0, 3), - (4, 1, 4), (4, 2, 4), (4, 3, 4), (3, 0, 4), - (2, 0, 4), (1, 0, 4), (3, 4, 4), (2, 4, 4), - (1, 4, 4), (0, 3, 4), (0, 2, 4), (0, 1, 4), - (3, 1, 0), (1, 1, 0), (1, 3, 0), (3, 3, 0), - (2, 1, 0), (1, 2, 0), (2, 3, 0), (3, 2, 0), - (2, 2, 0), (4, 1, 1), (4, 3, 1), (4, 3, 3), - (4, 1, 3), (4, 2, 1), (4, 3, 2), (4, 2, 3), - (4, 1, 2), (4, 2, 2), (3, 0, 1), (3, 0, 3), - (1, 0, 3), (1, 0, 1), (3, 0, 2), (2, 0, 3), - (1, 0, 2), (2, 0, 1), (2, 0, 2), (3, 4, 1), - (1, 4, 1), (1, 4, 3), (3, 4, 3), (2, 4, 1), - (1, 4, 2), (2, 4, 3), (3, 4, 2), (2, 4, 2), - (0, 3, 1), (0, 1, 1), (0, 1, 3), (0, 3, 3), - (0, 2, 1), (0, 1, 2), (0, 2, 3), (0, 3, 2), - (0, 2, 2), (3, 1, 4), (3, 3, 4), (1, 3, 4), - (1, 1, 4), (3, 2, 4), (2, 3, 4), (1, 2, 4), - (2, 1, 4), (2, 2, 4), (3, 1, 1), (3, 3, 1), - (1, 3, 1), (1, 1, 1), (3, 1, 3), (3, 3, 3), - (1, 3, 3), (1, 1, 3), (3, 2, 1), (2, 1, 1), - (3, 1, 2), (2, 3, 1), (3, 3, 2), (1, 2, 1), - (1, 3, 2), (1, 1, 2), (3, 2, 3), (2, 1, 3), - (2, 3, 3), (1, 2, 3), (2, 2, 1), (3, 2, 2), - (2, 1, 2), (2, 3, 2), (1, 2, 2), (2, 2, 3), - (2, 2, 2), - ] - - }[self.order] + from gmsh_interop.node_tuples import hexahedron_data + return hexahedron_data[self.order]["node_tuples"] # }}} @@ -468,6 +350,20 @@ def gmsh_node_tuples(self): # {{{ receiver interface +def _gmsh_supported_element_type_map(): + supported_elements = ( + [GmshPoint(0)] + + [GmshIntervalElement(n + 1) for n in range(10)] + + [GmshIncompleteTriangularElement(n) for n in [3, 4, 5]] + + [GmshTriangularElement(n + 1) for n in range(10)] + + [GmshTetrahedralElement(n + 1) for n in range(10)] + + [GmshQuadrilateralElement(n + 1) for n in range(10)] + + [GmshHexahedralElement(n + 1) for n in range(9)] + ) + + return {el.element_type: el for el in supported_elements} + + class GmshMeshReceiverBase: """ .. attribute:: gmsh_element_type_to_info_map @@ -481,34 +377,7 @@ class GmshMeshReceiverBase: .. automethod:: finalize_tags """ - gmsh_element_type_to_info_map = { - 1: GmshIntervalElement(1), - 2: GmshTriangularElement(1), - 3: GmshQuadrilateralElement(1), - 4: GmshTetrahedralElement(1), - 5: GmshHexahedralElement(1), - 8: GmshIntervalElement(2), - 9: GmshTriangularElement(2), - 10: GmshQuadrilateralElement(2), - 11: GmshTetrahedralElement(2), - 12: GmshHexahedralElement(2), - 15: GmshPoint(0), - 20: GmshIncompleteTriangularElement(3), - 21: GmshTriangularElement(3), - 22: GmshIncompleteTriangularElement(4), - 23: GmshTriangularElement(4), - 24: GmshIncompleteTriangularElement(5), - 25: GmshTriangularElement(5), - 26: GmshIntervalElement(3), - 27: GmshIntervalElement(4), - 28: GmshIntervalElement(5), - 29: GmshTetrahedralElement(3), - 30: GmshTetrahedralElement(4), - 31: GmshTetrahedralElement(5), - 36: GmshQuadrilateralElement(3), - 92: GmshHexahedralElement(3), - 93: GmshHexahedralElement(4), - } + gmsh_element_type_to_info_map = _gmsh_supported_element_type_map() def set_up_nodes(self, count): pass diff --git a/test/test_gmsh.py b/test/test_gmsh.py index 8cce413..8c1101b 100644 --- a/test/test_gmsh.py +++ b/test/test_gmsh.py @@ -20,6 +20,8 @@ THE SOFTWARE. """ +import pytest + # {{{ gmsh @@ -73,18 +75,72 @@ def search_on_path(filenames): l8 = newreg; Line Loop(l8) = {-c6, -c9, c2}; Ruled Surface(newreg) = {l8}; """ +GMSH_QUAD_SPHERE = """ +SetFactory("OpenCASCADE"); +Sphere(1) = { 0, 0, 0, 1 }; + +Recombine Surface "*"; +Mesh 2; +""" + +GMSH_QUAD_CUBE = """ +SetFactory("OpenCASCADE"); +Box(1) = {0, 0, 0, 1, 1, 1}; + +Transfinite Line "*" = 8; +Transfinite Surface "*"; +Transfinite Volume "*"; + +Mesh.RecombineAll = 1; +Mesh.Recombine3DAll = 1; +Mesh.Recombine3DLevel = 2; + +Mesh 3; +""" + -def test_gmsh(): +@pytest.mark.parametrize("dim", [2, 3]) +@pytest.mark.parametrize("order", [1, 3]) +def test_simplex_gmsh(dim, order, visualize=False): if search_on_path(["gmsh"]) is None: - from pytest import skip - skip("gmsh not found") + pytest.skip("gmsh executable not found") + + if visualize: + save_tmp_files_in = f"simplex_{order}_{dim}d" + else: + save_tmp_files_in = None from gmsh_interop.reader import generate_gmsh, GmshMeshReceiverBase from gmsh_interop.runner import ScriptSource mr = GmshMeshReceiverBase() source = ScriptSource(GMSH_SPHERE, "geo") - generate_gmsh(mr, source, 3) + generate_gmsh(mr, source, dimensions=dim, order=order, + save_tmp_files_in=save_tmp_files_in) + + +@pytest.mark.parametrize("dim", [2, 3]) +@pytest.mark.parametrize("order", [1, 3]) +def test_quad_gmsh(dim, order, visualize=False): + if search_on_path(["gmsh"]) is None: + pytest.skip("gmsh executable not found") + + if visualize: + save_tmp_files_in = f"simplex_{order}_{dim}d" + else: + save_tmp_files_in = None + + from gmsh_interop.reader import generate_gmsh, GmshMeshReceiverBase + from gmsh_interop.runner import ScriptSource + + if dim == 2: + source = ScriptSource(GMSH_QUAD_SPHERE, "geo") + else: + source = ScriptSource(GMSH_QUAD_CUBE, "geo") + + mr = GmshMeshReceiverBase() + generate_gmsh(mr, source, dimensions=dim, order=order, + save_tmp_files_in=save_tmp_files_in) # }}} @@ -94,7 +150,6 @@ def test_gmsh(): if len(sys.argv) > 1: exec(sys.argv[1]) else: - from pytest import main - main([__file__]) + pytest.main([__file__]) # vim: foldmethod=marker