前面基本完成了動網格專題的發布,不過還是有一些內容並沒有更新進去,比如說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資料可微信掃描下方二維碼關注微信公眾號。

