### 14.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: rotating dipole
             Option = Acoustic Rotating Dipole
             Output Boundary List = Blade
           END
           EXPORT SURFACE: regularities
             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:

#### 14.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 with 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`.

#### 14.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`.

#### 14.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.

Release 18.2 - © ANSYS, Inc. All rights reserved.