【小白的CFD之旅】17 需要編程?


小白經過大半個多月對於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
  • 有大把時間的學生黨可以學一門編程語言






免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM