gpt4 book ai didi

c++ - 了解 vtu 文件大小

转载 作者:太空宇宙 更新时间:2023-11-04 12:23:33 25 4
gpt4 key购买 nike

我在理解/管理 VTK 中 .vtu 文件的大小时遇到​​问题。我需要为具有数百万个单元和节点的六面体网格编写 CFD 输出。所以,我正在寻找提高存储效率的方法。我从简单的测试用例开始。

案例 1:80x40x40 六面体网格,每个六面体有 8 个点。因此,总共有 128000 个单元格和 1024000 个点。我们称它为 C1.vtu。

案例 2:只有唯一点的 80x40x40 六面体网格。因此,总共有 128000 个单元格和 136161 个点。我们称它为 C2.vtu。

我在每种情况下为每个点存储一个 vector 场(速度)。我将 vtkFloatArray 用于此数据。 C1.vtu文件大小为7.5MB,C2.vtu文件大小为3.0MB。

这不是我在创建 C2.vtu 时所期望的。由于我在案例 2 中仅存储了(案例 1 的)大约 13% 的点,因此我预计 C2.vtu 会相应减少(至少 5 倍)。但是,减少量仅为2.5倍。

我想了解内部发生的事情。另外,我很感激任何关于进一步减小文件大小的见解。

我在 Ubuntu12.04 上使用 vtk6.2 和 C++。

最佳答案

听起来你有 compression enabled in the writer ; writer->GetCompressor() 返回一个非 NULL 指针吗?如果是这样,那么几乎可以肯定这就是文件大小不同的原因。如果不进行压缩,我希望您报告的文件会更大。正如上面的评论所指出的,非结构化存储增加了连接开销。考虑您的网格 C1 和 C2:

  • C1

    • 连接大小 = 128000 *(1 个单元格类型 + 1 个单元格偏移量 + 8 个点 ID)*(每个整数 4 或 8 个字节)
    • 点坐标大小 = 1024000 *(3 个坐标)*(每个坐标 4 或 8 个字节)
    • vector 字段大小 = 1024000 *(每个元组 3 个组件)*(每个组件 4 或 8 个字节)
    • 这至少是 28.32 MiB(所有 int32/float32),但您报告它是 7.5 MB
  • C2

    • 连接大小 = 128000 *(1 个单元格类型 + 1 个单元格偏移量 + 8 个点 ID)*(每个整数 4 或 8 个字节)
    • 点坐标大小 = 136161 *(3 个坐标)*(每个坐标 4 或 8 个字节)
    • vector 字段大小 = 136161 *(每个元组 3 个组件)*(每个组件 4 或 8 个字节)
    • 那至少是 8 MiB,但您报告了 3 MB。

关于c++ - 了解 vtu 文件大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45359769/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com