如何学习OpenFoam的源程序代码?



  • 目前打算在OpenFOAM中实现重叠网格的功能,OpenFoam V1812和OpenFoam-extend 均含有overset功能的求解器,但二者程序不同,源文件很多,都不太直观,不知从何看起?是自己完全不按照OpenFoam自带的程序,自己编程实现重叠网格呢?还是学习其代码,基于其代码开发呢?由于对其采用的重叠方法不是很熟悉,感觉看代码很费事啊,觉得还不如自己编(至少自己编的方法自己知道),有人能给出一些看代码的建议吗?



  • 在这里假定你已经1)熟悉OpenFOAM代码,2)熟悉速度压力耦合,下一步可以看重叠网格的代码了。一般情况下分为俩条路:

    • 从算法上手写代码

    • 从代码上手学算法

    第一种要慢一些,第二种要快一些。如果你熟悉自己的算法,莫不如选择第一种方法。如果你算法还不熟悉,那只能走第二条路看看别人的算法怎么搞的。

    源文件肯定是多。在这里最好找个简单的开始看,你看看OpenFoam V1812和OpenFoam-extend哪个简单,就看哪个。选择一个



  • 谢谢,OpenFOAM代码看过不少,但称不上熟悉。压力速度耦合算法比较熟悉。重叠网格的算法已经看过好多文献,一些简单的重叠方法自己也编程实现了,就是没有整体组装起来,也没有进行求解。但不知道OpenFOAM用的是什么方法,所以感觉理解它的思路和重新学习差不多。考虑到自己编程可能兼容性会不如OpenFOAM,比如稳定性、并行计算等,利用其框架可能会好一些(自己对并行一点不懂)。目前来看,OpenFOAM自带的重叠功能远不如其他商业软件成熟,而且速度较慢。我熟悉C语言,但对C++的类、继承什么的只是了解,还没用过,所有源文件太多,加上不知道Openfoam用的什么重叠算法,自己就看不下去了。我若自己编程,肯定是按照C的思路去编程的,
    至于那个版本简单,目前对我来说都不简单,下来再看看,主要觉得自己编程能力不强,所以想利用OpenFOAM,觉得会省时间,但看别人的代码也要费时间啊。



  • @我是河滩 我曾经给博士论文《船桨舵相互作用的重叠网格技术数值方法研究》的作者发过邮件,他是国内较早把重叠网格在Openfoam中实现的人(从国内可见的论文中来说属较早),但重叠网格的实现利用的是重叠网格库,并不是作者自己从头编程去做重叠的,因此觉得完全自己编重叠网格程序意义不是很大。而且如若只是实现现有的重叠算法,没有改进的话,那还不如用商业软件了,比较矛盾。


  • OpenFOAM教授

    @我是河滩

    一些简单的重叠方法自己也编程实现了

    不知道你实现了哪些功能呢?我之前也看过一些 OpenFOAM 重叠网格的代码,或许可以互相讨论一下。



  • Hole map inverse map 临近点搜索,就是一些挖洞和寻点的基本方法,并没有进行流场求解计算,感觉结构网格能容易一些,但Openfoam网格数据结构不是的。



  • @wwzhao 你觉得OpenFOAM目前的重叠功能怎么样?是不是比较慢?容不容易出现orphan cell?


  • OpenFOAM教授

    @我是河滩

    非结构网格的挖洞及stencil确定比结构网格难得多,而且三维更难。我目前还没试过OpenFOAM提供的重叠网格功能,所以不好评论它的表现如何。不过我记得OpenFOAM中的单元标记中没有orphan这个概念吧。



  • 哦,对我来说,可能就是编程上比较麻烦,好像我问过的人都说难,:zoule:


Log in to reply