Fluent UDF【8】:編譯型UDF【轉(zhuǎn)發(fā)】

2017-07-05  by:CAE仿真在線  來源:互聯(lián)網(wǎng)

UDF除了可以以解釋的方式外,其還可以以編譯的方式被Fluent加載。解釋型UDF只能使用部分C語言功能,而編譯型UDF則可以全面使用C語言的所有功能。

1

編譯型UDF介紹

編譯型UDF在編譯構(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(鏈接非ANSYS Fluent源文件預(yù)編譯的對(duì)象文件)的諸多優(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。請(qǐng)注意,編譯的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

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)。如下圖所示。

Fluent UDF【8】:編譯型UDF【轉(zhuǎn)發(fā)】fluent分析案例圖片1

3

GUI方式編譯UDF

利用GUI方式編譯UDF源文件、構(gòu)建共享庫以及加載UDF庫到Fluent中,可以采用以下步驟。
注意:在Windows系統(tǒng)下編譯UDF,必須預(yù)先安裝Visual Studio。在安裝Visual Studio時(shí),確保選擇安裝c++語言,這樣才會(huì)安裝C編譯器。

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

  • 讀取(或創(chuàng)建)case文件

  • 打開Compiled UDFs對(duì)話框??赏ㄟ^樹形菜單Parameters & Customization → User Defined Functions→Compiled...啟動(dòng)該對(duì)話框。

Fluent UDF【8】:編譯型UDF【轉(zhuǎn)發(fā)】fluent分析案例圖片2

  • Compiled UDF對(duì)話框中點(diǎn)擊按鈕Add...添加源文件和頭文件

  • Library Name后的文本框中輸入共享庫的名稱,之后點(diǎn)擊Build按鈕構(gòu)建共享庫。其間會(huì)彈出如下圖所示的提示對(duì)話框。

Fluent UDF【8】:編譯型UDF【轉(zhuǎn)發(fā)】fluent分析案例圖片3

可以選擇無視,點(diǎn)擊OK按鈕繼續(xù)。
編譯完成后會(huì)在TUI窗口出現(xiàn)如圖所示的對(duì)話框。仔細(xì)檢查提示信息,沒有出現(xiàn)error則表示編譯成功。圖中出現(xiàn)有亂碼,不知道是從Fluent哪個(gè)版本開始就出現(xiàn)這種情況。其實(shí)可以不用管。

Fluent UDF【8】:編譯型UDF【轉(zhuǎn)發(fā)】fluent分析案例圖片4

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

Fluent UDF【8】:編譯型UDF【轉(zhuǎn)發(fā)】fluent結(jié)果圖片5

4

TUI方式編譯UDF

除了可以利用圖形界面編譯UDF外,Fluent還提供了利用TUI命令的方式編譯UDF。利用TUI方式進(jìn)行編譯,能夠允許用戶調(diào)用一些非Fluent源文件之外的庫文件。

使用TUI進(jìn)行編譯,通常首先需要?jiǎng)?chuàng)建好文件目錄結(jié)構(gòu),之后編輯Makefile文件,利用makefile文件編譯源文件。

windows系統(tǒng)與Linux系統(tǒng)的編譯方式有些不同,這里主要描述Windows下的構(gòu)建過程,linux系統(tǒng)后面再說。

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

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

  • 在當(dāng)前工作目錄下,創(chuàng)建新的文件夾存儲(chǔ)UDF庫。(例如創(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文件中

Fluent UDF【8】:編譯型UDF【轉(zhuǎn)發(fā)】fluent結(jié)果圖片6

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

4.2 編譯文件

當(dāng)文件目錄設(shè)置完畢并且所有文件已經(jīng)放置到指定位置后,就可以利用TUI來編譯及構(gòu)建UDF共享庫了。

在windows系統(tǒng)中,采用以下步驟:

  • 修改user_nt.udf文件。修改文件中的三個(gè)參數(shù):CSOURCES、HSOURCES、VERSION以及PARALLEL_NODE

udf_nt.udf文件內(nèi)容類似下圖所示。

Fluent UDF【8】:編譯型UDF【轉(zhuǎn)發(fā)】fluent結(jié)果圖片7

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

HSOURCES=:指定要編譯的UDF頭文件。同樣在所有文件名前面加上$(SRC)前綴。(多個(gè)文件可以連著寫,如$(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=指定并行通訊庫。指定為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í)行編譯操作。若編譯存在問題,可以在修改源文件后通過執(zhí)行nmake cleannmake重新編譯。

Fluent UDF【8】:編譯型UDF【轉(zhuǎn)發(fā)】fluent培訓(xùn)的效果圖片8

Fluent UDF【8】:編譯型UDF【轉(zhuǎn)發(fā)】fluent培訓(xùn)的效果圖片9

轉(zhuǎn)自公眾號(hào):胡坤 CFD仿真之道

開放分享:優(yōu)質(zhì)有限元技術(shù)文章,助你自學(xué)成才

相關(guān)標(biāo)簽搜索:Fluent UDF【8】:編譯型UDF【轉(zhuǎn)發(fā)】 Fluent培訓(xùn) Fluent流體培訓(xùn) Fluent軟件培訓(xùn) fluent技術(shù)教程 fluent在線視頻教程 fluent資料下載 fluent分析理論 fluent化學(xué)反應(yīng) fluent軟件下載 UDF編程代做 Fluent、CFX流體分析 HFSS電磁分析 

編輯
在線報(bào)名:
  • 客服在線請(qǐng)直接聯(lián)系我們的客服,您也可以通過下面的方式進(jìn)行在線報(bào)名,我們會(huì)及時(shí)給您回復(fù)電話,謝謝!
驗(yàn)證碼

全國服務(wù)熱線

1358-032-9919

廣州公司:
廣州市環(huán)市中路306號(hào)金鷹大廈3800
電話:13580329919
          135-8032-9919
培訓(xùn)QQ咨詢:點(diǎn)擊咨詢 點(diǎn)擊咨詢
項(xiàng)目QQ咨詢:點(diǎn)擊咨詢
email:kf@1cae.com