Skip to content

File Format of XGC Mesh Files

Robert Hager edited this page Jun 12, 2019 · 4 revisions

File Format of XGC Mesh Files

XGC requires three input files to set up its triangular solver mesh:

  1. A file containing the cylindrical coordinates R and Z of the mesh vertices (the "node" file)
  2. A file containing the triangle connectivity of the vertices (the "ele" file)
  3. A file containing the flux-surface connectivity of the vertices (the "flx" file)

The following paragraph describes the file format of those files.

The "node" File

The "node" file starts with a header line that contains the number of vertices of the mesh. Each of the following lines contains the R and Z coordinates of the mesh vertices, e.g.:

181162  2  0  1
1 1.218645 -1.363000 0
2 1.216197 -1.363000 0
3 1.220985 -1.363000 0
4 1.218374 -1.360182 0
5 1.220244 -1.360709 0
[...]

The three numbers following the number of vertices in the first line are there for historical reasons and can be removed in future releases (has to be coordinated with a modification in XGC). The vertex data is arranged in four columns. The first column is the vertex index. The second and third column are the R and Z coordinates, and the last column indicates whether the vertex is on the wall curve (1) or not (0).

Example of an XGC mesh

Fig. 1: Example of an XGC mesh. There are four distinct regions, i) the closed flux-surface region (core), ii) the scrape-off layer (SOL), iii) the private flux region, and iv) the unstructured mesh region (outside the blue surface). The separatrix, which includes the X-point and separates core, SOL and private region, is shown in red. There are cases with two X-points and two separatrices within the wall curve. In those cases, there is also a second private region.

The "ele" file

The "ele" file contains the triangle connectivity of the mesh. The first line in the file lists the number of triangles (and some other numbers that are there for historical reasons but are essentially obsolete). Each of the following lines lists the triangle index and the indices of the three vertices of the triangle, e.g.:

  361725        3        0
     1      2      1      4
     2      5      1      3
     3      1      5      4
     4      2      7      6
     5      2      8      7
     6      8      2      4
     7     10      3      9
[...]

The "flx" file

Most vertices in XGC meshes are not really unstructured, but are aligned on a set of surfaces of constant poloidal magnetic flux (flux-surfaces or flux-curves). The minority of vertices is really unstructured. In this sense, XGC meshes are divided into two regions, the field-aligned and unstructured regions. The two regions are separated by the blue flux-surface in Fig. 1. Around the X-point and where flux-surfaces intersect with the wall curve, additional vertices that are not field-aligned have to be added to generate high-quality meshes. Those vertices are called "non-aligned vertices" in the remainder of this section. Fig. 2 shoes an example of those non-aligned vertices.

Field-Aligned and non-aligned vertices

Fig. 2: Nonaligned vertices are shown in red, field-aligned vertices and unstructured vertices are shown in black. The non-aligned vertices are all in the region that is otherwise filled with field-aligned mesh (inside the blue surface in Fig. 1).

Simply speaking, flux-surface averages <A> in XGC are computed by calculating the mean of A over the vertices on the same flux-surface. In many situations, it is necessary to know the value of <A> on each vertex of the mesh. This value is readily obtained for all field-aligned vertices. The value of <A> on the non-aligned vertices, on the other hand, is obtained through interpolation from the field-aligned vertices. In XGC, linear interpolation is used, which requires knowledge of the two flux-surfaces between which each non-aligned vertex lies. Fig. 3 shows an example. Two adjacent flux surfaces are shown in orange, and the non-aligned vertices between them are shown in red.

Non-aligned vertices and associated flux-surfaces

The "flx" file contains lists of vertices that are on the same flux-surface, the two flux-surfaces associated with each of the non-aligned vertices, and some other information about the mesh structure.

1
1920   -1
93 23 16  0
94 -1
   1   11   21   29
 69137
 70218  70221  70222  70223 [...]
 72375  72376  72377  72378 [...]
 75593  75597  75598  75599 [...]
[...]
-1
3893
 11131
106 107
 10822
106 107
 10825
106 107
 10532
-1

The first line is the number of separatrices/X-points in the mesh (currently a maximum of two is supported. The second line contains the indices of the X-point vertices. The third line is the number of flux-surfaces in the core, the SOL, the lower private region and the upper private region (if it exists). The fourth line contains the indices of the separatrix flux-surfaces. The fifth line contains the number of vertices on each flux-surface. The following lines until the first line with -1 are lists of indices of vertices. The length of each line is given by the numbers in line 5. The line after the first -1 is the number of non-aligned vertices. Finally, the following lines until the second -1 give the index of each non-aligned vertex and the indices of the two associated flux-surfaces.