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

时间:2018-03-06 10:27:04

标签: parsing binary ascii openfoam

我正在开发一个需要解析OpenFoam polyMesh文件(点,面,边界)的工具。

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

如何解释二进制流格式?

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

任何人都可以指导我处理polyMesh二进制流的OpenFoam代码吗?

1 个答案:

答案 0 :(得分:2)

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

  1. 边界文件是最简单的,因为即使标题中的格式表示文件处于二进制模式,但对我来说并非如此。 该文件采用纯文本(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. 在二进制中,这些点是一个接一个地表示的,所以你需要做的就是读取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)
        。
        。
        点。

    2. 你有面数(在这个例子中为4789790),然后,在每个面的前面,形成实际面的整数(在这个例子中为4)和该面的数据。 在二进制文件中,您有一个标题,它是ASCII格式,然后是2个向量,一个接一个。第一个表示存储在第二个向量中的数据的索引。 索引为什么?好吧,因为面部没有恒定数量的整数(就像我的例子4)。您可以找到具有4个,5个或6个整数的面,并且没有索引告诉您开始和结束,您将不知道如何从第二个向量读取数据。顺便说一句,索引和实际数据都是整数。

      我花了一些时间来查找这些信息,希望这可以帮助那些尝试使用二进制格式的polyMesh文件的人。