为啥说不编程就不能算是真正在做cfd?( 二 )


总之,我的意见是:
1.想学好CFD,还是要自己编一个求解器看看;这也是你想做进一步研究工作,做深入研究的起点。这个工作开展得越早越好。
2.对于做CFD的人、对于应用CFD解决工程问题的从业人员来说,编程,是相对来说比较容易的一个转行的跳板。(我说这句话不是以一种抖机灵的态度说的,而是以一种严肃的态度说的,不要曲解我)。
Fortran 目前仍然是科学计算领域使用的主要语言吗?

■网友
作为计算传热学的老师,我不同意这种说法。这种说法在某种程度上有一定的道理,但也非常容易让初学者陷入困惑:我是不是要去编程呢?
CFD,本质上就是“数值分析”+“流体力学”,但其基础不在“数值分析”,而在流体力学。“数值分析”只是求解NS方程的一种手段而已。除了“数值分析”,还可以“解析求解”。只不过解析求解极其困难,只能在极少数情况下才能解而已。而最终求解的对不对,还要从物理上用流体力学知识进行分析。
我读博士时问了导师一个问题:您博士论文是做化工设备研究的,现在却做航空航天研究(出于保密原因,不提具体行业了),这改行改得也太大了吧。导师说:没什么区别,都是解NS方程嘛!于是我决定把NS方程学好了,将来可以干任何行业。我花了大概1个月的时间,跟着粘流书推导了NS方程(难点在于流体本构方程)和k-e湍流模型(陶文铨的第1版附录)。我博士论文是CFD编程,从方程离散的理论工作,到网格生成器和流场和温度场求解器(三维),全部都是自己写的。只有后处理用的是商用程序。我个人认为我对CFD的理解已经很深入了。我毕业后后进入一个商用CFD软件公司做技术支持。很快就做到了技术部门的经理,和各个行业的企业用户(航空航天船舶电子核)介绍产品时,也没有什么晦涩感。总之自我感觉非常良好。我觉得导师说得真对!
但是,我要说但是,有一次用isight+CFX帮一个汽轮机设计院做末级动叶气动外形优化时,叶片优化出来后,效率比原来高了。但是我不知道为什么效率会高,我解释不了原因。这意味着,这不过是通过优化软件盲目计算,最后瞎猫碰死耗子碰上啥就是啥了。
对方派了一个老专家过来看结果,看完之后说,不错,这个叶片之所也性能提高了,是因为xxxxxxxxx。都是汽轮机叶片气动分析,我听得一知半解。我忽然间感到了我和老专家之间的差距:我完全陷入了计算流体力学中的“计算”部分,而忽略了“流体力学”。这对于CFD应用来说,是致命的短板。毕竟任何CFD分析都是以具体的物理现象为背景的。脱离了物理背景的CFD计算就是“玩”。
从那以后,我逐渐开始积累自己的流体力学(因为涉及行业,主要是空气动力学)的知识。而对CFD,我只看重误差分析,尤其是离散误差分析。其他的细枝末节如用什么网格生成器好啊,Fluent和CFX哪个更算的更准啊,我已经失去了讨论的兴趣,因为实在没有意义。
CFD是流体力学和传热学研究者的一个观察流动和传热现象的工具。做一次CFD计算和做一次流体力学实验没有本质的区别。如果我们强调CFD的编程能力对做CFD的重要性,那就如同强调焊热电偶或喷涂液晶的能力对做传热学实验的重要性,根本是舍本逐末。
诚然,做过编程会对CFD的理解更深入,就如同自己亲手焊热电偶会对实验结果的理解更深入。但不能说用铠装热电偶的人就不是真正做实验的人吧?关键的是,能否对数值计算的原理有足够深入的认识,就如同能否对热电偶的测温原理有深入认识。如果能把握数值计算的误差,可以对数值计算的结果进行足够深入仔细的分析,那么会不会编程就不重要了。就如同做传热学实验,最终要的是分析出热电偶的测量误差,是否受到了电磁干扰、转静信号传输干扰,而不是非得自己动手焊上去。
所以,上面那句话应该改一改:不会分析离散误差就不能算是真正在做CFD。
怎么才能理解离散误差呢?编程是一条路,学习也是一条路。编程是自己走一遍,学习是看别人走一遍。不是所有的知识都要自己走一遍才算学习的。只要能明白离散误差的来源以及如何限制其大小,那么,编程不编程就不重要了。


推荐阅读