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




















