许可优化
产品
解决方案
服务支持
关于
软件库
当前位置:服务支持 >  软件文章 >  Fluent UDF:还原C++真面目,探索无限可能

Fluent UDF:还原C++真面目,探索无限可能

阅读数 4
点赞 0
article_banner

0、前言

毫无疑问,UDF 是c++,但是又和传统的c++好像又有什么不一样。原因是UDF用了太多的宏,fluent的程序员以前可能是写Fortran的,下面看看这些宏的本来面目。

1、DEFINE函数

UDF中,各种DEFINE函数是顶级公民,作为fluent和UDF 的接口出现。

DEFINE_EXECUTE_AT_END (chenji), 其原型为:

所以预处理之后的源文件,此DEFINE 函数会变成extern "C" void chenji(void),这就变成了我们熟悉的c++语法了。

为什么fluent不用原始的语法,而要用宏呢?其实很简单,有两个原因:

1、方便我们写程序。很好理解,不用费劲自己写一堆声明和形参了;

2、让fluent可以识别此函数加载的位置。因为你的udf源文件不是直接交给编译器编译的,而是先给fluent预处理,然后才会交给VC++或g++预处理。fluent预处理是用sed.exe 逐行扫描你的源文件,用正则表达式识别DEFINE宏及其类型,最终结果生成于udf_names.c:

这下fluent加载的时候就知道你这个叫chenji的函数的类型是UDF_TYPE_EXECUTE_AT_END,然后这个函数就会出现在函数钩子的EXECUTE_AT_END一栏里。

2、各种loop宏

以begin_f_loop为例,其原型为:

end_f_loop的原型为两个大括号,只起收尾作用:

可见各种loop函数只是普通的for循环,其循环范围为[ 0, t->nelements_in_layer[0] )

nelements_in_layer的含义参考Fluent UDF手册

3、流场变量宏

如C_U(c,t),其原型为:

很明显,这是一个二维数组,U对应的索引位置为SVAR_IDX__SV_U,c是U数组的第c个量。

所有的流场变量都是枚举类型,其定义在storge.h:

可以用C_STORAGE_R(f, t, SV_。。。)直接获取对应的标量变量值。比如电化学模拟中的阴极沉积速率,没有相应的宏可以获取它的值,但是观察到:在storge.h里,有一个SV_CORROSION_RATE_0 好像是沉积速率的意思,我们尝试一下,使用C_STORAGE_R(f, t, SV_CORROSION_RATE_0)画出其云图,发现果然是沉积速率。

此外还有获取向量的宏,再次不赘述。

4、无参数宏

如CURRENT_TIMESTEP,其原型为:

还有一堆这种宏,都是获取的RP变量(RP变量可以在fluent的控制台里自定义):

还有用于多核同步的PRF_GSYNC():

一大堆,懒得说了。

5、总结

有啥问题可以在评论区说,有懂哥可以在评论区解答,大家互帮互助


免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删
相关文章
QR Code
微信扫一扫,欢迎咨询~

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

* 公司名称:

姓名不为空

手机不正确

公司不为空