前面我们所讲述的Fluent的相关知识只是很少很少的一部分,但是今天我们还是开始一部分新的知识。之所以这样做,是因为今天所讲述的知识在大家以后的学习中用途很广泛,同时这部分知识需要大家提前学习一些基础知识。
图1.UDF用户手册
UDF介绍:所谓UDF-用户自定义函数(User-defined functions),学习过编程语言的同学对此应该并不陌生,无论是C语言、JAVA还是Python,自定义函数被广泛的应用着,它能够使语言逻辑和代码的简洁性大幅度提高。Fluent的UDF有着同样的功能,但是又不完全相同。
在Fluent中,UDF使用C语言来编写,因此需要大家有一定的C语言基础,但是不必过于深入,大家只需要了解基本的格式和语法结构即可,同时需要对指针有一点了解。建议有其他语言基础的同学花一周的时间学习一下C语言---一周的时间已经足够了。
UDF特殊性:接下来我们说一下Fluent UDF的特殊性,实际上即便C语言功底很厉害的高手并不一定能够写好UDF,为什么呢?因为Fluent UDF和C语言的自定义函数完全就是两码事。它是Fluent封装好的可以传递给求解器的函数,主要由各种宏组成,每个宏有各自的作用。说的通俗易懂一点,其实UDF就是Fluent已经给用户起好了自定义函数的名字了,用户达到什么样的目的,使用相对应的宏就行。类似于我乘坐地铁去电影院,为了达到去电影院的目的,我使用了名叫地铁的工具,这里的名字“地铁”就相当于Fluent中的宏;如果放到C语言中,你可以给“地铁”起任意名字如“自行车”,这样会带来混乱,导致Fluent求解器识别不了你的目的。比如用户想让进口流体的速度正弦变化,那么就需要找到能够修改边界条件的宏-DEFINE_PROFILE(name, t, i),然后在里面指定速度函数即可。
图2.C语言自定义函数
图3.Fluent UDF
UDF功能:对于Fluent而言,UDF可以显著增强其功能,使用UDF你可以做如下的事情:
1. 自定义边界条件、材料特性、表面和体积反应速率、用户定义标量(UDS)、传输方程中的源项、扩散系数函数等
2. 每次迭代调整一次计算值。
3. 自定义的求解初始化
4. 按需执行UDF
5. 在迭代结束时、退出ANSYS Fluent或加载已编译的UDF库时执行
6. 增强后处理效果
7. 改进现有的ANSYS Fluent模型(如离散相模型、多相混合模型、离散坐标辐射模型)
上述功能都是直接使用Fluent比较难以完成但是实际又经常会用到的,尤其1、2在以后的学习中会经常使用到。
UDF宏:UDF有两类宏,DEFINE宏和结构宏。DEFINE宏是大的功能宏,能够完成某一项功能,如定义材料特性、定义边界条件等等。想要完成不同的功能就要在对应的DEFINE宏中书写代码,上述的每个功能都有其DEFINE宏。结构宏和FLUENT计算方式有关,涉及到网格、线程和相域的相关知识,比较复杂,我们以后再详细了解。结构宏可以相互嵌套,但是只能大套小。比较常见的结构宏如:
begin_f_loop(f, t)//遍历线程t上的面
{
//代码//
}
end_f_loop(f, t)
thread_loop_c(t, d)////遍历混合域d上的线程
{
//代码//
}
值得注意的是,DEFINE宏里面会包含结构宏,这样说来,DEFINE宏可以类比为C语言中的自定义函数,而结构宏则可以类比成循环语句for或while,只不过这里的循环的是网格或线程。
要想达到我们的目的,我们还需要知道各种物理量,UDF也给我们提供了各种各样的物理量,如获取网格温度C_T(c,t)。物理量宏都是这样的写法,C表示网格,T表示温度,(c,t)表示从t线程获取网格c的温度。C_T必须大写,(c,t)必须小写。下面给出一部分常用的物理量宏:
图4.常用的物理量宏
最后说一下,由于FLUENT UDF内容很多,我们不可能全部掌握,只能对一些常用的熟记。遇到比较特殊的要求,最简单方便的方法就是查看官方UDF用户手册。这里的手册是全英文的,大家要是觉得不够方便可以多多关注我,我以后会持续做一些这方面的内容。
UDF用户手册资源:
见附件