15.4.2. CGNS File Structure

The generic details of how to read CGNS files and the file structure are fully documented in the documentation available from the CGNS website.

In the following sections, it may be useful to work from an example of the CFX preprocessing setup in this case. The following flow solver CCL was created using a transient version of the CFX axial turbine MFR tutorial:

 OUTPUT CONTROL:
     EXPORT RESULTS: export1
       Option = Surface Data
       EXPORT FORMAT:
         Filename Prefix = trouser
         Option = CGNS
       END
       EXPORT FREQUENCY:
         Option = Time Interval
         Time Interval = 2.124E-5 [s]
       END
       EXPORT SURFACE: rotatingdipole
         Option = Acoustic Rotating Dipole
         Output Boundary List = Blade
       END
       EXPORT SURFACE: regulardipole
         Option = Acoustic Dipole
         Output Boundary List = Shroud,Shroud 2
       END
     END
     EXPORT RESULTS: export2
       Option = Surface Data
       EXPORT FREQUENCY:
         Option = Time Interval
         Time Interval = 2.124E-5 [s]
       END
       EXPORT SURFACE: dipole
         Option = Acoustic Dipole
         Output Boundary List = Blade 2
       END
     END
  END

In this example, the user has selected to output two different groups of files corresponding to the two objects, export1 and export2, at the same time interval. The object names could be any string and by default the object name is used as the file prefix unless the user overrides that by setting the Filename Prefix option under EXPORT FORMAT.

For export1, the user has selected to output a rotating dipole surface source called rotatingdipole on the boundary called Blade (which happens to be in a rotating domain). In addition, a regular dipole source, called regulardipole, will be written on boundaries Shroud and Shroud 2. In this example, Shroud is in a rotating domain and Shroud 2 is in a stationary domain. This is an example of where the flow solver will split the surface source into two different regions because the surface spans across two CFX domains.

For export2, they have selected to output a dipole source, called dipole, on Blade 2, which is in a stationary domain.

The export surface names in both cases are also provided by the user, in addition to the export results names, during CFX pre-processing.

The tree structure of the export2 results output looks as follows:

On the left is the grid file and on the right is a solution file. All CGNS files contain a root node called "/" and are set up like a file system below that root node. Below the root node is CGNSLibraryVersion, which gives the CGNS version used to write the file. Both mesh and solution files contain a base node called export2, which corresponds to the results object name and the file prefix. Below that node, the following nodes are defined:

15.4.2.1. Common Nodes for Mesh and Solution Files

SimulationType simply contains a string stating that the solution is written from a time-accurate or nontime-accurate simulation. Acoustic output will always be from a time-accurate simulation in CFX.

TimeIterValues is a BaseIterativeData_t node that contains the time values and timestep data for the solutions in the file.

TimeIterValues/TimeValues is a DataArray_t node that contains a list of real values corresponding to the simulation times stored in the file. In our case, there is only ever one time value inside a single CGNS file.

TimeIterValues/IterationValues is also a DataArray_t node that contains the integer value corresponding to the timestep number. This number is exactly the same as that encoded in the file name.

dipole is a CGNS Zone_t node and contains the grid coordinates and nodal area vectors in the mesh file. The solution file contains the boundary pressures and links back to the grid coordinates and the element to vertex map.

ZoneType is a processor_t node that contains the type of grid written to the file and is always set to Unstructured. This is a default CGNS name.

Export Option is written for all regions and contains a string that tells what kind of surface export option was used to create the data. In the two examples, this string will be either Acoustic Dipole or Acoustic Rotating Dipole.

Flow Solution is a FlowSolution_t node that contains the solution values below it written on the element nodes. In the mesh file, this directory contains nothing for this case because the file only contains data for a dipole source. For rotating dipole source cases, this directory contains the nodal area vector components called Nodal Area VectorX, Nodal Area VectorY, Nodal Area VectorZ. (Normally, the CGNS documentation has a suggested naming convention for variables written to FlowSolution_t nodes. There is no suggested name for Nodal Area Vectors but this format follows the suggested naming convention for vectors.)

ZoneIterativeData is a ZoneIterativeData_t node that contains a single node below it called FlowSolutionPointers. This node is a DataArray_t node that contains an array of character strings pointing to the directory names for flow solutions at different timestep values. Because only one timestep is written to each CGNS file, this node only holds one character string called Flow Solution.

15.4.2.2. Mesh File Specific Nodes

GridCoordinates is a GridCoordinates_t node that contains the surface mesh <x,y,z> coordinates in the flow solver coordinate system.

CoordinateX/Y/Z are just DataArray_t nodes with the grid coordinate components.

Face to Vertex Map is an Elements_t directory node that contains the element range and connectivity.

Face to Vertex Map/ElementRange is an IndexRange_t node that gives the range of elements assigned to the region. In all cases, this node gives two numbers 1 and N, where N is the number of surface elements written for the region. Face to Vertex Map / ElementConnectivity is a DataArray_t node that contains the fact to vertex map for each boundary face (2D QUAD_4) element. An example of this array with both triangular and quadrilateral faces is as follows:

465 152 155 155
459 176 178 178
579 154 157 157
579 156 154 154
465 157 152 152
2 32 31 1
1 31 462 461
3 33 32 2
4 34 33 3
5 35 34 4
6 36 35 5
7 37 36 6
8 38 37 7
9 39 38 8

The first five elements on this boundary are actually triangular faces written as degenerate quadrilaterals. The remaining elements are real quadrilaterals. The elements are always written to the file with the CGNS element type QUAD_4.

15.4.2.3. Solution File Specific Nodes

GridCoordinates is only a link node that gives the filename of the mesh file corresponding to the solution.

Face to Vertex Map is another link node that gives the filename of the mesh file corresponding to the solution.

FlowSolution/Pressure is a DataArray_t node that contains the boundary pressures on element vertices.

The last example shows a case where the dipole export surface has been broken into two regions because the boundary list spans across more than one CFX domain. In this case, one domain is rotating (R1) and the other is stationary (S2):

The main difference between this example and the last one is that the split regions have been prefixed with the corresponding CFX domain name and a period character. All other nodes contain the exact data as the simple case previously described.