1. Gmsh 简介
Gmsh 是一个三维有限元网格生成器,内置 CAD 引擎和后处理器。其设计目标是提供一个快速、轻便且用户友好的网格生成工具,具备参数化输入和灵活的可视化能力。
2. Gmsh 的四个模块
-
几何模块(Geometry)
创建和操作几何形状。
-
网格模块(Mesh)
生成网格。 -
求解器模块(Solver)
设置和运行求解器。 -
后处理模块(Post-processing)
结果的可视化和分析。
3. 控制方式
Gmsh 可以通过以下方式控制:
-
图形用户界面(GUI)(下图)
-
命令行接口(CLI)
-
脚本文件(.geo 文件)
-
应用程序编程接口(API)
- 支持 C++、C、Python、Julia 和 Fortran等语言。
- 支持 C++、C、Python、Julia 和 Fortran等语言。
4.几何模块概述
在 Gmsh 中,模型是通过边界表示(BRep)定义的:一个体由一组面界定,一个面由一系列曲线界定,而曲线由两个端点界定。模型实体是拓扑实体,即它们仅处理模型中的邻接关系,并被实现为一组抽象的拓扑类。BRep 还通过嵌入或内部模型实体的定义进行扩展:内部点、曲线和曲面可以嵌入到体积中;而内部点和曲线可以嵌入到曲面中。
4.1 CAD 内核选择
模型实体的几何可以由不同的 CAD 内核提供。Gmsh 接口的两个默认内核是内置内核和 OpenCASCADE 内核。Gmsh 不会将几何表示从一个内核转换到另一个内核,也不会将几何表示从这些内核转换为某种中立表示。相反,Gmsh 直接查询每个 CAD 内核的本机数据,这避免了数据丢失,并对于复杂模型是至关重要的,因为转换通常会引入与略有不同表示相关的问题。
4.2 实体构建方式
实体可以按自底向上的方式构建(首先是点,然后是曲线、曲面和体积),使用内置内核和 OpenCASCADE 内核,或按自顶向下的构造实体几何(对实体进行布尔运算)使用 OpenCASCADE 内核。这两种方法也可以结合使用。最后,可以基于基本几何实体定义模型实体的组(称为“物理组”)。
4.3 实体和组标签
模型实体(也称为“基本实体”)和物理组由一对整数唯一定义:它们的维度(点为0,曲线为1,曲面为2,体积为3)和它们的标签,严格正整数的全局标识号。实体和组标签在每个维度上是唯一的:
- 每个点必须具有唯一的标签;
- 每个曲线必须具有唯一的标签;
- 每个曲面必须具有唯一的标签;
- 每个体积必须具有唯一的标签。
零或负标签由 Gmsh 保留供内部使用。
4.4 模型实体操作与转换
在几何模块中,模型实体可以以各种方式进行操作和转换,但操作总是直接在各自的 CAD 内核中执行。如上所述,没有通用的内部几何表示:相反,Gmsh 使用每个 CAD 内核的 API 直接在本地几何表示上执行操作(平移、旋转、交集、并集、碎片等)。
4.5 模型导入和序列化
模型可以通过每个 CAD 内核自己的导入机制导入到几何模块中。例如,默认情况下,Gmsh 通过 OpenCASCADE 导入 STEP 和 IGES 文件,这将导致创建具有内部 OpenCASCADE 表示的模型实体。
使用内置 CAD 内核表示的模型可以导出为 '.geo_unrolled' 文件进行序列化,而使用 OpenCASCADE 内核构建的模型可以序列化为 '.brep' 或 '.xao' 文件。
4.6 学习如何使用几何模块
[Gmsh 教程] 第2章,从第2.1节开始,是学习如何使用几何模块的最佳地方:它包含了基于内置和 OpenCASCADE 内核的逐渐增加复杂性的例子。请注意,几何模块的许多功能可以在 GUI 中交互使用(参见第3章[Gmsh 图形用户界面]),这也是学习 Gmsh 脚本语言和 API 的好方法,因为在几何模块中的操作会自动在输入脚本文件中附加相关命令,并可以选择生成 API 支持的语言的输入(参见 General.ScriptingLanguages 选项;截至 Gmsh 4.12,此功能仍在开发中)。(后续更新。。)
4.7 离散模型实体
除了由 CAD 内核提供几何的 CAD 类型几何实体外,Gmsh 还支持由网格定义的离散模型实体(例如 STL)。Gmsh 不对这些离散实体执行几何操作,但可以通过所谓的“再参数化”过程赋予它们几何属性。然后,参数化用于网格划分,其方式与 CAD 实体完全相同。请参见后续章节,以获取示例。