是否有允许丑陋元素的网格生成方法?

计算科学 正交
2021-12-21 19:26:08

大多数网格生成软件似乎旨在为 FEM 构建形状良好的元素。我很好奇另一种情况:

我需要在不规则区域上进行数值积分。我不需要解决这个区域的任何未知数——只需整合一个已知函数。我需要尽快整合许多这样的地区。我目前的方法是对该区域进行网格划分(使用三角形或 Tetgen,取决于 2d 与 3d),然后对每个单独的 tri/tet 执行高斯求积。

但是,我怀疑这些网格划分算法(这是一个瓶颈)在这个用例中所做的工作远远超出了必要的工作量。差异:

  • 小的内角很好。
  • 偶尔的零体积元素会很好——在零体积元素上积分只会得到零。
  • 不合格元素不是问题。

本质上,只要网格覆盖整个体积并且单元格之间没有重叠,任何事情都会发生。

有谁知道解决这种情况的研究?

2个回答

在 3D 中,如果您使用的是 tetgen,您可以停用附加点的插入和网格质量的优化。当我想要这样做时,我正在使用以下标志:

-p (input data is surfacic)
-O0 (do not optimize mesh)
-YY (do not insert Steiner points on boundary)
-AA (generete region tags for each shell) (if needed)

tetgen 命令行开关在此处记录 [1]。

但是,我不确定非常瘦元素上的高斯正交是否足够稳定。如果你这样做,我建议通过在优化的网格和未优化的网格上运行算法并比较结果来评估质量。

[1] http://wias-berlin.de/software/tetgen/switches.html

由于您不关心四面体(或三角形)的质量,您可以使用计算机图形和动画中常用的以下两步程序快速将您的形状四面体化:

  1. 通过标准递归切割平面算法(连续将内部体积切割成具有连续小平面的 2 个部分),将输入非凸多面体划分为在二元空间分割树 ( BSP 树) 中组织的凸多面体的并集。

  2. 通过选择任何顶点并将其与边缘连接到所有其他顶点,进一步将这些凸多面体中的每一个分解为四面体。

步骤 1 中切割面的顺序和步骤 2 中顶点的选择可以随意选择(这将影响生成的三角剖分的质量);随机通常是一个不错的选择。

一旦你的形状被四面体化,你可以按照通常的方式对每个四面体进行标准求积。

有关 2D 示例,请参见下图。

基于 bsp 的三角剖分

3D 的扩展很简单,但更难绘制。在 3D 中,BSP 步骤中的切割边缘成为切割平面,但四面体化步骤中的边缘仍然是边缘。

网上有很多很好的教程是为 Quake 引擎编写的(1990 年代流行的 3D 电脑游戏,许多其他后续 3d 引擎都以此为基础)。