tetrahedron(7) Tetraedron reference element

DESCRIPTION

The tetrahedron reference element is

        K = { 0 < x < 1 and 0 < y < 1-x and 0 < z < 1-x-y }

                       z
                     .
                   ,/
                  /
                3
              ,/|`\
            ,/  |  `\
          ,/    '.   `\
        ,/       |     `\
      ,/         |       `\
     0-----------'.--------2 --> y
      `\.         |      ,/
         `\.      |    ,/
            `\.   '. ,/
               `\. |/
                  `1
                     `\.
                       ` x

Curved high order Pk tetrahedra (k >= 1) in 3d geometries are supported. These tetrahedra have additional edge-nodes, face-nodes and internal volume-nodes.

THESE NODES ARE NUMBERED AS


 first vertex, then edge-node, following the edge numbering order and orientation, then face-nodes following the face numbering order and orientation, and finally the face internal nodes, following the tetrahedron lattice. See below for edges and faces numbering and orioentation.

                3
              ,/|`\
            ,/  |  `\
          ,7    '.   `9
        ,/       |     `\
      ,/         8       `\
     0--------6--'.--------2
      `\.         |      ,/
         `\.      |    ,5
            `4.   '. ,/
               `\. |/
                  `1
               P2

NUMBERING

The orientation is such that triedra (01, 02, 03) is direct, and all faces, see from exterior, are in the direct sens. References: P. L. Georges, "Generation automatique de maillages", page 24-, coll RMA, 16, Masson, 1994. Notice that the edge-nodes and face-nodes numbering slighly differ from those used in the gmsh mesh generator when using high-order elements. This difference is handled by the msh2geo mesh file converter (see msh2geo(1)).

IMPLEMENTATION

const size_t dimension = 3;
const Float  measure = Float(1.)/Float(6.);
const size_t n_vertex = 4;
const point vertex [n_vertex] = {
        point( 0, 0, 0 ),
        point( 1, 0, 0 ),
        point( 0, 1, 0 ),
        point( 0, 0, 1 ) };
const size_t  n_face = 4;
const size_t face [n_face][3] = {
        { 0, 2, 1 },
        { 0, 3, 2 },
        { 0, 1, 3 },
        { 1, 2, 3 } };
const size_t  n_edge = 6;
const size_t edge [n_edge][2] = {
        { 0, 1 },
        { 1, 2 },
        { 2, 0 },
        { 0, 3 },
        { 1, 3 },
        { 2, 3 } };