分享

【原创教程】Gmsh快速入门教程 | U2U

 牛厨馆 2020-06-23

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

这样解释可能不太直观,打个简单比方。假如小白准备用Gmsh设计一个房子,首先根据房子长宽高将房子轮廓线画出来(几何建模),然后根据房子大小计算选用规格适中的瓷砖(离散网格),最后再在根据自己的喜欢的颜色贴上对应的瓷砖(效果展示),这样设计就算完成了(详情见第二步)。

在正式介绍学习方法之前,啰嗦两句:要想真正精通一款软件,别无它法,反复钻研example和help,但是这需要极大的勇气、决心和毅力,做为普通用户,我们没有必要这样折腾自己,人生苦短,按需学习。

 

假设Gmsh已经下载到本地(无需安装,点击exe直接运行),找到gmsh.exe和help文件,再快速翻看demos和tutorial两个文件夹。

入门第一步,运行tutorial文件夹example1(t1.geo)

  1. 不管三七二十一,先操作一把,找找感觉: )

通过file→open打开t1.geo,我们发现了一个方框。

image001

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

image003

至此,一个简单的长方形贴片被离散化处理,操作基本完成,下面我们看看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包含了点、线、面的显示参数,操作操作看看视图会有什么变化。

image005

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

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

image007

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

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

image009

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

1 gmsh最基本的四个建模语句;

2 与视图和脚本密切相关的常用选项;

3 gmsh前台、后台操作读写脚本。

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

下面,我们开始自己脚踏实地的新建第一个例子,PS. 现在房价那么高,既然买不起,那咱们就自己画一个玩玩儿吧。

入门第二步,自己新建一个例子玩玩儿

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};

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

image011

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

image013

 

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

image015

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

image017

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

image019

这次比上次整齐多了,可是网格太密了,没那么多钱买瓷砖,换成大块的。

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

image021

 

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

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

所以,两点建议:

1、遇到问题,解决问题。入门级问题直接上网搜,其它问题翻阅help文档,会有意想不到的收获;

2、没有问题,提高效率。比如采用matlab编程自动生成脚本,Gmsh脚本虽好,但是对于复杂问题的建模,贴别是有多个实体组合的情况,手动修改脚本极容易出错,此时采用matlab编程自动生成脚本要省心得多。

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

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多