|
|
本文目录文件结构块格式本文中的网格文件指的是Gmsh的ASCII文本文件,内容主要参考Gmsh的官方文档:http://gmsh.info/doc/texinfo/gmsh.html#MSH-ASCII-file-format。 @3 W, c q, B- B& H
文件结构返回目录Gmsh网格文件由一个或多个块(section)构成。块定义以$Name开始,$EndName结尾,例如$Nodes和$EndNodes共同定义一个块。$MeshFormat块是必须的(第一个出现的块),$Nodes, $Elements等块可选。如果定义了$Elements块,则必须给出$Node块。目前$Nodes和$Elements块在一个文件中只允许出现一次(未来版本可能会更改),其他块可重复多次。如果遇到了未定义的块,Gmsh将跳过该块。利用此特性可以为Gmsh网格文件增加注释,例如放在$Comment和$EndComment包裹的块中。; t1 O& E8 s0 Q% P6 S5 x5 x
块格式返回目录以下对常见的各个块格式做说明。 c% F6 r$ x0 F' H- t; z
MeshFormat$MeshFormat块给出三部分信息:
! B" {% c$ f0 z* j; a, W[ol]文件格式版本号,目前是固定值2.2;文件类型,在ASCII文件中值为0;数据长度,即单精度浮点数所占字节数,通常为8。[/ol]一个典型的MeshFormat块:9 G# b# `* H2 ]0 c( F! |' n5 Z
$MeshFormat# I2 O. Q6 }" C; r \8 d
2.2 0 8+ |3 \* l, d& E" [+ G( r! f
$EndMeshFormat
. _2 c9 G/ H; h. J; U% KNodesNodes块第一行为顶点总数,接下来每一行按照“顶点编号 X坐标 Y坐标 Z坐标”的格式定义一个顶点。Gmsh是三维网格生成器,二维顶点只需把Z坐标设置为常数即可。2 j" n: S$ k# o4 q) l; C& f, v: |
一个典型的Nodes块:
0 D* O! [9 [2 ^* R0 m- U |$Nodes
1 Q, O7 q) f" e# A8 W4
2 x6 d7 {7 M1 m3 u6 A4 {1 0.0 0.0 0.02 l# V/ u, ?+ l: `. T. L/ s5 z0 o
2 1.0 0.0 0.0
4 J- D! o% p. b3 1.0 1.0 0.03 i" T: S' ?; b! a
4 0.0 1.0 0.0" }2 {' I$ D: C3 C
$EndNodes* ~2 \+ ?' C. T' H7 S# @
Elements注意:Gmsh默认Nodes块出现在Elements之前。0 W. ^% N4 q7 \4 C. o" ` c
Elements块是网格中最关键的块,也是结构定义相对复杂的块。Elements块的结构如下:4 o& h1 j( g W& ?/ J
网格数# T3 C& _5 [" }$ F, J
网格编号 网格类型 tag数量 tag列表 顶点列表! w9 f8 f4 w' E; ~! F
网格单元的顶点数由单元类型决定,因此定义行中未出现顶点数字段。
- L6 e$ {) a( W! q. ?0 Q理论上,网格的顶点数和tag数可以是不小于0的任意整数,所以定义网格单元的行长度不固定,单元可能有不同数量的tag以及顶点。
, ]5 |! C- B" k; a' ]Gmsh支持的主要网格类型编号如下:
. a5 L2 U0 e6 D- w, W1: 两个点组成的线段5 |# ~2 n7 S1 T* c' p* p4 n$ G% t
2:三个点组成的三角形& h* C8 W4 N" L4 k, ~
3:四个点组成的四边形
, Z! ?4 S1 A- p$ C4:四个点组成的立方体
2 L! p9 c' ~3 H, O0 d1 L/ d8 w+ t5:八个点组成的六面体/ ?# E7 [2 O# l1 ^( I* p. l
6:六个点组成的棱柱 u( ]4 n/ o% \3 D6 q5 J# V2 @# X
7:五个点组成的金字塔体
% a$ d# l8 L. K3 h8:三个点组成的二阶线段 (2个起止顶点+1个边上顶点)5 h+ @0 O/ \% y
9:六个点组成的二阶三角形 (3个顶点+3个边上顶点)
3 D. [: w5 q/ f9 u10:9个点组成的二阶四边形 (4个顶点+4个边上顶点+1个面上顶点)% [6 j9 m p+ ~3 d' Q
11:10个点组成的二阶立方体 (4个顶点+6个边上顶点)
6 x' I9 H+ S, ^& C! \9 W, \# j; k6 F12:27个点组成的二阶六面体 (8个顶点+12个边上顶点+6个面上顶点+1个体节点), K0 w) g/ S4 {% J, u+ c9 U4 {
13:18个顶点组成的二阶棱柱 (6个顶点+ 9个边上顶点+3个四边形面上顶点)+ q+ I6 w/ H' y. s$ {. I$ s
14:14个顶点组成的二阶金字塔 (5个顶点+8个边上节点+1个底面四边形的面上顶点)/ u ^" G7 R# }3 n O. c$ w
15:单个顶点: D, C1 Y W" Y1 a+ J. x# t0 f
16:8个顶点组成的二阶四边形 (4个顶点+4个边上顶点)
8 s4 Q5 h- O/ |17:20个顶点组成的二阶六面体 (8个顶点+12个边上节点)
! O4 ]& t ?. z8 N18:15个顶点组成的二阶棱柱(6个顶点+9个边上节点)
5 O6 r4 _7 L8 P4 c! l5 W19:13个顶点组成的二阶金字塔 (5个顶点+8个边上节点).1 y/ @) f7 g1 I' h+ L
其他高阶网格定义请参考官方文档; w: h4 h' f) \. D8 C
常规情形下,每个网格单元都包含如下tag:一个指示网格所属的物理实体的tag,个个指示网格所归属的几何实体的tag,一个指示网格单元所在的分区编号的tag。Gmsh和大多数代码要求单元至少包含前两个tag。 q& ^) P, y1 [4 F3 C# h3 I$ S& l
顶点列表给出组成网格单元的顶点编号,其中编号是出现在$Nodes块中的顶点编号。对于高阶网格单元,Gmsh按照如下顺序对顶点进行编号:
9 Q# I0 l4 j% B[ol]单元的基本顶点每个边上的顶点每个面上的顶点体顶点[/ol]总体原则即:高阶网格顶点出现在低阶网格顶点之后。不能处理高阶网格的程序,只需要读取低阶网格顶点即可。
+ k8 K- N) K/ h( |0 }$ V, z其他块的字段含义请参考官方文档。0 c0 q6 e( ~" C( a( U9 H4 f
效率提示Gmsh没有要求元素的编号是连续的。但出于效率考虑,请尽量使用连续、紧凑的编号。例如两个顶点的编号,不用0和1,而是1, 10000,会导致程序性能下降:Gmsh不得不使用map而非数组来存储和访问元素,后处理程序中会分配10000个单元(大部分是无用的空值)的数组,而这些代价都是可避免的。& n% d8 [' ^6 r# \6 I+ a5 e, i
AD:【国外VPS推荐】 搬瓦工三网回程CN2 GIA VPS,季付46.87$打赏赞(2) |
|