如何入门计算流体力学?

本人现在大三,上学期刚学完流体力学成绩还不错,个人对流体方面也比较感兴趣。现在放假休息,想先自己把计算流体力学看起来,图书馆借了一本《Computat…
关注者
331
被浏览
140,526

23 个回答

计算流体力学入坑指南

计算流体力学大体分三个部分:流体力学+数值计算理论+计算机编程。

  1. 流体力学主要是流体问题的数学描述,如气动,大洋,河流、湖泊,近岸,流固耦合力学,两相流,纳米流体等,需根据流体问题确定需要的控制方程及边界条件。这一部分直接决定你能不能看明白论文,做好研究课题的分类,要在方程上就能明白这个文章做的和自己有没关系。
  2. 数值计算理论。流体控制方程的求解思路主要是通过有限个点来数值逼近微分方程,构建有限个点的线性方程组。这里掌握一种构建方法就可以了,对于单纯流体问题,可以考虑学习有限体积,对于流固耦合问题,最好学习有限元。计算理论又可以根据控制方程细分,如ns方程的求解,对流项插值计算这里,算法最多,低阶、高阶、混合,各种守恒性、有界性算法,论文刷的飞起,一般玩开源代码的,都会选择在这里搞创新,玩到这里都属于高手了;压力速度耦合,常见的simple,piso,projection,掌握一种就可以了,这些都遵循固定的公式,一步步求解,很容易理解,还要关注时间上的插值问题,隐士、c-n,显式。
  3. 计算机编程。这地方一般大部分人不会选择自己做,最难的部分就是编程,我本科的时候,计算机编程没有入门,后来在这里花了学习理论几倍的时间,大部分时间在试错,不知道自己不知道的事情,这很可怕,比如,计算机领域fortran都过时几十年了,它在cfd里却一直很香,但是,依赖fortran,基本你的思路就被它孱弱的能力锁死了。所以,不建议学教授给的fortran老程序,纯浪费时间,我在这里吃了大亏,浪费5、6年时间,现在每看到一种可以玩的包,都会痛苦万分。也不建议直接用固化了的开源代码,容易形成工程化思维思考科学问题的习惯。建议学习一种支持面向对象的编程语言,python、matlab或者c++,通过调用开源的计算框架构建自己的求解体系。(1) 网格处理,学会gmsh等开源网格软件的文件输出格式,可以编程读取网格,及后处理软件的文件输入格式,比如,我主要用gmsh+tecplot进行前后处理,tecplot这里需要自己写程序输出固定格式的文件。(2)离散,可以采用已有的求解框架,比如fenics,mfem等,很方便,这些框架都有自己的gmsh读取程序。(3)求解,可以自己生成矩阵,也可以调包,方程组求解需要明白稀疏矩阵的计算机存储方法,调包要用,知道稀疏矩阵预处理方法lu、ic、mg,方程组求解器的各种迭代算法,主要是cg类的,后面就可以直接调包。
  4. 程序语言,尽量选择python,c++,matlab,科研向尽量选择易学好扩展的代码。fortran千万不要学,fortran虽然快,但是功能太垃圾。现在编程的思路是尽量使用既有框架,继承改写类,实现自己的想法,而不是自己编写计算框架。fortran这种老语言,需要自己从最底层出发,设计数据结构,构建函数,这部分非常容易出错。编程的大部分时间都在找bug,这个工作本身和cfd也没有关系。博士期间,自己的方向一般都是导师定好的,后续科研方向大概率考虑不了那么长远,所以,代码结构设计太拉,编写完代码,也很难以此为基础,继续扩展自己的知识,形成自己的计算工具库。即便是已有的代码,在这个代码上加入新的算法也很难,还是要从底层开始改,这对自己不公平,对学生也不公平。而python可以选择开源框架,比如pysph,fenics,pyfvm,很多很多,使用这些框架的对象就可以实现自己的想法,可以把时间放在知识本身上,而且,python的功能还不仅仅是cfd。c++可以用的库也很多,不过它比较难,语言学习时间要长一点,目前,su2、openfoam类开源代码都是c++写的,框架有petsc,大型计算程序在这一块积累。
看一下petsc框架基础上的大型的cae代码库,这些都可以直接拿来用,绝对比你的fortran代码好用,还更容易二次开发,更容易积累出自己的代码环境库,保证你接下来的职业路上不会看到乱七八糟代码。
  1. 推书:主推fvm,帕坦卡,传热与流体流动的数值计算,有中文,基于矩形网格,内容写的太好了,非常容易理解,新手必备;blazek,Computational Fluid Dynamics: Principles and applications,非结构网格、编程向的好书;Versteeg, an introduction to computational fluid dynamics, simple族算法;Moukalled,the finite volume method in compuational fluid dynamics, openfoam 开发者写的,内容比较全;ferziger,Computational Methods for Fluid Dynamics,这四本有很多重合的东西,但各有特点,足够入门,玩高阶格式的,还可以看看toro的书,还有一本剑桥的finite volume method for hyperbolic problems,接下来可以看一下论文了。
  2. 计算流体力学可以做为机器学习的物理模拟器,有空了给大家更新一个matlab写的强化学习+计算流体力学的解决方案。

做CFD的第三年,写一个公式,涵盖所有CFD问题

把这两个公式搞懂一点点大概就入门了