Fluent UDF 之向量运算

Fluent 为了能够兼容二维和三维的数组或向量运算,定义了一些宏。

 

先说一说一些宏名称的命名规则

 

(1) 一般第一个字母为 N

 

(2) D 表示数字,可能值为 3 和 2

 

(3) S 表示标量

 

(4) V 表示数组或向量

 

 


 

#if RP_3D
# define ND_ND 3
# define ND_VEC(x,y,z)x,y,z
#else
# define ND_ND 2
# define ND_VEC(x,y,z)x,y
#endif
#define ND_3 3
#define NV_VEC(a)a[ND_ND]

 


 

可以看到,

 

ND_ND 为当前所使用维度,

 

NV_VEC(a) 声明定义一个维度相关的数组可以用

 

ND_VEC(x,y,z) 则用于确定不同维度时操作针对的变量数目

 

后面会看到一系列针对数组或向量的操作,包括赋值、加减、点积、叉积等等

 

(1) 赋值

 

用标量赋值

 


 

/* NV_S (a, =, 2) */
#define NV_S(a,EQ,s)ND_VEC((a)[0]EQ(s),(a)[1]EQ(s),(a)[2]EQ(s))
#define ND_S(a0,a1,a2,EQ,s)ND_VEC((a0)EQ(s),(a1)EQ(s),(a2)EQ(s))

 


 

 

 用向量赋值

 


/* NV_V (a, =, x) */
#define NV_V(a,EQ,x)ND_VEC((a)[0]EQ(x)[0],(a)[1]EQ(x)[1],(a)[2]EQ(x)[2])
#define ND_D(a0,a1,a2,EQ,x0,x1,x2)ND_VEC((a0)EQ(x0),(a1)EQ(x1),(a2)EQ(x2))
#define NV_D(a,EQ,x0,x1,x2)ND_D((a)[0],(a)[1],(a)[2],EQ,x0,x1,x2)
#define ND_V(a0,a1,a2,EQ,x)ND_D(a0,a1,a2,EQ,(x)[0],(x)[1],(x)[2])

 


 

用向量加标量的运算结果

 


/* NV_VS (a, =, x,/,2) */
#define NV_VS(a,EQ,x,S,s)ND_VEC((a)[0]EQ(x)[0]S(s),(a)[1]EQ(x)[1]S(s),(a)[2]EQ(x)[2]S(s))
#define NV_DS(a,EQ,x0,x1,x2,S,s)ND_VEC((a)[0]EQ(x0)S(s),(a)[1]EQ(x1)S(s),(a)[2]EQ(x2)S(s))
#define ND_VS(a0,a1,a2,EQ,x,S,s)ND_VEC((a0)EQ(x)[0]S(s),(a1)EQ(x)[1]S(s),(a2)EQ(x)[2]S(s))
#define ND_DS(a0,a1,a2,EQ,x0,x1,x2,S,s)ND_VEC((a0)EQ(x0)S(s),(a1)EQ(x1)S(s),(a2)EQ(x2)S(s))


 

用向量运算结果


/* NV_VV (a, =, x,+,y) */
#define NV_VV(a,EQ,x,V,y)ND_VEC((a)[0]EQ(x)[0]V(y)[0],(a)[1]EQ(x)[1]V(y)[1],(a)[2]EQ(x)[2]V(y)[2])
#define NV_DD(a,EQ,x0,x1,x2,V,y0,y1,y2) ND_VEC((a)[0]EQ(x0)V(y0),(a)[1]EQ(x1)V(y1),(a)[2]EQ(x2)V(y2))
#define ND_DD(a0,a1,a2,EQ,x0,x1,x2,V,y0,y1,y2) ND_VEC((a0)EQ(x0)V(y0),(a1)EQ(x1)V(y1),(a2)EQ(x2)V(y2))


 

用向量运算和标量运算混合结果

 


/* NV_VV_S (a, =, x,+,y, /, 2) */
#define NV_VV_S(a,EQ,x,V,y,S,s)ND_VEC((a)[0]EQ((x)[0]V(y)[0])S(s),(a)[1]EQ((x)[1]V(y)[1])S(s),(a)[2]EQ((x)[2]V(y)[2])S(s))
#define NV_VVS NV_VV_S
#define NV_DV_S(a,EQ,x0,x1,x2,V,y,S,s)ND_VEC((a)[0]EQ((x0)V(y)[0])S(s),(a)[1]EQ((x1)V(y)[1])S(s),(a)[2]EQ((x2)V(y)[2])S(s))
#define NV_DD_S(a,EQ,x0,x1,x2,V,y0,y1,y2,S,s)ND_VEC((a)[0]EQ((x0)V(y0))S(s),(a)[1]EQ((x1)V(y1))S(s),(a)[2]EQ((x2)V(y2))S(s))
#define ND_VV_S(a0,a1,a2,EQ,x,V,y,S,s)ND_VEC((a0)EQ((x)[0]V(y)[0])S(s),(a1)EQ((x)[1]V(y)[1])S(s),(a2)EQ((x)[2]V(y)[2])S(s))

#define ND_VD_S(a0,a1,a2,EQ,x,V,y0,y1,y2,S,s)ND_VEC((a0)EQ((x)[0]V(y0))S(s),(a1)EQ((x)[1]V(y1))S(s),(a2)EQ((x)[2]V(y2))S(s))
#define ND_DV_S(a0,a1,a2,EQ,x0,x1,x2,V,y,S,s)ND_VEC((a0)EQ((x0)V(y)[0])S(s),(a1)EQ((x1)V(y)[1])S(s),(a2)EQ((x2)V(y)[2])S(s))
#define ND_DD_S(a0,a1,a2,EQ,x0,x1,x2,V,y0,y1,y2,S,s)ND_VEC((a0)EQ((x0)V(y0))S(s),(a1)EQ((x1)V(y1))S(s),(a2)EQ((x2)V(y2))S(s))


 

(2) 其他

 

 

  • 6
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
对于Fluent UDF(User Defined Function),您可以参考以下步骤进行学习: 1. 理解Fluent UDF的概念:Fluent UDF是用于扩展Fluent软件功能的用户自定义函数。它允许您通过编写自己的函数来实现特定的建模、求解或后处理任务。 2. 学习Fluent UDF的基础知识:了解Fluent UDF的基本语法、函数类型和参数传递方式。可以阅读Fluent UDF文档或参考Fluent UDF教程,以了解如何编写和使用UDF代码。 3. 选择编程语言:Fluent UDF支持多种编程语言,如C、C++和Fortran。选择一种您熟悉或感兴趣的编程语言,并学习其语法和相关开发环境。 4. 编写UDF代码:按照Fluent UDF的语法规则,编写您的自定义函数。根据您的需求,可以实现不同类型的UDF,例如边界条件、源项或用户定义的模型。 5. 编译和加载UDF:将编写好的UDF代码编译为动态链接库,并将其加载Fluent软件中。这样,您就可以在Fluent界面中使用自定义函数。 6. 验证和调试:在Fluent软件中验证您的UDF是否正常工作。如果出现错误或问题,可以使用调试工具和日志信息进行排查。 7. 进一步学习和应用:通过解决实际问题或参与相关项目来进一步学习和应用Fluent UDF。与其他用户交流经验、参加培训课程或阅读相关文献也是提高技能的有效途径。 请注意,Fluent UDF的学习过程可能需要一定的时间和耐心。不断练习和实践,您将能够熟练地使用Fluent UDF来解决复杂的流体力学问题。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值