吾生有涯 学海无涯
析模有界 知识无界

小白学CFD|10 编程

小白经过大半个多月对于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再配合软件脚本来实现,其实很简单。
牛师兄:如果有足够的时间和精力,不妨学习CFD编程,从内部了解CFD软件的运作机制,对于CFD软件的使用有非常大的帮助。

4 利用编程来学习CFD

利用编程来学习CFD?当然是很好的做法,但是可能要消耗大量的时间,恐怕只有学生党才玩得起。企业人员哪里有这功夫玩这个哟。不过也不排除工程上用一些开源CFD求解器,逼迫研发人员去学习这些求解器的内核源代码,这可是个苦逼的工作,时间成本也很高。就好比说士兵为了提高射击精度而花费大量时间研究枪炮原理一样。

5 我需要学习编程么

这取决于几点因素:
  • 关注CFD算法更胜于利用CFD解决工程问题
  • 对编程有强烈的兴趣。没有兴趣的话可能会半途而废
  • 有大量的空余时间。计算机语言的学习需要花费大量的时间

6 学什么语言

如果真要学的话,有几个语言可以推荐:
  • C语言。学习C语言绝对不会吃亏,这玩意儿用途太广泛了(数值计算、操作系统等),长期雄霸TOBIE编程语言排行榜前三
  • Python语言。最近很火的动态语言,好多的CAE软件都转而支持此语言做二次开发了。
  • JAVA语言。这个也可以学一学。
牛师兄:计算机语言只是算法的表达形式,对于数值计算这类业务逻辑清晰的程序来讲,计算机语言并没有太大的差异。

7 总结

  • 先搞清楚自己感兴趣的是CFD的哪个方面再来决定是否要学习编程
  • 学习编程对于CFD应用来讲是锦上添花,懂一些有好处,但不懂编程也未必不能用好CFD
  • 有大把时间的学生党建议学一门编程语言

早上起来第一眼刷手机看病毒感染人数,结果发现科比死了,额,记得上高中的时候经常端着铁饭碗跑学校的小卖部看科比和奥尼尔打球,这一晃20年过去了~

本篇文章来源于微信公众号: CFD之道

赞(5) 打赏
版权声明:未经允许,请勿随意用于商业用途。
文章名称:《小白学CFD|10 编程》
文章链接:https://www.topcfd.cn/12758/
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。
分享到

说两句 抢沙发

评论前必须登录!

 

觉得文章有用就打赏一下文章作者吧

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫

微信扫一扫

登录

找回密码

注册