【问题标题】:How to parse OpenFoam polyMesh in binary stream format?如何以二进制流格式解析 OpenFoam polyMesh?
【发布时间】:2018-08-14 04:15:30
【问题描述】:

我正在开发一个需要解析 OpenFoam 多边形网格文件(点、面、边界)的工具。

目前该工具只能解析 polyMesh 文件的 ASCII 格式,我需要添加的是对二进制的支持。

如何解释二进制流格式?

是否有任何关于 OpenFoam 如何解析这些二进制文件的文档?

谁能指导我使用处理 polyMesh 二进制流的 OpenFoam 代码?

【问题讨论】:

标签: parsing binary ascii openfoam


【解决方案1】:

经过一番研究,我设法解析了所有 3 个二进制文件。

  1. boundary 文件是最简单的,因为即使标题中的格式表明该文件处于二进制模式,但对我来说并非如此。 该文件采用纯文本 (ASCII) 格式,因此易于解析。

  2. points 文件有点难以解析,因为即使标题是 ASCII 格式,数据本身也是以二进制形式存储的。 如果您查看多边形网格中点文件的 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 个双精度块,直到到达末尾。积分就是这样。

  1. 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 文件的任何人有所帮助。

【讨论】:

    猜你喜欢
    • 2016-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-14
    • 2016-04-07
    • 1970-01-01
    • 2021-05-27
    • 2022-10-13
    相关资源
    最近更新 更多