许可优化
许可优化
产品
产品
解决方案
解决方案
服务支持
服务支持
关于
关于
软件库
当前位置:服务支持 >  软件文章 >  Fluent UDF中的矢量和量纲宏(Vector and Dimension Macros)详解

Fluent UDF中的矢量和量纲宏(Vector and Dimension Macros)详解

阅读数 122
点赞 4778
article_banner

记录一下,方便后续查找。



ANSYS Fluent提供了一些实用程序,您可以在UDF中使用这些实用程序来访问或操作 矢量 量以及处理二维和三维。这些实用程序在代码中被实现为宏。

   矢量实用程序 宏  有一个命名约定。

V表示矢量,S表示标量,D表示三个矢量分量的序列( a sequence of three vector components of),其中第三个分量在二维计算中总是被忽略。矢量函数中不遵循括号、指数、乘法、除法、加法和减法(PEMDAS)的标准运算顺序约定。相反,下划线(_)符号用于将操作数分组为对(pair),以便在对组执行操作之前对(pair)的元素执行操作。

3.4.1 Macros for Dealing with Two and Three Dimensions(处理二维和三维的宏)

有两种方法可以处理UDF中涉及二维和三维的表达式。

第一种是使用显式方法指导编译器分别编译2D和3D代码的单独部分。这是在条件if语句中使用RP_2D和RP_3D完成的。

第二种方法允许您在UDF中包含通用的3D表达式,并使用ND和NV宏,这些宏将在使用RP_2D编译时删除z组件。NV宏操作在矢量上,而ND宏操作在单独的组件上。

3.4.1.1 RP_2D and RP_3D

在条件if语句中使用RP_2D和RP_3D宏将指示编译器分别为2D和3D编译代码的单独部分。例如,如果您想指示编译器仅为三维版本的ANSYS Fluent计算涡流项,那么您可以在UDF中使用以下条件编译语句:

 #if RP_3D /* compute swirl terms */ #endif 

3.4.2 The ND Macros

在UDF中使用ND宏可以在代码中包含通用的3D(三维)表达式,并且在使用RP_2D编译时,ND宏负责删除向量的z分量。(ND:Number Dimension?

3.4.2.1. ND_ND

常数ND_ND对于RP_2D(ANSYS Fluent 2D)定义为2,对于RP_3D(ANSYS Fluent 3D)定义为3。当您想要构建二维矩阵和三维矩阵时,可以使用它。当您使用ND_ND时,您的UDF将适用于2D和3D情况,而不需要任何修改

 real A[ND_ND][ND_ND]  for (i=0; i<ND_ND; ++i)  for (j=0; j<ND_ND; ++j)  A[i][j] = f(i, j); 

3.4.2.2. ND_SUM

实用程序ND_SUM(Number Dimension SUM)计算ND_ND参数的总和。

 ND_SUM(x, y, z)  2https://www.gofarlic.com x + y;  3https://www.gofarlic.com x + y + z;

3.4.2.3. ND_SET

实用程序ND_SET生成ND_ND赋值语句。

 ND_SET(u, v, w, C_U(c, t), C_V(c, t), C_W(c, t))  u = C_U(c, t);  v = C_V(c, t);  if 3https://www.gofarlic.com 21  w = C_W(c, t);

21代表什么含义?

3.4.3.The NV Macros

NV宏与ND宏具有相同的目的,但它们对向量(即长度为ND_ND的数组)而不是单独的组件进行操作。

3.4.3.1. NV_V(NV_VEC)

实用程序NV_V对两个矢量执行运算。相当于给一个矢量赋值为另一个矢量。

 NV_V(a, =, x);  a[0] = x[0]; a[1] = x[1]; etc. 

注意,如果在上面的等式中使用+=而不是=,则得到

a[0]+=x[0]; etc. 

See DEFINE_GRID_MOTION for an example UDF that utilizes NV_V.

3.4.3.2. NV_VV

实用程序NV_VV对矢量元素执行操作。对元素执行的操作取决于在下面的宏调用中用什么符号(-,/,*)代替+符号作为参数。

 NV_VV(a, =, x, +, y)  2https://www.gofarlic.com a[0] = x[0] + y[0], a[1] = x[1] + y[1]; 

See DEFINE_GRID_MOTION for an example UDF that utilizes NV_VV.

3.4.3.3. NV_V_VS

实用程序NV_V_VS将一个矢量添加到另一个与标量相乘的矢量。

 NV_V_VS(a, =, x, +, y, *, 0.5);  2https://www.gofarlic.com a[0] = x[0] + (y[0]*0.5), a[1] = x[1] +(y[1]*0.5);

请注意,+号可以用-、/或*代替,*号可以用/代替。

3.4.3.4. NV_VS_VS

实用程序NV_VS_VS将一个矢量与另一个矢量相加,每个矢量乘以标量。

NV_VS_VS(a,=,x,*,2.0,+,y,*,0.5);2https://www.gofarlic.coma[0]=(x[0]*2.0)+(y[0]*0.5),a[1]=(x[1]*2.0)=(y[1]*0.5);

请注意,+号可以用来代替-、*或/,*号可以用/代替。

3.4.4. Vector Operation Macros

您可以在UDF中使用一些宏,这些宏将允许您执行诸如计算矢量幅度、点积和叉积之类的操作。例如,可以使用实函数NV_MAG(V)来计算向量V的大小。或者,也可以使用实数函数NV_MAG2(V)获得向量V大小的平方。

3.4.4.1. Vector Magnitude Using NV_MAG and 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)2https://www.gofarlic.com(x[0]*x[0]+x[1]*x[1]);3https://www.gofarlic.com(x[0]*x[0]+x[1]*x[1]+x[2]*x[2]);

See DEFINE_DPM_BC for an example UDF that utilizes NV_MAG.

3.4.4.2. Dot   Product

以下实用程序计算两组矢量分量的点积。

 ND_DOT(x, y, z, u, v, w)  2https://www.gofarlic.com (x*u + y*v);  3https://www.gofarlic.com (x*u + y*v + z*w);  NV_DOT(x, u)  2https://www.gofarlic.com (x[0]*u[0] + x[1]*u[1]);  3https://www.gofarlic.com (x[0]*u[0] + x[1]*u[1] + x[2]*u[2]);  NVD_DOT(x, u, v, w)  2https://www.gofarlic.com (x[0]*u + x[1]*v);  3https://www.gofarlic.com (x[0]*u + x[1]*v + x[2]*w);

See DEFINE_DOM_SPECULAR_REFLECTIVITY for an example UDF that utilizes NV_DOT.

3.4.4.3. Cross Product

对于3D,CROSS宏返回矢量叉积的指定分量。对于2D,宏返回向量的叉积,每个向量的z分量设置为0。

 ND_CROSS_X(x0,x1,x2,y0,y1,y2) 2https://www.gofarlic.com 0.0 3https://www.gofarlic.com (((x1)*(y2))-(y1)*(x2)))  ND_CROSS_Y(x0,x1,x2,y0,y1,y2) 2https://www.gofarlic.com 0.0 3https://www.gofarlic.com (((x2)*(y0))-(y2)*(x0)))  ND_CROSS_Z(x0,x1,x2,y0,y1,y2) 2D and 3https://www.gofarlic.com (((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); 

See DEFINE_GRID_MOTION for an example UDF that utilizes NV_CROSS.


  1. 在FLUENT中ND_DOT、NV_DOT、NVD_DOT、ND_SUM的区别:
帮助文档中各用法如下: ND_DOT(x, y, z, u, v, w): 2https://www.gofarlic.com (x*u + y*v); 3https://www.gofarlic.com (x*u + y*v + z*w); NV_DOT(x, u): 2https://www.gofarlic.com (x[0]*u[0] + x[1]*u[1]); 3https://www.gofarlic.com (x[0]*u[0] + x[1]*u[1] + x[2]*u[2]); NVD_DOT(x, u, v, w): 2https://www.gofarlic.com (x[0]*u + x[1]*v); 3https://www.gofarlic.com (x[0]*u + x[1]*v + x[2]*w); ND_SUM(x, y, z) 2https://www.gofarlic.com x + y; 3https://www.gofarlic.com x + y + z;
  1. 网上搜索到的内容
real NV_VEC(psi--- defines a vector psi[0]i+psi[1]j+psi[2]k NV_D(psi,=,u,v,w)--- assigns values in 3directions to a vector psi = ui+vj+wk NV_S(psi,*=,R) => psi = psi * R (assigns/modifies magnitude) NV_DS(psi_vec,=,u,v,w,*,dens) =>direction & scalar operations psi_vec = (ui+vj+wk)*dens;
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删
相关文章
QR Code
微信扫一扫,欢迎咨询~
customer

online

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 board-phone 155-2731-8020
close1
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

姓名不为空

姓名不为空
手机不正确

手机不正确

手机不正确
公司不为空

公司不为空

公司不为空