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