Skip to content
  • 最新
  • 版块
  • 东岳流体
  • 随机看[请狂点我]
皮肤
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • 默认(不使用皮肤)
  • 不使用皮肤
折叠
CFD中文网

CFD中文网

  1. CFD中文网
  2. OpenFOAM
  3. OpenFOAM教程 初级入门建议

OpenFOAM教程 初级入门建议

已定时 已固定 已锁定 已移动 OpenFOAM
55 帖子 26 发布者 165.8k 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
回复
  • 在新帖中回复
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • 李东岳李 离线
    李东岳李 离线
    李东岳 管理员
    写于 最后由 李东岳 编辑
    #1

    玩OpenFOAM有一阵子了,并且一直坚持搞CFD算法以及在OpenFOAM中的植入,但CFD博大精深,牛人也大有人在,和这些老师比起来我也是一个高级菜鸟,依然任重道远,也一直在通过各种途径学习。但我这个人喜欢写,不管英文的还是中文的,并且比较能折腾,那么我就仅有的点点经验,希望能和大家在CFD中国共同讨论OpenFOAM的一些学习心得,希望切磋交流,共同进步。

    上述内容我决定删去,当时还是感觉自己能力有限。但是说实话现在能力,自己都能感觉出来比之前高了很多。上面内容写的太谦卑。新版直接不写了。

    学OpenFOAM第一个坎:安装

    初学者不需要去研究OpenFOAM怎么安装了。因为你可能在安装上需要耗费比较长的时间。在这里我建议直接下载我装好的虚拟机来进行。链接:

    http://dyfluid.com/download.html

    也不推荐真系统,因为你是初学,不能扔了windows。初学OpenFOAM直接上虚拟机,你不需要考虑任何事情。

    学OpenFOAM第二个坎:如何运行

    OpenFOAM与其他软件最大的区别就是:命令行运行,Windows下,我们各种软件都有个图标,可以点点点,但是OpenFOAM没有!并且,大部分人连Linux都没用过,我当时也没有用过linux,可能会有冲动去学学linux,但是时间宝贵,我不建议,建议:

    • 看自带的教程走一遍第二章的所有算例。大体知道怎么个计算流程。如何使用,适合前处理后处理。

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

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

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

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

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

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

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

    学OpenFOAM第三个坎:CFD算法

    OpenFOAM这一条路跟商软不一样。OpenFOAM在这一阶段,需要大量的补充算法内容,否则你是玩不明白的。这也就是为什么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)你绝对不会在流体力学教科书中找到答案。在这之后,我们回归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不能进行粒子跟踪怎么办?我们进入了到了下一步。

    OpenFOAM中高级内容:代码开发

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

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

    以下是比较常见的流程:

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

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

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

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

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

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

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

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

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

      商软普及CFD,OpenFOAM定义CFD

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

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


    还得感谢2011年T博士跟我的谈话,当时我活跃在某著名OpenFOAM群(群聊天比较浪费时间现在我早已退出),问题非常多,在某一天我又提了很多OpenFOAM问题之后,T博士问我:

    你都会点啥?

    T博士对我的问题我无法回答,因为我当时什么都不会。也正因为我之前是个CFD问题少年,我创立CFD中文网,欢迎大家来此提问。我不会问你都会点啥,或许我会给你一点SCI参考文献供参考 :chigua:

    点击跳转OpenFOAM编程建议

    http://dyfluid.com/index.html
    需要帮助debug算例的看这个 https://cfd-china.com/topic/8018

    zhanghanZ X 黑山雁黑 W 4 条回复 最后回复
  • C 离线
    C 离线
    CFDngu
    写于 最后由 编辑
    #2

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

    1 条回复 最后回复
  • qjh888Q 离线
    qjh888Q 离线
    qjh888
    写于 最后由 编辑
    #3

    您好!

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

    谢谢!

    Turbomachinery Enginee

    1 条回复 最后回复
  • zhanghanZ 离线
    zhanghanZ 离线
    zhanghan
    在 中回复了 李东岳 最后由 编辑
    #4

    @李东岳

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

    1 条回复 最后回复
  • O 离线
    O 离线
    OF九月九
    写于 最后由 编辑
    #5

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

    OF界的小学生

    1 条回复 最后回复
  • 黄 离线
    黄 离线
    黄岛主HEU
    写于 最后由 李东岳 编辑
    #6

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

    C 1 条回复 最后回复
  • C 离线
    C 离线
    CFD中文网
    在 中回复了 黄岛主HEU 最后由 编辑
    #7

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

    CFD中国标准用户测试帐号
    目前由徐笑笑登录

    黄 1 条回复 最后回复
  • 黄 离线
    黄 离线
    黄岛主HEU
    在 中回复了 CFD中文网 最后由 编辑
    #8

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

    1 条回复 最后回复
  • 程 离线
    程 离线
    程迪
    写于 最后由 编辑
    #9

    其实用docker更好一些。

    已婚,勿扰。
    本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。

    1 条回复 最后回复
  • X 离线
    X 离线
    xinxinguo
    写于 最后由 编辑
    #10

    @李东岳 认真读完了,谢谢。

    一直用FEM做多场问题,周围的人做固体的多。

    我是刚刚从FEM转过来的,现在还不会装软件。

    我的系统是mac, 想问下:您给的 “UbuntuOpenFOAM4.zip” 能直接在mac系统上安装吗? 如果不能的话,怎么办呢? 谢谢。

    李东岳李 1 条回复 最后回复
  • 李东岳李 离线
    李东岳李 离线
    李东岳 管理员
    在 中回复了 xinxinguo 最后由 编辑
    #11

    @xinxinguo

    不能,mac没有玩过,不知道mac那面怎么搞,不过好像 @random_ran 他是mac系统

    http://dyfluid.com/index.html
    需要帮助debug算例的看这个 https://cfd-china.com/topic/8018

    X H 2 条回复 最后回复
  • X 离线
    X 离线
    xinxinguo
    在 中回复了 李东岳 最后由 xinxinguo 编辑
    #12

    @李东岳 谢谢您的回答。能推荐些CFD的书吗?
    我刚开始看 H K Versteeg 和 W Malalasekera 的《An Introduction to Computational Fluid Dynamics THE FINITE VOLUME METHOD》2nd,感觉难度不大。想问下您:这本书看完了后 是个什么水平呢? 能操作 openfoam了吗? 谢谢。 因为是新手,如果问题简单还望多多包涵。谢谢!

    1 条回复 最后回复
  • 李东岳李 离线
    李东岳李 离线
    李东岳 管理员
    写于 最后由 编辑
    #13

    这本书看完了后是个什么水平呢?

    很遗憾只是初级水平...CFD类似盖房子,可能你看了一本书知道如何盖楼,但是要你自己盖一个楼,看一本书的作用微乎其微,10本书的作用也微乎其微,只有自己盖楼之后,才行。

    学OpenFOAM建议首先看OpenFOAM用户指南,喜欢英文看英文,我当时英文的看了5 6遍。看完了之后自己做算例就可以了。细节问题(比如pRefValue干嘛用的)可以找书。

    http://dyfluid.com/index.html
    需要帮助debug算例的看这个 https://cfd-china.com/topic/8018

    X H 2 条回复 最后回复
  • X 离线
    X 离线
    xinxinguo
    在 中回复了 李东岳 最后由 编辑
    #14

    @李东岳 谢谢,受益匪浅。

    1 条回复 最后回复
  • I 离线
    I 离线
    ibelief
    写于 最后由 李东岳 编辑
    #15

    感谢付出

    你去了那么多地方,走了那么多的路,你要学会的就是包容和接受这个世界的一切观念

    努力收敛

    1 条回复 最后回复
  • H 离线
    H 离线
    Hungryandfool
    在 中回复了 李东岳 最后由 编辑
    #16

    @李东岳 mac可以用虚拟机搞。我在win下就是虚拟机玩的。还可以用putty模拟远程登录,为后面玩远程做准备。

    官方上面有mac的安装方法,直接按照教程来就行。我自己ubuntu下安装也没啥问题,有问题google就行。

    https://openfoam.org/download/5-0-macos/

    这个网页就是的。当然如果是我用mac可能还是选择虚拟机。

    1 条回复 最后回复
  • H 离线
    H 离线
    Hungryandfool
    在 中回复了 李东岳 最后由 编辑
    #17

    @李东岳 我有个观点不知道对不对。

    直接用C++意义并不大。不如先用python或者matlab将一些基本算法都自己编一遍,再深入openfoam。

    我的学习方式就是先看完user's guide,然后用python或者matlab走一遍算法,结合叙利亚某个大学出的书。手动推导公式到程序实现。然后再深入C++编程,啃openfoam的内涵。

    这也符合离散的原则,先简单,再复杂。一上来就是C++和算法,两头打老虎。还是算了,起码我不这么学。而且C++也非一日之功。等算法都摸得七七八八,再啃C++我个人觉得要见到一些。

    我现在编程都是Python,效率这东西对于我这种水平低的完全没意义。对于高手能感受到!

    程 winsway_zeroW C 3 条回复 最后回复
  • 程 离线
    程 离线
    程迪
    在 中回复了 Hungryandfool 最后由 编辑
    #18

    @hungryandfool 赞,语言层级越抽象,越容易搞清楚逻辑。也越容易把“概念一致性”搞明白。

    而且Python并不一定低效,实际的工作都调用线代库或者Kernel其实也挺快的。

    已婚,勿扰。
    本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。

    1 条回复 最后回复
  • winsway_zeroW 离线
    winsway_zeroW 离线
    winsway_zero
    在 中回复了 Hungryandfool 最后由 编辑
    #19

    @hungryandfool 您好,您说的书能说一下书名吗?

    1 条回复 最后回复
  • D 离线
    D 离线
    D.Benjamin
    写于 最后由 编辑
    #20

    东岳老师您好,在您的“东岳流体”官网上面有很多求解器的解析,但是为什么没有simpleFoam的解析呀?,simpleFoam是稳态求解很重要一个求解器,做稳态计算的学生也很多,而且稳态是瞬态分析的基础,因此对于该求解器的学习有很大的必要,所以,恳请老师在空闲之余上传simpleFoam的解析,期待您的更新,谢谢!!

    OpenFOAM初学者,希望和大家共同交流

    李东岳李 2 条回复 最后回复

  • 登录

  • 登录或注册以进行搜索。
  • 第一个帖子
    最后一个帖子
0
  • 最新
  • 版块
  • 东岳流体
  • 随机看[请狂点我]