[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