在有限元分析和数值模拟中,网格生成是一个关键步骤。特别是,当需要在特定位置或轴线上布置节点时,合理的网格设计能够显著提高计算精度和效率。例如,在结构分析或流体动力学模拟中,确保节点沿着特定轴线分布可以更好地捕捉物理现象,避免数值误差。本文主要记录如何通过建模脚本设置嵌入点,让网格节点在特定的位置生成。
代码步骤详解
下面将演示一个矩形域网格生成例子,在网格生成的过程中,希望网格节点布置在我们预设的位置处。
1. 定义矩形的四个顶点
首先,我们需要定义矩形的四个顶点。在 Gmsh 中,这可以通过 Point
命令来完成:
Point(1) = {0, 0, 0};
Point(2) = {1, 0, 0};
Point(3) = {1, 1, 0};
Point(4) = {0, 1, 0};
这四行代码分别定义了矩形的四个顶点,坐标分别为 (0,0,0), (1,0,0), (1,1,0), 和 (0,1,0)。
2. 定义矩形的边
接下来,我们定义矩形的四条边。在 Gmsh 中,这可以通过 Line
命令来完成:
Line(1) = {1, 2}; // 底边
Line(2) = {2, 3}; // 右边
Line(3) = {3, 4}; // 顶边
Line(4) = {4, 1}; // 左边
这四行代码分别定义了矩形的四条边,连接上述定义的顶点。
3. 定义矩形的边界循环
为了形成一个闭合的矩形边界,我们需要定义一个边界循环。在 Gmsh 中,这可以通过 Line Loop
命令来完成:
Line Loop(1) = {1, 2, 3, 4};
这一行代码定义了一个边界循环,包含了四条边,形成了一个闭合的矩形边界。
4. 定义面
接下来,我们定义一个平面表面。在 Gmsh 中,这可以通过 Plane Surface
命令来完成:
Plane Surface(1) = {1};
这一行代码定义了一个平面表面,由前面定义的边界循环形成。
5. 设置网格细化
为了控制网格的细化程度,我们可以使用 Transfinite Line
命令来设置每条边上的节点数:
Transfinite Line {1} = 20; // 底边的节点数
Transfinite Line {3} = 20; // 顶边的节点数
Transfinite Line {2, 4} = 5; // 左边和右边的节点数
这几行代码设置了每条边上的节点数,底边和顶边各有20个节点,左边和右边各有5个节点。
6. 添加嵌入点
为了在特定位置生成网格节点,我们可以使用嵌入点。在 Gmsh 中,这可以通过 Point
命令来定义嵌入点,并使用 In Surface
命令将这些点嵌入到表面网格中:
Point(100) = {0.6, 0.5, 0, 0.1};
Point(101) = {0.6, 0.7, 0, 0.1};
Point(102) = {0.6, 0.3, 0, 0.1};
Point(103) = {0.2, 0.5, 0, 0.1};
Point(104) = {0.5, 0.5, 0, 0.01}; // 在该点附近细化网格
Point{100, 101, 102, 103, 104} In Surface{1}; // 将这些点嵌入到表面网格中
这几行代码定义了五个新的点,并将它们嵌入到矩形表面上。这些点的位置分别为 (0.6, 0.5, 0), (0.6, 0.7, 0), (0.6, 0.3, 0), (0.2, 0.5, 0), 和 (0.5, 0.5, 0)。特别地,点104的最后一个参数 0.01
表示在该点附近的网格会被进一步细化。
7. 生成网格
最后生成网格,在 Gmsh 中,这可以通过 Mesh
命令来完成:
Mesh 2;
这一行代码生成二维网格,根据前面定义的几何和网格细化参数。
也可观看下面的演示视频:
总结
本文记录如何在GMSH中创建一个简单的矩形网格,并确保网格节点沿特定轴线分布。这一方法不仅适用于矩形,还可以推广到更复杂的几何体。
参考资料:
[1]https://onelab.info/pipermail/gmsh/2019/013265.html