[Gmsh] Numbering of higher order elements
Martin Vymazal
martin.vymazal at vki.ac.be
Wed Jul 16 16:15:47 CEST 2014
Hi Aleksejs,
Below is a long explanation of what section 9.3.2 ('High Order Elements') in
the GMSH reference manual means according to my understanding. I'm not a GMSH
developer so please use the information below at your own risk.
I will give you an example for tetrahedra. In the following, I suppose that
the local numbering of DOFs starts from 0.
You have to apply recursively the following one rule in order to enumerate
your degrees of freedom:
Labeling all DOFs processes all topological sub-entities of the reference
element going from dimension 0 to higher dimensions.
This means that:
0) First you number all vertices: 0,1,2,3
1) Then you number all remaining degrees of freedom on edges (1D entities)
of the tetrahedron:
1a) edge 0-1 will have interior DOFs 4, ..., 3 + (P-1), going from vertex 0
towards vertex 1; P is polynomial order of your reference element
1b) edge 1-2 will have interior DOFS 3+ (P-1) + 1, ..., 3 + 2*(P-1)
1c) edge 2-0
1d) edge 3-0
1e) edge 3-2
1f) edge 3-1
At this point, all vertices and interior nodes on edges have assigned numbers.
The next step is numbering the faces (2D entities) of the tetrahedon. Since
each face already has numbers assigned, you only need to label interior face
nodes. The interior itself is in fact a triangle of lower order, so you
recursively apply the rule I mentioned above: label all vertices of this lower
order triangle, then all edges. If there's anything left in the interior,
repeat.
The faces are processed in the following order:
2a) 0, 2, 1, where 0, 2 and 1 are vertices of the face
2b) 0, 1, 3
2c) 0, 3, 2
2d) 3, 1, 2
Now you have assigned numbers to all nodes on the 'skin' of your high-order
tetra, and you can apply all of the above to the lower-order tetrahedron which
is left inside.
For more information, look in the source code: Geo/MTetrahedron.h
What helped me a lot for code testing (I also needed to read GMSH files with
high-order elements), was to generate a high-order mesh with a single element.
Then I looked at what the *.msh file contains and compared with what I saw in
the GUI. Don't forget that GMSH numbers the nodes in msh files starting from
1.
Best regards,
Martin Vymazal
On Wednesday 16 of July 2014 13:16:53 Aleksejs Fomins wrote:
> Dear GMSH developers,
>
> I am currently trying to write a .MSH reader application for our finite
> element code. I would like to read higher order curvilinear elements
> (triangles and tetrahedrons). For that I would like to know the exact
> ordering of nodes within a higher order element for each element order
> (1 to 5).
>
> In section 9.3.1 of the reference I found exactly what I needed for
> orders 1 and 2. Unfortunately, I am unable to understand the exact
> ordering mechanism for other orders from section 9.3.2.
>
> Can you please help me with this?
>
> Regards,
> Aleksejs Fomins