如何CFD自学成才
-
1 OKS有没有线上课
Never
即使学生甚至老师全部封闭在学校不让来参加线下课,宁可砍掉课程,也不会有线上课。原因不好公开解释。毕竟有这么多同行在做线上。
2 如何自学CFD
其实不参加各种课程,都完全可以把CFD玩的很溜。今天我就简单说一下我个人的看法,如何打坚实的CFD基础,达到半个科班出身的效果。
首先,在这里还是要区分一下,CFD从业人员分为偏算法和偏应用。今天讨论的只适用于偏算法类的CFD人员(比如各种研究生和刚转到CFD这一行的老师们)。
我觉得CFD,从零到中级,大体分为三个步骤:
-
看书学习理论
-
看sci学习算法
-
深入编程、复现结果
简单来说,就是看书 -> 看sci -> 编程。当然,过程可能反复、穿插进行。
问题是看多少书,看什么书,怎么看书,怎么看sci,怎么学编程,怎么编程之类。
2.1 零基础看什么CFD书
零基础我只推荐看这2.5本书。
第1本:《数值传热学》
第2本:An Introduction to Computational Fluid Dynamics, the finite volume method
第2.5本:《无痛苦N-S方程笔记》
我个人学习习惯,是看10本书不如一本书看10遍。书不在于多而在于精。这三本书我已经跟大家推了无数无数遍了。
所以,坚定不移的看就好。
要注意,这里不是说其他教材的不好。只不过是看这2.5本书,完全可以让你对初级CFD有点感觉了,起码知道那些乱七八糟的算符方程怎么看懂,有限体积法是干嘛的,速度压力为什么求解比较困难之类。
看书顺序建议这样:先看《笔记》,再看那本英文书(V & M),再看《数值传热学》。
《笔记》不需要看多久,零CFD基础一天也足够了。V & M的每天看一点,看两星期,然后开始看《数值传热学》。开始看《数值传热学》可能够呛能看懂。
看不懂硬着头皮看(注意,宇波老师等曾经出版《数值传热学实训》,感兴趣也可以关注下)。
看两星期。回头看V & M,看一星期,有点新收获,再回头看《数值传热学》。总之,V & M和《数值传热学》是学初级CFD的主线,来回看个5遍,就差不多了。
2.2 看书之后怎么学算例
这牵涉到另一个主题如何学OpenFOAM。我还是一个基本原则:书不在于多在于精。并且官方教程绝对是权威教程。
在学OpenFOAM的时候,《OpenFOAM用户指南》一直就在那,可以随便下载学习。这是我拿到版权的OpenFOAM User Guide中文翻译版。
OpenFOAM本身带了那么多的算例,随便找几个。运行算例。了解一下CFD网格、边界条件、物理特性对结果的影响。大体有个概念,哪些参数影响很大。
这一步骤应该很简单。不需要过多讨论。
2.3 如何拔高
好了,到这一步,就没有简单的事情了。
首先,在进入到这一步之前,
我先问你几个问题:
-
动量方程、连续性方程分别有什么物理含义?通量是什么?
-
下面的公式能看懂么?
\begin{equation}
\int \int \nabla p \mathrm{d}V\mathrm{d}t=\int\int p \mathrm{d}\bfS\mathrm{d}t=\Delta t\sum \left(p_f^t\bfS_f\right),
\label{gradp}
\end{equation} -
通量的高阶格式体现在哪?
-
压力速度SIMPLE-PISO算法实现流程与主要的处理问题?
如果能回答上述问题,可以进阶的看一些CFD的书。在这个阶段,两三本书肯定是不够的。因为这不是初级CFD,这是中级CFD。
所以,我给你一个list:
除去两本初级CFD教材,其中有7本。各个经典,大家之作。简单说一下:
-
第一本,双曲问题典藏,我感觉,读10遍20遍不过分
-
第二本,双曲问题典藏,也是10遍20遍不过分的,相比较第一本,更算法一些,更CFD一些
-
第三本,低速流典藏,15年我去Henry家的时候看到过这本书,收藏指数五星级
-
第六本,OpenFOAM早期开发者Jasak博士的博士论文,写的很对OpenFOAM的路子,看3 5遍也是值得的
-
第七本,稀疏线性系统典藏,不过只属于CFD小分支的一部分,可以挑着看,不过挑着看可能会看不懂,自己衡量
-
第八本,我的CFD榜样写的的I Do Like CFD,偏解析解,偏高超,可以看几遍熟悉熟悉双区方程
-
第九本,低速高速流混编的非常偏CFD算法的大作,内容不是特别难,看5遍10遍不过分
这些书非常经典,经典就是书里面随便挑一句话,就是耐人寻味。
如果有时间的话,那就去看吧。
如果你是CFD职业玩家的话,去看吧。
如果喜欢CFD的话,可以海淘过来,支持原版。
如果要看这些书,会持续非常多非常多的时间,要以年计。因此,CFD过了初级之后,就永远不是简单的事情。
2.4 看学术论文
这一步就要看sci了。就是一个领域内小方向的研究方向的论文。非常重要,不看sci基本写不出来sci。
这是一个非常庞大的工程。基本每天都要干,一直都要干。
同时,我还见过很多研究生,有非常不好的sci阅读习惯。尤其在写sci的时候。可能这里面涉及到的是中英文的东西。最好能克服。
章节限制,在这里只能强调下看sci的重要性。如果要植入某一个算法,你真的需要把这个sci打印出来,像前面那些CFD书一样去学习sci里面的理论。同时,顺着sci里面的参考文献,去溯源、拓展,了解领域内的前言和关键问题。
上面这个图,是我在植入一个算法中,学习sci的过程。或许可以参考。
强调,方程不推一遍,永远搞不定他到底有什么意义。
2.5 如何编程
CFD算法研究编程是避免不了的。如果你不编程,那就说明算法已经被别人写进去了,如何强调你的创新点和工作的highlights?
另外,编程永远不会构成你的阻力。你大可不使用任何高级的编程技巧,用最简单的代码,实现最复杂的功能即可。
如何把代码写的漂亮,这需要一个非常全局的架构,并且需要一直的进化。
举个例子:OpenFOAM在早期,湍流模型存在大量的代码复用,随着发展,发现多相、可压缩等其实都可以放在一个架子里面。这样,湍流模型的演化,越来越庞大。
这就是站在代码顶层的架构设计。不在那个位置上,是写不出好的架构的。
但是,如果你只关心如何毕业,如何把算法实现,如何把算法实现提供给客户。架构的问题可以放一放。很多开发人员的思路跟你们可能是向左的。
举个例子:很多研究生,喜欢开发很多很多的求解器,每个取个名字,觉得很流弊。但到了OpenFOAM那面,人家的里面是要精简精简再精简!
只有站到顶层,才能想架构。
所以,如果只有一个算法,就不需要想更庞大的接口。你也不知道什么时候哪里需要接口。。
对了,编程这个事情,一定要从现在就开始学。编程就像是学英语。如果你到了写sci的时候,才开始学英语如何造句。这就太晚了。
3 五年时间安排
一般,硕博连读五年。每个人的时间安排都不一样。我见过很多后浪,研一研二的时候文章就三四个了。
我从2011年硕士生入学,2016年才发了第一篇sci,2016年年底才毕业,学术起步非常非常的晚,在这里说一些教训。
在这里我只说跟我一样学术起步比较晚的例子。大牛们可以不用看了。
尽早定下研究方向
一定要提前打好CFD基础。既然入了这一行,就要提前做好规划。我一直强调,要对算法保持敬畏。CFD是非常难的。包括我现在,还有非常多非常多的东西不明白。这都要持续的学习。
所以,时间非常宝贵。如果研一期间,没定下什么研究方向。一定要跟导师联系,尽早的把研究方向定下来!
同时利用研一这个时间,恶补一下CFD初级内容。
定下研究方向就不要改!!
一些同学发现我的研究方向经常换。在这里要强调一下,在这块,不要跟我学。因为我是要靠CFD吃饭的,只能各个领域都渗透学习一下,才能拓展项目领域。
我也只能换研究领域,才能站得更高点给大家讲CFD更好玩的东西。并且,只有各个方向都玩一玩,才能触类旁通。
跟写review是一样的。没看个几百篇文献,是写不出review的。没换几个研究方向,在CFD这块是没法跟别人扯淡的。
但是注意啊,普通研究生,一定不要换方向!总是换研究方向,你之前的研究就前功尽弃。并且,CFD这面一个方向要深耕好多年才能有大成果出来。
个人感觉,一个研究方向,起码要做个三五年才能系统化。所以,硕士博士,一个研究方向足够了。博士后以后,可以稍微拓展下。
选了OpenFOAM,就要坚定的用下去
太多太多数不清的人,用了OpenFOAM一段时间之后,就不用了,因为实在是太难了。甚至参加我OKS课程的人,有非常多的人,回去半年之后也不用了。我感觉非常可惜。
甚至我当初也一样,我在学了OpenFOAM半年之后,曾经想过彻底放弃,转到商软。
OpenFOAM在我眼里就是一把屠龙刀。潜心多年的研究,必然能够触类旁通掌握屠龙之技。
尖端的工艺永远不可能是简单的。一会抱西瓜一会抱南瓜到后来什么都没有。
好了,越扯越远,我翻到推文最上面,那么课程是什么,OKS只不过是节约下你的学习时间而已。既然大家都封闭在学校不出来。完全可以自学。那么本文,就是告诉大家,如何CFD自学成才
-