CFD訪談(一):看OpenFOAM創(chuàng)始人Henry Weller論CFD!
2017-03-30 by:CAE仿真在線 來源:互聯(lián)網
CFD界:編程技巧和CFD基本理論,哪一個更加重要?
Henry:了解流體機理和計算流體力學更加重要。大多數CFD工程師并不需要經常編程,因為CFD代碼已經非常成熟了,并且包含了非常多的功能。但是對于一個CFD工程師而言,很有必要了解到底什么是“物理”,什么是“邊界條件”。這些都和流體動力學有關,而和編程關系不大。
很好地了解CFD的概念在選擇合適的數值方法、離散格式、時間步、松弛因子的時候非常有必要。這通??梢酝ㄟ^培訓來達到目的,因為本質上其主要通過積累的經驗來獲得。
使用CFD就像玩樂器,你不能撿起一把小提琴就彈“維爾瓦底”的曲子(CFD界注:著名小提琴演奏家),這需要很長的練習。
然而,相對于GUI的點擊型操作,OpenFOAM中CFD算例的自動運行VERY有用,因此如果會寫腳本的話就更好了。腳本語言不重要,大家可以使用隨便一個腳本語言,只要你熟悉就好。
CFD界:網格對FVM計算重要性如何?
Henry:當然網格大小對流體結構的求解是一個關鍵的因素。網格對LES/DES更加重要,因為在LES/DES中,網格和湍流尺度有關。網格大小、密度、分布應該小心處理。
并且FVM對網格類型非常敏感,因為FVM使用體心或者面心作為高斯積分點。在做局部插值的時候,例如,面心只從相鄰網格獲取的時候,如果網格比較有序,FVM只是2階精度。我在算法中提供了高階多項式插值方法,這種方法在不規(guī)則以及混亂的網格也可以提供2階精度。但是這些方法很耗費計算資源并且不是很穩(wěn)定。能避免就避免??傊?網格質量和分布是非常重要的。
另外,有關精度的問題,在對立的面中,存在一種誤差對消。例如規(guī)則的六面體網格要比規(guī)則的四面體網格更加精準(CFD界注:六面體存在3個對立的面,四面體沒有),雖然倆種網格在使用中心差分的時候都具有2階精度。但對于混亂的網格,FVM中,多面體網格要比四面體網格更加精準。
所以基本上說,六面體網格是最好的,并且應該盡量避免不規(guī)則和混亂的網格。對于復雜幾何,OpenFOAM對網格生成有嚴格的限制。其求解器對大部分網格也可運行收斂。但是網格這個東西,還是盡可能的做成最好吧!
foamyHexMesh的理念很好,它會生成規(guī)則的六面體網格,對于一些復雜的幾何區(qū)域,它會生成多面體而不是四面體(CFD界:不同于snappyHexMesh生成的夾雜楔形的網格)。然而,foamyHexMesh并不是一個資助的項目并且目前也沒有人資助。目前這個程序是VERY脆弱的,因此只是一個演示。
CFD界:從個人經驗來講,如何學習CFD?
Henry:運行算例,從錯誤中吸取教訓,運行更多算例,吸取更多的教訓。Live and breath CFD!這是我學CFD的經驗。
我從上個世紀80年代開始學習CFD,現(xiàn)在掌握CFD經驗的人要比80年代的時候多得多。有更多的培訓課,更多的書,因此直接的吸取經驗會更加容易。但是當然了,還是從自身經驗來學習最好!
CFD界:相對于商業(yè)代碼,OpenFOAM的特性是什么?
Henry:OpenFOAM是完全免費并且開源的(CFD界注:開源的意思即為使用者可以隨意更改軟件的內核)!這提供了HUGE的方便,不僅僅在費用上,也表現(xiàn)在靈活性、以及從軟件本身來學習CFD上。OpenFOAM不僅僅讓CFD工程師可以模擬算例,它也允許CFD工程師來學習CFD方法、開發(fā)CFD算法并完善,甚至某一天創(chuàng)造一個可以替代OpenFOAM的軟件。
并且,許多CFD問題需要一些特別的功能、算法、方程、邊界條件等。在商業(yè)軟件中植入這些功能可能令人沮喪并且很可能失敗。有些情況下可能有必要完全的重新寫一個求解器、邊界條件等。OpenFOAM提供了最大的靈活以及擴展性。這些對使用CFD做研究的人非常重要,因此我覺得OpenFOAM可能在某一天會替代閉源軟件。
CFD界:您為什么選擇C++開發(fā)CFD代碼而不是FORTRAN?
Henry:在1984年本科之前,我最開始的時候從Basic語言學起,然后轉移到Pascal和C。在我的論文里我使用FORTRAN-77,不得不說,這實在AWFUL!!!太差勁了!C和Pascal比FORTRAN-77會好一點,實際上在1960年ALGOL-60問世之后,FORTRAN就差不多廢棄了。
當我開始我的CFD研究的時候,我拿到的代碼是一堆不能編譯的令人費解的FORTRAN-77代碼。在我學習了幾個月之后,我認為我可以玩的更好。在1989年,我接觸到了C++,并立即看到了對象起源編程的優(yōu)勢。從那時起,我就開始用C++設計FOAM。然而,在那個年代,C++剛剛問世,并且編譯器VERY脆弱甚至不能工作。慢慢的我認識到泛型編程(Generic Programming)對操作場、矩陣、方程等是非常有必要的,在C++模板問世之前,我就使用C方法、宏和腳本得方法來實現(xiàn)。在C++模板問世之后,以及gcc編譯器的發(fā)布,我把我之前寫的代碼用C++模板重寫,這就是OpenFOAM的前身。
當然了,FORTRAN不能做這些。不過FORTRAN-90有一些面向對象的能力,但是它完全沒有泛型編程的功能,據我所知,FORTRAN以后亦不會添加泛型編程的概念?;旧?我個人認為FORTRAN語言快要廢了,在1960年那時候就應該埋在土里了。目前使用FORTRAN的人大部分是由于歷史原因,只為了新代碼能和非常久遠的代碼兼容。
FORTRAN和C++都因為“向下兼容”而有一些致命的缺點。FORTRAN為了和FORTRAN-77兼容,C++為了和ANSI C兼容。然而最大的區(qū)別是,ANSI C本身就是一個非常好的語言,FORTRAN可不是。
在未來,我希望C++被一個更干凈、簡單、有力的語言代替,這個語言需要支持泛型編程,這對OpenFOAM以及其他相類似的代碼非常重要。我一直關注編程語言的發(fā)展,我認為C++的可能的代替品有Nim,Rust以及Chapel,然而目前這些語言缺少一些我需要的必要功能,添加這些功能,比如C++中的高度的泛型編程概念,可能需要很多年。我希望他們在若干年后添加這些特性。同時,C++的缺陷需要妥善處理。在C++17中,我希望“概念”(concept)和“模塊”(module)特性會被加入,所有的C++編程人員都會受益。
額,這個問題我想說的太多了,尤其是關于C++的缺陷以及我對未來編程語言的期望。這越說越遠了,就這么遭!
Henry Weller簡介:
CFD Direct聯(lián)合創(chuàng)始人兼任技術總監(jiān),OpenFOAM基金會共同創(chuàng)始人,OpenFOAM架構師,27年OpenFOAM開發(fā)經驗。
相關標簽搜索:CFD訪談(一):看OpenFOAM創(chuàng)始人Henry Weller論CFD! Fluent培訓 Fluent流體培訓 Fluent軟件培訓 fluent技術教程 fluent在線視頻教程 fluent資料下載 fluent分析理論 fluent化學反應 fluent軟件下載 UDF編程代做 Fluent、CFX流體分析 HFSS電磁分析