数值风云

请问如何读取OpenFOAM的二进制结果文件

各位前辈好,由于算的案例较大,而通常来说二进制文件比ASCII文件所占的空间要小,所以想将结果保存为二进制格式(输出二进制结果只需在controlDict中控制),然后再由其他程序读取进来进行进一步处理。请问从哪里可以看到OpenFOAM输出二进制结果文件的相关函数或代码呢?

你好, 我没试过binary file, 但是 parafoam 不能直接打开吗? 不行就先转化为vtk文件再用paraview打开.
希望成功.

你好,我想达到的是从其他软件中(in-house code)直接读取OpenFOAM的二进制结果,类似于直接读取ASCII码结果,并不是要用paraview进行后处理。另外,我之前有尝试过,paraview是可以直接打开OpenFOAM的二进制结果的。

https://www.openfoam.com/documentation/guides/latest/api/IOstreamOption_8H_source.html

是这个么?

https://www.openfoam.com/documentation/guides/latest/api/foamFormatConvert_8C.html

或者这个foamFormatConvert, OF自带工具把binary数据转为ascii

你好,这个好像更多是与IOStream相关的。我在其他帖子看到在OpenFOAM的application/utilities/mesh/manipulation/setSet目录中有与输出二进制格式相关的内容,如writeFuns.C等。

奇怪没法直接回复你的评论,其实到现在还没有明白你的具体需求,OStream不就是输出流么?我理解的是,在controlDict选择好输出格式后,会调用那个IOStreamOption, 然后重载输出操作符<<, 输出的就是那个选择的格式了。介绍下我遇到过处理二进制数据,数据转换的解决方法,希望能帮到你哈,
1.用python导入文件,提取二进制数据再处理
2.用之前提到的foamFoamConvert把二进制文件转换为ascii然后再处理,
3.用OF的foamTo***后处理工具,比如foamToVTK, foamToEnsight等等,一般转换为VTK后很多软件都能继续处理了。

感谢您的回复,我这边的具体需求就是在FEM求解器中直接读入OpenFOAM的二进制结果以用于后续计算,而非转换成ascii格式或其他格式再处理。我之前没有接触过这方面,但同门说读取二进制结果需要先了解OpenFOAM在输出二进制文件时的格式,因此我在找OpenFOAM中与二进制输出相关的文件、函数。像writeFuns.H文件中有如下描述:

Description 
Various functions for collecting and writing binary data.

我想应该可以从这里开始着手。

你好!
在前面@1324036589和@jliu回答的基础上,我有几个思路:

  1. 输出openfoam ascii文件,修改FEM Solver代码,与之对应;FEM Solver既然是in-house ,那么就可以控制并修改了; 虽然慢一些,占用硬盘多一些,但是这个读取动作在整个计算过程中只做了一次(假设是这样的),所以这个做法是可以接受的。
  2. 找到openfoam写入二进制文件的代码,修改FEM Solver代码,与之对应;这就需要看懂openfoam输出二进制的代码了,这里期待大佬指导。
  3. 使用@jliu的回答(感谢jliu)中的工具,如foamToVTK, foamToEnsight,然后再利用其他工具(如python,paraview,fluent,su2等)转成你需要的二进制格式,最后FEM Solver读入。

前辈你好,很抱歉这么晚才回复。
是的,目前我们就是读取的OF输出的ascii来进行计算,正是出于提高读取速度和节省空间的考虑才想要做您所说的第二点,这个确实不太好弄。很惭愧,我在这方面还是小白,而且目前忙于其他比较重要的事情没有继续深究,同期待大佬指导。 :grinning_face_with_smiling_eyes: