openfoam入門,應該從什麼學起?

背景:國內985大三下本科生,跟著導師學做一個仿生推進的課題,導師認為這是個新領域(是導師準備新開的坑,他手下只有一個研究生在做,然後讓我從大三開始做,包括大四的畢設,我是出於積累科研經歷和學習cfd的目的跟導師學這個課題的),用商業軟體效果不好,希望我能用開源軟體自己搞。我,船舶專業,學過流體力學和cfd課,考的還成(...),但cfd課基本只教了理論,做過fluent二維圓柱繞流,編程方面只有一點c基礎和會matlab,最近才搞好了ubuntu和openfoam。我是應該先從網格畫法學起,還是cpp,還是流體力學理論知識?


謝邀。既然是科研,重點關注對象應當是「研究」而不是」技術「。不然單是學C++或者畫網格,要精通的話你也已經畢業了。。

不管是OpenFOAM,C++還是做網格,都是工具,而OpenFOAM和網格工具的正確使用是需要理論知識作為依據的。OpenFOAM初學可以看user guide但是非常耗費時間,我的推薦依舊是蘇軍偉老師的博客,簡單易懂容易上手。之後再看user guide和programmer『s guide會比較好。至於進階,請分清主次關係,依靠的是你對CFD和流體力學的更深入的理解,而不是技術上的熟練。

而CFD的學習,則依賴經驗,按照我們組一貫的尿性,是邊用邊學。

總之,不要將全部經歷放在軟體使用上,我曾經在某人博士答辯的時候指出非定常流動用SIMPLE演算法得到的非定常結果對時間沒有物理意義。這也算是CFD最最基礎的常識了。結果此人還反過來理論,說FLUENT有選擇時間精度的,blablabla。希望各位引以為戒。


網格、OpenFOAM和CFD知識是相輔相成的,不衝突。鑒於這個是個長期課題,如果你還要讀碩博的話建議以學習 CFD知識為主,網格和OpenFOAM學習為輔。

學習OpenFOAM:

學習openfoam除了userguide以外還有其他參考資料嗎? - 計算流體力學(CFD)

如果學習CFD知識,可以看下我的這個答案:

空氣動力學/流體力學的big picture和自學指南? - HangZS 的回答

--------------------------------------------------------------------------------------------------------------------------------------

瀉藥。

你得先說一下這個是什麼課題,你的本科畢設課題,還是碩博接著做的課題,還是你導師準備開拓的一個坑?

不同層級的課題玩法不同。


更下,關於tool這個觀念,我來說說我的看法。

說在前面的是,希望大家對自己有個定位,你到底是個搞科研的,還是一個工程師。下面的話寫給曾經是搞科研的,後來去搞工程的人(我)看。

在學校的時候,對老闆的一句話印象極深,他老人家說既然學的就是流體力學專業,就不要只做tool user。

深以為然,畢業了以後入某外企工作,機械設計工程師,看著大家都用的是CFX我極其鄙視,本碩士可是用openFOAM畢業的。於是凡是有CFD的review,我總是在那兒挑毛病,你怎麼能用rans算那麼大分離非定常的問題呢!你竟敢用LES,壁面網格夠不夠啊!大家聽到這些問題的時間都沒有什麼正面的回答,也許是我小說話沒分量,也許是他們真不懂,這幫印度人就知道亂搞。

一天mentor說先給你個任務,算個燃料噴嘴的purge air流量,公式DP(公司里有很多很細的design practice,內容很全,理論、經驗公式都有,但是英制單位,好多常數都是根據英制單位給的)。幾天後,mentor問我怎麼還沒算完,我告訴他我正在研究DP,再推公式呢。我那麼認真的正兒八緊流體力學畢業的,怎麼可以什麼公式拿來就用呢,必須全部推一遍。然後他沒說什麼,過了一會兒他發了個郵件出來裡頭是算完的結果,cc給我的。這樣的事情發生過幾次,漸漸地我意識到一個問題,我不再是搞科研的了,我是工程師了。作為一個工程師,最重要的是解決問題,做一個problem solver,做一個好的tool user就夠了。

我沒有精力也沒有時間把什麼都研究透,讓我三天內選個電機我是學流體的難倒我從電機學開始看么。算個管道壓力我覺得管道形狀很變態不能用經驗公式,必須拿cfd算非定常,等算出來客戶造就早就選別的供應商了,人家不算cfd,你難道去跟客戶講他們做的不對么。

一個工程師不可能每個領域都很精,你自學能力再強也沒那麼多時間給你學。你要做的是知道哪裡有資源,然後解決問題,記住最關鍵的是解決問題!客戶的燃氣輪機一天不轉損失好幾十萬,你覺得好幾十萬一天的成本讓你坐在那裡嚴謹地推公式你好意思么…

題主想想清楚自己的定位,你要的到底是科研能力,還是解決問題的能力。一般的院校對於大三下的學生,在科研方面應該不會有很高的要求。那是碩士生和博士生要做的事情。當然如果題主有志走科研道路,確實要好好地打基礎,經典的教材很多,看看透,反正對搞科研的人來說,時間的問題不是很大。也沒有客戶盯著你。

原答案———————————————

好幾年前研究過。憑著模糊的記憶……和商業軟體比,快不少,但不容易收斂。於是我們都懷疑其實商業軟體里有很多暗銼銼的幫助收斂的不可告人黑招~

先看openFOAM的幫助,tutorial里的例子看幾個就會了(這裡就不介紹了,不然成翻譯了)。主要是數值格式,邊界條件怎麼給。怎麼讓case算起來等等最基本的操作。

我學生時候的openFOAM的花網格用的好像是八叉樹演算法,一個cell分成8個那種。網格質量無敵(廢話都是立方體能不好么,做全場LES強烈推薦),但是網格數量會很多所以我們一般不用,而是用別的商業軟體化網格。

如果你不用對代碼有很大的改動,而只是改改數值格式的話,只要最基本的cpp就可以了。舉個簡單的例子(只為說明如何操作,不討論具體湍流模型):

比如komega-SST湍流模型(SST k-omega model -- CFD-Wiki, the free CFD reference),

裡面有一項

你有一天覺得看著不怎麼順眼,想在psi1前乘個係數(100?),不知道會發生什麼,那麼很簡單。找到安裝目錄下kOmegaSSTbase.H這個文件,這一行

拷出來改成F1*(100*psi1-psi2)+psi2,完了編譯一下,你就得到了你專屬的湍流模型。就可以拿來用了。

不懂cpp都可以對不對!當然如果有比較大的改動還是需要比較紮實的cpp基礎的。

下面這篇文章是研究生時用openFOAM作的結果

Detached-eddy simulation of wing-tip vortex in the near field of NACA 0015 airfoil

下面兩個link是王道,you can find everything there...

OpenFOAM? Documentation

OpenFOAM -- CFD Online Discussion Forums

openFOAM所有的東西都是擺在外面的,隨便看隨便改,會要求,也會幫助使用者對CFD本身有更深入的了解。但是話說回來,如果不是比較focus在CFD本身的,不推薦openFOAM。CFX,fluent都夠了。而且你要是去找(工程方面而不是研究方面)工作,熟練掌握一個商業軟體會有用的多。

願你在openFOAM的海洋里暢快的遨遊~~嗆著了就試試看CFX緩緩,畫畫網格也是可以討厭情操的。

再轉一個彎,985大三下本科生準備出國么?if not, 其實去個四大、諮詢、投行什麼的挺好的。良心話哦~


怎麼講呢, 這取決於你的目標是什麼。是本科畢業就工作?讀研?讀博?是要長期留在這一行還是打算轉行?理論和工具是相輔相成的,最好當然是一起學,不過具體稍微偏重一點哪個就要看你自身已有的知識能力和項目的需求,人生的規划了。如果不是打算長期在流體這個坑裡進行科研工作,理論搞太深了沒有任何必要。哪怕你要搞科研,如果不是研究CFD理論的,而是研究偏應用的方面的,那理論學太深了同樣沒必要。CFD理論學到最後就是純數學,很多重要演算法,理論突破都是數學家研究出來的,不要指望自己動輒就發明個新演算法又快又穩定。現有的好的演算法已經不少了。

數學學得好,理論研究的深確實會給人一種智商上的優越感,不過做科研最重要的還是要對做的項目有一個宏觀的把握,想明白做自己的項目最需要哪些知識能力,而不是一味的求深求難。

如果不想長期科研,那學一些工具肯定是有好處的。編程屬於應用面很廣的技能,如果以後想轉行那學編程肯定不吃虧。如果不想轉行那學學CFD軟體吧。當然,我並不是說理論就不重要,最基礎的理論還是要有的,不然軟體跑出來不收斂都不知道為什麼。

具體到openfoam,如果不是研究什麼新領域,學cpp沒什麼必要,基本照搬算例或者其他人做過的東西就差不多了。如果是研究新的領域,以至於要大量改openfoam的代碼,那不光cpp要會寫,CFD理論知識也得過硬,我猜本科生的項目應該不至於這麼難吧?

最後說一點,建議多讀讀paper,看看其他人在相關領域都是怎麼研究的。書中自有黃金屋,我n次遇到過這樣的場景:自己糾結很久的問題,查了查paper發現早有大牛給出了solution。即使要自己寫新的模型,openfoam也不見得是最合適的,可以從paper里找找有沒有更合適的。


你好,我認為你要清楚使用OpenFOAM的前提是要有良好的CFD基礎,比如說很多solver都用了PIMPLE loop,你要大致的明白工作原理是什麼,correction是怎麼計算的。

對於C++ 不需要太精通,沒有必要自己寫solver,你要做的是基本讀懂比如member function,constructor,或者比如include file的作用。linux只是更是不用太學,基本的就行。

至於user guide基本是懂了不看,看了不懂,他就想一本詞典,只是最基本的。我建議你上網找關於OpenFOAM的課程PPT,在你應用的時候那裡不懂再查userguide。

自己先盡量run一個tutorial,初步理解tutorial的內容以及用了什麼solver。理解solver的工作原理。做完了一個case再做其他的就快了。

總之我感覺OpenFOAM是一個很有趣的,非常靈活,值得學。


背景:國內985大三下本科生,

題主是985的本科生?拋開CFD不談。

本科生可塑性很強。年輕就是資本。為何從本科就下定決心磕CFD?

憑什麼我辛苦二十年,現在卻比別人差那麼多(看化學和計算機專業的區別)

行業的重要,遠高於你手裡的一紙學位證書

建議樓主好好選擇。

---------------------------------------------------------------------------------------------------------------------

如果考慮了1星期,還是選擇CFD的話。

跟著導師學做一個仿生推進的課題,導師認為這是個新領域(是導師準備新開的坑,他手下只有一個研究生在做,然後讓我從大三開始做,包括大四的畢設,我是出於積累科研經歷和學習cfd的目的跟導師學這個課題的),用商業軟體效果不好,希望我能用開源軟體自己搞。我,船舶專業,學過流體力學和cfd課,考的還成(...),但cfd課基本只教了理論,做過fluent二維圓柱繞流,編程方面只有一點c基礎和會matlab,最近才搞好了ubuntu和openfoam。

上面所有人的回答已經非常好了。參考上面所有答案。

針對:

我是應該先從網格畫法學起,還是cpp,還是流體力學理論知識?

取決於你要做到博士還是碩士。

如果CFD碩士,可以學CFD技術,側重CFD在船舶行業的應用,以後的工作也是在船舶行業。如果CFD博士,以後搞科研,必定需要CFD基礎,要側重理論,就業不一定去哪裡。一般是研究機構或者博士後。

目前國內基本沒有專門搞CFD的公司。大部分依託某一個行業,比如船舶行業、風電行業。CFD在公司內不屬於核心部門。因此CFD碩士+好的CFD使用技術,就可以找個行業內的工作。

當然和計算機行業的待遇不可比。

不過這是你考慮1星期之後的自我選擇。最後只能用這句話來描述:

博士畢業去重點高校當個教授,工資雖然沒你同學高,但待遇好,日子過得肯定比他好,本來走的就不是同一條路,不能完全用工資去比。

ldy


不請自來。

同學,你是本碩連讀么?我怎麼覺得如果不用商業軟體,你時間不太夠的啊。如果想一直讀到博士,那麼好好研究openfoam吧。

利益相關,前cfd軟體公司技術。


推薦閱讀:

FLUENT能計算微通道流體/納米流體嗎?
FLUENT為什麼沒有高階精度?
關於漩渦的合理數學描述?
有沒有學習ansys比較好的書籍或視頻教學推薦?
流體力學中的歐拉方程並沒有二階偏導項,為什麼還是雙曲型的?

TAG:流體力學 | 計算流體力學CFD |