GMSH 中的自定义网格尺寸

计算科学 网格生成 gmsh
2021-12-03 08:06:43

我今天有一个简单的问题。我是 GMSH 的新手,目前正在学习如何使用该软件程序。我正在使用 GMSH 3.0.4。

我要做的是为我的 2D 几何体中的不同面设置不同的网格大小。作为测试,我正在创建两个相邻的正方形。左侧的正方形将具有由选项对话框中的元素尺寸因子设置的网格尺寸。

我一直在对此事进行一些研究,并在发布时遇到了这个问题:

http://onelab.info/pipermail/gmsh/2009/004647.html

我还阅读了用户手册中的第 6.3.1 节。在本节中,指出:

A MathEval field specifies the size of the mesh using an explicit mathematical function. 

所以,我去了 Mesh->Define->Size Fields 然后 New->MathEval 然后在框中输入 0.001。我还通过转到 New->restrict 来设置一个限制字段。我输入了我想要限制该字段的边缘列表和人脸列表。由于这个我想限制我的第一个 Mesh 字段,我在 IFields 框中输入了 1。

我还确保将 2D 网格算法设置为 Delauney。

但是,我仍然难以设置自定义网格尺寸。我正在尝试将面绑定到特定的网格大小。我在这里发布我的 .geo 文件,以便其他人可以查看。

我的问题是:为了将不同的面绑定到不同的网格尺寸,我可以在 GUI 上执行的最佳方法是什么?

请注意,当前元素大小因子设置为 1。另请注意,我正在生成一个只有四边形的网格。

我的 .geo 文件:

//+
SetFactory("Built-in");
//+
Point(1) = {0, 0, 0, 1.0};
//+
Point(2) = {1, 0, 0, 1.0};
//+
Point(3) = {1, 1, 0, 1.0};
//+
Point(4) = {0, 1, 0, 1.0};
//+
Line(1) = {1, 4};
//+
Line(2) = {4, 3};
//+
Line(3) = {3, 2};
//+
Line(4) = {2, 1};
//+
Line Loop(1) = {2, 3, 4, 1};
//+
Plane Surface(1) = {1};

Recombine Surface{1};
//+
Point(5) = {2, 1.2, 0, 1.0};
//+
Point(6) = {2, 0, 0, 1.0};
//+
Line(5) = {3, 5};
//+
Line(6) = {5, 6};
//+
Line(7) = {6, 2};
//+
Line Loop(2) = {5, 6, 7, -3};
//+
Plane Surface(2) = {2};
//+
Field[2] = Restrict;
//+
Field[2].EdgesList = {5, 6, 7, 3};
//+
Field[2].FacesList = {2};
//+
Field[1] = MathEval;
//+
Field[1].F = "1.0";


//+
//Background Field = 1;

//+

//+
Field[1].F = "0.01";
//+
Background Field = 1;
//+
Background Field = -1;
//+
Field[1].F = "0.001";
1个回答

在 GMSH 中指定单元网格尺寸有几种不同的方法,我将使用此处的要点解释最简单的一种,但对于其他方法,我建议您查看手册: http: //gmsh.info/doc/texinfo/gmsh。 html#Specifying-mesh-element-sizes

正如您在示例中所做的那样,您可以将 GMSH 点定义为: Point(point #) = {x, y, z, lc}; 其中 x、y、z 是坐标值,lc 是单元网格尺寸。所以如果你想要一个 0.1 的元素网格大小你写

Point(1) = {0,0,0,0.1};
Point(2) = {0,1,0,0.1};
Line(1)={1,2};

该行将被拆分为 0.1 长度的元素。如果您为不同的点指定不同的 lc,GMSH 将在它们之间进行插值。