我正在开发一个需要解析OpenFoam polyMesh文件(点,面,边界)的工具。
此时该工具只能解析polyMesh文件的ASCII格式,我需要添加的内容也是对二进制文件的支持。
如何解释二进制流格式?
是否有关于OpenFoam如何解析这些二进制文件的文档?
任何人都可以指导我处理polyMesh二进制流的OpenFoam代码吗?
答案 0 :(得分:2)
经过一番研究后,我设法解析了所有3个二进制文件。
边界文件是最简单的,因为即使标题中的格式表示文件处于二进制模式,但对我来说并非如此。 该文件采用纯文本(ASCII),因此解析很容易。
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个双打的块直到结束。这就是积分。
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格式,然后是2个向量,一个接一个。第一个表示存储在第二个向量中的数据的索引。 索引为什么?好吧,因为面部没有恒定数量的整数(就像我的例子4)。您可以找到具有4个,5个或6个整数的面,并且没有索引告诉您开始和结束,您将不知道如何从第二个向量读取数据。顺便说一句,索引和实际数据都是整数。
我花了一些时间来查找这些信息,希望这可以帮助那些尝试使用二进制格式的polyMesh文件的人。