Fluent UDF為所欲為的后門
大家都知道,F(xiàn)luent UDF是基于C語言進(jìn)行編程的。
C語言數(shù)據(jù)類型主要有整型int、浮點(diǎn)型float、指針*、數(shù)組array[]、結(jié)構(gòu)體struct等。正常來說,既然UDF是以C語言進(jìn)行編程的,那么UDF中的數(shù)據(jù)類型也應(yīng)該是這幾種才對,而不能無中生有搞出其他數(shù)據(jù)類型來。
UDF常用的數(shù)據(jù)類型如下:
1. 實(shí)數(shù)(real):
實(shí)數(shù)是Fluent UDF中最常用的數(shù)據(jù)類型之一,用于存儲浮點(diǎn)數(shù)值。實(shí)數(shù)通常用于定義物理量,如速度、壓力、溫度等。具體是單精度還是雙精度,取決于Fluent軟件打開界面有沒有勾選雙精度。
2. cell_t:
cell_t是一個代表單元的整數(shù)據(jù)類型。在Fluent中,單元通常指的是三維空間中的體單元。cell_t類型用于訪問單元的幾何和物理特性。
#include "udf.h"
DEFINE_ON_DEMAND(cell_volume)
{
? ? Domain *domain;
? ? Thread *thread;
? ? cell_t c;
? ? domain = Get_Domain(1); /* 獲取計算域 */
? ? thread = Lookup_Thread(domain, 1); /* 獲取Thread */
? ? /* 遍歷單元并計算體積 */
? ? begin_c_loop(c, thread)
? ? ? ? real volume = C_VOLUME(c, thread);
? ? ? ? Message0("單元體積為: %lf ", volume);
? ? end_c_loop(c, thread)
}
3. face_t:
face_t是一個代表面的整數(shù)據(jù)類型。在Fluent中,面通常指的是單元的表面,也就是單元之間的接口。face_t類型用于訪問面的幾何和物理特性。
4. Thread:
Thread是ANSYS Fluent中的一個非常重要的結(jié)構(gòu)體數(shù)據(jù)類型。在Fluent UDF中,Thread經(jīng)常用于訪問單元和面,以及定義物理量和邊界條件等。
5. Domain:
Domain是一個代表整個計算域的結(jié)構(gòu)體數(shù)據(jù)類型。它包含了所有的Thread,每個Thread又包含了一組單元和面。在Fluent UDF中,Domain經(jīng)常用于定義物理量、邊界條件和求解器選項(xiàng)等。例如,可以使用Domain中的函數(shù)來定義流體的初始條件和邊界條件。
盡管UDF使用如cell_t等特殊字符來聲明變量,但是其本質(zhì)還是C語言常用的數(shù)據(jù)類型。
比如上面提到的Thread和Domain都是結(jié)構(gòu)體類型,其中可能包含很多數(shù)據(jù)變量,如cell,face等
而比較有意思的是cell_t和face_t數(shù)據(jù)類型,cell_t可以用來聲明網(wǎng)格cell,face_t用來聲明face,但是他們竟然是整型變量!?。?!
這引出來很多有意思的問題:
1. 既然cell_t聲明的是整型變量,那聲明語句cell_t c中的c就是一個整數(shù),根本不是什么特別神秘的網(wǎng)格,其實(shí)就是一個整型變量。
?2. begin_c_loop(c, thread)這個語句什么意思??循環(huán)遍歷網(wǎng)格,如果c是一個整型變量,那么其實(shí)這個語句就類似于for循環(huán),而其中的c只是循環(huán)變量。
begin_c_loop_int(c, t)
{
????Message("?c=%d??", ?c);
????C_UDMI(c, t, 0) =c;
}
end_c_loop_int_ext(c, t)
上面的代碼會輸出什么??c會從小到大輸出0,1,2,3······
3. UDF遍歷網(wǎng)格順序是什么??
之前測試過UDF遍歷網(wǎng)格的順序,也得出來了結(jié)論,現(xiàn)在看來是錯誤的。UDF遍歷網(wǎng)格的順序很簡單,就是c從小到大遍歷,既不按照x軸坐標(biāo),也不按照y軸坐標(biāo)
4. 每個網(wǎng)格都有一個編號,既然這樣,只要知道了特定網(wǎng)格的編號,使用UDF似乎可以違背任何物理規(guī)律,為所欲為????
公眾號:Fluent學(xué)習(xí)筆記。為了方便大家學(xué)習(xí)交流,我創(chuàng)建了QQ群:466988009,大家可以在其中討論相關(guān)的問題,同時我會將所有文章的源文件都放到QQ群中,還會放一些其它的學(xué)習(xí)文件。歡迎大家加入。