$Id: GmshFormats.html,v 1.1 2004/09/15 02:54:11 rli Exp $
这个文件是 Gmsh 1.2 版的网格和后处理文件的文件格式的描述。 (本文件中只描述了 Gmsh 的输入输出接口。关于 Gmsh 怎么 样进行几何体、选项、脚本等的行为和表现请参考 一步一步学习 Gmsh 中的详细内容。)
'msh' 文件格式是 Gmsh 的内部输出文件格式。这个文件格式被分成了 两个部分,分别用一对 $KEY 和 $ENDKEY 引用 起来,其中 $NOD/$ENDNOD 段中描述的是结点,$ELM/$ENDELM 段中描述的是元素。
$NOD
number-of-nodes
node-number coord1 coord2 coord3
...
$ENDNOD
$ELM
number-of-elements
elm-number elm-type elm-region unused nb-nodes node-numbers
...
$ENDELM
上面的语法中所有的变量,除了 coord1,coord2,
和 coord3 是符点数以外,其他的都是整型数。其中
node-numbers 是一串整数,表示该元素的各个节点。
ele-type 是几何体的类型,取值和意义如下:
| 1 | Line | (2 nodes, 1 edge). |
| 2 | Triangle | (3 nodes, 3 edges). |
| 3 | Quadrangle | (4 nodes, 4 edges). |
| 4 | Tetrahedron | (4 nodes, 6 edges, 4 facets). |
| 5 | Hexahedron | (8 nodes, 12 edges, 6 facets). |
| 6 | Prism | (6 nodes, 9 edges, 5 facets). |
| 7 | Pyramid | (5 nodes, 8 edges, 5 facets). |
| 15 | Point | (1 node). |
后处理文件分为几个部分:其中一个部分用 $PostFormat/$EndPostFormat 括起来,其它的部分是使用 $View/$EndView 括起来的,每个 部分对应着一个视图。语法描述如下:
$PostFormat
1.2 file-type data-size
$EndPostFormat
$View
view-name nb-time-steps
nb-scalar-points nb-vector-points nb-tensor-points
nb-scalar-lines nb-vector-lines nb-tensor-lines
nb-scalar-triangles nb-vector-triangles nb-tensor-triangles
nb-scalar-tetrahedra nb-vector-tetrahedra nb-tensor-tetrahedra
nb-text2d nb-text2d-chars nb-test3d nb-text3d-chars
time-step-values
scalar-point-value ...
vector-point-value ...
tensor-point-value ...
scalar-line-value ...
vector-line-value ...
tensor-line-value ...
scalar-triangle-value ...
vector-triangle-value ...
tensor-triangle-value ...
scalar-quadrangle-value ...
vector-quadrangle-value ...
tensor-quadrangle-value ...
scalar-tetrahedron-value ...
vector-tetrahedron-value ...
tensor-tetrahedron-value ...
scalar-hexahedron-value ...
vector-hexahedron-value ...
tensor-hexahedron-value ...
scalar-prism-value ...
vector-prism-value ...
tensor-prism-value ...
scalar-pyramid-value ...
vector-pyramid-value ...
tensor-pyramid-value ...
text2d ... text2d-chars ...
text3d ... text3d-chars ...
$endView
其中:
coord1-node1 coord1-node2 coord1-node3
coord2-node1 coord2-node2 coord2-node3
coord3-node1 coord3-node2 coord3-node3
comp1-node1-time1 comp2-node1-time1 comp3-node1-time1
comp1-node2-time1 comp2-node2-time1 comp3-node2-time1
comp1-node3-time1 comp2-node3-time1 comp3-node3-time1
comp1-node1-time2 comp2-node1-time2 comp3-node1-time2
comp1-node2-time2 comp2-node2-time2 comp3-node2-time2
comp1-node3-time2 comp2-node3-time2 comp3-node3-time2
...
coord1 coord2 style index其中 index 是相应的二维字符串的在 text2d-chars 中的起始位置;
coord1 coord2 coord3 style index其中 index 是相应的三维字符串的在 text3d-chars 中的起始位置;
二进制文件的后处理文件的格式和 ASCII 文件格式基本一样。我们仅列出 不同的部分:
下面是一段存储一个二进制后处理文件的 C 语言伪代码:
int one = 1;
fprintf(file, "$PostFormat\n");
fprintf(file, "%g %d %d\n", 1.2, 1, sizeof(double));
fprintf(file, "$EndPostFormat\n");
fprintf(file, "$View\n");
fprintf(file, "%s %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d "
"%d %d %d %d %d %d %d %d %d %d %d %d\n",
view-name, nb-time-steps,
nb-scalar-points, nb-vector-points, nb-tensor-points,
nb-scalar-lines, nb-vector-lines, nb-tensor-lines,
nb-scalar-triangles, nb-vector-triangles, nb-tensor-triangles,
nb-scalar-quadrangles, nb-vector-quadrangles, nb-tensor-quadrangles,
nb-scalar-tetrahedra, nb-vector-tetrahedra, nb-tensor-tetrahedra,
nb-scalar-hexahedra, nb-vector-hexahedra, nb-tensor-hexahedra,
nb-scalar-prisms, nb-vector-prisms, nb-tensor-prisms,
nb-scalar-pyramids, nb-vector-pyramids, nb-tensor-pyramids,
nb-text2d, nb-text2d-chars, nb-text3d, nb-text3d-chars);
fwrite(&one, sizeof(int), 1, file);
fwrite(time-step-values, sizeof(double), nb-time-steps, file);
fwrite(all-scalar-point-values, sizeof(double), ..., file);
...
fprintf(file, "\n$EndView\n");
在这段伪代码中, all-scalar-point-values 是双精度浮点数组,
其中存储的是所有的 scalar-point-value 列表,它们被一个接
一个的放在一起,形成一个很长的数组。其它变量的处理方式也是这样的。
如果数据量非常小,或者是为了测试的目的,Gmsh 还提供了一种使用几何体 的语法进行解释的后处理文件格式。您能够将这样的后处理视图放在几何 造型的描述文件中,这个格式的语法如下:
View "name" {
type-of-element (list-of-coordinates) {list-of-values} ;
...
};
这个格式支持 26 种对象的显示,如下表:
| object name | type-of-element | list-of-coordinates | list-of-values |
| scalar point | SP | 3 | 1 * nb-time-steps |
| vector point | VP | 3 | 3 * nb-time-steps |
| tensor point | TP | 3 | 9 * nb-time-steps |
| scalar line | SL | 6 | 2 * nb-time-steps |
| vector line | VL | 6 | 6 * nb-time-steps |
| tensor line | TL | 6 | 18 * nb-time-steps |
| scalar triangle | ST | 9 | 3 * nb-time-steps |
| vector triangle | VT | 9 | 9 * nb-time-steps |
| tensor triangle | TT | 9 | 27 * nb-time-steps |
| scalar quadrangle | SQ | 12 | 4 * nb-time-steps |
| vector quadrangle | VQ | 12 | 12 * nb-time-steps |
| tensor quadrangle | TQ | 12 | 36 * nb-time-steps |
| scalar tetrahedron | SS | 12 | 4 * nb-time-steps |
| vector tetrahedron | VS | 12 | 12 * nb-time-steps |
| tensor tetrahedron | TS | 12 | 36 * nb-time-steps |
| scalar hexahedron | SH | 24 | 8 * nb-time-steps |
| vector hexahedron | VH | 24 | 24 * nb-time-steps |
| tensor hexahedron | TH | 24 | 72 * nb-time-steps |
| scalar prism | SI | 18 | 6 * nb-time-steps |
| vector prism | VI | 18 | 18 * nb-time-steps |
| tensor prism | TI | 18 | 54 * nb-time-steps |
| scalar pyramid | SY | 15 | 5 * nb-time-steps |
| vector pyramid | VY | 15 | 15 * nb-time-steps |
| tensor pyramid | TY | 15 | 45 * nb-time-steps |
| text 2d | T2 | 4 | arbitrary |
| text 3d | T3 | 5 | arbitrary |
v
|
|
1-----u
edge 1: nodes 1 -> 2
v
|
|
1-----2--u
edge 1: nodes 1 -> 2
v 2: 1 -> 3
| 3: 2 -> 3
|
3 face 1: edges 1 -2 3 nodes 1 2 3
|\
| \
|__\___u
1 2
edge 1: nodes 1 -> 2
v 2: 1 -> 4
| 3: 2 -> 3
4--|--3 4: 3 -> 4
| | |
+--+--+--u face 1: edges 1 -2 3 4 nodes 1 2 3 4
| | |
1--|--2
|
edge 1: nodes 1 -> 2
v 2: 1 -> 3
| 3: 1 -> 4
| 4: 2 -> 3
| 5: 2 -> 4
3 6: 3 -> 4
|\
| \ face 1: edges 1 -3 5 nodes 1 2 4
|__\2_____u 2: -1 2 -4 1 3 2
1\ / 3: -2 3 -6 1 4 3
\4 4: 4 -5 6 2 3 4
\
w
edge 1: nodes 1 -> 2
v 2: 1 -> 4
| 3: 1 -> 5
| 4: 2 -> 3
4----|--3 5: 2 -> 6
|\ | |\ 6: 3 -> 4
| 8-------7 7: 3 -> 7
| | ----|---u 8: 4 -> 8
1-|---\-2 | 9: 5 -> 6
\| \ \| 10: 5 -> 8
5-----\-6 11: 6 -> 7
\ 12: 7 -> 8
w
face 1: edges 1 -3 5 -9 nodes 1 2 6 5
2: -1 2 -4 -6 1 4 3 2
3: -2 3 -8 10 1 5 8 4
4: 4 -5 7 -11 2 3 7 6
5: 6 -7 8 -12 3 4 8 7
6: 9 -10 11 12 5 6 7 8
edge 1: nodes 1 -> 2
v 2: 1 -> 3
3 | 3: 1 -> 4
|\| 4: 2 -> 3
| | 5: 2 -> 5
1_|2 6: 3 -> 6
\| 6 7: 4 -> 5
|_|_\___u 8: 4 -> 6
\| \ 9: 5 -> 6
4 __5
\ face 1: edges 1 -3 5 -7 nodes 1 2 5 4
\ 2: -1 2 -4 1 3 2
w 3: -2 3 -6 8 1 4 6 3
4: 4 -5 6 -9 2 3 6 5
5: 7 -8 9 4 5 6
edge 1: nodes 1 -> 2
v 2: 2 -> 3
| 3: 4 -> 3
4-------3 4: 1 -> 4
|\ /| 5: 1 -> 5
|\ / | 6: 2 -> 5
1-\- /--2---u 7: 4 -> 5
\ \/ / 8: 3 -> 5
\ 5
\ face 1: edges 1 6 -5 nodes 1 2 5
\ 2: 5 -7 3 1 5 4
w 3: 2 8 -6 2 3 5
4: -3 7 -8 3 4 5
5: 4 3 -2 -1 1 4 3 2