[转]Gmsh使用教程

写在前面:2012年翻阅某电磁仿真手册时看到一句话,说HFSS之所以能保证工业级精度的秘诀在于网格剖分,当时真理解不了。后来出国两年,以矩量法为基础深入学习计算电磁后,才体会到这句话的真谛,为此这里给大家推荐一个仿真建模的利器,Gmsh,简约但不简单的开源软件。如果精力允许,希望大家尽可能亲自建模离散,再导入商业软件进行仿真,绝对磨刀不误砍柴工!

Gmsh是一款有限元网格生成器,包含预处理、求解和后处理三大模块,分别对应于几何建模、网格优化和结果展示三项功能。

打个简单比方,张三准备建一个房子,首先将轮廓线画出来(几何建模),然后计算用多少块转(离散网格),最后再贴瓷砖或刷墙(效果展示)。

下面结合个人经验介绍如何快速入门,假设Gmsh已经下载到本地(http://www.gmsh.info/下载,无需安装,点击exe直接运行),找到gmsh.exe和help文件,再快速翻看demos和tutorial两个文件夹。

入门第一步,运行tutorial文件夹example1

通过file→open打开t1.geo,出现一个方框。

在导航栏mesh选项下级目录找到2D,点击后方框被离散化,变成了一个网格。

至此,一个简单的长方形贴片被离散化处理,操作基本完成,下面我们看看gmsh是怎样通过脚本建模的。

采用记事本打开t1.geo文件(俗称脚本script),发现罗里吧嗦的一大堆,其实我们需要了解其中四类语句就行了,它们分别是定义参数、点、线、面的命令,如下:

定义参数 lc = 1e-2;

定义点 Point(1) = {0, 0, 0, lc};

定义线段 Line(1) = {1,2} ;

定义闭合线段Line Loop(5) = {4,1,-2,3} ;

定义面Plane Surface(6) = {5} ;

不难看出gmsh参数化建模的流程:通过参数定义点的属性,连接相应的点构成线段,再连接一系列线段构成封闭的面

值得指出的是,定义点需要四个变量,前三个是坐标,第四个是用来定义网格剖分疏密的参数,详情请参考脚本注释(//开始,或者/* */之间的内容)。

Gmsh看似简单,其实功能十分强大(通过284页的help文件介绍就知道它有多复杂)。这里介绍几个最为实用的选项设置

(1)菜单tool-》Options选项 Visibility

选项卡里Geometry和Mesh里Visibility包含了点、线、面的显示参数,操作操作看看视图会有什么变化。

(2)菜单tool-》Options选项 一键默认

当你设置参数没有变化,也找不出原因时,恢复默认设置是有效的选择。

(3)菜单tool-》Options选项 脚本重载与编辑

gmsh支持前台和后台双重操作,也就是说,用户可以在后台编辑脚本,然后通过导航栏Geometry下面的Reload重新加载,相应视图会自动更新;用户也可以在前台通过鼠标建模(选点、连线、取面等),对应的命令语句会自动写入对应脚本文件(点击导航栏Geometry下面的Edit file就能自动打开脚本文件,可以非常直观的学习脚本命令,我就是这样入门的)。当然用户也可以混合操作。注意一个细节,gmsh在General选项里面定义了文本编辑软件,如果是windows可以选用记事本,linux可以选用gedit,需要修改时再上网搜索,这里就不啰嗦了。

至此,第一个例子已经介绍完毕,总结一下,我们学习了:

  • gmsh最基本的四个建模语句;
  • 与视图和脚本密切相关的常用选项;
  • gmsh前台、后台操作读写脚本。

可能有人要问,tutorial文件夹里面还有十几个例子怎么办,学还是不学?如果你还是处于入门阶段,那么剩余的例子没必要学习,可以打开看个新鲜,但是真正研究起来很容易让你望而生畏,因为gmsh能做的事情实在超过你的想象,而我们的需求可能只是全部功能的1%,所以适可而止的保持好奇心。下面,我们开始自己脚踏实地的新建第一个例子。

入门第二步,新建一个例子

10个点、17条线、8个面构成一个最简单的房子,脚本代码如下:

// mesh parameters

lc = 1e-1;

// 10 points

Point(1) = {-1, -1, 0, lc};

Point(2) = {1, -1, 0, lc};

Point(3) = {1, 1, 0, lc};

Point(4) = {-1, 1, 0, lc};

Point(5) = {-1, -1, 1, lc};

Point(6) = {1, -1, 1, lc};

Point(7) = {1, 1, 1, lc};

Point(8) = {-1, 1, 1, lc};

Point(9) = {-1, 0, 1.5, lc};

Point(10) = {1, 0, 1.5, lc};

// 17 lines

Line(1) = {1, 2};

Line(2) = {2, 3};

Line(3) = {3, 4};

Line(4) = {4, 1};

Line(5) = {5, 6};

Line(6) = {6, 7};

Line(7) = {7, 8};

Line(8) = {8, 5};

Line(9) = {10, 6};

Line(10) = {10, 7};

Line(11) = {8, 9};

Line(12) = {9, 5};

Line(13) = {10, 9};

Line(14) = {7, 3};

Line(15) = {8, 4};

Line(16) = {6, 2};

Line(17) = {5, 1};

// 8 faces without bottom

Line Loop(18) = {6, 14, -2, -16};

Plane Surface(19) = {18};

Line Loop(20) = {7, 15, -3, -14};

Plane Surface(21) = {20};

Line Loop(22) = {8, 17, -4, -15};

Plane Surface(23) = {22};

Line Loop(24) = {5, 16, -1, -17};

Plane Surface(25) = {24};

Line Loop(26) = {10, -6, -9};

Plane Surface(27) = {26};

Line Loop(28) = {10, 7, 11, -13};

Plane Surface(29) = {28};

Line Loop(30) = {13, 12, 5, -9};

Plane Surface(31) = {30};

Line Loop(32) = {8, -12, -11};

Plane Surface(33) = {32};

下图是房子的几何外形,对应的点已在图中标出。

点击Mesh-》2D按照默认设置进行离散,得到三角形网格,但是我们想要四边形网格。

修改选项卡设置,合并所有三角形网格,得到四边形网格。

网格是四边形的,但是不够整齐,怎么办?

再次修改选项卡,换一个mesh求解算法。

这次比上次整齐多了,可是网格太密了,适当调稀疏点。

修改mesh参数lc为0.3,效果基本满意。

入门第三步,再接再厉,积累学习

通过前面的两个例子,相信大家对Gmsh已经有了基本的掌握,其实入门真的不难,不是吗?基于上述基本技巧,常用建模需求基本可以满足,但是如此强大的软件只学到这里,实在可惜。所以,两点建议:

  • 遇到问题,解决问题。入门级问题直接上网搜,其它问题翻阅help文档,会有意想不到的收获;
  • 没有问题,提高效率。比如采用matlab编程自动生成脚本,Gmsh脚本虽好,但是对于复杂问题的建模,贴别是有多个实体组合的情况,手动修改脚本极容易出错,此时采用matlab编程自动生成脚本要省心得多。

最后,祝大家Gmsh学得开心,用的顺心。

---------------非原创声明--------------------

原创总结,欢迎分享,转载请注明作者和出处:useful2you,有点小用吧(公众号useful4you)

---------------------------------------------

原文发布于微信公众号 - 传输过程数值模拟学习笔记(SongSimStudio)

原文发表时间:2019-08-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券