Fluent UDF簡(jiǎn)介
2016-11-30 by:CAE仿真在線 來源:互聯(lián)網(wǎng)
什么是UDF
用戶自定義函數(shù),或UDF,是用戶自編的程序,它可以動(dòng)態(tài)的連接到FLUENT求解器上來提高求解器性能。用戶自定義函數(shù)用C語言編寫。使用DEFINE宏來定義。UDF中可使用標(biāo)準(zhǔn)C語言的庫函數(shù),也可使用FLUENT提供的預(yù)定義宏,通過這些預(yù)定義宏,可以獲得FLUENT求解器得到的數(shù)據(jù)。
UDF使用時(shí)可以被當(dāng)作解釋函數(shù)或編譯函數(shù)。解釋函數(shù)在運(yùn)行時(shí)讀入并解釋。而編譯UDF則在編譯時(shí)被嵌入共享庫中并與FLUENT連接。解釋UDF用起來簡(jiǎn)單,但是有源代碼和速度方面的限制不足。編譯UDF執(zhí)行起來較快,也沒有源代碼限制,但設(shè)置和使用較為麻煩。
為什么要使用UDF
一般說來,任何一種軟件都不可能滿足每一個(gè)人的要求,FLUENT也一樣,其標(biāo)準(zhǔn)界面及功能并不能滿足每個(gè)用戶的需要。UDF正是為解決這種問題而來,使用它我們可以編寫FLUENT代碼來滿足不同用戶的特殊需要。當(dāng)然,FLUENT的UDF并不是什么問題都可以解決的,在下面的章節(jié)中我們就會(huì)具體介紹一下FLUENT UDF的具體功能?,F(xiàn)在先簡(jiǎn)要介紹一下UDF的一些功能:
l 定制邊界條件,定義材料屬性,定義表面和體積反應(yīng)率,定義FLUENT輸運(yùn)方程中的源項(xiàng),用戶自定義標(biāo)量輸運(yùn)方程(UDS)中的源項(xiàng)擴(kuò)散率函數(shù)等等。
l 在每次迭代的基礎(chǔ)上調(diào)節(jié)計(jì)算值
l 方案的初始化
l (需要時(shí))UDF的異步執(zhí)行
l 后處理功能的改善
l FLUENT模型的改進(jìn)(例如離散項(xiàng)模型,多項(xiàng)混合物模型,離散發(fā)射輻射模型)
UDF基礎(chǔ)
1、單元(Cells),面(Faces),區(qū)域(Zones)和線程(Threads)
單元和單元面被組合為一些區(qū)域(zones),這些區(qū)域規(guī)定了計(jì)算域(例如,入口,出口,壁面)的物理組成。當(dāng)用戶使用FLUENT 中的UDF 時(shí),用戶的UDF 可調(diào)用流體區(qū)域或是邊界區(qū)域的計(jì)算變量。UDF需要獲得適當(dāng)?shù)淖兞?比如說是區(qū)域參考和單元ID,以便標(biāo)定各個(gè)單元。
區(qū)域(A zone)是一群?jiǎn)卧騿卧娴募?它可以由模型和區(qū)域的物理特征(比如入口,出口,壁面,流體區(qū)域)來標(biāo)定。例如,一些被指定為面域(a face zone)的單元面可以被指定為velocity-inlet 類型,由此,速度也就可指定了。線程(A thread)是FLUENT 數(shù)據(jù)結(jié)構(gòu)的內(nèi)部名稱,可被用來指定一個(gè)區(qū)域。Thread 結(jié)構(gòu)可作為數(shù)據(jù)儲(chǔ)存器來使用,這些數(shù)據(jù)對(duì)于它所表示的單元和面來說是公用的。
打個(gè)比方來說,Thread就是公路,連接的Cell和Face,Cell和Face就相當(dāng)于公路上汽車??康恼军c(diǎn),Cell_t這個(gè)面向的是單元,而Face_t面向的是邊或者面(二維或三維)。在FLUENT循環(huán)過程中,一般是用Thread作線程檢索,而Cell或者Face作檢索過程中位置參數(shù)的指示。
2、解釋型interpreted和編譯型compiled UDF的比較
編譯型UDF和FLUENT的構(gòu)建方式一樣。腳本Makefile 被用來調(diào)用C編譯器來構(gòu)建一個(gè)當(dāng)?shù)啬繕?biāo)代碼庫。目標(biāo)代碼庫包含高級(jí)C語言源代碼的機(jī)器語言翻譯。代碼庫在FLUENT 運(yùn)行時(shí)由“動(dòng)態(tài)加載”過程連接到FLUENT上。連接后,與共享庫的聯(lián)系將會(huì)被保存在用戶的case文件中。這樣,當(dāng)FLUENT以后再讀入case文件時(shí),此編譯庫將會(huì)與FLUENT 自動(dòng)連接。這些庫是針對(duì)計(jì)算機(jī)的體系結(jié)構(gòu)和一定版本的FLUENT使用的。所以,當(dāng)FLUENT更新,或計(jì)算機(jī)操作系統(tǒng)改變,或是在不同類型的機(jī)器上運(yùn)行時(shí),這些庫必須重新構(gòu)建。
編譯型UDF需要安裝C語言編譯器,FLUENT支持的編譯器類型可從安裝目錄下v150\fluent\ntbin\ntx86中的udf.bat文件中查詢。
而解釋UDF則是在運(yùn)行時(shí),直接從C語言源代碼編譯和裝載。在FLUENT運(yùn)行中,源代碼被編譯為中介的獨(dú)立于物理結(jié)構(gòu)的使用C預(yù)處理程序的機(jī)器代碼。當(dāng)UDF 被調(diào)用時(shí),機(jī)器代碼由內(nèi)部仿真器或注釋器執(zhí)行。注釋器不具備標(biāo)準(zhǔn)C編譯器的所有功能,它不支持C語言的某些原理。所以,在使用 interpreted UDF 時(shí),有語言限制。例如,interpreted UDF 不能夠通過廢棄結(jié)構(gòu)(dereferencing structures)來獲得FLUENT 數(shù)據(jù)。要獲得數(shù)據(jù)結(jié)構(gòu),必須使用由FLUENT 提供的預(yù)定義宏。還有就是是FLUENT interpreter不能識(shí)別指針數(shù)組。這些功能必須由compiled UDF 來執(zhí)行。
編譯后,用戶的C函數(shù)名稱和內(nèi)容將會(huì)被儲(chǔ)存在case文件中。函數(shù)將會(huì)在讀入case文件時(shí)被自動(dòng)編譯。獨(dú)立于物理結(jié)構(gòu)的代碼的外層可能會(huì)導(dǎo)致執(zhí)行錯(cuò)誤,但卻可使UDF共享不同的物理結(jié)構(gòu),操作系統(tǒng)和FLUENT版本。如果運(yùn)行速度較慢,UDF不用被調(diào)節(jié)就可以編譯代碼的形式(in compiledmode)運(yùn)行。
選擇interpreted UDF或是compiled UDF時(shí),注意以下內(nèi)容:
-
Interpreted UDF
o 對(duì)其它平臺(tái)是便捷的(portable)。
o 可作為(compiled UDF)來運(yùn)行。
o 不需C編譯器。
o 比compiled UDF慢。
o 需要較多的代碼。
o 在使用C語言上有限制。
o 不能與編譯系統(tǒng)或用戶庫(compiled system or user libraries)連接。
o 只能使用預(yù)定義宏來獲得FLUENT結(jié)構(gòu)中的數(shù)據(jù)。
-
Compiled UDF
o 比interpreted UDF運(yùn)行快。
o 在使用C語言上不存在限制。
o 可用任何ANSI-compliant C 編譯器編譯。
o 能調(diào)用以其他語言編寫的函數(shù) (specifics are system-and compiler-dependent)。
o 機(jī)器物理結(jié)構(gòu)需要用戶建立FLUENT (2D or 3D) 的每個(gè)版本的共享庫(a shared library for eachversion of FLUENT (2D or 3D) needed for your machine architecture)。
o 如果包含有注釋器(interpreter)不能處理得C語言元素,則不能作為(interpreted UDF )運(yùn)行。
總的來說,當(dāng)決定使用那種類型的UDF 時(shí):
-
使用interpretedUDF作為簡(jiǎn)單的函數(shù)
-
使用compiled UDF作為復(fù)雜的函數(shù),這些函數(shù)
o 對(duì)CPU有較大要求(例如每次運(yùn)行時(shí),在每個(gè)單元上均須調(diào)用的屬性UDF(a property UDF)。
o 需要使用編譯庫(require access to acompiled library)。
解釋式UDF的限制
解釋式UDF不能包含以下C語言:
-
goto語句。
-
非ANSI-C原型語法
-
直接的數(shù)據(jù)結(jié)構(gòu)查詢(direct datastructure references)
-
局部結(jié)構(gòu)的聲明
-
聯(lián)合(unions)
-
指向函數(shù)的指針(pointers tofunctions)
-
函數(shù)數(shù)組。
在訪問FLUENT求解器數(shù)據(jù)的方式上解釋式UDF也有限制。解釋式UDF不能直接訪問存儲(chǔ)在FLUENT結(jié)構(gòu)中的數(shù)據(jù)。它們只能通過使用Fluent提供的宏間接地訪問這些數(shù)據(jù)。另一方面,編譯式UDF沒有任何C編程語言或其它注意的求解器數(shù)據(jù)結(jié)構(gòu)的限制。
——————————
原文摘錄自網(wǎng)絡(luò),版權(quán)歸原作者所有
相關(guān)標(biāo)簽搜索:Fluent UDF簡(jiǎn)介 Fluent培訓(xùn) Fluent流體培訓(xùn) Fluent軟件培訓(xùn) fluent技術(shù)教程 fluent在線視頻教程 fluent資料下載 fluent分析理論 fluent化學(xué)反應(yīng) fluent軟件下載 UDF編程代做 Fluent、CFX流體分析 HFSS電磁分析