Fluent UDF【14】:向量宏【轉(zhuǎn)發(fā)】
2017-06-11 by:CAE仿真在線 來源:互聯(lián)網(wǎng)
CFD計算中存在眾多的向量,典型的如速度、角速度等。向量的運(yùn)算要比標(biāo)量運(yùn)算復(fù)雜,UDF提供了眾多的向量操作宏用于向量的運(yùn)算。
對于這些向量操作宏,UDF頭文件中對這些宏的名稱進(jìn)行了區(qū)分。如宏名稱中包含v,則表示為向量,S表示為標(biāo)量,D表示為向量的三個分量序列,在2D模型中,第三個分量被忽略。矢量函數(shù)不遵循括號、指數(shù)、乘法、除法、加法和減法(PEMDAS)的運(yùn)算順序約定。 取而代之的是利用下劃線(_)符號將操作數(shù)分組成對,以便在成組之前對元素執(zhí)行操作。
UDF中使用較多的ND操作宏包括:ND_ND、ND_SUM及ND_SET。
ND_ND為常數(shù),在2D模型中其值為2,在3D模型中其值為3。
注意:ND_ND宏的值不可以改變。如下語句ND_ND=1是錯誤的。在實(shí)際應(yīng)用過程中,把ND_ND當(dāng)做是數(shù)字。
如下語句定義了一個矩陣:
real A[ND_ND][ND_ND];ND_SUM宏用于計算其參數(shù)的和。
如代碼:
ND_SUM(x,y,z);在2D模型中,其等效于:
x+y;而在3D模型中,其等效于:
x+y+z;ND_SET宏用于設(shè)置其參數(shù)。如:
ND_SET(u,v,w,C_U(c,t),C_V(c,t),C_W(c,t));在2D模型中,其等效為:
u = C_U(c,t); v = C_V(c,t);在3D模型中,其等效為:
u = C_U(c,t); v = C_V(c,t); w = C_W(c,t);NV宏與ND宏類似,只不過NV宏操作的是向量。
NV_V宏進(jìn)行向量賦值操作。如代碼:
NV_V(a, = , x);其等效于:
a[0] = x[0]; a[1] = x[1]; a[2] = x[2];宏中間的操作符可以是+=,此時則換為:
a[0] += x[0]; a[1] += x[1]; a[2] += x[2];NV_VV宏能實(shí)現(xiàn)向量元素操作。如代碼:
NV_VV(a , = , x , + , y);則其等效于:
a[0] = x[0] + y[0]; a[1] = x[1] + y[1];此宏可用于向量與標(biāo)量的乘積運(yùn)算。如:
NV_V_VS(a, = , x, + , y, *, 0.5);等效于:
a[0] = x[0] + y[0] * 0.5; a[1] = x[1] + y[1] * 0.5;矢量與標(biāo)量的混合運(yùn)算。如:
NV_VS_VS(a, =, x, *, 2.0, +, y, *, 0.5);此語句等效于:
a[0] = (x[0]*2.0) + (y[0]*0.5); a[1] = (x[1]*2.0) + (y[1]*0.5);向量操作宏可用于向量的求模運(yùn)算、點(diǎn)乘與叉乘運(yùn)算。
這兩個宏用于求取向量的模及模的平方。如宏NV_MAG示例:
NV_MAG(x);等效于:
2D中: sqrt(x[0]*x[0] + x[1]*x[1]); 3D中: sqrt(x[0]*x[0] + x[1]*x[1] + x[2]*x[2]);而NV_MAG2則計算向量的模的平方。如:
NV_MAG2(x);等效于:
2D: (x[0]*x[0] + x[1]*x[1]); 3D: (x[0]*x[0] + x[1]*x[1] + x[2]*x[2]);NV_DO宏用于向量的點(diǎn)積??梢杂卸喾N用法,如下示例:
ND_DOT(x, y, z, u, v, w); 2D: (x*u + y*v); 3D: (x*u + y*v + z*w); NV_DOT(x, u); 2D: (x[0]*u[0] + x[1]*u[1]); 3D: (x[0]*u[0] + x[1]*u[1] + x[2]*u[2]); NVD_DOT(x, u, v, w); 2D: (x[0]*u + x[1]*v); 3D: (x[0]*u + x[1]*v + x[2]*w);向量叉乘比較麻煩。如下示例:
ND_CROSS_X(x0,x1,x2,y0,y1,y2) 2D: 0.0 ?3D: (((x1)*(y2))-(y1)*(x2))) ND_CROSS_Y(x0,x1,x2,y0,y1,y2) 2D: 0.0 ?3D: (((x2)*(y0))-(y2)*(x0))) ND_CROSS_Z(x0,x1,x2,y0,y1,y2) 2D and 3D: (((x0)*(y1))-(y0)*(x1))) NV_CROSS_X(x,y) ND_CROSS_X(x[0],x[1],x[2],y[0],y[1],y[2]) NV_CROSS_Y(x,y) ND_CROSS_Y(x[0],x[1],x[2],y[0],y[1],y[2]) NV_CROSS_Z(x,y) ND_CROSS_Z(x[0],x[1],x[2],y[0],y[1],y[2]) NV_CROSS(a,x,y) a[0] = NV_CROSS_X(x,y); a[1] = NV_CROSS_Y(x,y); a[2] = NV_CROSS_Z(x,y);
轉(zhuǎn)自公眾號:胡坤 CFD仿真之道
相關(guān)標(biāo)簽搜索:Fluent UDF【14】:向量宏【轉(zhuǎn)發(fā)】 Fluent培訓(xùn) Fluent流體培訓(xùn) Fluent軟件培訓(xùn) fluent技術(shù)教程 fluent在線視頻教程 fluent資料下載 fluent分析理論 fluent化學(xué)反應(yīng) fluent軟件下載 UDF編程代做 Fluent、CFX流體分析 HFSS電磁分析