OpenFOAM不同版本代码转换的问题



  • 大家好,想问一个不同Openfoam版本间代码如何转换的问题,比如说我有在OF2.2.2下能成功编译的solver,我直接拷到OF4.1里就不能编译通过,一般就是有什么file找不到一类的错误,现在感到一头雾水,请问有没有这方便的文档或指南来讲解一下怎么把低版本的OF代码改写成高版本并编译通过?


  • 网格教授 OpenFOAM教授 管理员

    这个非常费事,有时候底层代码改动很多,举例: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讲师

    每个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


  • OpenFOAM讲师

    据我经验,错误最多的是这么几个:

    1. of4 的const ref 和ref分得比较清楚了,参考http://www.openfoam.com/documentation/developer-upgrade-guide.php
    2. of版本升级时,热力学那块类变化比较大
    3. of中cxx类有abstract base class (ABC), ABC不能实例化,需要在子类中实现所有的虚方法,但是of版本升级时可能虚方法数量发生了变化,这个在错误中会有提示。
    4. 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+


  • 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代码变化非常大,是不是可以认为总体上是越来越精确、运算效率也越高?就是说能用新版本就不用旧版本?


  • OpenFOAM讲师

    @xiaofenger
    没人能保证新的比旧的精确效率高。。。可以跟踪一下github上代码相关的commit message.历史,可以看出它是怎么演进的。