OpenFOAM初级入门建议



  • 我学习OpenFOAM有了一段时间,并且一直在坚持研究CFD算法以及在OpenFOAM中的实现,因此在OpenFOAM这面稍有浅显经验,但CFD博大精深,牛人也大有人在,经常发现我国的科研人员在OpenFOAM上实现了各种奇葩算法,或者在JCP上发表了各种变态算法。和这些人比起来我也是一个高级菜鸟,依然任重道远,远远没有达到左右逢源的地步,自己对自己的CFD技术也不是特别满意,也一直在通过各种途径学习。

    但我这个人喜欢写,不管英文的还是中文的,并且比较能折腾,那么我就仅有的点点经验,希望能和大家在CFD中国共同讨论OpenFOAM的一些学习心得,希望切磋交流,共同进步。

    OpenFOAM 安装

    俩种方法:

    1. 直接从linux源获取;
    2. 采用源代码进行编译;

    直接安装就是采用命令:

    sudo apt-get install openfoam4
    

    这是傻瓜式安装方法,但是国内经常会连接不上网。

    编译安装可以这样理解:我们把OpenFOAM这种c++程序在本地编译称为可执行文件。和直接安装的区别就是直接安装已经编译好了,本地进行配置就可以,编译安装的方法我写了一个安装指南非常的详细:http://dyfluid.com/install.html

    需要提及的就是目前CFD-online主流声音是:虚拟机下的OpenFOAM和真实系统的速度并无差异,并且32位比64位要快。不过我没有证实

    最简单的安装:直接从我的网盘下载虚拟机,解压即可,OpenFOAM已经安装好了。这是我2017年6月份给学员做的虚拟机,2.7G。在国内下载应该比较快。打开直接用,密码是1

    运行

    初期接触的时候,大部分人连Linux都没用过,我当时也没有用过linux,可能会有冲动去学学linux,但是时间宝贵,我不建议,因为用OpenFOAM毕竟是用来算CFD的,不是用来学Linux。就像你在安卓上安装微信是要炫你的朋友圈的,而不是用来测试安卓系统的 。因此建议:

    • 看自带的教程走一遍第二章的所有算例。大体知道怎么个计算流程。如何使用,适合前处理后处理。其他章可以不看,原因是其他章主要写的是CFD理论。初期我们并不需要过多的理解。

    • 知道OpenFOAM怎么用了之后,你会发现OpenFOAM自带了很多的算例,接下来就是对你喜欢的算例自行模拟一遍。在这一步,我们可以对自带的算例进行适当调节,比如把初始条件改一下,库朗数增大一些。看看会有什么反应。这一个阶段也持续不了多久。大体还是培养CFD感觉。经过这个阶段你会发现一些经验,对以后的理论学习很有帮助。

      对了,CFD是存在感觉的!比如给你一张结果,搭眼就能看出来是LES还是RANS,是欧拉欧拉还是欧拉拉格朗日,是2D还是3D,网格是六面体还是四面体,是动网格还是MRF等。看的不一定准,但这些不同的算法算出来的结果都存在一定的规律。这种感觉需要长期的摸索才能有。

    • 在对算例进行了一番修改模拟之后,你需要定制自己的算例,例如OpenFOAM用户指南第一个算例就是一个顶盖驱动流,那么这一个阶段我们需要自己生成一个几何、自己定义一个便捷条件来计算。这一步我们迎来了CFD的重头戏:网格生成 。我之所以这么认为是因为大部分工程应用50%的时间用在了网格生成上,这时,你需要选择一款你喜欢的网格生成软件,ICEMpointwisehypermesh等系统的学习如何进行网格生成。

      准便再吹个流:http://dyfluid.com/mesh.html 全部是我自己做的高质量六面体网格,用的是ANSYS ICEM。我是六面体爱好者。

    • 假定你花费了大量时间生成了网格,我们就需要采用自己的网格计算了。这时你需要对你的求解器进行选择。ANSYS Fluent中是一步一步来选,添加能量方程?添加多相?添加粒子?OpenFOAM由于编程问题,把不同的工况适用的问题,编写称为不同的求解器,比如:

      icoFoam可执行程序只适用于不可压缩牛顿流体层流瞬态求解;
      interFoam可执行程序只适用于不可压缩俩相不互溶界面跟踪;

      这意味着你用icoFoam求解湍流、可压缩流是不合适的,严重的就是无法运行,不严重的就是无法收敛。因此你需要再次翻开OpenFOAM用户指南,后面有一个列表说了每个求解器适用的工况。

    • 在选好了自己的求解器之后,就是运行计算了。有了网格、有了求解器、计算开始。这时,可能会发现经常会发散。我们也就进入了下一步

    CFD算法分析

    从算法开始,我们需要大量的接触OpenFOAM源代码。这一步会经常遇到这种困惑:无从下手。我们顺利的生成了网格,选择了求解器,计算发散。WHY?

    比如我们使用的是rhoSimpleFoam求解器,有一段声明为:
    0_1477808597182_58ccda792c3ad3277a37f8334ecd3d7b_b.jpg

    其中的Description里面表明,本求解器适用于可压缩的RANS流体,接下来看到了这么多

    #include "fvCFD.H"
    #include "xxxx.H"
    

    不知所措,需要把所有的头文件都看个遍么?

    不建议,否则你会迷失自己。大体知道即可,如下:

    0_1477808788962_a6046a70dcf6116ef918dcbb28453067_b.jpg

    当然我知道,好奇心比较强的人是打算每个头文件都了解了解的。你可以翻翻,不过繁多了,你一定会迷失自己,所以该忽略就忽略吧。

    即使忽略了这么多,我们依然对rhoSimpleFoam这个求解器不懂。完全不懂。这时该怎么办呢?比如这个玩意干嘛的:

    bound(epsilon);
    antiDiff(alpha);
    

    越到后期,OpenFOAM的可玩性才崭露头角。抛开你需要玩的求解器,回归CFD本源。想一下

    CFD到底是如何求解的?

    这时候你需要系统的、透彻的、详细的、充分的学习CFD基本理论,注意是计算流体力学而不是流体力学。比如上面的antiDiff(alpha)你绝对不会在流体力学教科书中找到答案。

    • 插一句,CFD偏向于将流体力学中的方程通过数值求解的方式进行求解。CFD侧重解方程!流体力学侧重累积控制方程。然而CFD侧重解方程也不表示CFD不需要推方程,相反,为了达到数值稳定性,CFD中很多方程直接数值求解是不可能的,你还是需要去推!!!

    在这之后,我们回归OpenFOAM,从最简单的求解器开始学习,NS方程是如何求解的。那么这几个最简单的求解器无非:

    laplacianFoam
    potentialFoam
    scalarTransportFoam
    icoFoam

    这4个求解器,具体怎么学习,在我的网站上都有解释。其中前三个还好说,最后一个icoFoam是真正考验CFD理论素质的时候,这是一个真实的瞬态层流NS方程求解器,也是一个可以quasi-DNS模拟的求解器。

    如何学习icoFoam的代码,在此不赘述。这绝对是一个门槛。

    假定通过大量的大量的时间搞清楚了

    搞清楚了速度、压力如何离散,
    源项如何处理,
    为什么要显性和隐性
    为什么时间步要附加自循环
    为什么拉格朗日粒子跟踪要做tet分解
    如何泊松方程离散后的矩阵是对称的

    以及,重中之重的PISO和SIMPLE算法的本质,你就可以回归到rhoSimpleFoam,当然这是一个非常漫长的时期,这也是CFD功底积累的时期,为什么?因为你不懂CFD算法你是看不懂OpenFOAM代码的,如果你不看OpenFOAM代码,那OpenFOAM哪一点吸引了你?

    直到有一天你豁然开朗会发现CFD求解器的思路都是一样的。

    这时候你已经了解了rhoSimpleFoam的代码,但是发现,rhoSimpleFoam不能进行粒子跟踪怎么办?我们进入了到了下一步。

    代码定制

    这也是OpenFOAMer的终极阶段,不仅仅是玩OpenFOAM,对于其他CFD大厂如ANSYS Fluent的全职员工,也是他们所处的阶段。糅合数学方程推导以及方程离散、C++或其他编程语言于一体的过程。这一部分变幻无穷,诸多博士为之奋斗终生。

    如果进入了这个阶段,完全可以抛开所有的OpenFOAM资料,自行学习。 或许也不能用“学习”二字了,自行“研究”比较合适。这时候你看的应该不是CFD教材,而是期刊了。

    以下是比较常见的流程:

    1. 这一阶段我们需要从SCI文章中推导大量的数学模型,下载大量的SCI,看看数学模型是怎样推导的,怎样计算的;依据数学模型的复杂程度,可能几天,可能几星期,可能几个月;

    2. 在知道怎么计算模型之后,下一步需要编程。OpenFOAM运行了高超的C++编程技术来实现求解,如类,类继承,类嵌套,类模板以及宏定义。这个时候如果没有中级的C++技能的话写面向对象的代码非常耗费时间。如果这样的话,初期可以用简单的C风格来植入。等C++用熟了,可重新封装一遍。

      一般情况下,如果你不能理解过程编程和对象编程的区别的话,基本上你只能面向过程了…不过这个确实不是特别重要,除非你玩的是架构。我见过很多nasty的代码同样能发高档次的paper。包括我自己的代码也不漂亮。代码可以慢慢优化。毕竟存在架构师这个职位。

      一般情况下,如果你不能理解架构师重要性的话,一方面说明你写的代码还不够多,在CFD中,这表示你还未对算法左右逢源有个宏观的概念。

    3. 最后,实际上也没有最后,我目前也停留在上面这一段话的最后一段中,“研究模型并编程植入,数据对比然后写文章”。即使完成了,你会进入下一个“研究模型并编程植入,数据对比然后写文章”的阶段。

    前面的已经非常主观了,最后补充几句更加主观的思想:

    1. OpenFOAM是CFD求解程序,CFDer应该注重CFD本身而不是编程,这点要在学习中分清主次;

      比如我在国外,有人喜欢把自己当成programmer,也就是国内的码农,但是我更喜欢称呼我自己是algorithm researcher。Programmer偏向写代码,算法可以是别人提供的技术文档,也可以是别的软件现成的代码。Programmer的强项在于天花乱坠的代码水平近乎无低端bug的编程风格,可能30%用于算法,70%用于编程。但是我,往往70%的时间耗费在研究CFD的算法上,30%的时间用来编程就可以完成植入。

      很遗憾,国内的码农貌似硕士毕业就年薪30了?起码胖猫是的。看来行业很重要 :big_mouth:

    2. OpenFOAM和商软我没有对比过,不过我非常感兴趣,但是Fluent我只是安装过并没有计算过。但如果你真的要玩好OpenFOAM,而不是设置个工况模拟一下,没有一定的CFD功力是完全行不通的。正所谓:

    ANSYS Fluent普及CFD,OpenFOAM定义CFD

    1. 当然有人不太懂CFD理论就直接进入到了OpenFOAM代码开发阶段,并且发了文章。恭喜你,我不清楚你是如何在半年内就做到的,就像我不明白为什么本科时候很多人考试看一天书就能拿90分一样。作为一个本科GPA不到2.5的人,我做不到这么酷炫的玩法。我不是高智商,只是极为persist,但凡遇到不懂的算法,必须扣到底。哈哈。也许我手比较笨,但我愿不停探寻。

    2. 学习CFD理论要趁早。因为越往后,你会发现你需要计算越来越多的模型,调节各种各样的参数。后期在写文章的时候,可能会发现理论跟上不来。比如在审稿人提出有关算法方面的问题时(比如问你湍流动能耗散率方程离散的时候为什么有的项需要显性离散?),你可能并不知道显性离散和隐性离散是个什么鬼,这句话你只是抄别的文章的。这个时候你再补CFD理论就来不及了。当然最好的办法是,不懂得东西,别写!,不过,如果你CFD懂得太少,文章内容分配会不会有点不妥?

    希望大家看完了之后,有所收获,或许能刺激你一下,买一本纸质的《数值传热学》?


    近期有营销号擅自抄袭我写的文章,并且丝毫没有注明是谁写的。一般这种事情只出现在营销号,原创号还真没有。那么我就在这里声明下:这篇文章是李东岳写的。

    :sunglasses:

    还得感谢2011年T博士和我的一段谈话,当时我活跃在某qq群(现在我早已退出各种qq群),问题非常多,是个问题青年,在某一天我又提了很多OpenFOAM问题之后,T博士问我:

    你都会点啥?

    希望我以后能用歌词回答这位背后精神支持我6年往前走的人:

    向前跑
    迎着冷眼和嘲笑
    命运它无法让我们跪地求饶
    与其苟延残喘不如纵情燃烧吧
    有一天总会发芽

    11.03.2017



  • 学习了 ,现在正在编写边界条件,还没到研究最底层的阶段, 感觉即使是顶层开发,也还是需要一些C++知识的 。



  • 您好!

    最近我也在尝试编写一个边界条件,如果有什么经验的话,还希望能交流一下!

    谢谢!



  • @李东岳

    最近还在导数据!一点一点学习。



  • 把我们办公室的另两位拉下水了,终于不是我一个苦逼的在学of了。



  • @OF九月九
    哈哈。有个伴会好不少。



  • @李东岳 前辈,你的这个虚拟机下载解压后,我在自己的笔记本上安装成功了。可把文件拷到台式机上,paraview总是调用失败,下面这个错误。
    0_1481791274705_30219186058024573.jpg
    在终端上一输入paraFoam,也能打开paraview,但只能看网格,一加载结果就出现上面的情况,然后在终端上显示illegal instruction (core dumped)



  • @黄岛主HEU
    笔记本没问题,台式机有问题?尝试单独下载paraview运行没有?www.paraview.org



  • @cfd-china 没有,我现在尝试从头安装,学习一下


登录后回复
 

与 CFD 中国 的连接断开,我们正在尝试重连,请耐心等待