|
|
发表于 2022-9-11 21:05:03
|
查看: 1228 |
回复: 0
本文目录文件结构块格式本文中的网格文件指的是Gmsh的ASCII文本文件,内容主要参考Gmsh的官方文档:http://gmsh.info/doc/texinfo/gmsh.html#MSH-ASCII-file-format。
+ M1 e( p$ W1 }3 U0 ?- \' [ 文件结构返回目录Gmsh网格文件由一个或多个块(section)构成。块定义以$Name开始,$EndName结尾,例如$Nodes和$EndNodes共同定义一个块。$MeshFormat块是必须的(第一个出现的块),$Nodes, $Elements等块可选。如果定义了$Elements块,则必须给出$Node块。目前$Nodes和$Elements块在一个文件中只允许出现一次(未来版本可能会更改),其他块可重复多次。如果遇到了未定义的块,Gmsh将跳过该块。利用此特性可以为Gmsh网格文件增加注释,例如放在$Comment和$EndComment包裹的块中。' D; P* X$ X7 g- q( Z8 _2 a
块格式返回目录以下对常见的各个块格式做说明。) J: Y9 l, T+ f2 i" o1 X" t2 ?
MeshFormat$MeshFormat块给出三部分信息:9 W7 w/ v) m) _$ \& _! ]
[ol]文件格式版本号,目前是固定值2.2;文件类型,在ASCII文件中值为0;数据长度,即单精度浮点数所占字节数,通常为8。[/ol]一个典型的MeshFormat块:( j: {+ ]' Q1 o) ?* W
$MeshFormat
4 T; X5 l6 q! K2.2 0 83 H2 O; |8 g1 m9 ], L ?
$EndMeshFormat
) V0 p( y' t% I7 f; iNodesNodes块第一行为顶点总数,接下来每一行按照“顶点编号 X坐标 Y坐标 Z坐标”的格式定义一个顶点。Gmsh是三维网格生成器,二维顶点只需把Z坐标设置为常数即可。
0 e- L$ d A/ r' o( H/ [8 _ E- c/ T一个典型的Nodes块:
6 H. V5 G, c% o! B' u7 |) v$Nodes6 T- d* o4 e- J( f
4
E; P" L6 @+ a9 m1 0.0 0.0 0.0
+ D0 Y( {; d% M. s& C2 1.0 0.0 0.0
* ]! D, n3 E* E- D8 \8 p3 1.0 1.0 0.0
+ V! e( l6 a* s9 e. L8 A- x4 0.0 1.0 0.0. e5 l( g1 z( H
$EndNodes: V1 D4 O8 j8 f6 l5 X+ q/ K( y
Elements注意:Gmsh默认Nodes块出现在Elements之前。5 f! l# ^+ L) J! c8 v
Elements块是网格中最关键的块,也是结构定义相对复杂的块。Elements块的结构如下:7 y& J$ k5 o6 z1 Y# \+ h
网格数
7 D# G7 G5 l+ C& `网格编号 网格类型 tag数量 tag列表 顶点列表 }+ e+ D7 M( \) X' P! u0 h- }+ w
网格单元的顶点数由单元类型决定,因此定义行中未出现顶点数字段。
$ o. m$ ^( S8 p) D2 [0 }3 T理论上,网格的顶点数和tag数可以是不小于0的任意整数,所以定义网格单元的行长度不固定,单元可能有不同数量的tag以及顶点。/ b+ f# X. G; c+ A% ~1 a% ?3 i
Gmsh支持的主要网格类型编号如下:
7 X3 h$ d7 ~0 a- F G1: 两个点组成的线段5 k1 K5 x7 k( ^4 e5 t7 z+ s) R
2:三个点组成的三角形4 ?, M& D( N+ S. A! B- C
3:四个点组成的四边形3 K7 ^6 r7 _; s1 ]. G, J
4:四个点组成的立方体
+ f. `2 [/ S+ ~, s' g+ c5:八个点组成的六面体2 b6 v; J! Z1 r3 C# w
6:六个点组成的棱柱
! I8 ]& g. @/ y5 B6 C6 J3 K7:五个点组成的金字塔体+ e6 ^8 U b$ e" J1 B$ i2 H6 W
8:三个点组成的二阶线段 (2个起止顶点+1个边上顶点)
% @6 d" o* \, N4 p" P$ p" Y9:六个点组成的二阶三角形 (3个顶点+3个边上顶点)5 n& Z+ a/ U3 |! f |. b
10:9个点组成的二阶四边形 (4个顶点+4个边上顶点+1个面上顶点)' {1 o+ E2 c# i; b1 ]
11:10个点组成的二阶立方体 (4个顶点+6个边上顶点)
1 y# E ~: b9 e% D. c12:27个点组成的二阶六面体 (8个顶点+12个边上顶点+6个面上顶点+1个体节点)
! T. m3 [$ d. e) l8 f/ N13:18个顶点组成的二阶棱柱 (6个顶点+ 9个边上顶点+3个四边形面上顶点)1 c8 O5 _& v5 g* {3 h
14:14个顶点组成的二阶金字塔 (5个顶点+8个边上节点+1个底面四边形的面上顶点). `! e2 _9 q* e- R# W" e: S
15:单个顶点
# A' M% d( R5 t6 v6 ]; J16:8个顶点组成的二阶四边形 (4个顶点+4个边上顶点) K, h( b- a% T4 P, S( N' b
17:20个顶点组成的二阶六面体 (8个顶点+12个边上节点)
. [- E# I, A. x/ w7 W18:15个顶点组成的二阶棱柱(6个顶点+9个边上节点)( A5 L6 @2 W$ _& ] o
19:13个顶点组成的二阶金字塔 (5个顶点+8个边上节点).8 ^, v5 w+ N) @4 t
其他高阶网格定义请参考官方文档
7 U) b! Z& e7 X4 E( D常规情形下,每个网格单元都包含如下tag:一个指示网格所属的物理实体的tag,个个指示网格所归属的几何实体的tag,一个指示网格单元所在的分区编号的tag。Gmsh和大多数代码要求单元至少包含前两个tag。
' s2 _. A4 p0 p0 u% `; O: r& P- e顶点列表给出组成网格单元的顶点编号,其中编号是出现在$Nodes块中的顶点编号。对于高阶网格单元,Gmsh按照如下顺序对顶点进行编号:
/ U2 [1 P1 J" X# n% N8 ][ol]单元的基本顶点每个边上的顶点每个面上的顶点体顶点[/ol]总体原则即:高阶网格顶点出现在低阶网格顶点之后。不能处理高阶网格的程序,只需要读取低阶网格顶点即可。7 W5 k K% u3 ]/ T, W( }
其他块的字段含义请参考官方文档。1 Z4 Q- m3 f7 P" S7 r) \
效率提示Gmsh没有要求元素的编号是连续的。但出于效率考虑,请尽量使用连续、紧凑的编号。例如两个顶点的编号,不用0和1,而是1, 10000,会导致程序性能下降:Gmsh不得不使用map而非数组来存储和访问元素,后处理程序中会分配10000个单元(大部分是无用的空值)的数组,而这些代价都是可避免的。% j7 {1 T1 y2 C q) O3 C7 R# @3 M
AD:【国外VPS推荐】 搬瓦工三网回程CN2 GIA VPS,季付46.87$打赏赞(2) |
|