处理非结构化网格的库

计算科学 pde 数值建模 图书馆 非结构化网格
2021-12-11 08:32:24

我正在处理一个*.cgns文件这种网格格式,当保存为非结构化网格时,保存节点坐标、每个元素的节点连接性和边界条件。它是一种简洁的网格格式,具有良好的文档。但是,我仍然负责为计算构建其余的数据结构。例如,以单元为中心的 FV 方案的面表。这是一项非常精细的工作,必须以某种方式为每个求解器完成(对于单元顶点求解器,我认为它是相邻的点)。

因此,由于许多人不得不开发这种类型的例程,我认为有理由认为比我更聪明的人编写了一个组织这些数据结构的库。

我正在阅读DMplex 的 PETSc 文档,但我仍在试图弄清楚如何给*.cgns它一个文件。从我所见,即使使用 cgns 支持进行编译,这种格式的文件 I/O 也没有很好地建立在这个库中。我不是在批评任何人,PETSc 是一个很棒的图书馆。

我的问题是,是否有任何库可以管理此类数据结构的创建,不仅适用于 FV 方法,还适用于任何类型的方案/求解器?一个快速的奖金问题......是否有人研究算法以有效地为 PDE 求解器创建数据结构?

1个回答

大多数有限元库都能够读取大量的网格格式。我工作的库deal.II(见http://www.dealii.org)恰好有相当多的VTK、UCD、GMSH等格式的网状阅读器,见这里: https://dealii .org/developer/doxygen/deal.II/classGridIn.html及其实现在这里 https://github.com/dealii/dealii/blob/master/source/grid/grid_in.cc这些阅读器通常不是很复杂(除了 UNV 格式,由于历史原因,它实际上只是一个特定程序的内存转储)并且相对容易扩展到一种新格式,例如您感兴趣的格式。

一旦你把它排除在外,剩下的一切就会自动发生:构建网格,在单元之间建立连接,查询单元的邻居,边界边缘或顶点,或者在它们上构建数值方法。换句话说,问题很好地分开了:您所要做的就是为特定的网格格式编写一个阅读器,然后这些库的每个功能都立即可供您使用。