我在理解/管理VTK中.vtu文件的大小时遇到了问题。我需要为具有数百万个单元和节点的六面体网格编写CFD输出。因此,我正在寻找提高存储效率的方法。我从简单的测试用例开始。
Case1: 80x40x40六面体网格,每个六面体8个点。因此,总共有128000个单元和1024000个点。我们称它为C1.vtu。
Case2: 80x40x40只有唯一点的六面体网格。因此,总共有128000个单元和136161个点。我们称它为C2.vtu。
在每种情况下,我为每个点存储一个向量场(速度)。我使用vtkFloatArray来处理这些数据。C1.vtu大小为7.5MB,C2.vtu文件大小为3.0MB。
这不是我在创建C2.vtu时所期望的。由于我只在Case2中存储了(Case1的)大约13%的点数,我预计C2.vtu会相应减少(至少5倍)。然而,降幅仅为2.5倍。
我想了解内部发生了什么。此外,我很感谢任何关于进一步减少文件大小的见解。
我在Ubuntu12.04上使用带有C++的vtk6.2。
发布于 2017-08-02 19:40:49
听起来像是有compression enabled in the writer;writer->GetCompressor()返回的是否是非空指针?如果是这样,那么这几乎可以肯定是文件大小不同的原因。如果没有压缩,我希望您报告的文件大小会更大。正如上面提到的,非结构化存储增加了连接开销。考虑网格C1和C2:
- connectivity size = 128000 \* (1 cell type + 1 cell offset + 8 point IDs) \* (4 or 8 bytes per integer)
- point coordinate size = 1024000 \* (3 coords) \* (4 or 8 bytes per coord)
- vector field size = 1024000 \* (3 components per tuple) \* (4 or 8 bytes per component)
- that would be 28.32 MiB at a minimum (all int32/float32) yet you report it is 7.5 MB
- connectivity size = 128000 \* (1 cell type + 1 cell offset + 8 point IDs) \* (4 or 8 bytes per integer)
- point coordinate size = 136161 \* (3 coords) \* (4 or 8 bytes per coord)
- vector field size = 136161 \* (3 components per tuple) \* (4 or 8 bytes per component)
- that would be 8 MiB at a minimum, but you report 3 MB.
https://stackoverflow.com/questions/45359769
复制相似问题