网格化:处理内部边界

计算科学
2021-12-08 17:38:11

我问这个问题是因为我没有看到(m)任何示例,并且我想避免花费数小时或数天的时间来研究网格,结果却发现这是不可能的:

考虑下面的草图。如您所见,我有一个带网格的盒子。在这个盒子里面,还有一个圆圈。这是一种“内部边界”,我希望一些节点完全贴在圆上,并且“内部”和“外部”元素之间的边缘尽可能接近圆形。在现实世界中,圆可能是一种更复杂的结构,甚至可能有内内表面。

出现几个问题:

  • 此任务是否有“名称”(以方便互联网搜索)?
  • 这是每个合理的网格员都可以处理的任务,还是我需要一些特别的东西?
  • 我目前正在尝试 GMESH。GMESH 有可能吗?(一个例子将不胜感激。)
  • 或者你有什么不同的推荐吗?

草图

4个回答

你提到的很常见,至少在我的领域是这样。您需要考虑的是区域的定义。内部区域由一个轮廓/循环定义:圆。外部区域由两个轮廓/循环定义:正方形和圆形。有不同的方式来表示这些。其中之一是BRep

我在不同的软件中做过这种类型的网格:Gmsh、Triangle、Ansys、Abaqus。特别是在 Gmsh 中,可以看到.geo下面的文件

Point(1) = {-2, -2, 0, 1.0};
Point(2) = {2, -2, 0, 1.0};
Point(3) = {2, 2, 0, 1.0};
Point(4) = {-2, 2, 0, 1.0};
Point(5) = {-1, 0, 0, 1.0};
Point(6) = {0, -1, 0, 1.0};
Point(7) = {1, 0, 0, 1.0};
Point(8) = {0, 1, 0, 1.0};
Point(9) = {0, 0, 0, 1.0};
Line(1) = {1, 2};
Line(2) = {2, 3};
Line(3) = {3, 4};
Line(4) = {4, 1};
Circle(5) = {5, 9, 6};
Circle(6) = {6, 9, 7};
Circle(7) = {7, 9, 8};
Circle(8) = {8, 9, 5};
Line Loop(9) = {8, 5, 6, 7};
Plane Surface(10) = {9};
Line Loop(11) = {3, 4, 1, 2};
Plane Surface(12) = {9, 11};

并且网格与之前显示的相同

在此处输入图像描述

除了其他答案中指出的软件外,如果您在 2D 中工作,那么 Shewchuk 的三角形软件 [1] 可以完成这项工作。如果您在 3D 中工作,那么 Si 的 tetgen 软件 [2] 具有此功能。要优化网格(2D 或 3D),您可以使用 MMGTools 套件 [3]、[4]。我自己的软件 GEOGRAM [5] 也有一些网格优化功能。

[1] https://www.cs.cmu.edu/~quake/triangle.html

[2] http://wias-berlin.de/software/tetgen/

[3] https://www.mmgtools.org/

[4] https://gforge.inria.fr/projects/mmg3d/

[5] http://alice.loria.fr/software/geogram/doc/html/index.html

使用“内部区域”对几何体进行网格划分并不是所有网格划分器都可以执行的操作。有些允许您指定一个或多个内部区域,但随后自动假定这些是孔。

我还没有看到像您展示的 gmsh 示例,但不确定它不能创建这样的网格。

但是 netgen 网格器:

https://sourceforge.net/projects/netgen-mesher/

有一个与您的非常相似的示例。如果您安装 Netgen 6.1,加载小几何示例 netgen6.1/share/netgen/squarecircle.in2d,然后在 GUI 中按下“生成网格”按钮,您将获得与上面显示的非常相似的网格. 该网格可以多种格式写入文件,包括 gmsh。

如果您有获得许可证的资源,Sandia National Labs的Cubit具有此功能。我过去经常使用它来生成许多网格,例如您的示例中的网格。