外观
Gmsh 网格生成工具介绍
Gmsh 是一个开源的三维有限元网格生成器,具有内置的 CAD 引擎和后处理器。它是科学计算和工程仿真领域中最流行的网格生成工具之一。
什么是 Gmsh
Gmsh 由比利时列日大学开发,是一个功能强大的网格生成工具,支持:
- 几何建模:内置 CAD 引擎,支持参数化几何建模
- 网格生成:自动生成一维、二维和三维非结构化网格
- 网格优化:提供多种网格优化算法
- 后处理:可视化有限元计算结果
- 跨平台:支持 Linux、Windows、macOS
主要特性
1. 灵活的几何建模
Gmsh 提供了强大的几何建模功能:
// 创建一个简单的矩形
Point(1) = {0, 0, 0, 0.1};
Point(2) = {1, 0, 0, 0.1};
Point(3) = {1, 1, 0, 0.1};
Point(4) = {0, 1, 0, 0.1};
Line(1) = {1, 2};
Line(2) = {2, 3};
Line(3) = {3, 4};
Line(4) = {4, 1};
Curve Loop(1) = {1, 2, 3, 4};
Plane Surface(1) = {1};2. 多种网格算法
Gmsh 支持多种网格生成算法:
- Delaunay 三角化:适用于大多数情况
- Frontal 算法:生成高质量的四边形/六面体网格
- MeshAdapt:自适应网格细化
- Quad/Hex 网格:结构化和非结构化混合网格
3. 网格尺寸控制
可以精确控制网格密度:
// 在点处设置网格尺寸
Characteristic Length {1, 2, 3, 4} = 0.05;
// 使用尺寸场
Field[1] = Box;
Field[1].VIn = 0.02;
Field[1].VOut = 0.1;
Field[1].XMin = 0.3;
Field[1].XMax = 0.7;
Background Field = 1;使用方式
图形界面
Gmsh 提供了直观的图形用户界面:
gmsh可以通过菜单进行几何建模、网格生成和结果可视化。
脚本方式
使用 .geo 脚本文件:
gmsh example.geo -2 # 生成二维网格
gmsh example.geo -3 # 生成三维网格Python API
Gmsh 提供了 Python API,方便集成到工作流中:
import gmsh
gmsh.initialize()
gmsh.model.add("rectangle")
# 创建几何
lc = 0.1
gmsh.model.geo.addPoint(0, 0, 0, lc, 1)
gmsh.model.geo.addPoint(1, 0, 0, lc, 2)
gmsh.model.geo.addPoint(1, 1, 0, lc, 3)
gmsh.model.geo.addPoint(0, 1, 0, lc, 4)
gmsh.model.geo.addLine(1, 2, 1)
gmsh.model.geo.addLine(2, 3, 2)
gmsh.model.geo.addLine(3, 4, 3)
gmsh.model.geo.addLine(4, 1, 4)
gmsh.model.geo.addCurveLoop([1, 2, 3, 4], 1)
gmsh.model.geo.addPlaneSurface([1], 1)
gmsh.model.geo.synchronize()
# 生成网格
gmsh.model.mesh.generate(2)
# 保存网格
gmsh.write("rectangle.msh")
gmsh.finalize()网格格式
Gmsh 支持多种网格格式:
- MSH:Gmsh 原生格式(推荐)
- VTK:用于 ParaView 可视化
- STL:表面网格
- CGNS:CFD 通用格式
- UNV:通用网格格式
导出示例:
gmsh input.geo -2 -format msh2 # MSH 2.0 格式
gmsh input.geo -2 -format vtk # VTK 格式高级功能
1. 物理组
定义边界条件和材料区域:
Physical Curve("inlet") = {1};
Physical Curve("outlet") = {3};
Physical Curve("wall") = {2, 4};
Physical Surface("domain") = {1};2. 网格细化
局部细化网格:
Field[1] = Attractor;
Field[1].NodesList = {1, 2};
Field[2] = Threshold;
Field[2].IField = 1;
Field[2].LcMin = 0.01;
Field[2].LcMax = 0.1;
Field[2].DistMin = 0.1;
Field[2].DistMax = 0.5;
Background Field = 2;3. 三维网格
生成复杂三维几何的网格:
// 创建球体
Sphere(1) = {0, 0, 0, 1};
// 设置网格算法
Mesh.Algorithm3D = 4; // Frontal Delaunay
// 生成网格
Mesh 3;实际应用案例
流体力学
生成流场计算网格,支持边界层网格:
Field[1] = BoundaryLayer;
Field[1].EdgesList = {1, 2, 3, 4};
Field[1].hfar = 0.1;
Field[1].hwall_n = 0.001;
Field[1].ratio = 1.2;
Field[1].thickness = 0.05;
BoundaryLayer Field = 1;结构力学
生成复杂结构的有限元网格,支持四面体和六面体单元。
电磁场
生成电磁场仿真所需的高质量网格,支持曲面单元。
优势与局限
优势
- 完全开源免费
- 跨平台支持
- 强大的 API(C++、Python、Julia 等)
- 活跃的社区支持
- 与主流求解器兼容
局限
- 复杂 CAD 几何导入可能需要预处理
- 六面体网格生成相对困难
- 学习曲线较陡峭
安装
Linux
sudo apt-get install gmsh # Ubuntu/Debian
sudo dnf install gmsh # FedoraPython API
pip install gmsh从源码编译
git clone https://gitlab.onelab.info/gmsh/gmsh.git
cd gmsh
mkdir build && cd build
cmake ..
make
sudo make install学习资源
- 官方文档:https://gmsh.info/doc/texinfo/gmsh.html
- 教程:Gmsh 自带丰富的示例文件
- 论坛:https://gmsh.info/
- 邮件列表:活跃的用户社区
总结
Gmsh 是一个功能强大、灵活且开源的网格生成工具,适用于各种科学计算和工程仿真应用。无论是简单的二维问题还是复杂的三维几何,Gmsh 都能提供高质量的网格。结合其 Python API,可以轻松集成到自动化工作流中,是有限元分析不可或缺的工具。
对于初学者,建议从简单的二维几何开始,逐步掌握网格生成的技巧。随着经验的积累,可以探索更高级的功能,如自适应网格细化、并行网格生成等。
版权所有
版权归属:Guisong Wu