UDF使用指南-1_第1頁
UDF使用指南-1_第2頁
UDF使用指南-1_第3頁
UDF使用指南-1_第4頁
UDF使用指南-1_第5頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、UDF有多種功能,如:定制邊界條件,定義材料屬性,定義表面和體積反應率,定義Fluent輸運方程中的源項,用戶自定義標量輸運方程UDS中的源項擴散率函數(shù)等。1、 UDF基礎1、 Fluent的求解次序了解fluent的求解過程有助于理解UDF的調用過程,確定在給定的任意時間內哪些數(shù)據(jù)是當前的和有效的。對于不同的求解器,其求解次序是不一樣的。在分離式求解器求解過程中,用戶定義的初始化函數(shù)(使用DEFINE_INIT定義的)在迭代循環(huán)開始之前執(zhí)行。然后迭代循環(huán)開始執(zhí)行用戶定義的調整函數(shù)(使用DEFINE_ADJUST定義的)。接著,求解守恒方程,順序是從動量方程和后來的壓力修正方程到與特定計算相關

2、的附加標量方程。守恒方程之后,屬性被更新(包含用戶定義屬性)。這樣,如果模型涉及氣體定律,這時,密度將隨更新的溫度(和壓力、物質質量分數(shù))而被更新,進行收斂或者附加要求的迭代的檢查、循環(huán)或者繼續(xù)或者停止。在耦合求解器求解過程中,用戶定義的初始化函數(shù)(使用DEFINE_INIT定義的)在迭代循環(huán)開始之前執(zhí)行;然后迭代循環(huán)開始執(zhí)行用戶定義的調整函數(shù)(使用DEFINE_ADJUST定義的);接著,F(xiàn)luent求解連續(xù)、動量和(適合的地方)能量的控制方程及相關的物質輸運或矢量方程。其余的求解步驟與分離式求解器相同。2、 Fluent網格拓撲1 單元(cell):區(qū)域被分割成的控制體積2 單元中心(ce

3、ll center):Fluent中數(shù)據(jù)存儲的地方3 面(face):單元(二維或三維)的邊界4 邊(edge):面(三維)的邊界5 節(jié)點(node):網格點6 單元線索(cell thread):在其中分配了材料數(shù)據(jù)和源項的單元組7 面線索(face thread):在其中分配了邊界數(shù)據(jù)的面組8 節(jié)點線索(node thread):節(jié)點組9 區(qū)域(domain):由網格定義的所有節(jié)點、面和單元線索的組合3、 Fluent的數(shù)據(jù)類型在編寫UDF時,除了可以使用C語言數(shù)據(jù)類型外,還可以直接使用Fluent指定的與求解器數(shù)據(jù)相關的數(shù)據(jù)類型。常用的Fluent數(shù)據(jù)類型如下。cell_t是線索內單元標

4、示符的數(shù)據(jù)類型,是一個識別給定線索內單元的整數(shù)索引。face_t是線索內面標示符的數(shù)據(jù)類型,是一個識別給定線索內面的整數(shù)索引。Thread是單元或面的組合相關的數(shù)據(jù)容器。Node是單元或面的拐角相關的數(shù)據(jù)容器。Domain是Fluent中最高水平的數(shù)據(jù)結構,是一個與網格中所有節(jié)點、面和單元線索組合相關的數(shù)據(jù)容器。2、 UDF中訪問Fluent變量的宏(一)訪問單元的宏1、 訪問單元流體變量的宏在Fluent中可以用來訪問單元上流體變量的宏在表1中列出,注意加了_G、_RG、_M1和_M2這些下標的單元格溫度的宏,可以應用于表1中除單元格壓力(C_P)的所有求解器的變量中。這些下標表示的是矢量梯

5、度、改造的矢量梯度、前一次的步長和前兩次的步長。而對于單元格壓力,它的矢量梯度和相應的分量是使用C_DP得到的,而不是C_P_G。表1 在mem.h文件中的流體標量宏名稱(參數(shù))參數(shù)類型返回值C_T(c,t)cell_t c,Thread*t溫度C_T_G(c,t)cell_t c,Thread*t溫度梯度矢量C_T_G(c,t)icell_t c,Thread*t,inti溫度梯度矢量的分量C_T_RG(c,t)cell_t c,Thread*t改造后的溫度梯度矢量C_T_RG(c,t)icell_t c,Thread*t,inti改造后的溫度梯度矢量的分量C_T_M1(c,t)cell_t

6、 c,Thread*t溫度的前一次步長C_T_M2(c,t)cell_t c,Thread*t溫度的前二次步長C_P(c,t)cell_t c,Thread*t壓力C_DP(c,t)cell_t c,Thread*t壓力梯度矢量C_DP(c,t)icell_t c,Thread*t,inti壓力梯度矢量的分量C_U(c,t)cell_t c,Thread*tu方向的速度C_V(c,t)cell_t c,Thread*tv方向的速度C_W(c,t)cell_t c,Thread*tw方向的速度C_YI(c,t,i)cell_t c,Thread*t,inti物質質量分數(shù)C_K(c,t)cell_

7、t c,Thread*t湍流運動能C_D(c,t)cell_t c,Thread*t湍流運動能的分散速率(1) 可以在宏中加入下標_G來得到梯度矢量和其分量。例如,C_T_G(c,t)就是返回單元格的溫度梯度矢量。注意:只有當已經求解出包含這個變量的方程時才能得到梯度變量。例如,如果定義了一個關于能量的源程序,那么所編的UDF可以使用C_T_G讀寫單元格的溫度梯度,而不能使用C_T_G讀寫X方向的速度分量。而且,如果建立一個由使用者確定的方式轉移方程,那么就不能得到一部分的梯度了。這是因為求解器不斷地移走它不需要的數(shù)據(jù)??梢允褂孟旅娴姆椒▉碜柚勾鎯ζ麽尫庞洃洠喊l(fā)出文本命令save/set/ex

8、pert,然后對計算機提出的是否阻止暫時的求解器記憶釋放這一提問回答是,按照這種做法就可以保留所有的梯度數(shù)據(jù),但是這種計算需要更多的內存。(2) 在調用梯度矢量時把某一分量作為參數(shù),這樣就可以得到梯度分量了,參數(shù)0代表X方向的分量,1代表Y方向的分量,2代表Z方向的分量。例如,C_T_G(c,t)0就是返回溫度梯度X方向的分量.注意:在表1中,雖然只列出了溫度梯度和其分量求解的宏,但是卻可以擴展到除了壓力以外的所有變量中去,對于壓力只能按照表1中的方法使用C_DP來得到壓力梯度和其分量。(3) 和梯度一樣的方式,可以通過加RG的下標在宏中得到梯度向量和其分量。通過使用恰當?shù)恼麛?shù)作為參數(shù)來獲得想

9、要的矢量分量,參數(shù)0代表X方向的分量,1代表Y方向的分量,2代表Z方向的分量。當完成自己的插補計劃時可以使用改造過的梯度。改造過的溫度梯度和其分量在表1中列出了,同樣可以推廣到所有的變量。注意:改造過的梯度矢量和梯度矢量一樣都只有在梯度方程被求解出來時才可以得到。(4) 在表1中的宏中加入下標_M1就可以得到前一次步長時間下的變量的值,得到的這些數(shù)據(jù)可以在瞬態(tài)的模擬中使用。例如,C_T_M1(c,t),返回前一步時間下的單元格溫度的值。若在表1里宏的后面加上下標_M2就可以得到前兩次步長下的時間,這些數(shù)據(jù)可用于瞬態(tài)的模擬計算中。在表1中僅列出了溫度的前一次步長的求法,也可以擴展到其他的變量中去

10、。2、 訪問導數(shù)的宏表2 在mem.h文件中訪問導數(shù)個宏名稱(參數(shù))參數(shù)類型返回值C_DUDX(c,t)cell_t c,Thread*tU速度對x方向的導數(shù)C_DUDY(c,t)cell_t c,Thread*tU速度對y方向的導數(shù)C_DUDZ(c,t)cell_t c,Thread*tU速度對z方向的導數(shù)C_DVDX(c,t)cell_t c,Thread*tV速度對x方向的導數(shù)C_DVDY(c,t)cell_t c,Thread*tV速度對y方向的導數(shù)C_DVDZ(c,t)cell_t c,Thread*tV速度對z方向的導數(shù)C_DWDX(c,t)cell_t c,Thread*tW速度

11、對x方向的導數(shù)C_DWDY(c,t)cell_t c,Thread*tW速度對y方向的導數(shù)C_DWDZ(c,t)cell_t c,Thread*tW速度對z方向的導數(shù)3、 訪問材料性質的宏表3 在mem.h文件中訪問材料性質的宏名稱(參數(shù))參數(shù)類型返回值C_FMEAN(c,t)cell_t c,Thread*t第一次混合分數(shù)的平均值C_FMEAN2(c,t)cell_t c,Thread*t第二次混合分數(shù)的平均值C_FVAR(c,t)cell_t c,Thread*t第一次混合分數(shù)變量C_FVAR2(c,t)cell_t c,Thread*t第二次混合分數(shù)變量C_PREMIXC(c,t)cel

12、l_t c,Thread*t反應過程變量C_LAMFLAME SPEED(c,t)cell_t c,Thread*t層流焰速度C_CRITICAL STRAIN RATE(c,t)cell_t c,Thread*t臨界應變速度C_POLLUT(c,t,i)cell_t c,Thread*t,inti第i個污染物質的質量分數(shù)C_R(c,t)cell_t c,Thread*t密度C_MU L(c,t)cell_t c,Thread*t層流速度C_MU T(c,t)cell_t c,Thread*t湍流速度C_MU EFF(c,t)cell_t c,Thread*t有效粘度C_K_L(c,t)cel

13、l_t c,Thread*t熱傳導系數(shù)C_K_T(c,t)cell_t c,Thread*t湍流熱傳導系數(shù)C_K_EFF(c,t)cell_t c,Thread*t有效熱傳導系數(shù)C_CP(c,t)cell_t c,Thread*t確定的熱量C_RGAS(c,t)cell_t c,Thread*t氣體常數(shù)C_DIFF L(c,t,i,j)cell_t c,Thread*t,int i,int j層流物質的擴散率C_DIFF EFF(c,t,i)cell_t c,Thread*t,int i物質的有效擴散率C_ABS COEFF(c,t)cell_t c,Thread*t吸附系數(shù)C_SCAT CO

14、EFF(c,t)cell_t c,Thread*t擴散系數(shù)C_NUT(c,t)cell_t c,Thread*t湍流速度4、 訪問用戶自定義的單元標量和存儲器的宏表4 在mem.h文件中的可以為單元格訪問用戶定義的標量和存儲器的宏名稱(參數(shù))參數(shù)類型返回值C_UDSI(c,t,i)cell_t c,Thread*t,int i用戶定義的單元格標量C_UDSI M(c,t,i)cell_t c,Thread*t,int i前一次步長下用戶定義的單元格標量C_UDSI_DIFF(c,t,i)cell_t c,Thread*t,int i用戶定義的標量的單元格分散率C_UDMI(c,t,i)cell

15、_t c,Thread*t,int i用戶定義的單元格存儲器5、 訪問雷諾茲壓力模型的宏表5 在metric.h文件中的可以給雷諾茲壓力模型讀寫標量的宏名稱(參數(shù))參數(shù)類型返回值C_RUU(c,t)cell_t c,Thread*tuu雷諾茲壓力C_RVV(c,t)cell_t c,Thread*tvv雷諾茲壓力C_RWW(c,t)cell_t c,Thread*tww雷諾茲壓力C_RUV(c,t)cell_t c,Thread*tuv雷諾茲壓力C_RVW(c,t)cell_t c,Thread*tvw雷諾茲壓力C_RUW(c,t)cell_t c,Thread*tuw雷諾茲壓力(二)訪問面的

16、宏1、訪問面流體標量的宏注意:如果表面在邊界上,那么流體的方向是由F_FLUX決定的點指向外圍空間。表6 在mem.h文件中可以在邊界面讀寫流體標量的宏名稱(參數(shù))參數(shù)類型返回值F_R(f,t)face_t f,Thread*t密度F_P(f,t)face_t f,Thread*t壓力F_U(f,t)face_t f,Thread*tu方向的速度F_V(f,t)face_t f,Thread*tv方向的速度F_W(f,t)face_t f,Thread*tw方向的速度F_T(f,t)face_t f,Thread*t溫度F_H(f,t)face_t f,Thread*t焓F_K(f,t)fac

17、e_t f,Thread*t湍流運動能F_D(f,t)face_t f,Thread*t湍流運動能的分散速率F_YI(f,t,i)face_t f,Thread*t,int i物質的質量分數(shù)F_FLUX(f,t)face_t f,Thread*t通過邊界表面的質量流速2、 讀寫用戶定義的面標量和存儲器的宏表7 在mem.h文件中的表面讀寫用戶定義的標量和存儲器的宏名稱(參數(shù))參數(shù)類型返回值F_UDSI(f,t,i)face_t f,Thread*t,int i用戶確定的表面標量F_UDMI(f,t,i)face_t f,Thread*t,int i用戶定義的表面存儲器3、 訪問混合面標量的宏表

18、8 在mem.h文件中的訪問混合面的宏名稱(參數(shù))參數(shù)類型返回值F_C0(f,t)face_t f,Thread*t訪問表面0邊上的單元變量F_C0_THREAD(f,t)face_t f,Thread*t訪問表面0邊上的單元線索F_C1(f,t)face_t f,Thread*t訪問表面1邊上的單元變量F_C1_THREAD(f,t)face_t f,Thread*t訪問表面1邊上的單元線索(3) 訪問幾何的宏1、 節(jié)點和面的數(shù)量宏C_NNODES和C_NFACES返回相應的節(jié)點和面的整數(shù)值。對于一個給定的單元格,F(xiàn)_NNODES返回與某個表面相關的節(jié)點的整數(shù)個數(shù)。表9 在mem.h文件中的

19、節(jié)點和表面的宏名稱(參數(shù))參數(shù)類型返回值C_NNODES(c,t)cell_t c,Thread*t一個單元格的節(jié)點數(shù)C_NFACES(c,t)cell_t c,Thread*t一個單元格中的表面數(shù)F_NNODES(f,t)cell_t f,Thread*t一個表面中的節(jié)點數(shù)2、 單元格和表面的重心表10列出的宏可以獲得一個單元格或是表面的真實重心。C_CENTROID找到單元格的重心坐標,并把它的坐標存儲在矩陣X中。F_CENTROID找到表面的重心的坐標,并把它的坐標存儲在矩陣X中。注意,矩陣X可以是一維、二維或是三維的。表10 在metric.h文件中的變量重心宏名稱(參數(shù))參數(shù)類型返回

20、值C_CENTROID(x,c,t)realxND ND,cell_t c,Thread*t單元格重心的x值F_CENTROID(x,f,t)realxND ND,face_t f,Thread*t表面中心的x值3、 表面積宏F_AREA可以被用于返回一個實數(shù)的面積向量。對于內部的表面,標準的面積向量的方向是從單元格C0指向單元格C1。標準的方向總是從邊界面指向外(范圍之外)的。表11 在metric.h文件中的表面積宏名稱(參數(shù))參數(shù)類型返回值F_AREA(A,f,t)AND ND,face_t f,Thread*t面積向量A4、 單元格體積表12列出的宏可以用于獲得二維、三維和軸對稱的模型

21、的單元格的真實體積表12 在mem.h文件中的單元格體積宏名稱(參數(shù))參數(shù)類型返回值C_VOLUME(c,t)cell_t c,Thread*t二維或是三維的單元格體積單元格體積/是軸對稱模型的體積(四)訪問節(jié)點的宏表13和表14列出的宏返回單元格節(jié)點的實數(shù)直角坐標(在單元格的拐角)和相應的節(jié)點速度的分量。例如,在移動的網格模擬中節(jié)點速度是相對應的,每個變量的Node*node的參數(shù)定義了一個節(jié)點。表13 在mem.h文件中變量的節(jié)點坐標名稱(參數(shù))參數(shù)類型返回值NODE X(node)Node*node節(jié)點的X坐標NODE Y(node)Node*node節(jié)點的Y坐標NODE Z(node)

22、Node*node節(jié)點的Z坐標表14 在mem.h文件中的節(jié)點速度變量宏名稱(參數(shù))參數(shù)類型返回值NODE GX(node)Node*node節(jié)點速度的X分量NODE GX(node)Node*node節(jié)點速度的Y分量NODE GX(node)Node*node節(jié)點速度的Z分量(五)訪問多相的宏表15列出的宏返回一個與整體多相節(jié)點相連的實數(shù)變量。這些變量的定義在sg_mphase.h文件中可以找到,這些包含在udf.h文件中。表15 在sg_mphase.h文件中的變量宏名稱(參數(shù))參數(shù)類型返回值C_VOF(c,pt0)cell_t c,Thread*pt主要相的體積分數(shù)C_VOF(c,ptn

23、)cell_t c,Thread*pt第n個輔助相的體積分數(shù)3、 一般循環(huán)宏1、 查詢控制區(qū)的單元線當查詢給定控制區(qū)的單元線索時,可以用thread_loop_c。它包含單獨的說明,后面是對控制區(qū)的單元線索所做的操作,正如下面顯示的包含在中。注意:thread_loop_c在執(zhí)行上和下面的thread_loop_c相似。Domain *domain;Thread *c_thread;Thread_loop_c(c_thread,domain)/*loops over all cell threads in domain*/2、 查詢控制區(qū)的面當查詢給定控制區(qū)的面時,可以用thread_loop

24、_f。它包含單獨的說明,后面是對控制區(qū)的面所做的操作,正如下面顯示的包含在中。注意:thread_loop_f在執(zhí)行上和上面的thread_loop_c相似。Thread *f_thread;Domain *domain;Thread_loop_f(f_thread,domain)/*loops over all face threads in a domain*/3、 查詢單元線索中的單元當要查詢給定單元線索c_thread上所有的單元時,可以用begin_c_loop和end_c_loop。它包含begin和end loop的說明,完成對單元線索所做的操作,定義包含在中。當查找控制區(qū)單元線

25、索的單元時,應用loop全嵌套在thread_loop_c中。cell_t c;Thread *c_thread;Begin_c_loop(c,c_thread)/*loops over cells in a cell thread*/end_c_loop(c,c_thread) 4、查詢面線索中的面當要查找給定面線索f_thread的所有面時,可以用begin_f_loop和end_f_loop。它包含begin和end loop的說明,完成對面線索中面單元所做的操作,定義包含在中。當查找控制區(qū)面線索的所有面時,應用loop全嵌套在thread_loop_f中。face_t f;Thread

26、 *f_thread;Begin_f_loop(f,f_thread)/*loops over faces in a face thread*/end_f_loop(f,f_thread) 5、 查詢單元中的面下面函數(shù)用以查詢給定單元中所有面。它包含單獨的查詢說明,后面是所做的操作,意義包含在中。face_t f;Thread *tf;int n;c_face_loop(c,t,n)/*loops over all faces on a cell*/ F=C_FACE(c,t,n);tf=C_FACE_THREAD(c,t,n);這里n是當前面的索引號。當前面的索引號用在C_FACE宏中以獲得

27、所有面的數(shù)量。例如,f=C_FACE(c,t,n).另一個在c_face_loop中有用的宏是C_FACE_THREAD。這個宏用于合并兩個面線索,例如,tf=C_FACE_THREAD(c,t,n).6、 查詢單元節(jié)點C_node_loop函數(shù)用以查詢給定單元中所有節(jié)點。它包含單獨的查詢說明,后面是所做的操作,定義包含在中。cell_t c;Thread *t;int n;c_node_loop(c,t,n) node=C_NODE(c,t,n);這里n是當前節(jié)點的索引號。當前節(jié)點的索引號用在C_NODE宏中以獲得所有節(jié)點的數(shù)量。例如,node=C_NODE(c,t,n).4、 查詢多相組分

28、的宏1、 查詢混合物中相的控制區(qū)sub_domain_loop宏用于查詢混合物控制區(qū)的所有相的子區(qū)。這個宏查詢并在混合物控制區(qū),給每個相區(qū)定義指針以及相關的phase_domain_index。控制區(qū)需要指針,在每個相中都有權訪問部分數(shù)據(jù)。注意:sub_domain_loop宏在執(zhí)行中和下面的sub_thread_loop宏是相似的。int phase_domain_index;/*index of subdomain pointers*/Domain *mixture_domain;Domain *subdomain;sub_domain_loop(subdomain,mixture_dom

29、ain,phase_domain_index)sub_domain_loop的變量是subdomain、mixture_domain和phase_domain_index。subdomain是phase_level domain的指針,mixture_domain是mixture_level domain的指針。當想用DEFINE宏時,mixture_domain(包含控制區(qū)變量,如DEFINE_ADJUST)通過Fluent求解器自動傳遞給UDF,混合物就和UDF相關了。如果mixture_domain沒有顯式地址傳遞給UDF,應用另外一個宏來恢復它,如在sub_domain_loop前使用Get_Domain(1)。phase_domain_index是子區(qū)指針索引號,phase_domain_index指向初始相時,其索引號為0,混合物中其他相一次加1,注意:subdomain和phase_domain_index是在sub_domain_loo

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論