有关openfoam二次开发



  • 有关openfoam二次开发

    请问一下,各位有二次开发经验的人,想要利用现有代码(现有代码由Fortran写的——相信各位也会有不是C++写的代码想应用到openfoam里面的情况),带入openfoam中进行计算,需要怎样实现。

    是必须进行C++语言移植,制作成类库文件然后根据openfoam的语法进行引用;还是可以将现有代码作成动态链接库,实现两种语言之间的链接?

    前者必须进行代码移植,把原有的程序语言转换成C++语言的;后者只需将重点放在解决接口的问题,但我不知道openfoam有没有实现的办法。请问各位有没有类似经验?或者还有别的做法?亦或是必须移植的话有什么需要关注的重点?

    求各位大神指点!或者有什么二次开发相关的经验也请在这个帖子里面讨论一下,谢谢!



  • 各位的经验能让我受益匪浅,请不吝赐教,谢谢!


  • 自由表面模型副教授 OpenFOAM副教授

    @王旭有关openfoam二次开发 中说:

    求各位大神指点!或者有什么二次开发相关的经验也请在这个帖子里面讨论一下,谢谢!

    可以编译成库然后调用,具体的我最近会写出来。


  • 网格教授 OpenFOAM教授 管理员

    想要利用现有代码(现有代码由Fortran写的——相信各位也会有不是C++写的代码想应用到openfoam里面的情况),带入openfoam中进行计算,需要怎样实现。

    还得看是实现什么功能的,如果是简单计算各矩阵特征值什么的,可以直接编译成库然后挂载。如果实现的计算比较复杂,比如Fortran写的偏微分方程求解器,不如改写成C++。

    主要看你的F程序独立程度



  • @东岳 是一套完全独立的代码,能够实现螺旋桨部分性能计算的。代码本身独立而且很复杂,改写的难度也是不小的。这样高独立性的代码建议改写成c++是么?


  • 网格教授 OpenFOAM教授 管理员

    要和OpenFOAM哪部分实现交互?比如面上的边界条件?某个网格区域内单独求解?还是什么



  • 数据交互。我打算建立一个施加动量源的模型(参考激励盘体模型),将现有代码计算得到的力以动量源的形式带入到openfoam计算中。
    然后,openfoam计算结果在修正我那个现有代码的输入数据,重新计算。
    意图让现有代码加入计算循环。


  • 网格教授 OpenFOAM教授 管理员

    将现有代码计算得到的力以动量源的形式带入到openfoam计算中。

    蛋蛋考虑这一点。你现在的F代码是按照OpenFOAM格式输出的么?如果是的话可以把F做外挂库,在OpenFOAM运行的时候挂载F库,计算力之后写成OpenFOAM类似的格式,然后进入OpenFOAM计算。如果格式不统一,需要要么把你F计算的力转化为OpenFOAM格式,要么把OpenFOAM格式转换为F代码的格式。

    或者,不考虑格式,硬交互(Brute-force)。比如一些F库可以求解矩阵特征值,在OpenFOAM直接把一些数据提取出来,硬生成一个矩阵,进入F库计算后返回。

    你可以这样想:gnuplot用的是raw数据,在处理OpenFOAM结果的时候,OpenFOAM需要用postProcess命令把结果转换为gnuplot可读取的raw数据才能处理。你那面C和F的交互也一样。



  • 我的F代码输入和输出都是个固定内容格式的txt文件。输入螺旋桨的几何特征型值表以及工况,最终拟定格式输出螺旋桨的定常或非定常性能。不是按照OpenFOAM的格式进行的输入输出。
    有关李老师后面的内容,硬交互,我不是很理解。“在OpenFOAM直接把一些数据提取出来,硬生成一个矩阵,进入F库计算后返回”,这个过程,是不是等同于让C程序计算完后,将结果数据带入F之中?我想研究船桨干扰问题,船(C代码)和桨(F代码)两者是互相迭代的过程。这个迭代过程硬交互(Brute-force)能否实现自动,而不是完全孤立一般的手动迭代?@东岳
    顺便,@队长别开枪 ,请您分享一下“编译成库然后调用”的经验。我在考虑生成什么样形式的库来调用,希望能够参考,谢谢~



  • 没有找到修改自己帖子的方法……也许是我没有找到,但若是没有,希望增添编辑自己帖子的功能。

    我的代码功能上面大概描述了,输入输出格式都和OF格式完全不一样,我这几天参考李老师的意见做做看。谢谢指导。遇到问题我找不到解决方法的时候会继续提问,谢谢。



  • 我依然期待在这里参考和学习各位学者和前辈们的二次开发的经验,有劳各位大大辛苦一下

    另外若有人在二次开发方面有相关问题也期望能够在这个帖子集中提出,以方便查找和学习。


  • 网格教授 OpenFOAM教授 管理员

    有关李老师后面的内容,硬交互,我不是很理解。“在OpenFOAM直接把一些数据提取出来,硬生成一个矩阵,进入F库计算后返回”,这个过程,是不是等同于让C程序计算完后,将结果数据带入F之中?

    是的

    我的F代码输入和输出都是个固定内容格式的txt文件。输入螺旋桨的几何特征型值表以及工况,最终拟定格式输出螺旋桨的定常或非定常性能。不是按照OpenFOAM的格式进行的输入输出

    我想研究船桨干扰问题,船(C代码)和桨(F代码)两者是互相迭代的过程。这个迭代过程硬交互(Brute-force)能否实现自动,而不是完全孤立一般的手动迭代?

    看起来是可以的,你用F代码计算,后生成txt文件,然后通过C语言把txt文件内的数据写成OpenFOAM的格式,然后用OpenFOAM计算船的流场。

    这样如何

    另外我觉得你这个不是大问题,如果做上述对接操作,纯前端的活,不需要太久。