官术网_书友最值得收藏!

2.2 編譯型UDF

編譯型UDF的構(gòu)建方式與ANSYS Fluent可執(zhí)行文件自身的構(gòu)建方式相同。在代碼構(gòu)建過程中,其利用一個(gè)名為Makefile的腳本文件來調(diào)用C編譯器構(gòu)建一個(gè)目標(biāo)代碼庫。該對(duì)象庫與其編譯過程中所使用的Fluent版本及計(jì)算機(jī)體系結(jié)構(gòu)相關(guān)。因此,若改變了計(jì)算機(jī)操作系統(tǒng)或Fluent版本,UDF對(duì)象庫必須重新構(gòu)建。UDF的編譯過程通常涉及源代碼的編譯和加載兩個(gè)步驟。

編譯/構(gòu)建過程需要一個(gè)或多個(gè)UDF的源文件(例如myudf.c),并將它們編譯成對(duì)象文件(例如myudf.o或myudf.obj),之后將其構(gòu)建成一個(gè)共享庫(例如libudf.dll)與目標(biāo)文件。

如果使用GUI方式編譯源文件,則當(dāng)用戶單擊“Compiled UDF”對(duì)話框中的“Build”按鈕時(shí),將執(zhí)行編譯/構(gòu)建過程。Fluent軟件將自動(dòng)為用戶基于在該會(huì)話期間運(yùn)行的ANSYS Fluent的體系結(jié)構(gòu)和版本(例如hpux11/2d)構(gòu)建用戶命名的共享庫(例如libudf),并存儲(chǔ)UDF對(duì)象文件。

如果使用TUI方式編譯源文件,則首先必須設(shè)置共享庫的目標(biāo)文件夾,同時(shí)修改名為Makefile的腳本文件以指定源參數(shù),然后執(zhí)行Makefile文件實(shí)現(xiàn)源代碼的編譯與構(gòu)建。使用TUI方式編譯UDF具有允許從非ANSYS Fluent源文件派生的預(yù)處理對(duì)象文件鏈接到ANSYS Fluent的諸多優(yōu)點(diǎn),這些功能用GUI編譯無法實(shí)現(xiàn)。

構(gòu)建共享庫(使用TUI或GUI)后,將UDF庫加載到ANSYS Fluent中,然后再使用它。可以使用“Compiled UDFs”對(duì)話框中的“Load”按鈕來執(zhí)行此操作。加載完成后,共享庫中包含的所有已編譯的UDF將在ANSYS Fluent的圖形對(duì)話框中變?yōu)榭梢姾涂蛇x。

注 意

編譯的UDF顯示在ANSYS Fluent對(duì)話框中,相關(guān)聯(lián)的UDF庫名稱由兩個(gè)冒號(hào)“::”分隔。例如,與名為libudf的共享庫相關(guān)聯(lián)的名為rrate的編譯UDF將出現(xiàn)在ANSYS Fluent對(duì)話框中,如rrate::libudf。此名稱可以區(qū)分解釋型UDF和編譯型UDF

如果在加載UDF庫時(shí)寫入case文件,則庫將與case文件一起保存,并在之后讀取該case 文件時(shí)自動(dòng)加載。這種“動(dòng)態(tài)加載”過程可以節(jié)省用戶每次運(yùn)行模擬時(shí)重新加載編譯庫的時(shí)間。

2.2.1 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)境,這通常可以通過修改UDF.bat文件來實(shí)現(xiàn)。如圖2-3所示。

圖2-3 Fluent環(huán)境設(shè)置

2.2.2 GUI方式編譯UDF

利用GUI方式編譯UDF源文件、構(gòu)建共享庫以及加載UDF庫到Fluent中,可以采用以下步驟。

注 意

Windows系統(tǒng)下編譯UDF,必須預(yù)先安裝Visual Studio。在安裝Visual Studio時(shí),確保選擇安裝C++語言,這樣才會(huì)安裝C編譯器。

步驟1:確保要編譯的UDF源文件與cas和dat文件在同一工作路徑下。

步驟2:讀取(或創(chuàng)建)case文件。

步驟3:打開Compiled UDFs對(duì)話框,如圖2-4所示。可通過樹形菜單Parameters & CustomizationUser Defined FunctionsCompiled...啟動(dòng)該對(duì)話框。

圖2-4 編譯對(duì)話框

步驟4:在Compiled UDF對(duì)話框中點(diǎn)擊按鈕Add...添加源文件和頭文件。

步驟5:在Library Name后的文本框中輸入共享庫的名稱,之后點(diǎn)擊Build按鈕構(gòu)建共享庫。其間會(huì)彈出如圖2-5所示的提示對(duì)話框。可以選擇無視,點(diǎn)擊OK按鈕繼續(xù)。

圖2-5 提示對(duì)話框

編譯完成后會(huì)在TUI窗口出現(xiàn)如圖2-6所示的對(duì)話框。仔細(xì)檢查提示信息,沒有出現(xiàn)error則表示編譯成功。圖中出現(xiàn)有亂碼,不知道是從Fluent哪個(gè)版本開始就出現(xiàn)這種情況,可以不用管。

圖2-6 提示信息

步驟6:點(diǎn)擊Load按鈕加載UDF。如果沒有錯(cuò)誤,加載完housing會(huì)在TUI窗口中出現(xiàn)如圖2-7所示的對(duì)話框,其中會(huì)顯示UDF宏名稱,如圖中所示的velocity和domainInit。

圖2-7 編譯完成信息

2.2.3 命令行方式編譯UDF

除了可以利用圖形界面編譯UDF外,F(xiàn)luent還提供了利用命令行命令的方式編譯UDF。利用命令行方式進(jìn)行編譯,能夠允許用戶調(diào)用一些非Fluent源文件之外的庫文件。采用該方式編譯UDF,通常首先需要?jiǎng)?chuàng)建好文件目錄結(jié)構(gòu),之后編輯makefile文件,利用makefile文件編譯源文件。

(1)創(chuàng)建文件目錄結(jié)構(gòu)

在Windows系統(tǒng)中編譯UDF,需要兩個(gè)文件makefile_nt.udf與user_nt.udf。特別重要的是在user_nt.udf文件中指定源文件編譯參數(shù)。構(gòu)建文件目錄結(jié)構(gòu)采用以下步驟:

步驟1:在當(dāng)前工作目錄下,創(chuàng)建新的文件夾存儲(chǔ)UDF庫,例如創(chuàng)建文件夾libudf。

步驟2:在libudf文件夾下創(chuàng)建新的文件夾,命名為src

步驟3:將所有UDF源文件放入src文件夾中。

步驟4:在libudf文件夾下創(chuàng)建架構(gòu)文件夾。如64bit Windows操作系統(tǒng),則創(chuàng)建win64文件夾,路徑為libudf\win64。

步驟5:在架構(gòu)文件(libudf\win64)下創(chuàng)建Fluent版本文件夾。如是單精度2d版本,則創(chuàng)建文件夾2d。一些版本信息如表2-1所示。文件路徑如圖2-8所示。

2-1 版本及對(duì)應(yīng)的文件夾

圖2-8 文件路徑

注 意

注意:在編譯并行UDF時(shí),需要?jiǎng)?chuàng)建兩個(gè)版本文件夾。

步驟6:從Fluent安裝路徑中(如c:\ANSYS Inc\v180\fluent\fluent18.0.0\src\udf)拷貝文件user_nt.udf到所有的版本子文件夾中(如libudf\win64\3d)。

步驟7:從Fluent安裝路徑中(如c:\ANSYS Inc\v180\fluent\fluent18.0.0\src\udf)拷貝文件makefile_nt.udf到所有的版本子文件夾中(如libudf\win64\3d),并改名為makefile。

注 意

若在Fluent外部編譯UDF,則需要添加環(huán)境變量FLUENT_INCFLUENT_ARCHuser_nt.udf文件中。

Linux環(huán)境下的文件目錄設(shè)置與此有些許差異。

(2)編譯文件

當(dāng)文件目錄設(shè)置完畢并且所有文件已經(jīng)放置到指定位置后,就可以利用TUI來編譯及構(gòu)建UDF共享庫。在Windows系統(tǒng)中,采用以下步驟:

步驟1:修改user_nt.udf文件。修改文件中的四個(gè)參數(shù):CSOURCES、HSOURCES、VERSION以及PARALLEL_NODE。user_nt.udf文件內(nèi)容類似圖2-9所示。

CSOURCES=:指定要編譯的UDF源文件。在所有文件名前面加上前綴$(SRC)。多個(gè)文件可以連著寫,如“(SRC)udfexample1.c(SRC)udfexample2.c”。

HSOURCES=:指定要編譯的UDF頭文件。同樣在所有文件名前面加上$(SRC)前綴。多個(gè)文件可以連著寫,如“(SRC)udfexample1.h(SRC)udfexample2.h”。

圖2-9 文件內(nèi)容

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=指定并行通信庫。指定為None表示采用串行,其他并行包括:ibmmpi(利用IBM MPI并行)、intel(利用intel MPI并行)以及msmpi(利用微軟MPI)。在并行計(jì)算中需要同時(shí)設(shè)置host及node文件夾下的user_nt.udf文件。

步驟2:利用Visual Studio命令行界面進(jìn)入每一個(gè)版本文件夾(如libudf\win64\2d),輸入nmake執(zhí)行編譯操作。若編譯存在問題,可以在修改源文件后通過執(zhí)行nmake clean及nmake重新編譯。

2.2.4 GCC方式編譯UDF

(1)下載并安裝GCC

Fluent UDF編譯之所以需要依賴Visual Studio,主要原因是因?yàn)镕luent并未內(nèi)置任何C編譯器。當(dāng)前用于C/C++的編譯器較多,除了微軟的MSVC(就是集成在Visual Studio中的編譯器),比較有名的還有GCC/G++(基于GNU的C/C++編譯器,在Linux系統(tǒng)下很流行)、ICC(Intel的C/C++編譯器,針對(duì)Intel體系有特別優(yōu)化)、Clang(近幾年風(fēng)頭很火的C/C++編譯器,基于BSD協(xié)議)、IBM XL C++(IBM的編譯器,在IBM硬件及平臺(tái)上表現(xiàn)優(yōu)異)等。

Fluent UDF實(shí)質(zhì)上也是一段完整的C代碼,編譯型UDF需要利用編譯器將這段代碼編譯成動(dòng)態(tài)鏈接庫(.dll),方便在運(yùn)行時(shí)加載。因此理論上來說任何一款完善的C/C++編譯器都可以勝任這項(xiàng)工作。

GCC是Linux的主力C/C++編譯工具,在Windows系統(tǒng)下也有一些基于GCC的編譯工具,比較典型的如MinGW、MinGW-win64及TDM-GCC等。

下面描述采用TDM-GCC作為Fluent UDF編譯器的基本過程。

進(jìn)入TDM-GCC官網(wǎng)下載軟件。根據(jù)操作系統(tǒng)選擇不同版本的tdm-gcc進(jìn)行下載,見圖2-10。本書下載tdm64-gcc-5.1.0-2.exe。

圖2-10 下載位置

TDM-GCC的安裝較為簡(jiǎn)單,雙擊后一路Next即可。

安裝完畢后,可打開命令提示符窗口或PowerShell,在其中輸入g++,若顯示如圖2-11所示信息,表示安裝成功。若出現(xiàn)g++不是內(nèi)部或外部命令之類的提示,則表示未安裝好,此時(shí)可能需要將TDM-GCC的安裝路徑添加到環(huán)境變量Path中。

圖2-11 測(cè)試GCC的安裝

在TDM-GCC安裝文件夾中找到可執(zhí)行文件gendef.exe所在路徑,如本機(jī)安裝路徑為D:\TDM-GCC-64\x86_64-w64-mingw32\bin,將該路徑添加到環(huán)境變量的Path中,如圖2.12所示。

圖2-12 添加環(huán)境變量

注 意

添加環(huán)境變量的目的只是為了方便后面調(diào)用。不添加的話后面調(diào)用時(shí)需要使用gendef.exe的完整路徑。

(2)生成庫文件

① 命令行中利用cd命令進(jìn)入到Fluent的庫文件目錄。這些文件夾包含C:\Program Files\ANSYS Inc\v201\fluent\fluent20.1.0\win64\下的所有文件夾以及C:\Program Files\ANSYS Inc\v201\fluent\fluent20.1.0\multiport\win64下的所有文件夾。

這些文件夾如下:

C:\Program Files\ANSYS Inc\V201\fluent\fluent20.1.0\win64\2d
C:\Program Files\ANSYS Inc\V201\fluent\fluent20.1.0\win64\2d_host
C:\Program Files\ANSYS Inc\V201\fluent\fluent20.1.0\win64\2d_node
C:\Program Files\ANSYS Inc\V201\fluent\fluent20.1.0\win64\2ddp
C:\Program Files\ANSYS Inc\V201\fluent\fluent20.1.0\win64\2ddp_host
C:\Program Files\ANSYS Inc\V201\fluent\fluent20.1.0\win64\2ddp_node
C:\Program Files\ANSYS Inc\V201\fluent\fluent20.1.0\win64\3d
C:\Program Files\ANSYS Inc\V201\fluent\fluent20.1.0\win64\3d_host
C:\Program Files\ANSYS Inc\V201\fluent\fluent20.1.0\win64\3d_node
C:\Program Files\ANSYS Inc\V201\fluent\fluent20.1.0\win64\3ddp
C:\Program Files\ANSYS Inc\V201\fluent\fluent20.1.0\win64\3ddp_host
C:\Program Files\ANSYS Inc\V201\fluent\fluent20.1.0\win64\3ddp_node
C:\Program Files\ANSYS Inc\V201\fluent\fluent20.1.0\multiport\win64\mpi\shared
C:\Program Files\ANSYS Inc\V201\fluent\fluent20.1.0\multiport\win64\net\shared

以2d文件夾為例,利用以下命令生成def文件:

cd ”C:\Program Files\ANSYS Inc\v201\fluent\fluent20.1.0\win64\2d”
gendef fl2010.exe

然而有時(shí)候會(huì)出錯(cuò),出現(xiàn)如圖2-13所示提示,主要原因在于文件權(quán)限所致。

圖2-13 創(chuàng)建def文件錯(cuò)誤提示

注 意

這里ANSYS安裝到了系統(tǒng)盤C盤,由于Win10系統(tǒng)對(duì)C盤的保護(hù),默認(rèn)情況下系統(tǒng)盤中的文件夾是沒有寫操作權(quán)限的。而這里需要在當(dāng)前文件夾中創(chuàng)建def文件,因此會(huì)操作失敗。若ANSYS安裝在非系統(tǒng)盤,則不會(huì)出現(xiàn)這個(gè)問題。

解決權(quán)限問題后生成def文件如圖2-14所示。

圖2-14 創(chuàng)建def文件成功

② 運(yùn)行以下命令生成a文件,如圖2-15所示。

dlltool --dllname fl2010.exe --def fl2010.def --output-lib fl2010.a

圖2-15 創(chuàng)建a文件

注 意

這里需要花費(fèi)較長時(shí)間。

此時(shí)2d文件夾下多出了一個(gè)文件名為fl2010.a的文件,如圖2-16所示。

圖2-16 生成新文件

③ 對(duì)win64文件夾中的所有子文件夾執(zhí)行上面的操作。確保所有win64文件夾中的子文件中均包含有def文件及a文件。

需要注意,對(duì)于以下文件目錄:

c:\Program Files\ANSYS Inc\v201\fluent\fluent20.1.0\win64\2d_node
c:\Program Files\ANSYS Inc\v201\fluent\fluent20.1.0\win64\2ddp_node
c:\Program Files\ANSYS Inc\v201\fluent\fluent20.1.0\win64\3d_node
c:\Program Files\ANSYS Inc\v201\fluent\fluent20.1.0\win64\3ddp_node

使用命令:

gendef fl_mpi2010.exe
dlltool --dllname fl_mpi2010.exe --def fl_mpi2010.def --output-lib fl_mpi2010.a

對(duì)于以下路徑:

c:\Program Files\ANSYS Inc\v201\fluent\fluent20.1.0\multiport\win64\mpi\shared
c:\Program Files\ANSYS Inc\v201\fluent\fluent20.1.0\multiport\win64\net\shared

使用命令:

gendef mport.dll
dlltool --dllname mport.dll --def mport.def --output-lib mport.a
(3)編譯UDF

編譯UDF所需的頭文件如下:

c:\Program Files\ANSYS Inc\v201\fluent\fluent20.1.0\win64\2d
c:\Program Files\ANSYS Inc\v201\fluent\fluent20.1.0\src\main
c:\ Program Files\ANSYS Inc\v201\fluent\fluent20.1.0\src\addon-wrapper
c:\Program Files\ANSYS Inc\v201\fluent\fluent20.1.0\src\io
c:\Program Files\ANSYS Inc\v201\fluent\fluent20.1.0\src\species
c:\Program Files\ANSYS Inc\v201\fluent\fluent20.1.0\src\pbns
c:\Program Files\ANSYS Inc\v201\fluent\fluent20.1.0\src\numerics
c:\Program Files\ANSYS Inc\v201\fluent\fluent20.1.0\src\sphysics
c:\Program Files\ANSYS Inc\v201\fluent\fluent20.1.0\src\storage
c:\Program Files\ANSYS Inc\v201\fluent\fluent20.1.0\src\mphase
c:\Program Files\ANSYS Inc\v201\fluent\fluent20.1.0\src\bc
c:\Program Files\ANSYS Inc\v201\fluent\fluent20.1.0\src\models
c:\Program Files\ANSYS Inc\v201\fluent\fluent20.1.0\src\material
c:\Program Files\ANSYS Inc\v201\fluent\fluent20.1.0\src\amg
c:\Program Files\ANSYS Inc\v201\fluent\fluent20.1.0\src\util
c:\Program Files\ANSYS Inc\v201\fluent\fluent20.1.0\src\mesh
c:\Program Files\ANSYS Inc\v201\fluent\fluent20.1.0\src\udf
c:\Program Files\ANSYS Inc\v201\fluent\fluent20.1.0\src\ht
c:\Program Files\ANSYS Inc\v201\fluent\fluent20.1.0\src\dx
c:\Program Files\ANSYS Inc\v201\fluent\fluent20.1.0\src\turbulence
c:\Program Files\ANSYS Inc\v201\fluent\fluent20.1.0\src\parallel
c:\Program Files\ANSYS Inc\v201\fluent\fluent20.1.0\src\etc
c:\Program Files\ANSYS Inc\v201\fluent\fluent20.1.0\src\ue
c:\Program Files\ANSYS Inc\v201\fluent\fluent20.1.0\src\dpm
c:\Program Files\ANSYS Inc\v201\fluent\fluent20.1.0\src\dbns
C:\Program Files\ANSYS Inc\v201\fluent\fluent20.1.0\src\acoustics
c:\Program Files\ANSYS Inc\v201\fluent\fluent20.1.0\cortex\src
c:\Program Files\ANSYS Inc\v201\fluent\fluent20.1.0\client\src
c:\Program Files\ANSYS Inc\v201\fluent\fluent20.1.0\tgrid\src
c:\Program Files\ANSYS Inc\v201\fluent\fluent20.1.0\multiport\src
c:\Program Files\ANSYS Inc\v201\fluent\fluent20.1.0\multiport\mpi_wrapper\src

進(jìn)入U(xiǎn)DF源代碼所在路徑,如E:\demo。執(zhí)行以下命令:

若要編譯并行版,則需要?jiǎng)?chuàng)建兩個(gè)文件夾,如2d并行版需要?jiǎng)?chuàng)建文件夾2d_host與2d_node。

編譯完成后在相應(yīng)文件夾中生成libudf.dll文件,如圖2-17所示。

圖2-17 編譯完成

主站蜘蛛池模板: 阿图什市| 蒲城县| 连江县| 龙海市| 钦州市| 岱山县| 会同县| 那坡县| 马尔康县| 本溪| 自治县| 凤翔县| 信丰县| 庆元县| 宁强县| 红安县| 邛崃市| 高州市| 临潭县| 秀山| 安龙县| 双流县| 江达县| 通海县| 得荣县| 东乡族自治县| 高尔夫| 四川省| 新巴尔虎右旗| 盱眙县| 城固县| 扎囊县| 原阳县| 清涧县| 明光市| 信阳市| 石渠县| 米脂县| 循化| 澄江县| 商都县|