前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[转]Gmsh使用教程

[转]Gmsh使用教程

作者头像
周星星9527
发布2019-08-06 10:38:13
6.4K0
发布2019-08-06 10:38:13
举报

写在前面: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)

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-08-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 传输过程数值模拟学习笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 入门第一步,运行tutorial文件夹example1
  • 入门第二步,新建一个例子
  • 入门第三步,再接再厉,积累学习
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档