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)建過程中,其利用一個名為Makefile的腳本文件來調(diào)用C編譯器構(gòu)建一個目標代碼庫。該對象庫與其編譯過程中所使用的Fluent版本及計算機體系結(jié)構(gòu)相關(guān)。因此,若改變了計算機操作系統(tǒng)或Fluent版本的話,UDF對象庫必須重新構(gòu)建。UDF的編譯過程通常涉及到源代碼的編譯和加載兩個步驟。

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

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

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

構(gòu)建共享庫(使用TUI或GUI)后,將UDF庫加載到ANSYS Fluent中,然后再使用它。您可以使用“Compiled UDFs”對話框中的“Load”按鈕來執(zhí)行此操作。加載完成后,共享庫中包含的所有已編譯的UDF將在ANSYS Fluent的圖形對話框中變?yōu)榭梢姾涂蛇x。請注意,編譯的UDF顯示在ANSYS Fluent對話框中,相關(guān)聯(lián)的UDF庫名稱由兩個冒號(::)分隔。例如,與名為libudf的共享庫相關(guān)聯(lián)的名為rrate的編譯型UDF將出現(xiàn)在ANSYS Fluent對話框中,如rrate :: libudf。此名稱可以區(qū)分解釋型UDF和編譯型UDF。

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

2

C編譯器

不管是使用GUI還是使用TUI方式編譯UDF,都需要使用本機運行的操作系統(tǒng)以及C編譯器。大多數(shù)的Linux操作系統(tǒng)上都已經(jīng)集成了C編譯器,但是如果是在Microsoft Windows系統(tǒng)上編譯UDF,則在編譯之前必須確保本機上已經(jīng)安裝了MicroSoft Visual Studio。 對于Linux機器,ANSYS Fluent支持任意符合ANSI標準的C編譯器(如GCC)。

在進行UDF編譯之前,需要設(shè)置編譯環(huán)境,這通??梢酝ㄟ^修改UDF.bat文件來實現(xiàn)。如下圖所示。

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

3

GUI方式編譯UDF

利用GUI方式編譯UDF源文件、構(gòu)建共享庫以及加載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...啟動該對話框。

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

  • Compiled UDF對話框中點擊按鈕Add...添加源文件和頭文件

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

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

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

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

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

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

4

TUI方式編譯UDF

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

使用TUI進行編譯,通常首先需要創(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,需要兩個文件makefile_nt.udfuser_nt.udf。特別重要的是在user_nt.udf文件中指定源文件編譯參數(shù)。構(gòu)建文件目錄結(jié)構(gòu)采用以下步驟:

  • 在當前工作目錄下,創(chuàng)建新的文件夾存儲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

當精度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文件中

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

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

4.2 編譯文件

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

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

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

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

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

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)。在并行計算中需要同時設(shè)置host及node文件夾下的user_nt.udf文件。

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

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

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

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

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

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

編輯
在線報名:
  • 客服在線請直接聯(lián)系我們的客服,您也可以通過下面的方式進行在線報名,我們會及時給您回復電話,謝謝!
驗證碼

全國服務(wù)熱線

1358-032-9919

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