hexahedron(7) Hexaedron reference element

DESCRIPTION

The hexahedron reference element is [-1,1]^3.

     ^ z
     |
     4----------7
     |\         |\
     | \        | \
     |  \       |  \
     |   5------+---6
     |   |      |   |
     0---+------3 - | ---> y
      \  |       \  |
       \ |        \ |
        \|         \|
         1----------2
          \
           x

Curved high order Pk hexaedra (k >= 1) in 3d geometries are supported. These hexaedra 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 hexaedron lattice. See below for edges and faces numbering and orioentation.

     4----19----7
     |\         |\
     |16    23  | 18
    12  \ 21    15 \
     |   5----17+---6
     |22 |  26  | 25|
     0---+-11---3   |
      \ 13    24 \  14
       8 |  20    10|
        \|         \|
         1-----9----2
             P2

NUMBERING

The orientation is such that triedra (01, 03, 04) 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 = 8;
const size_t n_vertex = 8;
const point vertex [n_vertex] = {
        point(-1,-1,-1 ),
        point( 1,-1,-1 ),
        point( 1, 1,-1 ),
        point(-1, 1,-1 ),
        point(-1,-1, 1 ),
        point( 1,-1, 1 ),
        point( 1, 1, 1 ),
        point(-1, 1, 1 ) };
const size_t  n_face = 6;
const size_t face [n_face][4] = {
        {0, 3, 2, 1 },
        {0, 4, 7, 3 },
        {0, 1, 5, 4 },
        {4, 5, 6, 7 },
        {1, 2, 6, 5 },
        {2, 3, 7, 6 } };
const size_t  n_edge = 12;
const size_t edge [n_edge][2] = {
        {0, 1 },
        {1, 2 },
        {2, 3 },
        {3, 0 },
        {0, 4 },
        {1, 5 },
        {2, 6 },
        {3, 7 },
        {4, 5 },
        {5, 6 },
        {6, 7 },
        {7, 4 } };