The intellectual content of the CGNS database is defined in terms of Clike notation including typedefs and structures. The database is made up of entities, and each entity has a type associated with it. Entities include such things as the dimensionality of the grid, an array of grid coordinates, or a zone that contains all the data associated with a given region. Entities are defined in terms of types, where a type can be an integer or a collection of elements (a structure) or a hierarchy of structures or other similar constructs.
The terminology “instance of an entity” is used to refer to an entity that has been assigned a value or whose elements have been assigned values. The terminology “specific instance of a structure” is also used in the following sections. It is short for an instance of an entity whose type is a structure.
Names of entities and types are constructed using conventions typical of Mathematica [Mathematica 3.0, Wolfram Research, Inc., Champaign, IL (1996)]. Names or identifiers contain no spaces and capitalization is used to distinguish individual words making up a name; names are casesensitive. The character “/” should be avoided in names, as well as the names “.” and “..”, as these have special meaning when referencing elements of a structure entity. An entity name cannot exceed 32 characters.
The following notational conventions are employed:
!
comment to end of line
_t
suffix used for naming a type
;
end of a definition, declaration, assignment or entity instance
=
assignment (takes on the value of)
:=
indicates a type definition (typedef)
[ ]
delimiters of an array
{ }
delimiters of a structure definition
{{ }}
delimiters of an instance of a structure entity
< >
delimiters of a structure parameter list
int
integer
real
floatingpoint number
char
character
bit
bit
Enumeration( )
indicates an enumeration type
Data( )
indicates an array of data, which may be multidimensional
List( )
indicates a list of entities
Identifier( )
indicates an entity identifier
LogicalLink( )
indicates a logical link
/
delimiter for element of a structure entity
../
delimiter for parent of a structure entity
(r)
designation for a required structure element
(o)
designation for an optional structure element
(o/d)
designation for an optional structure element with default if absent
An enumeration type is a set of values identified by names; names of values within a given enumeration declaration must be unique. An example of an enumeration type is the following:
Enumeration( Dog, Cat, Bird, Frog )
This defines an enumeration type which contains four values.
Data()
identifies an array of given dimensionality and size in each dimension, whose elements are all of a given data type. It is written as,
Dimension
is an integer, and DimensionValues[]
is an array of integers of size Dimension
. Dimension
and DimensionValues[]
specify the dimensionality of the array and its size in each dimension. DataType
specifies the data type of the array’s elements; it may consist of one of the following: int
, real
, char
or bit
. For multidimensional arrays, FORTRAN indexing conventions are used. Data()
is formulated to map directly onto the data section of an ADF node.
A typedef establishes a new type and defines it in terms of previously defined types. Types are identified by the suffix “_t”, and the symbol “:=” is used to establish a type definition (or typedef). For example, the above enumeration example can be used in a typedef:
Pet_t := Enumeration( Dog, Cat, Bird, Frog ) ;
This defines a new type Pet_t
, which can then be used to declare a new entity, such as,
Pet_t MyFavoritePet ;
By the above typedef and declaration, MyFavoritePet
is an entity of type Pet_t
and can have the values Dog
, Cat
, Bird
or Frog
. A specific instance of MyFavoritePet
is setting it equal to one of these values (e.g., MyFavoritePet = Bird
).
A structure is a type that can contain any number of elements, including elements that are also structures. An example of a structure type definition is:
Sample_t :=
{
int Dimension ; (r)
real[4] Vector ; (o)
Pet_t ObnoxiousPet ; (o)
} ;
where Sample_t
is the type of the structure.
This structure contains three elements, Dimension
, Vector
and ObnoxiousPet
, whose types are int
, real[4]
and Pet_t
, respectively.
The type int
specifies an integer, and real[4]
specifies an array of reals that is onedimensional with a length of four. The “(r)” and “(o)” notation in the right margin is explained below.
Given the definition of Sample_t
, entities of this type can then be declared (e.g., Sample_t Sample1;
). An example of an instance of a structure entity is given by,
Sample_t Sample1 =
{{
Dimension = 3 ;
Vector = [1.0, 3.45, 2.1, 5.4] ;
ObnoxiousPet = Dog ;
}} ;
Note the different functions played by single braces “{” and double braces “{{”. The first is used to delimit the definition of a structure type; the second is used to delimit a specific instance of a structure entity.
Some structure type definitions contain arbitrarily long lists of other structures or types. These lists will be identified by the notation,
List( Sample_t Sample1 ... SampleN ) ;
where Sample1 ... SampleN
is the list of structure names or identifiers, each of which has the type Sample_t
. Within each list, the individual structure names are userdefined.
In the CGNS database it is sometimes necessary to reference the name or identifier of a structure entity. References to entities are denoted by Identifier()
, whose single argument is a structure type. For example,
Identifier(Sample_t) SampleName ;
declares an entity, SampleName
, whose value is the identifier of a structure entity of type Sample_t
.
Given this declaration, SampleName
could be assigned the value Sample1
(i.e., SampleName = Sample1
).
It is sometimes convenient to directly identify an element of a specific structure entity.
It is also convenient to indicate that two entities with different names are actually the same entity.
We borrow UNIX conventions to indicate both these features, and make the analogy that a structure entity
is a UNIX directory and its elements are UNIX files. An element of an entity is designated by “/”;
an example is Sample1/Vector
). The structure entity that a given element belongs to is designated “../”.
A UNIXlike logical link that specifies the sameness of two apparently different entities is identified by LogicalLink()
; it has one argument.
An example of a logical link is as follows: Suppose a specific instance of a structure entity contains two elements
that are of type Sample_t
; call them SampleA
and SampleB
.
The statement that SampleB
is actually the same entity as SampleA
is,
SampleB = LogicalLink(../SampleA) ;
The argument of LogicalLink()
is the UNIXlike “path name” of the entity with which the link is made.
In this document, LogicalLink()
and the direct specification of a structure element via “/” and “../” are actually seldom used.
These language elements are never used in the actual definition of a structure type.
Structure type definitions include three additional syntactic/semantic notions. These are parameterized structures, structurerelated functions, and the identification of required and optional fields within a structure.
As previously stated, one of our design objectives is to minimize duplication of information within the CGNS database.
To meet this objective, information is often stored in only one location of the hierarchy;
however, that information is typically used in other parts of the hierarchy.
A consequence of this is that it may not be possible to decipher all the information associated
with a given entity in the hierarchy without knowledge of data contained in higher level entities.
For example, the grid size of a zone is stored in one location (in Zone_t
),
but is needed in many substructures to define the size of grid and solutiondata arrays.
This organization of information must be reflected in the language used to describe the database. First, parameterized structures are introduced to formalize the notion that information must be passed down the hierarchy. A given structure type is defined in terms of a list of parameters that precisely specify what information must be obtained from the structure’s parent. These structuredefining parameters play a similar role to subroutine parameters in C or FORTRAN and are used to define fields within the structure; they are also passed onto substructures. Parameterized structures are also loosely tied to templates in C++.
Parameterized structures are identified by the delimiters < >
enclosing the list of parameters. Each structure parameter in a structuretype definition consists of a type and an identifier. Examples of parameterized structure type definitions are:
NewSample_t< int Dimension, int Fred > :=
{
int[Dimension] Vector ; (o)
Pet_t ObnoxiousPet ; (o)
Stuff_t<Fred> Thingy ; (o)
} ;
Stuff_t< int George > :=
{
real[George] IrrelevantStuff ; (r)
} ;
NewSample_t
and Stuff_t
are parameterized structure types.
Dimension
and Fred
are the structure parameters of NewSample_t
.
George
is the structure parameter of Stuff_t
.
All structure parameters in this example are of type int
.
Thingy
is a structure entity of type Stuff_t
; it uses the parameter Fred
to complete its declaration.
Note the use of George
and Fred
in the above example.
George
is a parameter in the definition of Stuff_t
; Fred
is an argument in the declaration of an entity of type Stuff_t
.
This mimics the use of parameters in function definitions in C.
A second language feature required to cope with the cascade of information within the hierarchy is structurerelated functions. For example, the size of an array within a given structure may be a function of one or more of the structuredefining parameters, or the array size may be a function of an optional field within the structure. No new syntax is provided to incorporate structurerelated functions; they are instead described in terms of their return values, dependencies, and functionality.
An additional notation used in structure typedefs is that each element or field within a structure definition is identified as required, optional, or optional with a default if absent; these are designated by “(r)”, “(o)”, and “(o/d)”, respectively, in the right margin of the structure definition. These designations are included to assist in implementation of the data structures into an actual database and can be used to guide mapping of data as well as error checking. “Required” fields are those essential to the interpretation of the information contained within the data structure. “Optional” fields are those that are not necessary but potentially useful, such as documentation. “Defaultedoptional” fields are those that take on a known default if absent from the database.
In the example of Sample_t
above, only the element Dimension
is required.
Both elements Vector
and ObnoxiousPet
are optional.
This means that in any specific instance of the structure, only Dimension
must be present.
An alternative instance of the entity Sample1
shown above is the following:
Sample_t Sample1 =
{{
Dimension = 4 ;
}} ;
None of the entities and types defined in the above examples are actually used in the definition of the SIDS. As a final note, the reader should be aware that the SIDS is a conceptual description of the form of the data. The actual location of data in the file is determined by the file mapping, defined by the appropriate File Mapping Manual.
A grid is defined by its vertices. In a 3D structured grid, the volume is the ensemble of cells, where each cell is the hexahedron region defined by eight nearest neighbor vertices. Each cell is bounded by six faces, where each face is the quadrilateral made up of four vertices. An edge links two nearestneighbor vertices; a face is bounded by four edges.
In a 2D structured grid, the notation is more ambiguous. Typically, the quadrilateral area composed of four nearestneighbor vertices is referred to as a cell. The sides of each cell, the line linking two vertices, is either a face or an edge. In a 1D grid, the line connecting two vertices is a cell.
A structured multizone grid is composed of multiple regions called zones, where each zone includes all the vertices, cells, faces, and edges that constitute the grid in that region.
Indices describing a 3D grid are ordered (i,j,k); (i,j) is used for 2D and (i) for 1D.
Cell centers, face centers, and edge centers are indexed by the minimum i, j, and k indices of the connecting vertices. For example, a 2D cell center (or face center on a 3D grid) would have the following convention:
In addition, the default beginning vertex for the grid in a given zone is (1,1,1); this means the default beginning cell center of the grid in that zone is also (1,1,1).
A zone may contain gridcoordinate or flowsolution data defined at a set of points outside the zone itself. These are referred to as “rind” or ghost points and may be associated with fictitious vertices or cell centers. They are distinguished from the vertices and cells making up the grid within the zone (including its boundary vertices), which are referred to as “core” points. The following is a 2D zone with a single row of rind vertices at the minimum and maximum ifaces. The grid size (i.e., the number of core vertices in each direction) is 5x4. Core vertices are designated by a bullet, and rind vertices by “x”. Default indexing is also shown for the vertices.
For a zone, the minimum faces in each coordinate direction are denoted imin, jmin and kmin; the maximum faces are denoted imax, jmax and kmax. These are the minimum and maximum core faces. For example, imin is the face or grid plane whose core vertices have minimum i index (which if using default indexing is 1).
The major difference in the way structured and unstructured grids are recorded is the element definition. In a structured grid, the elements can always be recomputed easily using the computational coordinates, and therefore they are usually not written in the data file. For an unstructured grid, the element connectivity cannot be easily built, so this additional information is generally added to the data file. The element information typically includes the element type or shape, and the list of nodes for each element.
In an unstructured zone, the nodes are ordered from 1 to N, where N is the number of nodes in the zone. An element is defined as a group of one or more nodes, where each node is represented by its index. The elements are indexed from 1 to M within a zone, where M is the total number of elements defined for the zone.
CGNS supports eight element shapes  points, lines, triangles, quadrangles, tetrahedra, pentahedra, pyramids, and hexahedra. Elements describing a volume are referred to as 3D elements. Those defining a surface are 2D elements. Line and point elements are called 1D and 0D elements, respectively.
In a 3D unstructured mesh, the cells are defined using 3D elements, while the boundary patches may be described using 2D elements. The complete element definition may include more than just the cells.
Each element shape may have a different number of nodes, depending on whether linear, quadratic, or cubic interpolation is used. Therefore the name of each type of element is composed of two parts; the first part identifies the element shape, and the second part the number of nodes. The following table summarizes the element types supported in CGNS.
Dimensionality 
Shape 
Linear Interpolation 
Quadratic Interpolation 
Cubic Interpolation 
Quartic Interpolation 

0D 
Point 
NODE 
NODE 
NODE 
NODE 
1D 
BAR_2 
BAR_3 
BAR_4 
BAR_5 

2D 
TRI_3 
TRI_6 
TRI_9, TRI_10 
TRI_12, TRI_15 

QUAD_4 
QUAD_8, QUAD_9 
QUAD_12, QUAD_16 
QUAD_P4_16, QUAD_25 

3D 
TETRA_4 
TETRA_10 
TETRA_16, TETRA_20 
TETRA_22, TETRA_34, TETRA_35 

PYRA_5 
PYRA_13, PYRA_14 
PYRA_21, PYRA_29, PYRA_30 
PYRA_P4_29, PYRA_50, PYRA_55 

PENTA_6 
PENTA_15, PENTA_18 
PENTA_24, PENTA_38, PENTA_40 
PENTA_33, PENTA_66, PENTA_75 

HEXA_8 
HEXA_20, HEXA_27 
HEXA_32, HEXA_56, HEXA_64 
HEXA_44, HEXA_98, HEXA_125 
General polyhedral elements can be recorded using the CGNS generic element types NGON_n and NFACE_n. See the Elements_t structure definition for more detail.
The ordering of the nodes within an element is important. Since the nodes in each element type could be ordered in multiple ways, it is necessary to define numbering conventions. The following sections describe the element numbering conventions used in CGNS.
Like a structured zone, an unstructured zone may contain gridcoordinates or flowsolution data at points outside of the zone itself, through the use of ghost or “rind” points and elements. However, unlike for structured zones, rind data for unstructured zones cannot be defined implicitly (i.e., via indexing conventions alone). In other words, when using rind with unstructured zones, the rind grid points and their element connectivity information should always be given.
1D elements represent geometrically a line (or bar).
The linear form, BAR_2
, is composed of two nodes at each extremity
of the line.
The quadratic form, BAR_3
, has an additional node located at
the middle of the line.
The cubic form of the line, BAR_4
, contains two nodes
interior to the endpoints.
The quartic form of the line, BAR_5
, contains three nodes
interior to the endpoints.
Note
Nodes are uniformly spaced on all edges for all higher order elements.
2D elements represent a surface in either 2D or 3D space. Note that in physical space, the surface need not be planar, but may be curved. In a 2D mesh the elements represent the cells themselves; in a 3D mesh they represent faces. CGNS supports two shapes of 2D elements  triangles and quadrangles.
The normal vector of a 2D element is computed using the cross product of a vector from the first to second node, with a vector from the first to third node. The direction of the normal is such that the three vectors (i.e., \(\small(\overrightarrow{N2}  \overrightarrow{N1})\), \(\small(\overrightarrow{N3}  \overrightarrow{N1})\), and \(\small\overrightarrow{N}\)) form a righthanded triad.
In a 2D mesh, all elements must be oriented the same way; i.e., all normals must point toward the same side of the mesh.
Six types of triangular elements are supported in CGNS, TRI_3
,
TRI_6
, TRI_9
, TRI_10
, TRI_12
, and TRI_15
.
TRI_3
elements are composed of three nodes located at the
three geometric corners of the triangle.
TRI_6
elements have three additional nodes located at the
middles of the three edges.
The cubic forms of triangular elements, TRI_9
and TRI_10
contain two interior nodes along each edge, and an interior face node
in the case of TRI_10
.
The quartic forms of triangular elements, TRI_12
and TRI_15
contain three interior nodes along each edge, and three interior face nodes
in the case of TRI_15
.
Note
N1,…,N10 
Grid point identification number. Integer ≥ 0 or blank, and no two values may be the same. Grid points N1, N2, and N3 are in consecutive order about the triangle. 
E1,E2,E3 
Edge identification number. 
F1 
Face identification number. 
Note
N13, N14, and N15 are equally spaced within the element.
CGNS supports seven types of quadrilateral elements, QUAD_4, QUAD_8, QUAD_9, QUAD_12, QUAD_16, QUAD_P4_16, and QUAD_25. QUAD_4 elements are composed of four nodes located at the four geometric corners of the quadrangle. In addition, QUAD_8 and QUAD_9 elements have four midedge nodes, and QUAD_9 adds a midface node. The cubic forms of quadrilateral elements, QUAD_12 and QUAD_16 contain two interior nodes along each edge, and four interior face nodes in the case of QUAD_16. The quartic forms of quadrilateral elements, QUAD_P4_16 and QUAD_25 contain three interior nodes along each edge, and nine interior face nodes in the case of QUAD_25.
Note
N1,…,N16 
Grid point identification number. Integer ≥ 0 or blank, and no two values may be the same. Grid points N1, …, N4 are in consecutive order about the quadrangle. 
E1,…,E4 
Edge identification number. 
F1 
Face identification number. 
3D elements represent a volume in 3D space, and constitute the cells of a 3D mesh. CGNS supports four different shapes of 3D elements  tetrahedra, pyramids, pentahedra, and hexahedra.
CGNS supports seven types of tetrahedral elements, TETRA_4, TETRA_10, TETRA_16, TETRA_20, TETRA_22, TETRA_34, and TETRA_35. TETRA_4 elements are composed of four nodes located at the four geometric corners of the tetrahedron. TETRA_10 elements have six additional nodes, at the middle of each of the six edges. The cubic forms of tetrahedral elements, TETRA_16 and TETRA_20 contain two interior nodes along each edge, and four interior face nodes in the case of TETRA_20. The quartic forms of tetrahedral elements, TETRA_22, TETRA_34, and TETRA_35 contain three interior nodes along each edge, twelve interior face nodes in the case of TETRA_34, and twelve interior face nodes plus one interior volume node in the case of TETRA_35.
Note
N1,…,N20 
Grid point identification number. Integer ≥ 0 or blank, and no two values may be the same. Grid points N1 … N3 are in consecutive order about one trilateral face. The cross product of a vector going from N1 to N2, with a vector going from N1 to N3, must result in a vector oriented from face F1 toward N4. 
E1,…,E6 
Edge identification number. The edges are oriented from the first to the second node. A negative edge (e.g., E1) means that the edge is used in its reverse direction. 
F1,…,F4 
Face identification number. The faces are oriented so that the cross product of a vector from its first to second node, with a vector from its first to third node, is oriented outward. 
Note
N23 
Is located at the centroid of subtriangle N1N12N6. 
N24 
Is located at the centroid of subtriangle N2N6N9. 
N25 
Is located at the centroid of subtriangle N3N9N12. 
N26 
Is located at the centroid of subtriangle N1N6N15. 
N27 
Is located at the centroid of subtriangle N2N18N6. 
N28 
Is located at the centroid of subtriangle N4N15N18. 
N29 
Is located at the centroid of subtriangle N2N9N18. 
N30 
Is located at the centroid of subtriangle N3N21N9. 
N31 
Is located at the centroid of subtriangle N4N18N21. 
N32 
Is located at the centroid of subtriangle N3N12N21. 
N33 
Is located at the centroid of subtriangle N1N15N12. 
N34 
Is located at the centroid of subtriangle N4N21N15. 
N35 
Is located at the centroid of the tetrahedron. 
CGNS supports nine types of pyramid elements, PYRA_5, PYRA_13, PYRA_14, PYRA_21, PYRA_29, PYRA_30, PYRA_P4_29, PYRA_50, and PYRA_55. PYRA_5 elements are composed of five nodes located at the five geometric corners of the pyramid. In addition, PYRA_13 and PYRA_14 elements have a node at the middle of each of the eight edges; PYRA_14 adds a node at the middle of the quadrilateral face. The cubic forms of pyramid elements, PYRA_21, PYRA_29, and PYRA_30 contain two interior nodes along each edge, eight interior face nodes in the case of PYRA_29 and PYRA_30, and an additional interior volume node for PYRA_30. The quartic forms of pyramid elements, PYRA_P4_29, PYRA_50, and PYRA_55 contain three interior nodes along each edge, 21 interior face nodes in the case of PYRA_50, and 21 interior face nodes and five additional interior volume nodes for PYRA_55.
Note
N1,…,N30 
Grid point identification number. Integer ≥ 0 or blank, and no two values may be the same. Grid points N1 … N4 are in consecutive order about the quadrilateral face. The cross product of a vector going from N1 to N2, with a vector going from N1 to N3, must result in a vector oriented from face F1 toward N5. 
E1,…,E8 
Edge identification number. The edges are oriented from the first to the second node. A negative edge (e.g., E1) means that the edge is used in its reverse direction. 
F1,…,F5 
Face identification number. The faces are oriented so that the cross product of a vector from its first to second node, with a vector from its first to third node, is oriented outward. 
Note
N39 
Is located at the centroid of subtriangle N1N7N19. 
N40 
Is located at the centroid of subtriangle N2N22N7. 
N41 
Is located at the centroid of subtriangle N5N19N22. 
N42 
Is located at the centroid of subtriangle N2N10N22. 
N43 
Is located at the centroid of subtriangle N3N25N10. 
N44 
Is located at the centroid of subtriangle N5N22N25. 
N45 
Is located at the centroid of subtriangle N3N13N25. 
N46 
Is located at the centroid of subtriangle N4N28N13. 
N47 
Is located at the centroid of subtriangle N5N25N28. 
N48 
Is located at the centroid of subtriangle N4N16N28. 
N49 
Is located at the centroid of subtriangle N1N19N16. 
N50 
Is located at the centroid of subtriangle N5N28N19. 
N51 
Is located at the intersection of the line N5N30 and the face N18N21N24N27. 
N52 
Is located at the intersection of the line N5N32 and the face N18N21N24N27. 
N53 
Is located at the intersection of the line N5N34 and the face N18N21N24N27. 
N54 
Is located at the intersection of the line N5N36 and the face N18N21N24N27. 
N55 
Is located at the intersection of the line N5N38 and the face N20N23N26N29. 
Note
Prior to 5/21/2019, Face F1 was defined incorrectly in the table for PYRA_50 and PYRA_55.
CGNS supports nine types of pentahedral elements, PENTA_6, PENTA_15, PENTA_18, PENTA_24, PENTA_38, PENTA_40, PENTA_33, PENTA_66, and PENTA_75. PENTA_6 elements are composed of six nodes located at the six geometric corners of the pentahedron. In addition, PENTA_15 and PENTA_18 elements have a node at the middle of each of the nine edges; PENTA_18 adds a node at the middle of each of the three quadrilateral faces. The cubic forms of the pentahedral elements, PENTA_24, PENTA_38, and PENTA_40 contain two interior nodes along each edge, fourteen interior face nodes in the case of PENTA_38 and PENTA_40, and an additional two interior volume nodes for PENTA_40. The quartic forms of the pentahedral elements, PENTA_33, PENTA_66, and PENTA_75 contain three interior nodes along each edge, 33 interior face nodes in the case of PENTA_66, and 33 interior face nodes and an additional nine interior volume nodes for PENTA_75.
Note
N1,…,N40 
Grid point identification number. Integer ≥ 0 or blank, and no two values may be the same. Grid points N1 … N3 are in consecutive order about one trilateral face. Grid points N4 … N6 are in order in the same direction around the opposite trilateral face. 
E1,…,E9 
Edge identification number. The edges are oriented from the first to the second node. A negative edge (e.g., E1) means that the edge is used in its reverse direction. 
F1,…,F5 
Face identification number. The faces are oriented so that the cross product of a vector from its first to second node, with a vector from its first to third node, is oriented outward. 
N39 
Is at the centroid of the triangle N13,N17,N15. 
N40 
Is at the centroid of the triangle N14,N18,N16. 
Note
N34 
Is located at the centroid of subtriangle N1N14N8. 
N35 
Is located at the centroid of subtriangle N2N8N11. 
N36 
Is located at the centroid of subtriangle N3N11N14. 
N64 
Is located at the centroid of subtriangle N4N26N32. 
N65 
Is located at the centroid of subtriangle N5N29N26. 
N66 
Is located at the centroid of subtriangle N6N32N29. 
N67 
Is located at the centroid of subtriangle N16N38N56. 
N68 
Is located at the centroid of subtriangle N19N47N38. 
N69 
Is located at the centroid of subtriangle N22N56N47. 
N70 
Is located at the centroid of subtriangle N17N45N63. 
N71 
Is located at the centroid of subtriangle N20N54N45. 
N72 
Is located at the centroid of subtriangle N23N63N54. 
N73 
Is located at the centroid of subtriangle N18N42N60. 
N74 
Is located at the centroid of subtriangle N21N51N42. 
N75 
Is located at the centroid of subtriangle N24N60N51. 
Note
Prior to 5/21/2019, Face F4 was defined incorrectly in the table for PENTA_66 and PENTA_75.
CGNS supports nine types of hexahedral elements, HEXA_8, HEXA_20, HEXA_27, HEXA_32, HEXA_56, HEXA_64, HEXA_44, HEXA_98, and HEXA_125. HEXA_8 elements are composed of eight nodes located at the eight geometric corners of the hexahedron. In addition, HEXA_20 and HEXA_27 elements have a node at the middle of each of the twelve edges; HEXA_27 adds a node at the middle of each of the six faces, and one at the cell center. The cubic forms of the hexahedral elements, HEXA_32, HEXA_56, and HEXA_64 contain two interior nodes along each edge, 24 interior face nodes in the case of HEXA_56 and HEXA_64, and an additional eight interior volume nodes for HEXA_64. The quartic forms of the hexahedral elements, HEXA_44, HEXA_98, and HEXA_125 contain three interior nodes along each edge, 54 interior face nodes in the case of HEXA_98, and 54 interior face nodes and an additional 27 interior volume nodes for HEXA_125.
Note
Prior to 7/19/2019, there was a typo in F3 corner nodes definition for HEXA_8, HEXA_20, and HEXA_27.
Note
Prior to 7/19/2019, there was a typo in F3 corner nodes definition for HEXA_32, HEXA_56, and HEXA_64, and F5 midface nodes were misordered in HEXA_56 and HEXA_64.
Note
N1,…,N64 
Grid point identification number. Integer ≥ 0 or blank, and no two values may be the same. Grid points N1 … N4 are in consecutive order about one quadrilateral face. Grid points N5 … N8 are in order in the same direction around the opposite quadrilateral face. 
E1,…,E12 
Edge identification number. The edges are oriented from the first to the second node. A negative edge (e.g., E1) means that the edge is used in its reverse direction. 
F1,…,F6 
Face identification number. The faces are oriented so that the cross product of a vector from its first to second node, with a vector from its first to third node, is oriented outward. 
Consider an unstructured zone in the shape of a cube, with each edge of the zone having three nodes. The resulting unstructured grid has a total of 27 nodes, as illustrated in the exploded figure below.
This zone contains eight hexahedral cells, numbered 1 to 8, and the cell connectivity is:
Element No. 
Element Connectivity 

1 2 3 4 5 6 7 8 
1, 2, 5, 4, 10, 11, 14, 13 2, 3, 6, 5, 11, 12, 15, 14 4, 5, 8, 7, 13, 14, 17, 16 5, 6, 9, 8, 14, 15, 18, 17 10, 11, 14, 13, 19, 20, 23, 22 11, 12, 15, 14, 20, 21, 24, 23 13, 14, 17, 16, 22, 23, 26, 25 14, 15, 18, 17, 23, 24, 27, 26 
In addition to the cells, the boundary faces could also be added to the element definition of this unstructured zone. There are 24 boundary faces in this zone, corresponding to element numbers 9 to 32. Each boundary face is of type QUAD_4. The table below shows the element connectivity of each boundary face, as well as the element number and face number of its parent cell.
Face 
Element No. 
Element Connectivity 
Parent Cell 
Parent Face 

Left
Right
Bottom
Top
Back
Front

9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

1, 10, 13, 4
4, 13, 16, 7
10, 19, 22, 13
13, 22, 25, 16
3, 6, 15, 12
6, 9, 18, 15
12, 15, 24, 21
15, 18, 27, 24
1, 2, 11, 10
2, 3, 12, 11
10, 11, 20, 19
11, 12, 21, 20
7, 16, 17, 8
8, 17, 18, 9
16, 25, 26, 17
17, 26, 27, 18
1, 4, 5, 2
2, 5, 6, 3
4, 7, 8, 5
5, 8, 9, 6
19, 20, 23, 22
20, 21, 24, 23
22, 23, 26, 25
23, 24, 27, 26

1
3
5
7
2
4
6
8
1
2
5
6
3
4
7
8
1
2
3
4
5
6
7
8

5
5
5
5
3
3
3
3
2
2
2
2
4
4
4
4
1
1
1
1
6
6
6
6

The above figure shows three types of multizone interfaces, shown for structured zones. The first type is a 1to1 abutting interface, also referred to as matching or C0 continuous. The interface is a plane of vertices that are physically coincident between the adjacent zones. For structured zones, gridcoordinate lines perpendicular to the interface are continuous from one zone to the next. In 3D, a 1to1 abutting interface is usually a logically rectangular region.
The second type of interface is mismatched abutting, where two zones touch but do not overlap (except for vertices and cell faces on the grid plane of the interface). Vertices on the interface may not be physically coincident between the two zones. The figure identifies the vertices and face centers of the left zone that lay on the interface. Even for structured zones in 3D, the vertices of a zone that constitute an interface patch may not form a logically rectangular region.
The third type of multizone interface is called overset and occurs when two zones overlap; in 3D, the overlap is a 3D region. For overset interfaces, one of the two zones takes precedence over the other; this establishes which solution in the overlap region to retain and which to discard. The region in a given zone where the solution is discarded is called an overset hole and the grid points outlining the hole are called fringe points. The figure depicts an overlap region between two zones. The right zone takes precedence over the left zone, and the points identified in the figure are the fringe points and oversethole points for the left zone. In addition, for the zone taking precedence, any bounding points (i.e., vertices on the bounding faces) of the zone that lay within the overlap region must also be identified.
Overset interfaces may also include multiple layers of fringe points outlining holes and at zone boundaries.
For the mismatched abutting and overset interfaces in the above figure, the left zone plays the role of receiver zone and the right plays the role of donor zone.