具有大部分相同元素(类型/大小..)的网格生成

计算科学 网格生成
2021-12-23 09:09:30

我正在寻找一种生成网格的方法,该网格主要由相同的元素组成,我的意思不仅是相同的类型,而且是完全相同的尺寸,以简化 FEM 计算。

是否有我应该研究的特定算法或软件包?

1个回答

生成完全相同的元素并不完全简单,并且可能需要类似立方体的算法来使网格生成过程完全自动化。但是,正如评论中提到的,您将无法使用它来捕获任意边界。

根据您的目标,您可能决定帮助网格生成器软件生成满足这两个要求的保形网格:元素的尺寸/方向尽可能小,并且与边界保形。我将使用 GMSH 作为首选软件。

考虑一下您想要网格化的以下二维示例:在此处输入图像描述

在这里,我们面临着捕捉底部边界的挑战,但在上半部分(即正方形)有很多“结构化网格”的潜力。

尝试 1:仅使用几何点处的特征长度并依靠网格器的最大努力:

在此处输入图像描述

cl=0.1; z=0.;

Point(1) = {0.5,0.5,z,cl};
Point(2) = {-0.5,0.5,z,cl};
Point(3) = {-0.5,-0.5,z,cl};
Point(4) = {0.5,-0.5,z,cl};
Point(6) = {0.0, -0.5, z, cl};

Line(1)={1,2};
Line(2)={2,3};
Line(4)={4,1};
Circle(5) = {3,6,4};
Line Loop(1) = {1,2,5,4};
Plane Surface(1) = {1};

不幸的是,网格生成器创建的网格肯定不能满足“相同大小”三角形的要求。

尝试 2:在明显区域指定结构化网格:

在此处输入图像描述

cl=0.1; z=0.;
Point(1) = {0.5,0.5,z,cl};
Point(2) = {-0.5,0.5,z,cl};
Point(3) = {-0.5,-0.5,z,cl};
Point(4) = {0.5,-0.5,z,cl};

Line(1)={1,2};  Transfinite Line{1} = 10;
Line(2)={2,3};  Transfinite Line{2} = 10;
Line(3)={3,4};  Transfinite Line{3} = 10;
Line(4)={4,1};  Transfinite Line{4} = 10;
Line Loop(1) = {1,2,3,4};   
Plane Surface(1) = {1}; Transfinite Surface{1};

Point(6) = {0.0, -0.5, z, cl};
Circle(5) = {3,6,4};
Line Loop(2) = {5,-3};
Plane Surface(2) = {2};

现在,在一个区域,网格由完全相同的三角形组成,并且与另一个区域的网格共形。

我们能做得更好吗?

尝试 3:手动添加另一个具有指定网格的区域:

在此处输入图像描述

cl=0.1; z=0.;

Point(1) = {0.5,0.5,z,cl};
Point(2) = {-0.5,0.5,z,cl};
Point(3) = {-0.5,-0.5,z,cl};
Point(4) = {0.5,-0.5,z,cl};

Line(1)={1,2};  Transfinite Line{1} = 11;
Line(2)={2,3};  Transfinite Line{2} = 11;
Line(3)={3,4};  Transfinite Line{3} = 11;
Line(4)={4,1};  Transfinite Line{4} = 11;
Line Loop(1) = {1,2,3,4};   
Plane Surface(1) = {1}; Transfinite Surface{1};

Point(10) = {-0.4,-0.5,z,cl};
Point(11) = {0.4,-0.5,z,cl};
Point(12) = {0.4,-0.7,z,cl};
Point(13) = {-0.4,-0.7,z,cl};

Line(10) = {10,13}; Transfinite Line{10} = 3;
Line(11) = {13,12}; Transfinite Line{11} = 9;
Line(12) = {12,11}; Transfinite Line{12} = 3;
Line(13) = {11,10}; Transfinite Line{13} = 9;
Line Loop(3) = {10,11,12,13};   
Plane Surface(3) = {3}; Transfinite Surface{3};

Point(6) = {0.0, -0.5, z, cl};
Circle(5) = {3,6,4};
Line(21) = {4,11};
Line(22) = {10,3};

Line Loop(2) = {5,21,-12,-11,-10,22};
Plane Surface(2) = {2};

实际上,我所做的 -> 是手动应用行进立方体。我不知道 GMSH 是否包含内置的东西来执行这种网格划分。但是,当然可以编写一个脚本来执行行进立方体类型的算法来生成符合 GMSH 的几何文件。

借助相对较少数量的三角形(非结构化网格区域),也可以将具有不同三角形尺寸的结构化网格区域连接起来。

注意:我使用了一种非常原始的方式来指示网格上的 GMSH,还有更好的方法来做到这一点。