最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

五十八、Fluent UDF調(diào)節(jié)宏ADJUST

2023-05-26 21:49 作者:Dearanwen  | 我要投稿

1. ADJUST的適用性



DEFINE_ADJUST是一個(gè)通用宏,可用于調(diào)整或修改未作為參數(shù)傳遞的Fluent變量。


也就是說(shuō)DEFINE_ADJUST與之前的DEFINE_PROFILE和DEFIEN_PROPERTY不同,這兩個(gè)宏有特殊的目的,比如用于邊界條件或者用于材料物性。


DEFINE_ADJUST沒(méi)有這種特殊的目的性,它只是用于調(diào)節(jié)或者傳遞某些參數(shù),它可以實(shí)現(xiàn)通用的功能。舉個(gè)例子,DEFINE_PROFILE和DEFIEN_PROPERTY類似于語(yǔ)文和數(shù)學(xué)課代表,只在語(yǔ)文或者數(shù)學(xué)課堂上發(fā)揮作用,而DEFINE_ADJUST更像是班長(zhǎng),雖然不是課代表,但是卻能夠協(xié)調(diào)整個(gè)班級(jí)。


比如使用DEFINE_ADJUST宏可以計(jì)算出口流量的平均值,然后賦值給DEFINE_PROFILE宏,可以只定位某些特殊邊界或者網(wǎng)格進(jìn)行處理,甚至可以強(qiáng)制修改物理量(盡管這樣會(huì)造成不收斂)。



2. ADJUST宏的用法


DEFINE_ADJUST (name, d)

name? ? ? ? ? ? ? ? ? ? ? ? 宏的名稱,如ergouzi

d? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?計(jì)算域Domain

return? ? ? ? ? ? ? ? ? ? ? ? void


ADJUST宏適用靈活性很強(qiáng),因此參數(shù)很少,很多必要的東西需要根據(jù)自己的情況編寫代碼。ADJUST宏每個(gè)迭代步執(zhí)行一次,即使是瞬態(tài)也是每迭代步執(zhí)行


name表示宏的名稱;d為計(jì)算域,為此宏從fluent傳遞給用戶的一個(gè)參數(shù),可以直接使用。所謂計(jì)算域即fluent中的cell zone conditions。d實(shí)際上是一個(gè)結(jié)構(gòu)體類似的數(shù)據(jù),其中包含了大量的信息,使用時(shí)需要一層一層的獲取。


貼個(gè)ChatGPT給的解釋(其實(shí)這種解釋并不夠清楚):


此宏不返回任何內(nèi)容,如果需要從此宏中獲取一些數(shù)據(jù),需要配合使用UDM宏。



3. ADJUST宏舉例





3.1計(jì)算域物理量求和


下面的UDF,命名為my_adjust,計(jì)算了整個(gè)計(jì)算域的湍動(dòng)能耗散率。


#include "udf.h"

DEFINE_ADJUST(my_adjust,d)

{

????Thread *t;

????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)

????}

}


對(duì)代碼解釋一下:

Thread *t;//使用Thread聲明的變量都被稱為線程,線程也是一種結(jié)構(gòu)體數(shù)據(jù)類型,包含大量的數(shù)據(jù)。實(shí)際上就是一系列cell和face的組合體。


cell_t c;//聲明網(wǎng)格變量,整型,這個(gè)之前的文章提過(guò)多次,不細(xì)說(shuō)


thread_loop_c(t,d)//這種宏只要帶關(guān)鍵字loop,就說(shuō)明這是一個(gè)循環(huán);怎么循環(huán)的呢?后面的括號(hào)中兩個(gè)參數(shù)t和d,基本的原則就是在后一個(gè)參數(shù)中循環(huán)前一個(gè)參數(shù)。比如這里應(yīng)該是在d中循環(huán)t。


begin_c_loop(c,t)//利用上面的規(guī)則,這句話也是一個(gè)循環(huán),在t中循環(huán)c,因此在 begin_c_loop(c,t)循環(huán)中的語(yǔ)句達(dá)到了c的層面,語(yǔ)句都是對(duì)cell進(jìn)行操作。end_c_loop(c,t)與begin_c_loop(c,t)配套使用,表示循環(huán)結(jié)束。


sum_diss +=//+=是c語(yǔ)言的一種簡(jiǎn)寫方式,等效于sum_diss =sum_diss +某個(gè)值。這就是一種迭加求和語(yǔ)句


C_D(c,t)//這種宏的基本特點(diǎn)以C_開頭,表示是網(wǎng)格宏。此宏可獲取湍動(dòng)能耗散率;C_VOLUME(c,t)也是網(wǎng)格宏,可獲取cell的體積。




3.2 獲取face中心坐標(biāo)


下面的宏命名為f_centroids,用于獲取face的中心坐標(biāo)

#include "udf.h"

DEFINE_ADJUST(f_centroids, domain)

{

????real FC[2];

????face_t f;

????int ID = 1;

????Thread *thread = Lookup_Thread(domain, ID);

????begin_f_loop(f, thread)

????{

????????F_CENTROID(FC,f,thread);

????}

????end_f_loop(f,thread)

}


代碼解釋

real FC[2];聲明了一個(gè)數(shù)值變量,更為常見(jiàn)的寫法是real FC[ND_ND],在二維情況下ND_ND=2,三維情況ND_ND=3


Thread *thread = Lookup_Thread(domain, ID);//聲明線程thread,其中Lookup_Thread(domain, ID)是查找線程的宏,表示在domain域中查找ID為1的thread。


注:UDF中只要是ID,都可以在fluent界面直接看到,比如下圖outlet的ID編號(hào)等于3。



begin_f_loop(f, thread)//按照上個(gè)例子的規(guī)則,這個(gè)宏是一個(gè)循環(huán),表示對(duì)thread中的所有f進(jìn)行遍歷。實(shí)際上就是循環(huán)遍歷ID編號(hào)為1的thread中的所有face。


?F_CENTROID(FC,f,thread);//以F_開頭的宏,face宏,可以獲取face的物理量,比如速度、壓力等。F_CENTROID表示獲取face的中心坐標(biāo),將其賦值給FC數(shù)組。


如果要取出坐標(biāo)值,可令x=FC[0];y=FC[1],這里的x和y需要聲明變量;



4. UDF的編譯與加載

編譯型UDF界面如下圖,上面有兩個(gè)框Source Files和Header Files,Source Files表示源文件,就是編寫好的UDF文件;



Header Files表示頭文件,只有當(dāng)UDF很復(fù)雜,為了使UDF模塊化才需要從這里導(dǎo)入頭文件。UDF自帶了很多頭文件如udf.h,但是這些頭文件不需要從這里導(dǎo)入。


首先點(diǎn)擊Add,選中編寫好的UDF后導(dǎo)入,然后點(diǎn)擊Build,如果UDF沒(méi)有問(wèn)題,則不會(huì)出現(xiàn)任何報(bào)錯(cuò)信息(只要控制界面有error,則說(shuō)明有問(wèn)題)。


在沒(méi)有報(bào)錯(cuò)的前提下,點(diǎn)擊Load,則UDF加載成功。關(guān)于UDF報(bào)錯(cuò)問(wèn)題,建議大家看看文章四十九、五十和五十一。如果沒(méi)有報(bào)錯(cuò),控制臺(tái)應(yīng)該會(huì)顯示下面的信息,其中就有各種DEFINE宏的name



5. UDF的使用


與之前介紹的PROPERTY宏不同,ADJUST宏需要hook使用。如果沒(méi)有hook,即使ADJUST宏加載成功,也不能調(diào)用。


點(diǎn)擊Function Hooks,會(huì)彈出所有需要hooks界面


下面的圖中包含很多宏,即當(dāng)使用這些DEFINE宏時(shí),都必須hook才能正常使用。比如DEFINE_EXECUTE_AT_END、DEFINE_INIT等,對(duì)于ADJUST宏,需要先點(diǎn)擊Adjust宏的Edit進(jìn)行設(shè)置界面


選中編寫好的UDF宏名稱,點(diǎn)擊Add,宏名稱將從左欄轉(zhuǎn)入到右欄,單擊OK,則表示hook成功。當(dāng)fluent計(jì)算時(shí),ADJUST宏也會(huì)被執(zhí)行






公眾號(hào):Fluent學(xué)習(xí)筆記。為了方便大家學(xué)習(xí)交流,我創(chuàng)建了QQ群:466988009,大家可以在其中討論相關(guān)的問(wèn)題,同時(shí)我會(huì)將所有文章的源文件都放到QQ群中,還會(huì)放一些其它的學(xué)習(xí)文件。歡迎大家加入。







五十八、Fluent UDF調(diào)節(jié)宏ADJUST的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
通海县| 乌鲁木齐县| 三台县| 曲沃县| 宣汉县| 福清市| 封丘县| 安义县| 祁连县| 绥滨县| 兴国县| 乃东县| 北川| 邹平县| 广灵县| 三江| 柞水县| 定州市| 达孜县| 盐津县| 临沧市| 延安市| 惠水县| 六安市| 沙河市| 会同县| 墨竹工卡县| 郎溪县| 曲沃县| 大庆市| 新巴尔虎左旗| 洛川县| 眉山市| 峨眉山市| 东源县| 陕西省| 宁城县| 柘城县| 金湖县| 古田县| 城步|