Fluent UDF【14】:向量宏【转发】
2017-06-11 by:CAE仿真在线 来源:互联网
CFD计算中存在众多的向量,典型的如速度、角速度等。向量的运算要比标量运算复杂,UDF提供了众多的向量操作宏用于向量的运算。
对于这些向量操作宏,UDF头文件中对这些宏的名称进行了区分。如宏名称中包含v,则表示为向量,S表示为标量,D表示为向量的三个分量序列,在2D模型中,第三个分量被忽略。矢量函数不遵循括号、指数、乘法、除法、加法和减法(PEMDAS)的运算顺序约定。 取而代之的是利用下划线(_)符号将操作数分组成对,以便在成组之前对元素执行操作。
UDF中使用较多的ND操作宏包括:ND_ND、ND_SUM及ND_SET。
ND_ND为常数,在2D模型中其值为2,在3D模型中其值为3。
注意:ND_ND宏的值不可以改变。如下语句ND_ND=1是错误的。在实际应用过程中,把ND_ND当做是数字。
如下语句定义了一个矩阵:
real A[ND_ND][ND_ND];ND_SUM宏用于计算其参数的和。
如代码:
ND_SUM(x,y,z);在2D模型中,其等效于:
x+y;而在3D模型中,其等效于:
x+y+z;ND_SET宏用于设置其参数。如:
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宏进行向量赋值操作。如代码:
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宏能实现向量元素操作。如代码:
NV_VV(a , = , x , + , y);则其等效于:
a[0] = x[0] + y[0]; a[1] = x[1] + y[1];此宏可用于向量与标量的乘积运算。如:
NV_V_VS(a, = , x, + , y, *, 0.5);等效于:
a[0] = x[0] + y[0] * 0.5; a[1] = x[1] + y[1] * 0.5;矢量与标量的混合运算。如:
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);向量操作宏可用于向量的求模运算、点乘与叉乘运算。
这两个宏用于求取向量的模及模的平方。如宏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宏用于向量的点积。可以有多种用法,如下示例:
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);
转自公众号:胡坤 CFD仿真之道
相关标签搜索:Fluent UDF【14】:向量宏【转发】 Fluent培训 Fluent流体培训 Fluent软件培训 fluent技术教程 fluent在线视频教程 fluent资料下载 fluent分析理论 fluent化学反应 fluent软件下载 UDF编程代做 Fluent、CFX流体分析 HFSS电磁分析