【开源有限元网格工具Gmsh】含孔矩形域的网格划分教程

文摘   2024-07-25 11:22   广西  

在工程仿真和科学计算领域,高质量的网格划分对于获得准确的数值解至关重要。Gmsh,这款开源的前处理器软件,因其易用性和强大的功能而广受欢迎。本文将通过一个简单的案例——含圆孔方形区域的网格划分,记录如何使用 Gmsh 来生成相应网格

步骤总结

1. 启动 Gmsh

打开 Gmsh 软件或在命令行中输入 gmsh

2. 创建几何模型

  • 使用 Gmsh 的图形用户界面或编写一个 .geo 脚本来定义几何形状。对于含圆孔的方形区域,首先定义方形边界,然后定义圆形孔洞。

  • 方形可以通过定义四个点和连接这些点来创建四个线段,在代码编写中可使用 Line Loop 命令将线段组合成一个平面区域。

  • 圆形孔洞可以使用 CircleEllipse 命令来定义。

3. 实体构建

  • 使用 Plane Surface 命令从线框结构创建实体表面。这一步会自动识别并处理圆孔,将其从方形区域中去除

4. 设置物理组

  • 定义物理组可以帮助我们在之后在仿真软件中识别特定的几何特征,比如边界条件的应用。可为方形的外边界和圆孔分别定义物理组,本文并未执行该操作,具体可参考前面发布的视频。

5. 网格参数设置

  • 在 Gmsh 的 Mesh 菜单中,或者在 .geo 脚本中,定义网格的大小、精度等参数。

6. 生成网格

  • 在 Gmsh 的 Mesh 菜单中点击 2D 按钮,Gmsh 将根据你的设置自动生成网格。

7. 保存网格文件

  • 最后,保存网格文件,通常是 .msh 格式,以便在其他有限元分析软件中使用。

8. 可视化和检查

  • 在 Gmsh 中,可以通过视图工具查看网格质量,检查是否存在扭曲或过小的单元,以及确认圆孔周围网格的过渡是否平滑。

视频演示

下面视频演示了GUI界面的操作流程(视频借助了AI配音哈)

Gmsh 脚本详解

本文将使用 Gmsh 的脚本语言(.geo 文件)来定义几何形状和网格参数。
通过上面的建模步骤可以得出下面的Gmsh 脚本,用于创建一个含圆孔的方形区域:

SetFactory("OpenCASCADE");

// 定义方形区域
Rectangle(1) = {0., 0, 0, 1, 1, 0};

// 定义圆孔
Circle(5) = {0.5, 0.5, 0, 0.3, 0, 2*Pi};

// 定义外部曲线环
Curve Loop(2) = {3, 4, 1, 2};

// 定义内部曲线环
Curve Loop(3) = {5};

// 创建平面表面
Plane Surface(2) = {2, 3};

// 删除多余的实体
Recursive Delete {
Surface{1};
}

代码解析

  1. 设置内核SetFactory("OpenCASCADE"); 这行代码告诉 Gmsh 使用 OpenCASCADE 工具箱,它提供了更高级的几何处理能力。

  2. 定义方形区域Rectangle(1) = {0., 0, 0, 1, 1, 0}; 创建一个位于坐标原点的正方形,边长为 1。

  3. 定义圆孔Circle(5) = {0.5, 0.5, 0, 0.3, 0, 2*Pi}; 在正方形中心创建一个半径为 0.3 的圆形孔。

  4. 定义曲线环:接下来的两行代码定义了方形的外边界和圆孔的内边界。

  5. 创建平面表面Plane Surface(2) = {2, 3}; 这将创建一个包含外部和内部边界(即圆孔)的平面表面。

  6. 删除多余实体:最后一行代码删除了最初创建的正方形实体,因为我们关心的是最终带有圆孔的表面。

结语

本文进行了含圆孔的方形区域网格划分,当然也只是记录了其中一种简单的方案,对于更加复杂或者高级的操作方案,后续再更新。

往期有限元网格相关内容推荐:

如果你还想了解更多有限元相关可以参考下面内容:

对有限元编程感兴趣的朋友也可以关注下面的文章:
【付费内容】有限元笔记-Timoshenko 梁单元刚度矩阵推导及其有限元编程实现

您的点赞分享在看

将会像神奇魔法药水一样,

会让我的创作...,哎哟喂~

挨踢的土木佬
一名学习编程的土木佬,计算固体力学,以第一/通讯作者身份在IJNME、IJSS、力学学报、振动工程学报等权威期刊发表论文若干。热衷分享Python编程、数据处理和数值分析(含有限元)新知,不定期更新文章与笔记。
 最新文章