有关openfoam二次开发
-
有关openfoam二次开发
请问一下,各位有二次开发经验的人,想要利用现有代码(现有代码由Fortran写的——相信各位也会有不是C++写的代码想应用到openfoam里面的情况),带入openfoam中进行计算,需要怎样实现。
是必须进行C++语言移植,制作成类库文件然后根据openfoam的语法进行引用;还是可以将现有代码作成动态链接库,实现两种语言之间的链接?
前者必须进行代码移植,把原有的程序语言转换成C++语言的;后者只需将重点放在解决接口的问题,但我不知道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)能否实现自动,而不是完全孤立一般的手动迭代?@东岳
顺便,@队长别开枪 ,请您分享一下“编译成库然后调用”的经验。我在考虑生成什么样形式的库来调用,希望能够参考,谢谢~ -
有关李老师后面的内容,硬交互,我不是很理解。“在OpenFOAM直接把一些数据提取出来,硬生成一个矩阵,进入F库计算后返回”,这个过程,是不是等同于让C程序计算完后,将结果数据带入F之中?
是的
我的F代码输入和输出都是个固定内容格式的txt文件。输入螺旋桨的几何特征型值表以及工况,最终拟定格式输出螺旋桨的定常或非定常性能。不是按照OpenFOAM的格式进行的输入输出
我想研究船桨干扰问题,船(C代码)和桨(F代码)两者是互相迭代的过程。这个迭代过程硬交互(Brute-force)能否实现自动,而不是完全孤立一般的手动迭代?
看起来是可以的,你用F代码计算,后生成txt文件,然后通过C语言把txt文件内的数据写成OpenFOAM的格式,然后用OpenFOAM计算船的流场。
这样如何
另外我觉得你这个不是大问题,如果做上述对接操作,纯前端的活,不需要太久。