Fluent UDF【8】:編譯型UDF【轉發(fā)】
2017-07-05 by:CAE仿真在線 來源:互聯網
UDF除了可以以解釋的方式外,其還可以以編譯的方式被Fluent加載。解釋型UDF只能使用部分C語言功能,而編譯型UDF則可以全面使用C語言的所有功能。
1
編譯型UDF介紹
編譯型UDF在編譯構建過程中,其利用一個名為Makefile的腳本文件來調用C編譯器構建一個目標代碼庫。該對象庫與其編譯過程中所使用的Fluent版本及計算機體系結構相關。因此,若改變了計算機操作系統(tǒng)或Fluent版本的話,UDF對象庫必須重新構建。UDF的編譯過程通常涉及到源代碼的編譯和加載兩個步驟。
編譯/構建過程需要一個或多個UDF的源文件(例如myudf.c),并將它們編譯成對象文件(例如myudf.o或myudf.obj),之后將其構建成一個“共享庫” (例如,libudf.dll)與目標文件。
如果使用GUI方式編譯源文件,則當用戶單擊“Compiled UDF”對話框中的“Build”按鈕時,將執(zhí)行編譯/構建過程。Fluent軟件將自動為用戶基于在該會話期間運行的ANSYS Fluent的體系結構和版本(例如,hpux11 / 2d)構建用戶命名的共享庫(例如libudf),并存儲UDF對象文件。
如果使用TUI方式編譯源文件,則首先必須設置共享庫的目標文件夾,同時修改名為Makefile的腳本文件以指定源參數,然后執(zhí)行Makefile文件實現源代碼的編譯與構建。使用TUI方式編譯UDF具有允許從非ANSYS Fluent源派生的預編譯對象文件鏈接到ANSYS Fluent(鏈接非ANSYS Fluent源文件預編譯的對象文件)的諸多優(yōu)點,這些功能用GUI編譯無法實現。
構建共享庫(使用TUI或GUI)后,將UDF庫加載到ANSYS Fluent中,然后再使用它。您可以使用“Compiled UDFs”對話框中的“Load”按鈕來執(zhí)行此操作。加載完成后,共享庫中包含的所有已編譯的UDF將在ANSYS Fluent的圖形對話框中變?yōu)榭梢姾涂蛇x。請注意,編譯的UDF顯示在ANSYS Fluent對話框中,相關聯的UDF庫名稱由兩個冒號(::)分隔。例如,與名為libudf的共享庫相關聯的名為rrate的編譯型UDF將出現在ANSYS Fluent對話框中,如rrate :: libudf。此名稱可以區(qū)分解釋型UDF和編譯型UDF。
如果在加載UDF庫時寫入您的Case文件,則庫將與Case文件一起保存,并在之后讀取該Case文件時自動加載。這種“動態(tài)加載”過程可以節(jié)省用戶每次運行模擬時重新加載編譯庫的時間。
2
C編譯器
不管是使用GUI還是使用TUI方式編譯UDF,都需要使用本機運行的操作系統(tǒng)以及C編譯器。大多數的Linux操作系統(tǒng)上都已經集成了C編譯器,但是如果是在Microsoft Windows系統(tǒng)上編譯UDF,則在編譯之前必須確保本機上已經安裝了MicroSoft Visual Studio。 對于Linux機器,ANSYS Fluent支持任意符合ANSI標準的C編譯器(如GCC)。
在進行UDF編譯之前,需要設置編譯環(huán)境,這通??梢酝ㄟ^修改UDF.bat文件來實現。如下圖所示。
3
GUI方式編譯UDF
利用GUI方式編譯UDF源文件、構建共享庫以及加載UDF庫到Fluent中,可以采用以下步驟。
注意:在Windows系統(tǒng)下編譯UDF,必須預先安裝Visual Studio。在安裝Visual Studio時,確保選擇安裝c++語言,這樣才會安裝C編譯器。
-
確保要編譯的UDF源文件與cas和dat文件在同一工作路徑下。
-
讀取(或創(chuàng)建)case文件
-
打開Compiled UDFs對話框??赏ㄟ^樹形菜單Parameters & Customization → User Defined Functions→Compiled...啟動該對話框。
-
在Compiled UDF對話框中點擊按鈕Add...添加源文件和頭文件
-
在Library Name后的文本框中輸入共享庫的名稱,之后點擊Build按鈕構建共享庫。其間會彈出如下圖所示的提示對話框。
可以選擇無視,點擊OK按鈕繼續(xù)。
編譯完成后會在TUI窗口出現如圖所示的對話框。仔細檢查提示信息,沒有出現error則表示編譯成功。圖中出現有亂碼,不知道是從Fluent哪個版本開始就出現這種情況。其實可以不用管。
-
點擊Load按鈕加載UDF
如果沒有錯誤的話,加載完housing會在TUI窗口中出現如下圖所示的對話框,其中會顯示UDF宏名稱。如下圖中所示的velocity和domainInit。
4
TUI方式編譯UDF
除了可以利用圖形界面編譯UDF外,Fluent還提供了利用TUI命令的方式編譯UDF。利用TUI方式進行編譯,能夠允許用戶調用一些非Fluent源文件之外的庫文件。
使用TUI進行編譯,通常首先需要創(chuàng)建好文件目錄結構,之后編輯Makefile文件,利用makefile文件編譯源文件。
windows系統(tǒng)與Linux系統(tǒng)的編譯方式有些不同,這里主要描述Windows下的構建過程,linux系統(tǒng)后面再說。
在windows系統(tǒng)中編譯UDF,需要兩個文件makefile_nt.udf與user_nt.udf。特別重要的是在user_nt.udf文件中指定源文件編譯參數。構建文件目錄結構采用以下步驟:
-
在當前工作目錄下,創(chuàng)建新的文件夾存儲UDF庫。(例如創(chuàng)建文件夾libudf)
-
在libudf文件夾下創(chuàng)建新的文件夾,命名為src
-
將所有UDF源文件放入src文件夾中
-
在libudf文件夾下創(chuàng)建架構文件夾。如64bit windows操作系統(tǒng),則創(chuàng)建win64文件夾(路徑libudf\win64)。
-
在架構文件(libudf\win64)下創(chuàng)建Fluent版本文件夾。如單精度2d版本則創(chuàng)建文件夾2d。一些版本信息如下表所示。
版本信息 |
文件夾名字 |
單精度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時,需要創(chuàng)建兩個版本文件夾。
-
從Fluent安裝路徑中(如c:\ANSYS Inc\v180\fluent\fluent18.0.0\src)拷貝文件user_nt.udf到所有的版本子文件夾中(如libudf\win64\3d)
-
從Fluent安裝路徑中(如c:\ANSYS Inc\v180\fluent\fluent18.0.0\src)拷貝文件makefile_nt.udf到所有的版本子文件夾中(如libudf\win64\3d),并改名為makefile
注意:若在Fluent外部編譯UDF,則需要添加環(huán)境變量FLUENT_INC、FLUENT_ARCH到user_nt.udf文件中
Linux環(huán)境下的文件目錄設置與此有些許差異。
當文件目錄設置完畢并且所有文件已經放置到指定位置后,就可以利用TUI來編譯及構建UDF共享庫了。
在windows系統(tǒng)中,采用以下步驟:
-
修改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文件。
-
利用Visual Studio命令行界面進入每一個版本文件夾(如libudf\win64\2d),輸入nmake執(zhí)行編譯操作。若編譯存在問題,可以在修改源文件后通過執(zhí)行nmake clean及nmake重新編譯。

轉自公眾號:胡坤 CFD仿真之道
相關標簽搜索:Fluent UDF【8】:編譯型UDF【轉發(fā)】 Fluent培訓 Fluent流體培訓 Fluent軟件培訓 fluent技術教程 fluent在線視頻教程 fluent資料下載 fluent分析理論 fluent化學反應 fluent軟件下載 UDF編程代做 Fluent、CFX流體分析 HFSS電磁分析