$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