如何分离存储非结构化网格与动态单元数据并关联(兼容ParaView)
分离非结构化网格与动态单元数据的存储方案(兼容ParaView)
一、VTK原生实现方法
VTK的XML格式体系完全支持网格与场数据分离存储,核心是用.pvtu文件做索引,链接独立的网格和场数据文件:
第一步:单独存储网格
把非结构化网格导出为一个.vtu文件,仅保留几何拓扑信息,不包含动态单元数据。第二步:单独存储动态场数据
每个时间步的单元数据单独存为一个.vtu文件,这类文件仅包含单元数据,不重复存储网格。在XML结构中通过Source属性指定网格文件的路径即可,示例核心结构如下:<VTKFile type="UnstructuredGrid" version="1.0" byte_order="LittleEndian"> <UnstructuredGrid> <Piece Source="./base_grid.vtu"> <!-- 引用网格文件路径 --> <CellData> <DataArray type="Float32" Name="DynamicCellData" format="binary"/> <!-- 仅存放当前时间步的单元数据 --> </CellData> </Piece> </UnstructuredGrid> </VTKFile>第三步:用
.pvtu统一管理
创建一个.pvtu文件,列出所有场数据的.vtu文件路径,ParaView加载该文件时会自动关联共享网格,避免重复加载:<VTKFile type="PUnstructuredGrid" version="1.0" byte_order="LittleEndian"> <PUnstructuredGrid GhostLevel="0"> <PPoints> <DataArray type="Float32" Name="Points" NumberOfComponents="3"/> </PPoints> <PCellData> <DataArray type="Float32" Name="DynamicCellData"/> </PCellData> <Piece Source="./timestep_0.vtu"/> <Piece Source="./timestep_1.vtu"/> <!-- 依次添加所有时间步的场数据文件 --> </PUnstructuredGrid> </VTKFile>
另外也可以用.vtm(多块数据集文件)组织,将网格作为一个基础块,每个场数据作为引用该网格的子块,同样能实现分离存储。
二、替代格式:Ensight Gold
如果觉得VTK XML配置繁琐,Ensight Gold是ParaView完美兼容的替代选择,它天生采用网格与数据分离的设计:
- 网格存储为
.geo或.unv文件; - 每个时间步的单元数据单独存为
.data文件; - 主
.case文件会明确指定网格路径与所有场数据的关联关系,加载.case文件即可自动关联网格与所有数据,无需重复存储网格。
三、ParaView使用提示
无论采用哪种格式,直接加载对应的索引文件(.pvtu/.vtm/.case)即可,ParaView会自动处理共享网格的加载,不会占用冗余内存存储重复数据。
内容的提问来源于stack exchange,提问作者Marseille
相关产品推荐
相关产品推荐

