Fluent UDF【14】:向量宏【转发】

2017-06-11  by:CAE仿真在线  来源:互联网

CFD计算中存在众多的向量,典型的如速度、角速度等。向量的运算要比标量运算复杂,UDF提供了众多的向量操作宏用于向量的运算。

对于这些向量操作宏,UDF头文件中对这些宏的名称进行了区分。如宏名称中包含v,则表示为向量,S表示为标量,D表示为向量的三个分量序列,在2D模型中,第三个分量被忽略。矢量函数不遵循括号、指数、乘法、除法、加法和减法(PEMDAS)的运算顺序约定。 取而代之的是利用下划线(_)符号将操作数分组成对,以便在成组之前对元素执行操作。

ND操作宏

UDF中使用较多的ND操作宏包括:ND_ND、ND_SUM及ND_SET。

1

ND_ND宏

ND_ND为常数,在2D模型中其值为2,在3D模型中其值为3。

注意:ND_ND宏的值不可以改变。如下语句ND_ND=1是错误的。在实际应用过程中,把ND_ND当做是数字。

如下语句定义了一个矩阵:

real A[ND_ND][ND_ND];

2

ND_SUM宏

ND_SUM宏用于计算其参数的和。

如代码:

ND_SUM(x,y,z);

在2D模型中,其等效于:

x+y;

而在3D模型中,其等效于:

x+y+z;

3

ND_SET宏

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操作宏

NV宏与ND宏类似,只不过NV宏操作的是向量。

1

NV_V宏

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];

2

NV_VV宏

NV_VV宏能实现向量元素操作。如代码:

NV_VV(a , = , x , + , y);

则其等效于:

a[0] = x[0] + y[0]; a[1] = x[1] + y[1];

3

NV_V_VS宏

此宏可用于向量与标量的乘积运算。如:

NV_V_VS(a, = , x, + , y, *, 0.5);

等效于:

a[0] = x[0] + y[0] * 0.5; a[1] = x[1] + y[1] * 0.5;

4

NV_VS_VS宏

矢量与标量的混合运算。如:

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);
向量操作宏

向量操作宏可用于向量的求模运算、点乘与叉乘运算。

1

NV_MAG及NV_MAG2

这两个宏用于求取向量的模及模的平方。如宏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]);

2

NV_DOT

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);

3

向量叉乘

向量叉乘比较麻烦。如下示例:

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);

Fluent UDF【14】:向量宏【转发】fluent结果图片1

Fluent UDF【14】:向量宏【转发】fluent结果图片2



转自公众号:胡坤 CFD仿真之道

开放分享:优质有限元技术文章,助你自学成才

相关标签搜索:Fluent UDF【14】:向量宏【转发】 Fluent培训 Fluent流体培训 Fluent软件培训 fluent技术教程 fluent在线视频教程 fluent资料下载 fluent分析理论 fluent化学反应 fluent软件下载 UDF编程代做 Fluent、CFX流体分析 HFSS电磁分析 

编辑
在线报名:
  • 客服在线请直接联系我们的客服,您也可以通过下面的方式进行在线报名,我们会及时给您回复电话,谢谢!
验证码

全国服务热线

1358-032-9919

广州公司:
广州市环市中路306号金鹰大厦3800
电话:13580329919
          135-8032-9919
培训QQ咨询:点击咨询 点击咨询
项目QQ咨询:点击咨询
email:kf@1cae.com