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

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

2023-03-11 19:15 作者:上岸的小浣熊  | 我要投稿

网格控制进阶

1  Transfinite 字节

1.1  Transfinite Curve

       在闭合曲线中增加控制点,主要有两种方式,一种是等比例 (等间距) 增加一定数目的控制点;例如:Transfinite Curve{1} = 20;  表示在曲线 1 上等比例插入20个控制点(包含端点),同时可以将20点分配到组成闭合闭合曲线的不同直线上,Transfinite Curve{ l1 } = 6,要注意直线连接处不能重复分配,或者说全部点数不能超过第一步分配的总点数。

外围曲线控制点改变后的网格变化

       除了等距离的插入控制点,还可以等比例 (等比数列) 的形式插入控制点。例如:Transfinite Curve{3} = 30  Using Progression 1.2; 表示共30个点,级数为1.2

1.2  Transfinite Surface

       该函数可以通过 “ 超限插值 ” 算法,从边缘开始向中心插值,并生成结构化网格,使用方法如下:例如:Transfinite Surface{1} = {1, 2, 3, 4}; 对平面1进行插值,后面的点为该平面区域的拐点,这里并非是几何意义上的拐点,由于要生成结构化网格,所以对应边的点数应保持相同,存在 “ 2对1 ” 和 “ 多对1 ” 的情况,此时部分集合意义的拐点则不再是真正的拐点。

示意图 ( 5、6号点则不是真正意义的拐点 )

2  Field 字节

       Field 字节可以更加有效的控制网格大小。

2.1  网格大小随空间函数变化

Field[1] = MathEval; 

Field[1].F = "0.01*(1.0+30.*(y-x*x)*(y-x*x) + (1-x)*(1-x))";     // 随空间坐标的函数

Background Field = 1;      // 定义背景网格大小

2.2  网格随距离变化

       通过 Distance 和 Threshold 两个定义完成网格大小随距离变化。

Field[1] = Distance;   Field[1].PointsList = {5};

Field[2] = Threshold;     Field[2].InField = 1;

Field[2].SizeMin = lc / 3;    Field[2].SizeMax = lc;

Field[2].DistMin = 0.15;      Field[2].DistMax = 0.5;

Background Field = 2;

       如上定义表示距离 5 号点 0.15 的距离范围内,网格大小 lc/3,距离 0.5 时大小为 lc,中间为过渡区。

3  Boundary 命令

       Boundary 命令可以获取某一个实体的所有表面。例如:bnd() = Boundary{ Volume{1}; };

4  插入控制点、线

       例如:Point{5} In Surface{1};  将 5 号点插入平面 1 中。Point{8} In Volume {1}; 将 8 号点插入实体 1 的中。Curve{5} In Surface{1}; 将 5 号线插入平面 1 中。Curve{7} In Volume {1};将 7 号线插入实体 1 中。Surface{1} In Volume {1}; 将 1 号平面插入实体 1 中。

注意事项

1  全四边形网格

       Gmsh 中默认的重组四边形算法可能会在网格中留下一些三角形,这是因为合并所有三角形会导致网格质量大幅下降,为了兼顾网格质量所以留下了部分三角形。如果要确保生成完整的四边形网格,可以使用 full-quad recombination 得到一个较为粗糙的全四边形网格。使用方法如下:

Recombine Surface{1};                            //重组网格

Mesh.RecombinationAlgorithm = 2;         //强制全四边形,值为 2 或者 3

2  跨平面网格

       将不在同一平面的子平面视为一个整体,据此生成一个虚假平面,此时生成的网格可能超出原平面范围,位于空间中其他可能的位置。使用方式如下:

Compound Curve{2, 3, 4};  将平面 2、3、4 视为一个整体生成网格。

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

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