Fluent UDF【16】:通用宏[1]【轉(zhuǎn)發(fā)】

2017-07-05  by:CAE仿真在線  來源:互聯(lián)網(wǎng)

有人留言說UDF專題好多內(nèi)容是翻譯自幫助文檔,事實的確是這樣的。UDF本沒有太多需要介紹的內(nèi)容,各位學(xué)習(xí)UDF的朋友們要養(yǎng)成查UDF文檔的好習(xí)慣,沒事兒多看看C語言,多動手練習(xí)。編程技能還是要靠不斷地練習(xí)和總結(jié),程序代碼也要靠不斷地修改和優(yōu)化。

從本期開始,UDF專題進入攻堅階段。本期介紹UDF中的通用宏。

Fluent UDF提供了一些通用宏,用于控制Fluent在使用過程中的一些行為,一些比較常用的通用宏包括:

  • DEFINE_ADJUST:用于操縱變量

  • DEFINE_DELTAT:用于調(diào)整時間步長

  • DEFINE_EXECUTE_AT_END:在迭代完成后執(zhí)行操作

  • DEFINE_EXECUTE_AT_EXIT:在Fluent關(guān)閉時執(zhí)行操作

  • DEFINE_EXECUTE_FROM_GUI:實現(xiàn)在用戶自定義界面中執(zhí)行操作

  • DEFINE_EXECUTE_ON_LOADING:加載UDF時執(zhí)行一些操作

  • DEFINE_EXECUTE_AFTER_CASE/DATA:讀取Case文件后執(zhí)行操作

  • DEFINE_INIT:初始化

  • DEFINE_ON_DEMAND:異步執(zhí)行一些操作

  • DEFINE_REPORT_DEFINITION_FN:為用戶定義的報告返回值

  • DEFINE_RW_FILE:讀寫文件

  • DEFINE_RW_HDF_FILE:讀寫HDF文件

1

DEFINE_ADJUST

可以利用DEFINE_ADJUST宏調(diào)整或控制一些不作為調(diào)用參數(shù)的變量。例如用戶可以使用DEFINE_ADJUST修改流動參數(shù)(如速度、壓力等),也可以計算某些標(biāo)量在全域的積分量,甚至可以基于計算結(jié)果調(diào)整邊界條件。DEFINE_ADJUST宏在每一個迭代步被執(zhí)行,并且在每一個迭代中傳輸方程求解之前被調(diào)用。

  • 宏形式:DEFINE_ADJUST(name , d)

  • 宏參數(shù):symbol name, Domain *d

  • 返回值:無返回值

  • 調(diào)用形式:解釋或編譯

下面是一個簡單的案例,其利用DEFINE_ADJUST宏在每一步迭代過程中計算區(qū)域內(nèi)的湍流耗散率,計算結(jié)果顯示在console中。

#include "udf.h" DEFINE_ADJUST(my_adjust,d) { Thread *t; /* Integrate dissipation. */ real sum_diss=0.; cell_t c; thread_loop_c(t,d) { begin_c_loop(c,t) { sum_diss += C_D(c,t)* C_VOLUME(c,t); } end_c_loop(c,t) } printf("總耗散率: %g\n", sum_diss); }

DEFINE_ADJUST宏編譯或解釋后,可以通過User Defined標(biāo)簽頁下的Function Hooks…工具按鈕來加載。如下圖所示。

Fluent UDF【16】:通用宏[1]【轉(zhuǎn)發(fā)】fluent培訓(xùn)的效果圖片1

選擇此工具按鈕后彈出UDF加載對話框,如下圖所示。

Fluent UDF【16】:通用宏[1]【轉(zhuǎn)發(fā)】fluent培訓(xùn)的效果圖片2

選擇Adjust后的Edit…按鈕,彈出Adjust Functions對話框,如下圖所示,選擇列表框中的宏,選擇Add按鈕將其從左側(cè)列表框中加載至右側(cè)列表框,點擊OK按鈕確認(rèn)操作并關(guān)閉對話框。

Fluent UDF【16】:通用宏[1]【轉(zhuǎn)發(fā)】fluent培訓(xùn)的效果圖片3

這樣,DEFINE_ADJUST宏就被被掛載到Fluent中,在每一次迭代時都會調(diào)用。

2

DEFINE_DELTAT

DEFINE_DELTAT宏主要用于在瞬態(tài)求解過程中控制時間步長。需要注意的是:此宏只能用于Time Stepping Method為Adaptive時。若為默認(rèn)的Fixed,則會出錯。如下圖所示。

Fluent UDF【16】:通用宏[1]【轉(zhuǎn)發(fā)】fluent培訓(xùn)的效果圖片4

  • 宏形式:DEFINE_DELTAT(name , d)

  • 宏參數(shù):symbol name, Domain *d

  • 返回值:real

  • 調(diào)用形式:解釋或編譯

如下例程為調(diào)整時間步長,當(dāng)計算時間小于0.5s時,采用時間步長0.1s,其他時刻時間步長采用0.2。

#include "udf.h" DEFINE_DELTAT(mydeltat,d) { real time_step; real flow_time = CURRENT_TIME; if (flow_time < 0.5) time_step = 0.1; else time_step = 0.2; return time_step; }

解釋或編譯UDF后,此宏的加載方式為:

  • 選擇Run Calculation樹形節(jié)點后,選擇Time Stepping MethodAdaptive。

  • 點選按鈕Settings…,如下圖所示。

Fluent UDF【16】:通用宏[1]【轉(zhuǎn)發(fā)】fluent培訓(xùn)課程圖片5

  • 在彈出的設(shè)置對話框中,設(shè)置User-Defined Time Step為所編譯的UDF,如下圖所示。點擊OK按鈕掛載宏。

Fluent UDF【16】:通用宏[1]【轉(zhuǎn)發(fā)】fluent培訓(xùn)課程圖片6

3

DEFINE_ON_DEMAND

此宏由用戶手動調(diào)用執(zhí)行,而非Fluent自動調(diào)用。

  • 宏形式:DEFINE_ON_DEMAND(name )

  • 宏參數(shù):symbol name

  • 返回值:沒有任何返回值

  • 調(diào)用形式:解釋或編譯

此宏的參數(shù)中并無任何Fluent傳入的數(shù)據(jù),因此如果是獲取計算域中的數(shù)據(jù),則需要利用Get_Domain先獲取對應(yīng)區(qū)域的Domain結(jié)構(gòu)。

例如下面的實例計算了一個溫度函數(shù):

Fluent UDF【16】:通用宏[1]【轉(zhuǎn)發(fā)】fluent培訓(xùn)課程圖片7

并將值賦給UDM。

#include "udf.h" DEFINE_ON_DEMAND(on_demand_calc) { Domain *d; real tavg = 0.; real tmax = 0.; real tmin = 0.; real temp,volume,vol_tot; Thread *t; cell_t c; d = Get_Domain(1); thread_loop_c(t,d) { begin_c_loop(c,t) { volume = C_VOLUME(c,t); temp = C_T(c,t); if (temp < tmin || tmin == 0.) tmin = temp; if (temp > tmax || tmax == 0.) tmax = temp; vol_tot += volume; tavg += temp*volume; } end_c_loop(c,t) tavg /= vol_tot; begin_c_loop(c,t) { temp = C_T(c,t); C_UDMI(c,t,0) = (temp-tmin)/(tmax-tmin); } end_c_loop(c,t) } }

此宏編譯或解釋后,可通過User Defined標(biāo)簽頁下按鈕Execute on Demand…加載,如下圖所示。

Fluent UDF【16】:通用宏[1]【轉(zhuǎn)發(fā)】fluent分析案例圖片8

加載UDF后如下圖所示。

Fluent UDF【16】:通用宏[1]【轉(zhuǎn)發(fā)】fluent分析案例圖片9

4

DEFINE_RW_FILE

利用DEFINE_RW_FILE宏可以向case或data文件寫入信息,或者從case和data文件中讀取信息。

  • 宏形式:DEFINE_RW_FILE(name,fp )

  • 宏參數(shù):symbol name, FILE fp

  • 返回值:沒有任何返回值

  • 調(diào)用形式:解釋或編譯

在宏中可以利用fscanf函數(shù)讀取文件中的信息,也可以利用fprintf函數(shù)向文件寫入信息。如下例程可以向data文件中寫入DEFINE_ADJUST宏調(diào)用的次數(shù),同時從data文件中讀取調(diào)用的次數(shù)。

#include "udf.h" int kount = 0; /* define global variable kount */ DEFINE_ADJUST(demo_calc,d) { kount++; printf("kount = %d\n",kount); } DEFINE_RW_FILE(writer,fp) { printf("Writing UDF data to data file...\n"); fprintf(fp,"%d",kount); /* write out kount to data file */ } DEFINE_RW_FILE(reader,fp) { printf("Reading UDF data from data file...\n"); fscanf(fp,"%d",&kount); /* read kount from data file */ }

此宏的加載與DEFINE_ADJUST宏相同,也在User-Defined Function Hooks對話框中。

Fluent UDF【16】:通用宏[1]【轉(zhuǎn)發(fā)】fluent分析案例圖片10

下期結(jié)合案例具體講這四個宏的用法。

Fluent UDF【16】:通用宏[1]【轉(zhuǎn)發(fā)】fluent分析案例圖片11

Fluent UDF【16】:通用宏[1]【轉(zhuǎn)發(fā)】fluent圖片12

困了~


轉(zhuǎn)自公眾號:胡坤 CFD仿真之道

開放分享:優(yōu)質(zhì)有限元技術(shù)文章,助你自學(xué)成才

相關(guān)標(biāo)簽搜索:Fluent UDF【16】:通用宏[1]【轉(zhuǎn)發(fā)】 Fluent培訓(xùn) Fluent流體培訓(xùn) Fluent軟件培訓(xùn) fluent技術(shù)教程 fluent在線視頻教程 fluent資料下載 fluent分析理論 fluent化學(xué)反應(yīng) fluent軟件下載 UDF編程代做 Fluent、CFX流體分析 HFSS電磁分析 

編輯
在線報名:
  • 客服在線請直接聯(lián)系我們的客服,您也可以通過下面的方式進行在線報名,我們會及時給您回復(fù)電話,謝謝!
驗證碼

全國服務(wù)熱線

1358-032-9919

廣州公司:
廣州市環(huán)市中路306號金鷹大廈3800
電話:13580329919
          135-8032-9919
培訓(xùn)QQ咨詢:點擊咨詢 點擊咨詢
項目QQ咨詢:點擊咨詢
email:kf@1cae.com