吾生有涯 学海无涯
析模有界 知识无界

Fluent UDF【14】:向量宏

内容纲要

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

本篇文章来源于微信公众号: CFD之道

赞(2) 打赏
版权声明:未经允许,请勿随意用于商业用途。
文章名称:《Fluent UDF【14】:向量宏》
文章链接:https://www.topcfd.cn/771/
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。
分享到

说两句 抢沙发

评论前必须登录!

 

觉得文章有用就打赏一下文章作者吧

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫

微信扫一扫

登录

找回密码

注册