您如何为 VTK 生成数据?

计算科学 VTK
2021-12-07 16:25:25

我目前正在开发一个模拟,我打算使用 VTK 进行可视化。此外,我现在有点愚蠢,因为我没有找到一个很好的例子来说明如何为 VTK 生成数据。有很多例子都是从读取数据开始,然后用它做一些可视化的。

但是另一边是什么?我将在许多计算节点上拥有多达数十亿个节点的 FEM 网格。人们如何将其输入适合作为 VTK 输入的“东西”(可能是文件)?VTK 是否可以在分布式仿真应用程序中进行一些预处理以减少数据量?

我认为,一个好的示例或教程的链接会很有帮助。目前我只是迷失在可用的信息量中。

2个回答

如果你想让你的 FE 代码独立于 VTK API,编写一个 VTK 可以读取的文件是最直接的方法。文件格式记录在这里:

http://www.vtk.org/wp-content/uploads/2015/04/file-formats.pdf

传统格式更简单,但 XML 格式提供了对 VTK 一些较新功能的访问。从这些格式的文件中创建 VTK 对象很简单。

编写文件还允许您使用使用 VTK API 构建的可视化应用程序,而不是编写自己的,例如 ParaView:

http://www.paraview.org/

如上所述,VTK 传统格式简单明了,您应该能够编写子程序来创建输出文件。

但是,在您的情况下,您正在处理数十亿个节点,从而产生一个巨大的(或多个)文件。对于这样的数据量,您必须使用压缩的二进制格式。我假设您在集群上并行运行您的代码。XML 格式提供了有趣的并行特性,例如从不同进程读取多个输出,并且专门设计用于从大规模并行计算中读取数据。

我不知道 VTK 是否会满足您的需求。您可以查看 HDF5 库https://www.hdfgroup.org/HDF5/,它可以与 MPI 一起使用以执行高效的 I/O 操作。它提供 C 和 Fortran 接口。NETCDF 或 CGNS 库也是不错的选择。根据您的数据,您可以选择使用现有格式或开发自己的驱动程序。

最后,关于可视化软件,你应该看看上面提到的 Paraview,也可以访问https://wci.llnl.gov/simulation/computer-codes/visit/,它们都支持通过并行管道和远程集群访问的海量数据可视化。Paraview 是用 VTK 构建的,因此它应该提供读取 VTK 文件的优化。访问使用过滤器和幽灵节点来加速仅显示所需单元格的可视化。两者都有很好的文档,我建议您阅读。