欢迎光临散文网 会员登陆 & 注册

gmsh软件的模型脚本文件.geo编写 (1)

2023-03-09 14:55 作者:上岸的小浣熊  | 我要投稿

       Gmsh 是一个免费开源且具有内置 CAD 引擎和后期处理子的二维、三维有限元网格生成软件。并且具有参数化输入和后期可视化能力。所有模块的使用都可以通过两种方式:命令行和 GUI,并且所有功能都提供源码,无论是工作和学习都是非常不错的选择。

       Gmsh在创建模型时可以使用图形界面和脚本文件两种,脚本文件为 .geo 文件,具有自己的语法规则,与 c 语言有部分相似(完整语句后要加 ; 隔开等),但不论是那种形式,Gmsh 的模型创建是一种十分清晰的、自下而上的创建模式:点 → 线 → 面 → 体,层层递进。换句话说,在没有创建 " 点 " 时,是不能直接创建 " 线 " 的。

新建文本文档,将后缀的 .txt 改为 .geo

1  变量赋值

       首先,变量不需要先定义再使用,不区分数据类型 (int、float 等)。例如:a=2  b=0.03等,同时支持科学计数法,如:b=1e-2。整个文件中的变量赋值通常全部写在文件开头。

2  定义点、线、面

       定义方式为:Point、Line、Plane Surface 等 + 标号。值得注意的一点是,不同类型实体可以共用标号,即可以同时出现 Point(1) 和 Line(1),且标号必须为正整数,可以不连续。

2.1  定义点

       点的定义包含4个参数:坐标 (x, y, z)+该点附近目标网格尺寸大小。例如:Point(3)={0, 2, 1, 0.1}; 除了通过参数定义(a) 的方式统一分配网格尺寸外,还可以通过 MeshSize 函数对个别点分配不同的网格尺寸,如:MeshSize {13, 5, 9, 12} = a * 3

2.2  定义线段

       由于两点确定一条线段,所以一条直线就自然而然的由已经生成的两个点确定。例如:Line(6)= {4, 5};  这里需要说明一点,Gmsh 中的线段是具有方向性的,这一点在生成闭合线段时要格外注意 (后续再做说明)。

2.3  定义平面

       在定义平面时,首先要将线段组合成闭合线,此时要保证线段首尾相连,例如:Curve Loop(1) = {3, 1, -2}; (其中:Line(1) = {1, 2}; Line(2) = {3, 2}; Line(3) = {3, 1};),在首位不闭合时可以选择添加 “ - (负号)” 进行首尾对调。

       在定义完闭合线后就可以将闭合线转为平面。例如:Plane Surface(1) = {1};

2.4  定义体

       和定义平面类似,首先定义一个闭合面,再将闭合面定义为体,定义方式类似。例如:Surface Loop(12) = {7, 9, 12, 13, 15, 11}; 不同的这里不再强调方向,但需要按一定顺序连续形成闭合,而不能跳跃式输入。

3  获取点坐标

       当一个点经过平移、旋转等操作后,可能难以直接获得该点坐标,在使用时可以通过命令获取坐标。例如:xyz[]=Point(2); 调用方式为:xyz[0]、xyz[1]、xyz[2]。

4  移动和旋转

4.1  点的移动和旋转

       移动的函数为 Translate,调用方式 “ 坐标 + 点 ”,例如:Translate {1,-1,2} { Point{5}; } 表示将5号点沿 x 轴正方向移动1、y 轴负方向移动 1、z轴正方向移动 1。

       旋转函数为 Rotate,调用方式为 “ 旋转面+中心点+旋转角度+点 ”,例如:Rotate{{0, 0, 1 }, {0, 1, 1}, ±Pi/4} {Point{2};},即2号点在 “z=0” 平面,绕 “0, 1, 1” 点旋转 Pi/4。

       在移动和旋转时可以增加复制选项,增加复制后的不同:移动和旋转后,原来的点不会消失。新生成的点会自动向后编号。例如:Translate {1,-1,2} { Duplicata{ Point{5}; }},会自动生成点6。

4.2  “ 面” 的移动生成 “ 体 ”

       Extrude 函数可以通过 “ 面 ” 的移动更加方便快捷的生成 “ 体 ”,生成的 “ 体 ” 紧接上一个 “ 体 ” 进行自动编号。

       " 面 " 平移的调用方式:各方向移动距离 + 面。例如:Extrude {0, 0, 1} { surface {17}; },此外 Extrude 函数还可以进行分段分层,将整个移动距离分段,并在段内平均分层。例如:Extrude {0,0,h} { Surface{1}; Layers{ {8,2}, {0.6,1} };},即在整个移动 “ h ” 的过程中分为两段,比例为6 : 4,第一段平均分为8个子层,第二段平均分为2个子层。

       “ 面 ” 绕轴旋转的调用方式:轴方向+参考点+旋转角度。例如:Extrude { {0,1,0},  {1,1,0} , -Pi/2 } { Surface{20}; } ,此时平面旋转的轴为过 (1,1,0) 点与方向 (0,1,0) 平行的直线,旋转了Pi/2,同样支持上述的分段分层。

       “ 面 ” 绕轴旋转的调用方式:各方向移动距离+轴方向+参考点+旋转角度。扭转即绕轴旋转和平移的结合,调用方式上也是如此,例如:Extrude { {-2,0,0}, {1,0,0} , {0,0.5,0.2} , Pi / 2} {Surface{50};},同样支持分段分层。

5  返回值

       在Gmsh中,类似 Translate、Rotate 等函数是具有返回值的,返回的是计算结果,如果是后续要重点用到的内容,我们可以给予特殊标记。例如:mysufaces[ ]= Translate {2, 0, 0} { Duplicata { Surface{1, 2}; } };  此时新平面依旧会按顺序赋予新序号,但在使用时可以用mysufaces[1]、mysufaces[2] 进行调用。

gmsh软件的模型脚本文件.geo编写 (1)的评论 (共 条)

分享到微博请遵守国家法律