CFD算法和编程,哪个更重要?
本文有感于近日在CFD中文网的一个帖子。不可否认的是,大量的,包括国内国外的,做CFD的,分为CFD应用和CFD算法。我觉得CFD算法是根基,CFD应用是楼阁。从学CFD开始,我就确定了走算法路线,现在依然如此,但这从未耽误我做CFD应用的项目。做CFD算法呢,工作主要分为算法和编程。算法是什么?算法是研究如何求解偏微分方程组。计算是通过编程,实现你的算法并复现结果。
那么,算法和编程哪个更重要呢?
这个问题并不是CFD应用和CFD算法那种类似平行的关系,CFD算法和CFD编程是有严重的先后关系的。做CFD应用可以不懂算法,但要是不会CFD算法,你是不可能开始编程工作的。
回到问题。CFD中文网有很多人都在问,OpenFOAM能做这个不?能做那个不?能不能实现这样?能不能实现那样?
要记住,OpenFOAM是C++,C++,一切皆有可能。问题的本源,是你的算法能不能实现这样,而不是OpenFOAM能不能实现这样。你的问题是否能抽象为数学/算法问题?这也就是为什么我在编程和算法时,强调算法为大。孔子、孟子、庄子、算法为老子。
我见过很多人,写了那么nasty的code,照样发顶级期刊。因为很多人的工作,不是把代码贡献出去,而是发文章。我之前也一样,2014年出国做CFD的时候,当时的代码写的一团糟,面向过程、从不优化,但我还是发了一些顶级期刊。不管代码脏乱差到什么程度,它实现了CFD算法,复现了CFD结果,起码能毕业。
当代码要开源,这个时候就需要看重代码风格了,要漂亮、要高效,重写无妨。但在中国,有多少人的代码能开源呢?
我一直都坚持走算法路线这种理念。走的越深,才发现远处有更深的奥秘。自己懂得永远都是那么一点点,回想几年前,觉得自己对多相流已经了解的很透彻了,现在回来看看,懂得越多的同时,不明白的越多,无知者无畏。也正因为我信奉的理念,因此我在鼓励师弟师妹们做CFD的时候,我告诉他们先去看CFD算法的书,我推荐大家去买《数值传热学》,而不是买一本《SYANA应用进阶100天》,也不是《精通C++》。
最开始的时候,选择一条正确的路很重要。记住啊,如果你要做CFD算法,首先需要先明白有限体积法,然后才是编程求解。
题外话:
CFD算法不咋赚钱,但CFD应用是赚钱的东西。谁不喜欢钱呢?所以我也做CFD应用,虽然不太感兴趣,希望20年能有几个6位数的应用项目这样我就自己赚钱,支持我不赚钱的算法研究。
本文非常主观。推行CFD算法至上的观点。一般情况下,我是不敢这么说的。最近风声松了松,斗胆聊聊。认同的,希望你们多支持。不认同的,大家都有各自的道理。不了解一个人的过去,怎么能评判他现在的决定?但至少,“算法有点用”不会害你们。买几本算法书,学学算法,肯定锦上添花。
来源:CFD界微信公众号(ID:cfdresearch)
页:
[1]