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