OpenFOAM不同版本代码转换的问题
-
大家好,想问一个不同Openfoam版本间代码如何转换的问题,比如说我有在OF2.2.2下能成功编译的solver,我直接拷到OF4.1里就不能编译通过,一般就是有什么file找不到一类的错误,现在感到一头雾水,请问有没有这方便的文档或指南来讲解一下怎么把低版本的OF代码改写成高版本并编译通过?
-
这个非常费事,有时候底层代码改动很多,举例:openfoam23x之前中所有的
scalarSquareMatrix
应该初始化为:scalarSquareMatrix sig(2*n + 1, 2*n + 1, scalar(0));
但是在openfoam23x之后全部只能这样声明:
scalarSquareMatrix sig(2*n + 1, scalar(0));
每次比较大的版本号改动都比较多。类似上面的改动你得自己去做。并且有些涉及到非常底层的改动,往往是底层动了一行,顶层要动100行。
所以 :confused: -
个人认为如果你在某一版本上开发了,就继续下去吧,不用移植了。。。。。
-
谢谢,不过还是好奇openfoam2.1.1版本跟后来新版本的区别?比如新版本里有哪些明显的改进呢
-
这个改动可是太大了,openfoam2.1.1是很老的版本了,官方发布都会进行算法类的提高,不过如果是别人写的求解器,你还是用211吧,移植不简单。
-
@赵一铭 多谢回答,我已经改写了几个,但有的比如基于interFoam开发的代码变化太大了,感觉你说得对,改写还不如自己重新写一个。。。
-
每个OpenFOAM发布都有个release note,最近还有个叫updates for developers的页面,讲api变化。
我记得OF说过,版本号变化规则:X.Y.Z
X: case都得改
Y: api可能有变,也就是求解器源代码需要改
Z: bug fix啥的,基本没啥需要改的。of41的主要变化在:http://www.openfoam.com/documentation/developer-upgrade-guide.php
-
据我经验,错误最多的是这么几个:
- of4 的const ref 和ref分得比较清楚了,参考http://www.openfoam.com/documentation/developer-upgrade-guide.php
- of版本升级时,热力学那块类变化比较大
- of中cxx类有abstract base class (ABC), ABC不能实例化,需要在子类中实现所有的虚方法,但是of版本升级时可能虚方法数量发生了变化,这个在错误中会有提示。
- Make/options里include path变化,特别湍流/热力学那些库变化比较大
纯虚函数个数 of41 of2x fvcDdt 5 4 fvmDdt 4 3 fvcDdtPhiCorr 2 2 fvcDdtUfCorr 2 0 meshPhi 1 1 type 1 1 不过of41支持cxx11了,似乎有些语法糖衣可以用:比如auto x = phi.ref(),不用写又臭又长的模板展开了。
-
@程迪 多谢回复!能不能问个比较土的问题,一直不明白,openfoam4.1 5.0 这种命名方式和OpenFOAM v1706有啥区别?好像一个是 OpenFOAM.org 一个是openfoam.com
-
@xiaofenger 算是不同的分支吧。后面那个应该是OpenFOAM+
-
@xiaofenger
openfoam起源于foam,现在分foam_extend, openfoam(.org)和openfoam+(.com)三个分支。- foam_extend是功能比较激进的。最新版本4.0,有些算法挺好的。api感觉和of23x比较接近。
- openfoam基金会(这个基金会是个英国注册的公司,不是非盈利机构)版本应该算是主流吧。最新4.1,更新的功能在dev版里。
- openfoam+是opencfd公司(openfoam商标持有者,授权基金会免费使用)搞的,在基金会版本上添加了一些功能,也是免费的。基本可以保持和同时期的基金会主要版本兼容。
不同版本都是gpl授权,但是版本有一些差别,有些v2有些v3,不过对于中国人而言都一样。
-
@程迪 原来如此,我还以为一个是Linux一个是Windows的。。。多谢回复
我还想问一下,比如OpenFOAM2.1.1 到4.1版本吧,像interFoam 这个solver代码变化非常大,是不是可以认为总体上是越来越精确、运算效率也越高?就是说能用新版本就不用旧版本?
-
@xiaofenger
没人能保证新的比旧的精确效率高。。。可以跟踪一下github上代码相关的commit message.历史,可以看出它是怎么演进的。
3/13