Gmsh简介
Gmsh是一款开源的三维非结构有限元网格生成软件. 它内置了前后处理的模块以及高阶网格生成工具. Gmsh有图形和脚本两种模式,用户可以快速生成简单的有限元网格. Gmsh是高精度格式求解器最常用的前处理软件.
使用Gmsh时, 用户首先定义几何模型, 然后Gmsh将自动生成网格, 最后用户可以根据需要选择分区等后处理功能. Gmsh的几何生成和其他常用的CAD软件类似, 都是先由点生成线, 再到面, 最后生成体. 有了几何模型之后, 下一步是可以利用Gmsh的选项生成非结构的网格. 最后是后处理的阶段. 所有这些操作都是可以通过脚本实现.
下面以几个简单例子说明Gmsh脚本的编写
例子
均匀网格
均匀网格是一个最简单的例子. 下面是一个区域为正方形均匀网格. 脚本代码如下:
xmin = -0.5;
xmax = 0.5;
ymin = 0;
ymax = 1;
NX = 16;
NY = 16;
Point (1) = {xmin, ymin, 0};//设置点
Point (2) = {xmax, ymin, 0};
Point (3) = {xmax, ymax, 0};
Point (4) = {xmin, ymax, 0};
Line (1) = {1,2};//连线
Line (2) = {2,3};
Line (3) = {3,4};
Line (4) = {4,1};
Transfinite Line {1,-3} = NX+1;//在线上布置点
Transfinite Line {2,-4} = NY+1;
Line Loop (1) = {1,2,3,4};//将封闭的线连成面
Plane Surface (1) = {1};//生成面
Transfinite Surface {1};//网格生成
Recombine Surface {1};//得到结构
Gmsh脚本语言的语言和C语言类似. 脚本的内容也是按照定义几何, 生成网格, 后处理等步骤编写的. 本例中, 区域是边长为1的正方形. 每个边上有16个点. 最终生成256个四边形网格.
非均匀网格
上边是最简单的Gmsh网格生成例子, 几何都是通过自己定义得到的. 这在几何比较简单的时候是可行的, 如果几何非常复杂, 使用这种方式将非常繁琐. Gmsh提供了Extrude的功能, 使编写脚本的效率提高.下面的代码的功能和上面的是一样的.
N = 16;
Point(1) = {-0.5, 0, 0, 0.1};
line[] = Extrude {1, 0, 0.} {
Point{1}; Layers{N+1};
};
Physical Line(1) = {line[1]};
surface[] = Extrude {0, 1, 0} {
Line{line[1]}; Layers{N+1}; Recombine;
};
现在的脚本,看起来比较简单.
下面一个例子是一个非均匀的例子, 比较复杂.
N = 1;
lc = Pi/nl;
Point(1) = {-0.5, 0, 0, lc};
ny = 16;
r = 1.2^(N/2);
h0 = 0.5*(1-r)/(1-r^(ny/2));
h=0.;
For i In {0:(ny-2)/2}
h += h0*r^i;
y[i] = h;
y[ny-i-2] = 1-h;
EndFor
y[ny/2-1] = 0.5;
y[ny-1] = 1.;
For i In {0:ny-1}
layer[i] = 1;
EndFor
line[] = Extrude {1, 0, 0.} {
Point{1}; Layers{ layer[], y[]};
};
Physical Line(1) = {line[1]};
surface[] = Extrude {0.0,1.0,0.0} {
Line{line[1]}; Layers{ layer[], y[] };Recombine;
};