Fluent UDF為所欲為的后門

大家都知道,Fluent UDF是基于C語言進行編程的。

C語言數據類型主要有整型int、浮點型float、指針*、數組array[]、結構體struct等。正常來說,既然UDF是以C語言進行編程的,那么UDF中的數據類型也應該是這幾種才對,而不能無中生有搞出其他數據類型來。

UDF常用的數據類型如下:

1. 實數(real):

實數是Fluent UDF中最常用的數據類型之一,用于存儲浮點數值。實數通常用于定義物理量,如速度、壓力、溫度等。具體是單精度還是雙精度,取決于Fluent軟件打開界面有沒有勾選雙精度。

2. cell_t:

cell_t是一個代表單元的整數據類型。在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\n", volume);

  end_c_loop(c, thread)

}

3. face_t:

face_t是一個代表面的整數據類型。在Fluent中,面通常指的是單元的表面,也就是單元之間的接口。face_t類型用于訪問面的幾何和物理特性。

Fluent UDF為所欲為的后門的圖1

4. Thread:

Thread是ANSYS Fluent中的一個非常重要的結構體數據類型。在Fluent UDF中,Thread經常用于訪問單元和面,以及定義物理量和邊界條件等。

5. Domain:

Domain是一個代表整個計算域的結構體數據類型。它包含了所有的Thread,每個Thread又包含了一組單元和面。在Fluent UDF中,Domain經常用于定義物理量、邊界條件和求解器選項等。例如,可以使用Domain中的函數來定義流體的初始條件和邊界條件。

Fluent UDF為所欲為的后門的圖2

盡管UDF使用如cell_t等特殊字符來聲明變量,但是其本質還是C語言常用的數據類型。

比如上面提到的Thread和Domain都是結構體類型,其中可能包含很多數據變量,如cell,face等

而比較有意思的是cell_t和face_t數據類型,cell_t可以用來聲明網格cell,face_t用來聲明face,但是他們竟然是整型變量!?。。?/p>

這引出來很多有意思的問題:

1. 既然cell_t聲明的是整型變量,那聲明語句cell_t c中的c就是一個整數,根本不是什么特別神秘的網格,其實就是一個整型變量。

 2. begin_c_loop(c, thread)這個語句什么意思??循環遍歷網格,如果c是一個整型變量,那么其實這個語句就類似于for循環,而其中的c只是循環變量。

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遍歷網格順序是什么??

之前測試過UDF遍歷網格的順序,也得出來了結論,現在看來是錯誤的。UDF遍歷網格的順序很簡單,就是c從小到大遍歷,既不按照x軸坐標,也不按照y軸坐標

Fluent UDF為所欲為的后門的圖3

4. 每個網格都有一個編號,既然這樣,只要知道了特定網格的編號,使用UDF似乎可以違背任何物理規律,為所欲為????

Fluent UDF為所欲為的后門的圖4

為了方便大家學習交流,我創建了QQ群:975634031,大家可以在其中討論相關的問題,同時我會將所有文章的源文件都放到QQ群中,還會放一些其它的學習文件。歡迎大家加入。

登錄后免費查看全文
立即登錄
App下載
技術鄰APP
工程師必備
  • 項目客服
  • 培訓客服
  • 平臺客服

TOP

2
3