如何以二进制流格式解析 OpenFoam polyMesh?
How to parse OpenFoam polyMesh in binary stream format?
我正在开发一个需要解析 OpenFoam polyMesh 文件(点、面、边界)的工具。
目前该工具只能解析polyMesh文件的ASCII格式,我需要添加的是对二进制文件的支持。
如何解释二进制流格式?
是否有关于 OpenFoam 如何解析这些二进制文件的文档?
任何人都可以指导我处理 polyMesh 二进制流的 OpenFoam 代码吗?
经过一些研究,我设法解析了所有 3 个二进制文件。
boundary 文件是最简单的,因为即使 header 的格式说文件是二进制模式,但事实并非如此对我来说。
该文件是纯文本 (ASCII),因此很容易进行解析。
points 文件有点难以解析,因为即使 header 是 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)构成了实际的面,以及该面的数据。
在二进制中,你有 header ,它是 ASCII,然后是 2 个向量,一个接一个。第一个表示存储在第二个向量中的数据的索引。
为什么要索引?好吧,因为面孔没有固定数量的整数(就像我的示例 4 中那样)。您可以找到具有 4、5 或 6 个整数的面,如果没有索引告诉您开始和结束,您将不知道如何从第二个向量读取数据。顺便说一句,索引和实际数据都是整数。
我花了一些时间查找此信息,希望这对尝试使用二进制格式的 polyMesh 文件的任何人有所帮助。
我正在开发一个需要解析 OpenFoam polyMesh 文件(点、面、边界)的工具。
目前该工具只能解析polyMesh文件的ASCII格式,我需要添加的是对二进制文件的支持。
如何解释二进制流格式?
是否有关于 OpenFoam 如何解析这些二进制文件的文档?
任何人都可以指导我处理 polyMesh 二进制流的 OpenFoam 代码吗?
经过一些研究,我设法解析了所有 3 个二进制文件。
boundary 文件是最简单的,因为即使 header 的格式说文件是二进制模式,但事实并非如此对我来说。 该文件是纯文本 (ASCII),因此很容易进行解析。
points 文件有点难以解析,因为即使 header 是 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)构成了实际的面,以及该面的数据。 在二进制中,你有 header ,它是 ASCII,然后是 2 个向量,一个接一个。第一个表示存储在第二个向量中的数据的索引。 为什么要索引?好吧,因为面孔没有固定数量的整数(就像我的示例 4 中那样)。您可以找到具有 4、5 或 6 个整数的面,如果没有索引告诉您开始和结束,您将不知道如何从第二个向量读取数据。顺便说一句,索引和实际数据都是整数。
我花了一些时间查找此信息,希望这对尝试使用二进制格式的 polyMesh 文件的任何人有所帮助。