前面基本完成了動網格專題的釋出,不過還是有一些内容并沒有更新進去,比如說in-cylinder、接觸檢測、2.5D網格重構等。不過這些都是小技巧,寫起來挺麻煩,以後有時間再通過案例視訊的方式講解好了。從今天開始最近一段時間準備釋出Fluent UDF的一些内容。
關于UDF
UDF并不是什麼神秘的東西,然而在地球人的眼中,凡是與程式設計相關的工作,總是認為有點兒高大上罷了。其實UDF程式的編寫絕對隻是個體力活兒。
Fluent是一個通用軟體。所謂的通用軟體,意思就是說啥事兒都能做。能做流動,能做傳熱,能做化學反應,能做多相流,貌似與NS相關的内容都能做。然而,無所不能往往也意味着不甚精通。軟體為了滿足其通用性,無疑在各種參數的選取上偏于保守,比如說各種求解算法、各種模型參數,為了保證其收斂性和魯棒性,必然會存在舍棄精度的做法。是以,通用的軟體常常難以滿足進階人士的計算需求。
作為商用軟體,Fluent自然不願意損失這些進階使用者,是以軟體給進階使用者開了一扇視窗,允許使用者根據自己的需求對軟體進行一定程度的定制。是以就有了我們這裡所說的UDF。
UDF(User Defined Functions,使用者自定義功能),采用C語言進行編寫,可以采用編譯或解釋的方式加載到Fluent中,利用UDF可以對Fluent計算過程中的一些模型參數或計算流程進行控制。
從哪兒開始?
要使用UDF,該如何入手?
Fluent幫助文檔中提供了較為詳盡的UDF使用方法,包含了絕大多數宏的使用描述(其實還有一部分宏并沒有出現在文檔中,親們可以通過研讀代碼中的注釋來使用這些用,見udf.h檔案)。在編寫UDF的過程中,UDF手冊是必不可少的文檔。
實際上UDF的應用過程是這樣的:
- 發現需要使用UDF。Fluent畢竟是一款成熟的商用軟體,大多數情況下,利用GUI就能夠滿足我們的計算要求。隻有當我們确信Fluent的GUI并不具備某項功能,而利用UDF可以滿足此要求時,才開始着手編寫UDF。記住:能用GUI實作的功能,就不要用UDF去做。人家Fluent說了,不對UDF的正确性負責,他們隻負責UDF與Fluent的通訊功能。能不能用UDF實作某項功能,需要翻越Fluent幫助文檔。
- 編寫UDF檔案。這部分工作應該是UDF的核心工作。作為一個計算機程式,UDF同樣有輸入和輸出。在翻越UDF手冊的時候,搞清楚宏檔案中哪些參數是輸入,哪些參數是輸出。最簡單的方式就是直接套用UDF手冊中的示例程式,在其基礎基礎上進行修改。
- 配置UDF環境。這部分工作實際上相當的簡單。隻不過在windows環境下需要安裝Visual Studio,在Linux環境下需要配置GCC。需要注意在安裝Visual Studio的時候一定要選擇安裝C++,否則不會安裝c編譯器。
- 在Fluent中加載UDF。加載的方式可以是解釋,也可以是編譯。通常解釋型的程式調用要比編譯型的慢,是以一些計算密集的場合,建議使用編譯型。
需要的C語言知識
編寫UDF使用的是C語言,我們是不是需要先學習C語言?
了解C語言是必要的,但并不需要非常精通C語言。UDF宏的編寫實際上隻是應用了C語言很少的一部分,但是對C語言的越熟悉,當然寫起UDF來自然要更輕松一些。如果對C語言一無所知的話,至少需要看看以下的内容:
- C語言的文法結構。包括變量定義方式、條件結構、循環結構、函數定義等。
- C語言的資料結構。最需要了解是數組和指針。另外還需要了解函數參數傳值與傳址,否則很多的UDF宏你都搞不清楚資料怎麼就能傳遞給Fluent。
這些基礎知識後面會介紹。
要堅信UDF并沒有想象中那麼難,其實也沒有想象中的那麼高大上。
更多CFD資料可微信掃描下方二維碼關注微信公衆号。