了解vtu文件大小

时间:2017-07-27 19:46:17

标签: c++ linux vtk

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

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

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

我在每种情况下为每个点存储一个矢量场(速度)。我使用vtkFloatArray来获取这些数据。 C1.vtu的大小是7.5 MB,C2.vtu文件的大小是3.0MB。

这不是我创建C2.vtu时的预期。由于我在Case2中只存储了大约13%(Case1)的点,我预计C2.vtu会相应减少(至少5次)。但是,减少量仅为2.5倍。

我想了解内部发生了什么。此外,我感谢任何有关进一步减小文件大小的见解。

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

1 个答案:

答案 0 :(得分:0)

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

  • C1

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

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