日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Fluent UDF中根据zone的名字获取ID

發布時間:2023/12/29 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Fluent UDF中根据zone的名字获取ID 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Fluent UDF中根據zone的名字獲取ID

Fluent UDF中經常用到thread*類型的指針,一般可以通過如下函數來獲取。

Lookup_Thread(Domain*domain, int id)

其中id是邊界面的ID或者cell區域的ID,如下圖中outlet邊界的ID是2。

?遺憾的是,網格載入Fluent后,其ID都是無法事先確定的。很多朋友只有在UDF源碼開頭用如下代碼根據事后查到的ID手動定義,每次網格一變化又得重新在源碼里面修改,重新編譯,十分影響通用性。

#define OUTLET_ID 2 //每次不同網格需要根據情況修改后重新編譯 Domain* domain=Get_Domain(1); //非多相流或多相流混合物的domain永遠是1 Thread*tf=Lookup_Thread(domain, OUTLET_ID);

有沒有一種辦法能夠一次性源碼編譯達到適應于所有網格呢?答案當然是肯定的,你可以通過zone名字來獲取其ID號,然后畫網格的時候只要取相同名字即可。實現該功能的函數源代碼如下(插件VC++ UDF Studio 2022R1學術版上編譯通過)

#include "udf.h" #include "SuperUdfExtension.h" //VC++ UDF Studio自帶的擴展庫頭文件,具體參考該軟件中的編程手冊 #pragma comment(lib, "SuperUdfExtension.lib") //VC++ UDF Studio自帶的擴展庫的lib文件 int GetZoneIdByName(CString zoneName) //適用于所有Fluent版本 {int returnID=-1;Domain*domain=Get_Domain(1);CString strCurrentFluentVersion;strCurrentFluentVersion.Format("%d.%d", RampantReleaseMajor, RampantReleaseMinor);//格式化當前Fluent版本為字符串形式double fCurrentFluentVersion = atof(strCurrentFluentVersion.GetBuffer()); //當前Fluent版本轉為double類型if(fCurrentFluentVersion<=19.2) // 對于Fluent6.3-19.2,只能調用VC++ UDF Studio擴展庫{SuperUdf_Initialize(AfxGetInstanceHandle()); //調用VC++ UDF Studio擴展庫中任何函數之前必須調用此初始化函數,具體參考該軟件中的編程手冊 #if !RP_NODEreturnID=SuperUdf_GetZoneIdByName(zoneName.GetBuffer()); //調用VC++ UDF Studio擴展庫中的SuperUdf_GetZoneIdByName函數,具體參考該軟件中的編程手冊 #endifhost_to_node_int_1(returnID);}else // 對于Fluent version >=19.3,有直接UDF函數可以實現{ Thread*tf;thread_loop_f(tf, domain) //對所有面的thread進行循環查找{if(0==zoneName.CompareNoCase(THREAD_NAME(tf))) //對比名字是否相同{returnID=THREAD_ID(tf);break;}} if(-1==returnID) //如果面的thread中無法找到匹配名字{Thread*tc;thread_loop_c(tc, domain) //對所有網格的thread進行循環查找{if(0==zoneName.CompareNoCase(THREAD_NAME(tc))) //對比名字是否相同{returnID=THREAD_ID(tc);break;}}}}return returnID; }DEFINE_EXECUTE_ON_LOADING(get_id, libudf) {int theID=GetZoneIdByName("inlet"); //根據邊界名字獲取其ID,如果返回-1表示找不到Message("the zone id of inlet is %d\n",theID); }

以上源代碼實現了通過zone名字來獲取其ID號的功能。對于Fluent19.3或更高版本,可以利用THREAD_NAME與需要的名字進行對比,匹配情況下用THREAD_ID獲得其ID。但對于Fluent19.2或更低版本, THREAD_NAME不起作用(可能Fluent的bug),我們只能依賴于插件VC++ UDF Studio中的拓展庫函數SuperUdf_GetZoneIdByName來實現。是時候拋棄傻傻的#define ID了。

總結

以上是生活随笔為你收集整理的Fluent UDF中根据zone的名字获取ID的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。