寻找库或算法以通过一组表面执行裁剪 3D 非结构化网格

计算科学 有限元 图书馆 几何学 网格生成 流体动力学
2021-12-12 02:35:43

我们有一个 3D(体积)非结构化、可能是混合的、退化的不规则网格数据结构,我们能够生成(主要由六面体和一般多面体组成,使用 CSG 和 b-rep 的混合)和一组三角曲面,我们知道相交网格。我们想通过一组相交的三角面来分割体积网格,并相应地改变网格的拓扑结构。这些网格有多种用途,包括计算和可视化。此外,它们都代表的几何形状非常不规则和复杂,因此没有强烈考虑八叉树或八叉树。我们已经有一个实现来检测整个体积中的此类交叉点。三角形表面也可以在体积内相交,并将网格分割成另一个拓扑区域。

我们正在寻找的是一种算法来相应地分割网格。

你知道任何库(无论是什么语言,但如果是商业的,用 C++ 实现的)或可以处理这个问题的论文吗?

我们目前正在研究使用Marching 立方体,并已开始为此努力进行一些开发,但对该主题的现有实现或研究感兴趣。我们也一直在研究 CGAL,但它不符合我们的目的。我们知道 OpenFOAM 的名称,但我们不知道它是否可以帮助我们。

谢谢你的帮助!

2个回答

VTK有许多用于切割具有平面和隐式定义曲面的网格的实用程序。这可能对你有用。要使用它,您可能会将整个网格输入vtkUnstructuredGrid(或类似的)并让 VTK 进行所有切割。我认为,如果您想控制切割单元时拓扑结构的变化方式,您将遇到困难。

Voro++是用于与切割单元相关的几何任务的较低级别且轻量级的工具我已经将它用于一些网格预处理任务和计算双单元的大小;它运作良好并且不打扰。如果您想切割单个单元格或单元格集合,Voro++ 将是一个不错的选择,然后使用您自己的逻辑来更改因切割而产生的网格拓扑。

您提到了CGAL,但没有说明它如何无法满足您的需求。也许您可以更准确地指定您正在寻找的内容?

我现在使用 OpenFOAM 有一段时间了(对于我的博士学位也是如此),我只能推荐它:

它有大量的物理模型,它是用 C++ 编写的,这意味着:模块化、封装、顶级代码的自动并行性、绑定到字段但作为模型库实现的边界条件、多物理场 [6DoF、两相流,燃烧,各种湍流模型,海军流体动力学求解器,分子动力学......其中有很多...... :)],方程模拟(使用新的控制方程组非常简单的方法)等等......顺便说一句,它在 GPL 下,因此可以免费下载和修改。

对于您的特定目的,有一个网格生成器可以完全满足您的需求,称为“snappyHexMesh”。它采用 STL 并将其与底层的非结构化网格相交并创建一个新的网格,以便与 OpenFOAM 求解器和库一起使用,因此请查看:

snappyHexMesh 官方信息

snappyHexMesh 的一个很好的教程