小白经过大半个多月对于CFD的学习,终于对其大概轮廓有了初步的了解,尤其是在与小牛师兄交流之后。小牛师兄毕竟是专业学流体力学的,小白认为在流体力学理论方面自己与牛师兄至少存在5年的差距。不过小白并不气馁,照黄师姐的话说,”内功需要自己慢慢积累,武侠电影中的那种灌顶大法是不存在的“。小白认为当前自己的主要任务是把软件FLUENT用熟。
小白在网上找了一些学习FLUENT应用的论坛,也加了一些QQ群,不过他更习惯自己去思考去总结。这天小白被一个QQ群里争论的话题引起了兴趣。这话题是关于CFD软件与计算机编程之间的关系,有人说”只有精通了编程才可能成为CFD高手“,也有人说”CFD只是工具,会不会编程都不重要“,也有中间派说”CFD是工具,但是熟悉编程会更有利于使用这一工具“,众说纷纭吵得不亦乐乎。小白自认学CFD时日尚短,插不上话只好搬凳子围观。
中午在食堂吃饭的时候,小白碰到了小牛师兄,几天没见也不知道小牛师兄最近在忙些啥。
“牛师兄,这么巧啊”,小白端着饭碗坐到了牛师兄的对面。
“恩,最近在忙些啥呢?”牛师兄问道。
“还不是在学CFD软件,照着实例依猫画虎呢,进展很慢啊”小白很无奈的说。
“不用急,软件这东西很容易学的,多练几次就有感觉了。”牛师兄安慰道。
“嗯,牛师兄,你说我需要学编程么?今天在网上看有人说要学CFD必须精通编程,也不知道是不是真的。”小白将群里的争论说给牛师兄听。
“你以前学过编程没有?”牛师兄问小白。
“读本科的时候学过C语言,知道基本的语法编过小的练习程序,没有真正用过。”小白据实回答。
“那还行。”小牛师兄说。
接下来小牛师兄在饭桌上说起他对于软件和编程之间关系的认识。
1关于编程
人们谈起编程,总是认为这是一个高大上的职业。为什么会觉得高大上呢?无外乎这几个原因:
- 编程人员(亦称程序猿)拿的薪水很高。如果做的不是高大上的事情,凭什么拿这么高的薪水?
- 编程行当门槛比较高,一般人难以进入。
- 计算机程序能够做很多人脑难以完成的工作,编程者自然就能做很多普通人难以完成的工作
说了那么多,这跟CFD有什么关系呢?
CFD离不开计算机,也离不开计算机程序。但是问题在于“使用别人的程序就真的很low么?”
我老家在南方农村,小时候过年的时候家家户户要做年糕,就是那种用糯米蒸熟的饼饼。这玩意儿吃起来好吃,做起来却特别的费劲,这些年基本上都没什么人做了。去年寒假回家的时候突然发现市面上居然有卖,打听之下才发现已经有了做饼饼的机器了,当时还特别去参观了一下,制作流程特别的简单,将米放进料斗,饼饼分分钟就从下料口出来了,特意买了些回去品尝,虽然有人说口感没有手工制作的好,但我却没感觉出来。实际上诸如此类的例子生活中比比皆是,比如说做饭,以前农村用柴火煮饭,费时费力还一不留神把饭烧焦,现在用电饭锅做饭,省时省力味道也不差。
之所以举这些例子,只是想说明“工具的作用是为了解放我们的双手,工具的特性是在使用工具的过程中不需要考虑工具的原理”,你在用机器做饼饼、用电饭锅烧饭的时候,需要思考饼饼机和电饭锅的工作原理么?
话说回来,程序的作用是帮助人们完成工作,而不需要在使用程序的过程中思考程序是如何编制的。
2 关于CFD的工具论
CFD是工具么?不同人群对这一说法可能存在不同的见解。有的人眼中CFD是一套理论,一套关于如何数值求解流体流动控制方程的理论,这些人分布在计算机和数学专业,他们关注算法的实现和效率。而在工程师的眼中,CFD那就是一工具,他们关注的是工程问题,最多就是把工程问题抽象成控制方程,至于这方程如何求解则不必过多的考虑,因为有现成的工具可以做这一工作。
应当给予工具足够的信任。要使用工具而又不信任工具是一件很痛苦的事情。
分清到底是人的问题还是工具的问题。很多人事情没做好往往不从自己身上找原因,利用CFD软件也一样,算出来的结果不好通常都认为是软件功能的缺陷,你要是问他有什么证据他又说不出来。在很多时候,计算结果不好往往是我们没有将工具使用好,而不是工具本身的问题。
3 CFD编程到底有用没?
肯定是有用的。毋庸置疑任何技能都是有用的。其实问题不在于编程有没有用,而在于学习编程的时间成本对于CFD技能的提升是否划算?对于将CFD当做工具的人群来说,其实只需要掌握少量的编程知识即可完成绝大多数工作了。编程在此体现为CFD工具软件的二次开发上,而不是要我们从头到尾的将CFD程序写出来。
这些CFD工具的功能扩展通常采用用户编程来实现,不同的软件采用的程序语言有较大差异。比如说FLUENT利用的C语言,CFX利用的是Fortran,STAR CCM+利用JAVA和Fortran,还有一些软件利用脚本语言,如Python,TCL/TK、Lisp等等。其实在工作中软件功能扩展工作进行得并不是特别多,更多的是做一个功能封装,这可能是利用高级语言写一个GUI再配合软件脚本来实现,其实很简单。
4 利用编程来学习CFD
利用编程来学习CFD?当然是很好的做法,但是可能要消耗大量的时间,恐怕只有学生党才玩得起。企业人员哪里有这功夫玩这个哟。不过也不排除工程上用一些开源CFD求解器,逼迫研发人员去学习这些求解器的内核源代码,这可是个苦逼的工作,时间成本也很高。就好比说士兵为了提高射击精度而花费大量时间研究枪炮原理一样。
5 我需要学习编程么
这取决于几点因素:
- 关注CFD算法更胜于利用CFD解决工程问题
- 对编程有强烈的兴趣。没有兴趣的话可能会半途而废
- 有大量的空余时间。计算机语言的学习需要花费大量的时间
6 学什么语言
如果真要学的话,有几个语言可以推荐:
- C语言。学习C语言绝对不会吃亏,这玩意儿用途太广泛了(数值计算、操作系统等),长期雄霸TOBIE编程语言排行榜前三
- Python语言。最近很火的动态语言,好多的CAE软件都转而支持此语言做二次开发了。
- JAVA语言。这个也可以学一学。
7 总结
- 先搞清楚自己感兴趣的是CFD的哪个方面再来决定是否要学习编程
- 学习编程对于CFD来讲是锦上添花,懂一些有好处,但不懂也可以用好CFD
- 有大把时间的学生党可以学一门编程语言