Fluent UDF中根据zone的名字获取ID
生活随笔
收集整理的這篇文章主要介紹了
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的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 绝大多数交互式电子白板与计算机通过链接,
- 下一篇: developerWorks 中国