如何解析以二进制流格式呈现的OpenFoam polyMesh?

4
我正在开发一个需要解析OpenFoam polyMesh文件(points、faces、boundary)的工具。
目前,该工具仅能解析polyMesh文件的ASCII格式,我需要添加对二进制格式的支持。
如何解释二进制流格式?
是否有关于OpenFoam解析这些二进制文件的文档?
有没有人可以指导我处理polyMesh二进制流的OpenFoam代码?

可能会有所帮助,可以查看代码指南:https://www.openfoam.com/documentation/cpp-guide/html/ - Herpes Free Engineer
1个回答

5
经过一番研究,我已成功解析了这三个二进制文件。
1. boundary 文件最容易解析,因为即使头文件格式表示该文件是二进制模式,但对我来说并非如此。 该文件实际上是纯文本(ASCII),因此解析起来很容易。
2. points 文件稍微难一些,因为即使头部是 ASCII 格式,数据本身仍存储为二进制。 如果查看 polyMesh 中点文件的 ASCII 格式,您会发现我们有点数及以下表示方式:
1681139 ( (-0.03975 0.0026372 -0.00919138) (-0.03975 0.00280753 -0.00910861) (-0.03975 0.00297785 -0.00902584) (-0.03975 0.00314818 -0.00894307) (-0.03975 0.00331851 -0.0088603) (-0.03975 0.00348883 -0.00877753) . . . )
在二进制中,点依次表示,所以您需要做的就是读取 3 个 double 直到结束。至此,点的解析工作就完成了。
3. faces 文件稍微棘手一些。在 ASCII 中,数据表示如下:
4789790 ( 4(702 982 3040 1080) 4(19 1080 3040 346) 4(1 346 3040 982) 4(0 1 982 702) 4(0 702 1080 19) 4(0 19 346 1) . . . )
您有面数(在此示例中为 4789790),然后在每个面前面,有实际面所形成的整数数量(在此示例中为 4),以及该面的数据。 在二进制中,您有头部(以 ASCII 格式表示),然后是两个向量,一个接一个。第一个向量表示存储在第二个向量中的数据的索引。 为什么是索引?因为各个面的整数数量不一定相同(如我的示例中的 4),您可能会找到包含 4、5 或 6 个整数的面,如果没有告诉您起始和结束的索引,您将不知道如何从第二个向量中读取数据。顺便说一下,索引和实际数据都是整数。

我花了一些时间查找这些信息,希望这能帮助到任何试图使用二进制格式的polyMesh文件的人。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接