四十九、Fluent UDF編譯正確的流程
很多同學(xué)會(huì)在群里面問(wèn)一些UDF編譯的問(wèn)題,特此寫(xiě)一篇文章詳細(xì)說(shuō)明一下對(duì)UDF進(jìn)行編譯的正確流程。
1. UDF正常編譯流程
第一步:配置環(huán)境變量,參考公眾號(hào)文章十.Fluent環(huán)境變量的配置
第二步:驗(yàn)證環(huán)境變量是否成功
第三步:進(jìn)行UDF編譯
?
2. 配置環(huán)境變量
2.1 編譯型VS解釋型
推薦大家使用編譯型UDF
?
有些同學(xué)為了方便省事,想直接用解釋型UDF,這樣就不用配置環(huán)境變量了。解釋型的UDF與編譯型UDF在UDF的編寫(xiě)上沒(méi)有任何不同,只是將UDF加載到Fluent中的方式有所不同。
解釋型的UDF:運(yùn)算速度慢、不需要C語(yǔ)言編譯器、只能使用預(yù)定義的宏、只能使用C語(yǔ)言書(shū)寫(xiě)
?
對(duì)于簡(jiǎn)單的UDF,可以使用解釋型的UDF。但是當(dāng)你的UDF涉及到比較高級(jí)的宏,解釋型UDF是識(shí)別不了的,比如BOUNDARY_FACE_GEOMETRY、PRINCIPAL_FACE_P、Error等
編譯型UDF:運(yùn)算速度快、可以使用C或C++語(yǔ)言書(shū)寫(xiě)、通用性強(qiáng)。
一句話,解釋型不能通過(guò)的UDF,編譯型有可能通過(guò);但編譯型不能通過(guò)的UDF,解釋型一定不能通過(guò)。
(一句話,東廠管得了的我要管,東廠管不了的我更要管,先斬后奏,皇權(quán)特許!這就是西廠,夠不夠清楚?)
2. 驗(yàn)證環(huán)境變量是否成功
找一個(gè)一定沒(méi)問(wèn)題的UDF,編譯一下看是否通過(guò)。如果沒(méi)有任何error信息,那就說(shuō)明環(huán)境變量配置成功了。
沒(méi)問(wèn)題的UDF如何找:UDF手冊(cè)中的UDF肯定沒(méi)問(wèn)題,找一個(gè)最簡(jiǎn)單的就行,這里我提供一個(gè):
#include "udf.h"
DEFINE_PROPERTY(density_air, c, t)//空氣密度
{
real density;
density = 1.0;
return density;
}
直接新建txt文件,將上面代碼復(fù)制,然后將.txt改為.c即可。也可以從文章后面的鏈接中直接獲取UDF文件
什么樣的信息算是error?:我們先假設(shè)UDF一定沒(méi)問(wèn)題,如果Source Files選擇了這個(gè)UDF,點(diǎn)擊Build后,控制臺(tái)界面會(huì)生成一堆亂碼信息,直接點(diǎn)擊load,如果彈出下圖,那大概率就是環(huán)境變量沒(méi)有配置成功。
?
這種方法判斷的前提是UDF沒(méi)有任何問(wèn)題。
3. 進(jìn)行UDF編譯
在環(huán)境變量配置成功的情況下,再進(jìn)行自己書(shū)寫(xiě)的UDF的編譯。
這一步還可能會(huì)遇到很多問(wèn)題。由于環(huán)境變量已經(jīng)配置成功,因此遇到的問(wèn)題一定是UDF本身的問(wèn)題,可能是書(shū)寫(xiě)不規(guī)范,也可能是語(yǔ)法問(wèn)題。
?
還有可能,UDF編譯通過(guò),但是一點(diǎn)計(jì)算就會(huì)出現(xiàn)下圖這種錯(cuò)誤
或者出現(xiàn)received a fatal signal (aborted).
?
總之錯(cuò)誤總是千奇百怪,防不勝防。但當(dāng)使用的多了,會(huì)發(fā)現(xiàn)常見(jiàn)的錯(cuò)誤原因就那幾個(gè),多注意排查即可。這部分下篇文章會(huì)進(jìn)行敘述。
鏈接:https://pan.baidu.com/s/1A9daH9pPFxyTL1ElsKwqow
提取碼:h1uc
公眾號(hào):Fluent學(xué)習(xí)筆記
為了方便大家學(xué)習(xí)交流,我創(chuàng)建了QQ群:466988009,大家可以在其中討論相關(guān)的問(wèn)題,同時(shí)我會(huì)將所有文章的源文件都放到QQ群中,還會(huì)放一些其它的學(xué)習(xí)文件。歡迎大家加入。
?