九、Fluent用戶自定義函數(shù)(UDF)基礎(chǔ)(2)-DEFINE_PROFILE
1. 簡(jiǎn)介
今天我們接著說Fluent UDF功能,我們經(jīng)常使用的UDF宏主要有以下幾種:
DEFINE_PROFILE:???????????定義模型邊界
DEFINE_ADJUST:? ? ? ? ? ? ? ?用于協(xié)調(diào)計(jì)算過程中物理量
DEFINE_INIT:? ? ? ? ? ? ? ? ?初始化宏,用于自定義初始化
DEFINE_PROPERTY:??????????定義材料物性
上述的幾種宏基本上無論使用什么物理模型都會(huì)用到,還有部分宏是在特定的模型下才會(huì)使用,如使用DPM模型時(shí)用DEFINE_DPM_SOURCE宏來定義DPM源項(xiàng),而普通的物理模型下源項(xiàng)通過DEFINE_SOURCE宏定義即可。
?
今天我們主要了解DEFINE_PROFILE宏的使用,DEFINE_PROFILE宏可以用來定義邊界條件,當(dāng)邊界條件比較復(fù)雜時(shí),如定義壁面溫度=f(y),即壁面溫度是y的函數(shù)可以使用DEFINE_PROFILE宏進(jìn)行定義。DEFINE_PROFILE宏可以用來定義的邊界物理量如下:
? velocity, pressure, temperature
? mass flux
? species mass fraction (species transport)(組分質(zhì)量分?jǐn)?shù),只在組分輸運(yùn)方程中可用)?
? volume fraction (multiphase models)(體積分?jǐn)?shù),在多相流中可用)?
? wall thermal conditions (temperature, heat flux, heat generation rate, heat transfer?coefficients, and external emissivity, etc.)
? wall roughness conditions()?
? wall shear and stress conditions
? wall adhesion contact angle壁面接觸角?(VOF multiphase model)
?
2.?模型及UDF代碼
下面我們通過一個(gè)實(shí)例對(duì)DEFINE_PROFILE宏做一個(gè)簡(jiǎn)單的應(yīng)用。如圖1所示,流體從IN邊界流入,從OUT邊界流出,IN邊界流體流速不是定值,而是隨著y軸發(fā)生變化。?
圖1.模型示意圖
流體流速in函數(shù)
? ? ? ? ? ? ??? ? ? ? ? ? ? ? ? ? ??(1)
接下來就是UDF的編寫了,先貼上代碼
1.?#include "udf.h"
2.?#include "math.h" ??//包含頭文件
3.?
4.?DEFINE_PROFILE(velocity, t, i) ?//邊界條件宏
5.?{
6.?????real x, y,xd[ND_ND]; ??//定義變量
7.?????face_t f; ?????????????//定義面指針
8.?????begin_f_loop(f, t) ????//對(duì)邊界面進(jìn)行循環(huán)
9.?????{
10.?????????F_CENTROID(xd, f, t); ??//獲取坐標(biāo)
11.?????????x = xd[0]; ?????????????//xd[0]表示x坐標(biāo),xd[1]表示y坐標(biāo)
12.?????????y = xd[1];
13.?????????F_PROFILE(f, t, i) = 2*y+1; ??//速度函數(shù)
14.?????}
15.?????end_f_loop(f, t)
16.?}
對(duì)于前兩行,是UDF所包含的頭文件,這兩行代碼是必寫的,其他的情況還需要增加其他的頭文件,如多相流時(shí),需要用到#include "sg_mphase.h"。
DEFINE_PROFILE(velocity, t, i)定義邊界宏,其中第一個(gè)參數(shù)velocity為這個(gè)宏的名字,可以任意取名;t即thread,表示指向邊界的線程,關(guān)于UDF中的face、cell、thread、domain這些概念,理解起來比較復(fù)雜,以后會(huì)逐漸提及。i標(biāo)識(shí)要定義的變量的索引。這里的t要和代碼中的t保持相同,如果進(jìn)行更改,其他地方的t也要相應(yīng)更改。而對(duì)i不必理會(huì)。
第6行,real是UDF中聲明變量的關(guān)鍵字,替代了C語言中的double這樣的關(guān)鍵字,但本質(zhì)是相同的。因此可以認(rèn)為就是real x, y=double x, y,即聲明了兩個(gè)變量,而xd[ND_ND]則是UDF中表示數(shù)組的方法,等同于C語言中的數(shù)組聲明。對(duì)于第7行,face_t表示聲明指針,只不過這個(gè)指針是指向面的,與此對(duì)應(yīng)的還有cell_t聲明網(wǎng)格指針。
第8行的begin_f_loop(f, t),可以理解為一個(gè)循環(huán)語句,中間的f表示對(duì)面進(jìn)行循環(huán),UDF中類似的語句有很多。后面的兩個(gè)參數(shù)f,t,實(shí)際上就是在t這個(gè)thread上對(duì)所以的f進(jìn)行循環(huán)。15行的end_f_loop(f, t)表示結(jié)束面循環(huán)
第10行的F_CENTROID(xd, f, t)表示獲取t線程上的f面的質(zhì)心,并賦值給數(shù)組xd。實(shí)際上就是獲取面的坐標(biāo)(x,y),并賦給xd。其中xd[0]表示x坐標(biāo),xd[1]表示y坐標(biāo)。因此11和12句就是將x坐標(biāo)賦值給x,將y坐標(biāo)賦值給y。
第13句的F_PROFILE(f, t, i) = 2*y+1是給邊界條件賦值的語句。這條語句F_PROFILE(f, t, i)表示要賦值的物理量,等于號(hào)之后的表示賦值函數(shù)。這條語句并沒有指出是在哪個(gè)邊界給什么物理量賦值,因此將這個(gè)UDF加載在哪個(gè)邊界什么物理量上就是給它賦值。
?
3.?FLUENT操作
1.?打開fluent,read-mesh,將mesh導(dǎo)入Fluent中。
2.?General界面保持默認(rèn),穩(wěn)態(tài)不考慮重力
圖2.General界面
3.?打開k-e湍流模型,能量方程不打開
圖3.湍流模型
4.?流體材料設(shè)置為空氣?
圖4.流體材料
5. 導(dǎo)入U(xiǎn)DF文件,一般有兩種方法可以將編寫好的C語言代碼導(dǎo)入到Fluent中。第一種是interpreted解釋型,如圖5,單擊interpreted,出現(xiàn)圖6的界面,單擊Browse選擇編寫好的代碼文件圖7,單擊OK,返回圖8界面,單擊interpret。此時(shí)如果控制窗口沒有出現(xiàn)Error字樣,說明UDF沒有問題。
? ? ? ?還有另一種導(dǎo)入U(xiǎn)DF的方法-Compiled編譯型,編譯型方法導(dǎo)入U(xiǎn)DF需要首先配置好環(huán)境變量,然后與解釋型類似的操作。兩種方法的區(qū)別:解釋型相對(duì)簡(jiǎn)單很多,不必配置環(huán)境變量,同時(shí)計(jì)算過程中消耗內(nèi)存也較低,但當(dāng)UDF代碼比較復(fù)雜時(shí),或者用到一些高級(jí)宏時(shí),解釋型無法正常使用;編譯型需要配置環(huán)境變量,計(jì)算過程會(huì)消耗一定的內(nèi)存,但是對(duì)于任意的UDF都適用。這里由于UDF比較簡(jiǎn)單,我們使用解釋型即可
圖5.解釋型UDF
圖6.解釋型UDF導(dǎo)入文件
圖7.選擇UDF代碼
圖8.對(duì)UDF進(jìn)行解釋
圖9.控制窗口
6. 邊界條件設(shè)置,IN設(shè)置為velocity-inlet,OUT設(shè)置為pressure-outlet,wall_t、wall_b均設(shè)置為wall。
? ? ? ?當(dāng)導(dǎo)入U(xiǎn)DF后,雙擊IN邊界,單擊Velocity Magnitude后面的constant會(huì)多出來udf velocity,這里的velocity就是我們編寫的UDF,選擇udf velocity,IN邊界的速度就會(huì)按照代碼中的函數(shù)變化。其他邊界均保持默認(rèn)設(shè)置
? ? ? ?從這里我們可以看出,對(duì)于DEFINE_PROFILE邊界宏,UDF代碼中并沒有指定物理量,因此設(shè)置什么物理量邊界和自己的操作有關(guān)。如將我們寫好的速度函數(shù)代碼,設(shè)置到速度方向上,仍然是可以的,只不過物理意義發(fā)生了變化。
圖10.速度UDF加載
圖11.將速度UDF加載到速度Y方向上
7. 初始化:使用Hybrid Initialization進(jìn)行初始化。
圖12.初始化
8. 計(jì)算:設(shè)置計(jì)算步數(shù)為1000步,單擊calculate
圖13.Calculate
?
4.?結(jié)果
1.?通過后處理查看速度云圖?
圖14.速度云圖
2.?進(jìn)口y方向速度曲線圖
圖15.速度曲線圖顯示設(shè)置?
圖16.進(jìn)口y方向速度曲線圖
?
?
?
喜歡的話,就點(diǎn)個(gè)贊分享一下呢,你的鼓勵(lì)就是我的動(dòng)力哦?。?!
?