forked from Nek5000/NekDoc
-
Notifications
You must be signed in to change notification settings - Fork 0
/
fld_format.tex
83 lines (73 loc) · 3.28 KB
/
fld_format.tex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
The fld file format is used to write and read data both in serial and parallel
in Nek5000. This section describes the format and should allow third party tool
developers to implement pre and postprocessing tools.
The file is composed of:
\begin{itemize}
\item the {\it header} in ASCII format,
\item mesh data, including the geometry, saved unrolled as scalar vector
fields
% \item and meta data ({\color{red} What is this exactly?}).
\end{itemize}
We will go through each of these categories and give a description of its
composition.
\subsection{Header}
The header provides structural information about the stored data that is needed
to parse it correctly. The header is composed of 11 values in ASCII format. It
has a fixed size of 132 bytes and starts with the string \code{\#std}. All
header entries are padded to the right. After the header with 132 bytes, 4 bytes
follow that determine the endianess of the binary file. It is the binary
representation of the number $6.54321$ either in little or big endian.
\begin{center}
\begin{tabular}{c|c|c|c}
{\bf Entry} & {\bf Padding} & {\bf Name} & {\bf Short Description} \\
\hline
1 &2 & \code{wdsizo} & sets the precision to 4 (float) or 8 (double) \\
2 &3 & \code{nx} & number of coordinates in x direction \\
2 &3 & \code{ny} & number of coordinates in y direction \\
2 &3 & \code{nz} & number of coordinates in z direction \\
5 &11 & \code{nelo} & number of elements \\
6 &11 & \code{nelgt} & {\color{red} ----}\\
7 &21 & \code{time} & time stamp \\
8 &10 & \code{iostep} & time step\\
9 &7 & \code{fid0} & {\color{red} field id}\\
10 &7 & \code{nfileoo} & {\color{red} number of files}\\
11 &4 & \code{rdcode} & Fields written \\
\end{tabular}
\end{center}
Example of a header:
\begin{center}
\code{\#std 4 6 6 1 36 36 0.1000000000000E+03 10000 0 1 XUP úaÑ@}
\end{center}
\code{wdsize} sets the precision of the floating point numbers in the file. This
is either 4 bytes for floats or 8 bytes for double precision.
\code{nx}, \code{ny} and \code{nz} set the number of coordinates in x, y and z
direction for each element (polynomial order), respectively. \code{nelo} sets
the number of total elements on the mesh.
\code{time} is the simulation time while \code{iostep} is the time step when the file was written.
\code{rdcode} determines which fields are contained in the file:
\begin{itemize}
\item X: Geometry
\item U: Velocity
\item P: Pressure
\item T: Temperature
\item S: Passive scalar
\end{itemize}
\subsection{Data}
The data field begins after the first 136 bytes of the file. The values are
stored unrolled for each element and for each direction.
Example code for reading the geometry field in python:
\begin{lstlisting}
for iel in range(nelo):
x=ifilebuf.read(nxyzo8*wdsizo)
xup=numpy.array(struct.unpack(nxyzo8*c,x),dtype=c)
xfield[iel,:]=xup
y=ifilebuf.read(nxyzo8*wdsizo)
yup=numpy.array(struct.unpack(nxyzo8*c,y),dtype=c)
yfield[iel,:]=yup
if if3d:
z=ifilebuf.read(nxyzo8*wdsizo)
zup=numpy.array(struct.unpack(nxyzo8*c,z),dtype=c)
zfield[iel,:]=zup
\end{lstlisting}
%\subsection{Meta Data}
%{\color{red} No clue about the metadata}