|
|
本文目录文件结构块格式本文中的网格文件指的是Gmsh的ASCII文本文件,内容主要参考Gmsh的官方文档:http://gmsh.info/doc/texinfo/gmsh.html#MSH-ASCII-file-format。; T" `5 y' | j: r; d- X' i' B5 a
文件结构返回目录Gmsh网格文件由一个或多个块(section)构成。块定义以$Name开始,$EndName结尾,例如$Nodes和$EndNodes共同定义一个块。$MeshFormat块是必须的(第一个出现的块),$Nodes, $Elements等块可选。如果定义了$Elements块,则必须给出$Node块。目前$Nodes和$Elements块在一个文件中只允许出现一次(未来版本可能会更改),其他块可重复多次。如果遇到了未定义的块,Gmsh将跳过该块。利用此特性可以为Gmsh网格文件增加注释,例如放在$Comment和$EndComment包裹的块中。
. y' H2 P) R9 q 块格式返回目录以下对常见的各个块格式做说明。. ?- i# u& H/ q6 u0 D8 ^6 E
MeshFormat$MeshFormat块给出三部分信息:
J3 T' Z* q, J0 @7 G9 G[ol]文件格式版本号,目前是固定值2.2;文件类型,在ASCII文件中值为0;数据长度,即单精度浮点数所占字节数,通常为8。[/ol]一个典型的MeshFormat块:& M0 T* I. g1 K6 D- p) O
$MeshFormat
4 Z V5 T' G E3 p/ C2.2 0 8
. Q$ y/ [- H" A) d; r* S$EndMeshFormat: m0 i" k4 r3 ]9 m6 q0 `7 Q: k
NodesNodes块第一行为顶点总数,接下来每一行按照“顶点编号 X坐标 Y坐标 Z坐标”的格式定义一个顶点。Gmsh是三维网格生成器,二维顶点只需把Z坐标设置为常数即可。$ [6 i8 e% D- B. W3 {& u
一个典型的Nodes块:
/ U* \. A6 `" t$ [8 F x0 L$Nodes* U& G+ a/ g5 k5 r# e7 `+ e
49 e1 _6 j4 v. P0 n' `/ H$ _3 U
1 0.0 0.0 0.0
$ {8 r8 u; b' I* H( j2 1.0 0.0 0.0% y+ G9 N1 p$ u5 q# H& o1 h3 x' ~
3 1.0 1.0 0.07 f W9 c3 Y9 s/ i# T2 m5 I
4 0.0 1.0 0.0& a# Z G8 o1 r" B
$EndNodes$ g( A! V1 [1 C* O G' x
Elements注意:Gmsh默认Nodes块出现在Elements之前。
b/ @% a% W7 \1 fElements块是网格中最关键的块,也是结构定义相对复杂的块。Elements块的结构如下:
4 c. `7 ]' {0 C8 j4 a3 H8 s网格数
1 B" Y" l- v, a0 K; v. M( x$ o/ L网格编号 网格类型 tag数量 tag列表 顶点列表
9 t% u3 i# J8 g# t( F网格单元的顶点数由单元类型决定,因此定义行中未出现顶点数字段。
. o* Z4 O, P+ \' J理论上,网格的顶点数和tag数可以是不小于0的任意整数,所以定义网格单元的行长度不固定,单元可能有不同数量的tag以及顶点。; {/ u8 P2 g d% O
Gmsh支持的主要网格类型编号如下:' ^/ N# O/ W! V$ _6 z6 @( Q, I1 p% v9 H
1: 两个点组成的线段9 E/ n5 j2 E. P6 Z$ m: }1 F9 o' u
2:三个点组成的三角形0 U, Z3 h% q; S: }, E/ q
3:四个点组成的四边形0 y8 W1 z. d0 L/ o) ^
4:四个点组成的立方体# q5 b* e. e/ ^, C
5:八个点组成的六面体
7 i, D Y6 m9 p2 u7 C# r$ [6:六个点组成的棱柱
) n+ q8 i1 T8 c! ?6 F7:五个点组成的金字塔体: f @) w0 Z5 L6 w/ f
8:三个点组成的二阶线段 (2个起止顶点+1个边上顶点)$ S; k$ O: n. |7 L- u" z
9:六个点组成的二阶三角形 (3个顶点+3个边上顶点)
9 L" x' h1 x, \7 O3 ^( s10:9个点组成的二阶四边形 (4个顶点+4个边上顶点+1个面上顶点)
8 u: W+ a- q: C# s& ?! @11:10个点组成的二阶立方体 (4个顶点+6个边上顶点)4 A E# k% j0 a6 u
12:27个点组成的二阶六面体 (8个顶点+12个边上顶点+6个面上顶点+1个体节点)
1 E% E7 r( z. i( x# M( o13:18个顶点组成的二阶棱柱 (6个顶点+ 9个边上顶点+3个四边形面上顶点)
9 ^$ Q6 y0 O9 G3 z2 V/ Q/ ~( w14:14个顶点组成的二阶金字塔 (5个顶点+8个边上节点+1个底面四边形的面上顶点)7 m' S8 h9 s0 T3 ^% W
15:单个顶点
e" G: l R' ]2 W# ^16:8个顶点组成的二阶四边形 (4个顶点+4个边上顶点)& H ~ R! \# ~1 x+ G8 f
17:20个顶点组成的二阶六面体 (8个顶点+12个边上节点)
V! R( T6 k9 r6 X- ]; h1 O18:15个顶点组成的二阶棱柱(6个顶点+9个边上节点): |( u9 y& |7 }0 Q$ \4 ?
19:13个顶点组成的二阶金字塔 (5个顶点+8个边上节点).5 ~ w3 W( S8 w& b6 t( b3 g
其他高阶网格定义请参考官方文档6 A. ?4 {4 z2 o( D# |& o. }3 J4 }
常规情形下,每个网格单元都包含如下tag:一个指示网格所属的物理实体的tag,个个指示网格所归属的几何实体的tag,一个指示网格单元所在的分区编号的tag。Gmsh和大多数代码要求单元至少包含前两个tag。
! n2 a! _4 s9 g, P$ I顶点列表给出组成网格单元的顶点编号,其中编号是出现在$Nodes块中的顶点编号。对于高阶网格单元,Gmsh按照如下顺序对顶点进行编号:
0 [0 m* j; H1 d; A; m3 D[ol]单元的基本顶点每个边上的顶点每个面上的顶点体顶点[/ol]总体原则即:高阶网格顶点出现在低阶网格顶点之后。不能处理高阶网格的程序,只需要读取低阶网格顶点即可。
! d' G8 c' S; h: g其他块的字段含义请参考官方文档。
; r6 `1 r+ d6 g效率提示Gmsh没有要求元素的编号是连续的。但出于效率考虑,请尽量使用连续、紧凑的编号。例如两个顶点的编号,不用0和1,而是1, 10000,会导致程序性能下降:Gmsh不得不使用map而非数组来存储和访问元素,后处理程序中会分配10000个单元(大部分是无用的空值)的数组,而这些代价都是可避免的。5 G, L9 \2 W; G6 Z5 c- F
AD:【国外VPS推荐】 搬瓦工三网回程CN2 GIA VPS,季付46.87$打赏赞(2) |
|