我目前正在开发一个模拟,我打算使用 VTK 进行可视化。此外,我现在有点愚蠢,因为我没有找到一个很好的例子来说明如何为 VTK 生成数据。有很多例子都是从读取数据开始,然后用它做一些可视化的。
但是另一边是什么?我将在许多计算节点上拥有多达数十亿个节点的 FEM 网格。人们如何将其输入适合作为 VTK 输入的“东西”(可能是文件)?VTK 是否可以在分布式仿真应用程序中进行一些预处理以减少数据量?
我认为,一个好的示例或教程的链接会很有帮助。目前我只是迷失在可用的信息量中。
我目前正在开发一个模拟,我打算使用 VTK 进行可视化。此外,我现在有点愚蠢,因为我没有找到一个很好的例子来说明如何为 VTK 生成数据。有很多例子都是从读取数据开始,然后用它做一些可视化的。
但是另一边是什么?我将在许多计算节点上拥有多达数十亿个节点的 FEM 网格。人们如何将其输入适合作为 VTK 输入的“东西”(可能是文件)?VTK 是否可以在分布式仿真应用程序中进行一些预处理以减少数据量?
我认为,一个好的示例或教程的链接会很有帮助。目前我只是迷失在可用的信息量中。
如果你想让你的 FE 代码独立于 VTK API,编写一个 VTK 可以读取的文件是最直接的方法。文件格式记录在这里:
http://www.vtk.org/wp-content/uploads/2015/04/file-formats.pdf
传统格式更简单,但 XML 格式提供了对 VTK 一些较新功能的访问。从这些格式的文件中创建 VTK 对象很简单。
编写文件还允许您使用使用 VTK API 构建的可视化应用程序,而不是编写自己的,例如 ParaView:
如上所述,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 文件的优化。访问使用过滤器和幽灵节点来加速仅显示所需单元格的可视化。两者都有很好的文档,我建议您阅读。