代码之家  ›  专栏  ›  技术社区  ›  Daniel

如何以二进制流格式解析OpenFoam多边形网格?

  •  4
  • Daniel  · 技术社区  · 8 年前

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

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

    如何解释二进制流格式?

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

    有人能告诉我处理polyMesh二进制流的OpenFoam代码吗?

    1 回复  |  直到 8 年前
        1
  •  5
  •   Daniel    7 年前

    经过一点研究,我成功地解析了所有3个二进制文件。

    1. 边界 文件是最简单的,因为即使标题中的格式表示文件处于二进制模式,但我的情况并非如此。 该文件为纯文本(ASCII),因此解析很容易。

    2. 积分 文件更难解析,因为即使标头是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. 这个 文件有点棘手。在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个整数的面,如果索引不告诉您开始和结束,您将不知道如何从第二个向量读取数据。顺便说一下,索引和实际数据都是整数。

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

    推荐文章