Gmsh 是一款功能强大的有限元网格生成工具,广泛应用于几何建模和网格划分。本文将通过一个简单的代码示例,详细讲解如何在 Gmsh 中定义一个二维正方形,并生成高质量的四边形网格。同时,深入解析
Recombine Surface
命令的作用和原理,最后通过视频直观展示如何利用Gmsh进行四边形网格的划分。
建模脚本(.geo)
本节将记录gmsh四边形网格划分所用到的脚本,以一个方形域为例子。
1. 几何定义
首先,定义正方形的四个顶点坐标:
x1 = 0; y1 = 0;
x2 = 1; y2 = 0;
x3 = 1; y3 = 1;
x4 = 0; y4 = 1;
这四个点分别为正方形的四个顶点。接下来,将这些顶点定义为 Gmsh 中的几何点:
Point(1) = {x1,y1,0,1};
Point(2) = {x2,y2,0,1};
Point(3) = {x3,y3,0,1};
Point(4) = {x4,y4,0,1};
每个点由 (x, y, z)
三个坐标值和一个权重组成,其中 z
坐标为 0
表示这些点在二维平面上,网格权重为 1
。
2. 生成几何线段
利用前面定义的点生成正方形的边:
Line(1) = {1,2};
Line(2) = {2,3};
Line(3) = {3,4};
Line(4) = {4,1};
这四条线将四个点依次连接,形成一个闭合的正方形轮廓。
3. 创建曲面
为生成曲面,首先定义曲线环:
Curve Loop(1) = {4, 1, 2, 3};
曲线环由四条线段组成,形成一个闭合的边界。随后,使用这个曲线环创建一个平面曲面:
Plane Surface(1) = {1};
这段代码定义了一个平面曲面,它由上述曲线环包围,标识为 1
。
4. 网格划分
在生成网格之前,使用 Transfinite
算法来确保网格点的规则排列:
Transfinite Surface {1} = {4, 3, 2, 1};
这条命令将曲面上的网格点与四个顶点对齐,确保网格的规则性。随后,应用同样的方法对曲线进行节点划分:
Transfinite Curve {4, 3, 2, 1} = 11 Using Progression 1;
每条曲线将被划分为 11
个等间距的节点,使用 Progression 1
表示线性分布(等间距划分)。
5. 生成四边形网格
在 Gmsh 中,默认情况下生成的网格单元是三角形。然而,在很多数值模拟任务中,四边形网格往往能提供更好的数值稳定性和计算效率。这时,Recombine Surface
命令就显得尤为重要。
Recombine Surface
的作用
Recombine Surface
的主要功能是将一个曲面上默认的三角形网格单元重新组合成四边形单元。这一过程通过合并相邻的两个三角形单元实现,生成一个四边形单元。尤其是在规则的几何形状上,比如矩形或正方形,四边形网格的质量和数值性能往往优于三角形网格。
工作原理
Recombine Surface
命令依赖于网格点的规则排列。如果曲面的几何形状简单且规则,网格点分布均匀,Recombine Surface
操作将非常顺利。特别是当使用 Transfinite
算法进行网格划分时,这种组合效果最佳。
Recombine Surface {1};
这行代码将 ID 为 1
的曲面上的三角形网格转换为四边形网格。在大多数情况下,四边形网格的生成将显著提升有限元分析的效率和精度。
注意事项
虽然四边形网格通常较优,但在一些复杂的几何形状或不规则的曲面上,Recombine Surface
操作可能会导致网格质量下降。因此,使用时应注意几何形状的复杂度,以及网格划分的规则性。如果发现生成的四边形网格质量不佳,可能需要调整节点分布或采用混合网格(包含三角形和四边形单元)。
视频演示
下面的视频演示了上述步骤:
总结
通过以上内容,从几何定义到网格划分,再到四边形网格的生成,完整展示了 Gmsh 的基本使用方法。Recombine Surface
命令在特定场景下,能显著提升网格质量和模拟精度。在使用该命令时,应结合实际几何形状和数值分析的需求,灵活调整网格划分策略,以达到最佳效果。
往期精彩内容推荐:
开源有限元求解器介绍的专题如下: