网格化:处理内部边界
你提到的很常见,至少在我的领域是这样。您需要考虑的是区域的定义。内部区域由一个轮廓/循环定义:圆。外部区域由两个轮廓/循环定义:正方形和圆形。有不同的方式来表示这些。其中之一是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/
[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具有此功能。我过去经常使用它来生成许多网格,例如您的示例中的网格。

