UDF除了能夠以解釋的方式外,其還能夠以編譯的方式被Fluent加載。解釋型UDF只能使用部分C語言功能,而編譯型UDF則能夠全面使用C語言的全部功能。node
編譯型UDF的構建方式與ANSYS Fluent可執行文件自身的構建方式相同。在代碼構建過程當中,其利用一個名爲Makefile的腳本文件來調用C編譯器構建一個目標代碼庫。該對象庫與其編譯過程當中所使用的Fluent版本及計算機體系結構相關。所以,若改變了計算機操做系統或Fluent版本的話,UDF對象庫必須從新構建。UDF的編譯過程一般涉及到源代碼的編譯和加載兩個步驟。linux
編譯/構建過程須要一個或多個UDF的源文件(例如myudf.c),並將它們編譯成對象文件(例如myudf.o或myudf.obj),以後將其構建成一個「共享庫」 (例如,libudf.dll)與目標文件。c++
若是使用GUI方式編譯源文件,則當用戶單擊「Compiled UDF」對話框中的「Build」按鈕時,將執行編譯/構建過程。Fluent軟件將自動爲用戶基於在該會話期間運行的ANSYS Fluent的體系結構和版本(例如,hpux11 / 2d)構建用戶命名的共享庫(例如libudf),並存儲UDF對象文件。windows
若是使用TUI方式編譯源文件,則首先必須設置共享庫的目標文件夾,同時修更名爲Makefile的腳本文件以指定源參數,而後執行Makefile文件實現源代碼的編譯與構建。使用TUI方式編譯UDF具備容許從非ANSYS Fluent源派生的預編譯對象文件連接到ANSYS Fluent(連接非ANSYS Fluent源文件預編譯的對象文件)的諸多優勢,這些功能用GUI編譯沒法實現。
構建共享庫(使用TUI或GUI)後,將UDF庫加載到ANSYS Fluent中,而後再使用它。您可使用「Compiled UDFs」對話框中的「Load」按鈕來執行此操做。加載完成後,共享庫中包含的全部已編譯的UDF將在ANSYS Fluent的圖形對話框中變爲可見和可選。請注意,編譯的UDF顯示在ANSYS Fluent對話框中,相關聯的UDF庫名稱由兩個冒號(::)分隔。例如,與名爲libudf的共享庫相關聯的名爲rrate的編譯UDF將出如今ANSYS Fluent對話框中,如rrate :: libudf。此名稱能夠區分解釋型UDF和編譯型UDF。微信
若是在加載UDF庫時寫入您的Case文件,則庫將與Case文件一塊兒保存,並在以後讀取該Case文件時自動加載。這種「動態加載」過程能夠節省用戶每次運行模擬時從新加載編譯庫的時間。架構
不論是使用GUI仍是使用TUI方式編譯UDF,都須要使用本機運行的操做系統以及C編譯器。大多數的Linux操做系統上都已經集成了C編譯器,可是若是是在Microsoft Windows系統上編譯UDF,則在編譯以前必須確保本機山剛已經安裝了MicroSoft Visual Studio。 對於Linux機器,ANSYS Fluent支持任意符合ANSI標準的C編譯器(如GCC)。
在進行UDF編譯以前,須要設置編譯環境,這一般能夠經過修改UDF.bat文件來實現。以下圖所示。
dom
利用GUI方式編譯UDF源文件、構建共享庫以及加載UDF庫到Fluent中,能夠採用如下步驟。
注意:在Windows系統下編譯UDF,必須預先安裝Visual Studio。在安裝Visual Studio時,確保選擇安裝c++語言,這樣纔會安裝C編譯器。ui
Compiled UDFs
對話框。可經過樹形菜單Parameters & Customization → User Defined Functions→Compiled...
啓動該對話框。Compiled UDF
對話框中點擊按鈕Add...
添加源文件和頭文件Library Name
後的文本框中輸入共享庫的名稱,以後點擊Build
按鈕構建共享庫。其間會彈出以下圖所示的提示對話框。OK
按鈕繼續。點擊Load
按鈕加載UDF
若是沒有錯誤的話,加載完housing會在TUI窗口中出現以下圖所示的對話框,其中會顯示UDF宏名稱。以下圖中所示的velocity和domainInit。
操作系統
除了能夠利用圖形界面編譯UDF外,Fluent還提供了利用TUI命令的方式編譯UDF。利用TUI方式進行編譯,可以容許用戶調用一些非Fluent源文件以外的庫文件。
使用TUI進行編譯,一般首先須要建立好文件目錄結構,以後編輯Makefile文件,利用makefile文件編譯源文件。命令行
windows系統與Linux系統的編譯方式有些不一樣,這裏主要描述Windows下的構建過程,linux系統後面再說。
在windows系統中編譯UDF,須要兩個文件makefile_nt.udf
與user_nt.udf
。特別重要的是在user_nt.udf文件中指定源文件編譯參數。構建文件目錄結構採用如下步驟:
src
版本信息 | 文件夾名字 |
---|---|
單精度2d | 2d |
當精度3d | 3d |
雙精度2d | 2ddp |
雙精度3d | 3ddp |
單精度並行2d | 2d_node及2d_host |
單精度並行3d | 3d_node及3d_host |
雙精度並行2d | 2ddp_node及2ddp_host |
雙精度並行3d | 3ddp_node及3ddp_host |
注意:在編譯並行UDF時,須要建立兩個版本文件夾。
user_nt.udf
到全部的版本子文件夾中(如libudf\win64\3d)makefile_nt.udf
到全部的版本子文件夾中(如libudf\win64\3d),並更名爲makefile
注意:若在Fluent外部編譯UDF,則須要添加環境變量FLUENT_INC、FLUENT_ARCH到user_nt.udf文件中
Linux環境下的文件目錄設置與此有些許差別。
當文件目錄設置完畢而且全部文件已經放置到指定位置後,就能夠利用TUI來編譯及構建UDF共享庫了。
在windows系統中,採用如下步驟:
user_nt.udf
文件。修改文件中的三個參數:CSOURCES、HSOURCES、VERSION以及PARALLEL_NODE
udf_nt.udf文件內容相似下圖所示。
CSOURCES=:指定要編譯的UDF源文件。在全部文件名前面加上前綴$(SRC)
。(多個文件能夠連着寫,如`$(SRC)udfexample1.c $(SRC)udfexample2.c
)
HSOURCES=:指定要編譯的UDF頭文件。一樣在全部文件名前面加上$(SRC)
前綴。(多個文件能夠連着寫,如`$(SRC)udfexample1.h $(SRC)udfexample2.h
)
VERSION=:運行的求解器版本信息,與user_nt.udf文件所在文件夾保持一致。((2d, 3d, 2ddp, 3ddp, 2d_host, 2d_node, 3d_host, 3d_node, 2ddp_host, 2ddp_node, 3ddp_host, or 3ddp_node)。
PARALLEL_NODE=指定並行通信庫。指定爲None
表示採用串行,其餘並行包括:ibmmpi
(利用IBM MPI並行)、intel
(利用intel MPI並行)以及msmpi
(利用微軟MPI)。在並行計算中須要同時設置host及node文件夾下的user_nt.udf文件。
nmake
執行編譯操做。若編譯存在問題,能夠在修改源文件後經過執行nmake clean
及nmake
從新編譯。更多CFD資料可微信掃描下方二維碼關注微信公衆號。