CFD訪談(一):看OpenFOAM創(chuàng)始人Henry Weller論CFD!

2017-03-30  by:CAE仿真在線  來源:互聯(lián)網(wǎng)



CFD界:編程技巧和CFD基本理論,哪一個更加重要?


Henry:了解流體機(jī)理和計算流體力學(xué)更加重要。大多數(shù)CFD工程師并不需要經(jīng)常編程,因為CFD代碼已經(jīng)非常成熟了,并且包含了非常多的功能。但是對于一個CFD工程師而言,很有必要了解到底什么是“物理”,什么是“邊界條件”。這些都和流體動力學(xué)有關(guān),而和編程關(guān)系不大。


很好地了解CFD的概念在選擇合適的數(shù)值方法、離散格式、時間步、松弛因子的時候非常有必要。這通常可以通過培訓(xùn)來達(dá)到目的,因為本質(zhì)上其主要通過積累的經(jīng)驗來獲得。


使用CFD就像玩樂器,你不能撿起一把小提琴就彈“維爾瓦底”的曲子(CFD界注:著名小提琴演奏家),這需要很長的練習(xí)。


然而,相對于GUI的點擊型操作,OpenFOAM中CFD算例的自動運(yùn)行VERY有用,因此如果會寫腳本的話就更好了。腳本語言不重要,大家可以使用隨便一個腳本語言,只要你熟悉就好。


CFD界:網(wǎng)格對FVM計算重要性如何?


Henry:當(dāng)然網(wǎng)格大小對流體結(jié)構(gòu)的求解是一個關(guān)鍵的因素。網(wǎng)格對LES/DES更加重要,因為在LES/DES中,網(wǎng)格和湍流尺度有關(guān)。網(wǎng)格大小、密度、分布應(yīng)該小心處理。


并且FVM對網(wǎng)格類型非常敏感,因為FVM使用體心或者面心作為高斯積分點。在做局部插值的時候,例如,面心只從相鄰網(wǎng)格獲取的時候,如果網(wǎng)格比較有序,FVM只是2階精度。我在算法中提供了高階多項式插值方法,這種方法在不規(guī)則以及混亂的網(wǎng)格也可以提供2階精度。但是這些方法很耗費(fèi)計算資源并且不是很穩(wěn)定。能避免就避免??傊?網(wǎng)格質(zhì)量和分布是非常重要的。


另外,有關(guān)精度的問題,在對立的面中,存在一種誤差對消。例如規(guī)則的六面體網(wǎng)格要比規(guī)則的四面體網(wǎng)格更加精準(zhǔn)(CFD界注:六面體存在3個對立的面,四面體沒有),雖然倆種網(wǎng)格在使用中心差分的時候都具有2階精度。但對于混亂的網(wǎng)格,FVM中,多面體網(wǎng)格要比四面體網(wǎng)格更加精準(zhǔn)。


所以基本上說,六面體網(wǎng)格是最好的,并且應(yīng)該盡量避免不規(guī)則和混亂的網(wǎng)格。對于復(fù)雜幾何,OpenFOAM對網(wǎng)格生成有嚴(yán)格的限制。其求解器對大部分網(wǎng)格也可運(yùn)行收斂。但是網(wǎng)格這個東西,還是盡可能的做成最好吧!


foamyHexMesh的理念很好,它會生成規(guī)則的六面體網(wǎng)格,對于一些復(fù)雜的幾何區(qū)域,它會生成多面體而不是四面體(CFD界:不同于snappyHexMesh生成的夾雜楔形的網(wǎng)格)。然而,foamyHexMesh并不是一個資助的項目并且目前也沒有人資助。目前這個程序是VERY脆弱的,因此只是一個演示。


CFD界:從個人經(jīng)驗來講,如何學(xué)習(xí)CFD?


Henry:運(yùn)行算例,從錯誤中吸取教訓(xùn),運(yùn)行更多算例,吸取更多的教訓(xùn)。Live and breath CFD!這是我學(xué)CFD的經(jīng)驗。


我從上個世紀(jì)80年代開始學(xué)習(xí)CFD,現(xiàn)在掌握CFD經(jīng)驗的人要比80年代的時候多得多。有更多的培訓(xùn)課,更多的書,因此直接的吸取經(jīng)驗會更加容易。但是當(dāng)然了,還是從自身經(jīng)驗來學(xué)習(xí)最好!


CFD界:相對于商業(yè)代碼,OpenFOAM的特性是什么?


Henry:OpenFOAM是完全免費(fèi)并且開源的(CFD界注:開源的意思即為使用者可以隨意更改軟件的內(nèi)核)!這提供了HUGE的方便,不僅僅在費(fèi)用上,也表現(xiàn)在靈活性、以及從軟件本身來學(xué)習(xí)CFD上。OpenFOAM不僅僅讓CFD工程師可以模擬算例,它也允許CFD工程師來學(xué)習(xí)CFD方法、開發(fā)CFD算法并完善,甚至某一天創(chuàng)造一個可以替代OpenFOAM的軟件。


并且,許多CFD問題需要一些特別的功能、算法、方程、邊界條件等。在商業(yè)軟件中植入這些功能可能令人沮喪并且很可能失敗。有些情況下可能有必要完全的重新寫一個求解器、邊界條件等。OpenFOAM提供了最大的靈活以及擴(kuò)展性。這些對使用CFD做研究的人非常重要,因此我覺得OpenFOAM可能在某一天會替代閉源軟件。


CFD界:您為什么選擇C++開發(fā)CFD代碼而不是FORTRAN?


Henry:在1984年本科之前,我最開始的時候從Basic語言學(xué)起,然后轉(zhuǎn)移到Pascal和C。在我的論文里我使用FORTRAN-77,不得不說,這實在AWFUL!!!太差勁了!C和Pascal比FORTRAN-77會好一點,實際上在1960年ALGOL-60問世之后,FORTRAN就差不多廢棄了。


當(dāng)我開始我的CFD研究的時候,我拿到的代碼是一堆不能編譯的令人費(fèi)解的FORTRAN-77代碼。在我學(xué)習(xí)了幾個月之后,我認(rèn)為我可以玩的更好。在1989年,我接觸到了C++,并立即看到了對象起源編程的優(yōu)勢。從那時起,我就開始用C++設(shè)計FOAM。然而,在那個年代,C++剛剛問世,并且編譯器VERY脆弱甚至不能工作。慢慢的我認(rèn)識到泛型編程(Generic Programming)對操作場、矩陣、方程等是非常有必要的,在C++模板問世之前,我就使用C方法、宏和腳本得方法來實現(xiàn)。在C++模板問世之后,以及gcc編譯器的發(fā)布,我把我之前寫的代碼用C++模板重寫,這就是OpenFOAM的前身。


當(dāng)然了,FORTRAN不能做這些。不過FORTRAN-90有一些面向?qū)ο蟮哪芰?但是它完全沒有泛型編程的功能,據(jù)我所知,FORTRAN以后亦不會添加泛型編程的概念?;旧?我個人認(rèn)為FORTRAN語言快要廢了,在1960年那時候就應(yīng)該埋在土里了。目前使用FORTRAN的人大部分是由于歷史原因,只為了新代碼能和非常久遠(yuǎn)的代碼兼容。


FORTRAN和C++都因為“向下兼容”而有一些致命的缺點。FORTRAN為了和FORTRAN-77兼容,C++為了和ANSI C兼容。然而最大的區(qū)別是,ANSI C本身就是一個非常好的語言,FORTRAN可不是。


在未來,我希望C++被一個更干凈、簡單、有力的語言代替,這個語言需要支持泛型編程,這對OpenFOAM以及其他相類似的代碼非常重要。我一直關(guān)注編程語言的發(fā)展,我認(rèn)為C++的可能的代替品有Nim,Rust以及Chapel,然而目前這些語言缺少一些我需要的必要功能,添加這些功能,比如C++中的高度的泛型編程概念,可能需要很多年。我希望他們在若干年后添加這些特性。同時,C++的缺陷需要妥善處理。在C++17中,我希望“概念”(concept)和“模塊”(module)特性會被加入,所有的C++編程人員都會受益。


額,這個問題我想說的太多了,尤其是關(guān)于C++的缺陷以及我對未來編程語言的期望。這越說越遠(yuǎn)了,就這么遭!



Henry Weller簡介:

CFD Direct聯(lián)合創(chuàng)始人兼任技術(shù)總監(jiān),OpenFOAM基金會共同創(chuàng)始人,OpenFOAM架構(gòu)師,27年OpenFOAM開發(fā)經(jīng)驗。


開放分享:優(yōu)質(zhì)有限元技術(shù)文章,助你自學(xué)成才

相關(guān)標(biāo)簽搜索:CFD訪談(一):看OpenFOAM創(chuàng)始人Henry Weller論CFD! Fluent培訓(xùn) Fluent流體培訓(xùn) Fluent軟件培訓(xùn) fluent技術(shù)教程 fluent在線視頻教程 fluent資料下載 fluent分析理論 fluent化學(xué)反應(yīng) fluent軟件下載 UDF編程代做 Fluent、CFX流體分析 HFSS電磁分析 

編輯
在線報名:
  • 客服在線請直接聯(lián)系我們的客服,您也可以通過下面的方式進(jìn)行在線報名,我們會及時給您回復(fù)電話,謝謝!
驗證碼

全國服務(wù)熱線

1358-032-9919

廣州公司:
廣州市環(huán)市中路306號金鷹大廈3800
電話:13580329919
          135-8032-9919
培訓(xùn)QQ咨詢:點擊咨詢 點擊咨詢
項目QQ咨詢:點擊咨詢
email:kf@1cae.com