本案例演示利用UDF宏DEFINE_PROFILE定义与坐标相关的边界条件。本案例极其基础,主要目的为熟悉Fluent UDF的编写、编译及加载过程。
1 模型描述
计算模型如下图所示。
二维计算模型,入口速度0.01 m/s,温度300 K,出口为压力出口。顶部壁面温度分布与x坐标相关,其函数关系为:
模型与问题都不复杂,这里的需要解决的是利用UDF定义温度的分布。
注:
Fluent提供了三种方法用于处理这种具有函数分布规律的边界条件:Profile文件、UDF以及表达式。Profile文件非常适合于处理有限数量的离散数据,其采用插值方式将离散数据点处理为函数分布;表达式功能是比较新的功能,可以在Fluent中直接将边界条件表示为连续的函数关系;UDF更为灵活,其不仅可以处理离散的数据,还可以直接表达连续的函数关系。
”
2 准备UDF
UDF文件通常为c文件或cpp文件。可以采用任何文本编辑器编写UDF代码,推荐使用VS Code与sublime txt。目前Fluent 2020R2版本已经内置了编译器,因此UDF编译不再需要额外安装Visual Studio软件。
DEFINE_PROFILE宏主要用于指定边界条件,该UDF宏的详细描述位于UDF手册的2.3.28节。该UDF形式为:
DEFINE_PROFILE (name, t, i)
其中,name
为宏名,需要用户提供;t与i均为求解器传递参数,一般情况下不需要修改。若对此宏的写法不熟悉的话,建议在UDF手册中案例代码的基础上进行修改。
本案例涉及的UDF如下所示。
DEFINE_PROFILE(temp_wall_profile, t,i)
{
real x[ND_ND];
face_t f;
begin_f_loop(f,t)
{
F_CENTROID(x,f,t);
F_PROFILE(f,t,i) = -3200*x[0]*x[0]+1600*x[0]+300;
}
end_f_loop(f,t)
}
对于上面的代码:
-
所有的UDF代码都必须包含 udf.h
头文件,建议将包含该头文件的语句#include "udf.h"
放在源代码的第一行 -
第二行中的temp_wall_profile为宏名,可以为任何名称,但需要满足c语言的函数名命名规范 -
ND_ND为UDF内置宏常数,在二维模型中ND_ND的值为2,在三维模型中该值为3。x[ND_ND]为一个数组 -
begin_f_loop…end_f_loop为循环宏,其在边界面上进行循环,注意宏标识符中的 f
标识的是面,同理还有begin_c_loop宏标识在网格单元上进行循环 -
F_CENTROID宏用于获取网格面中心点坐标,这里传入x数组作为参数,返回的坐标值会存入到x数组中。注意x[0]得到的是x坐标,x[1]得到的是y坐标,若为三维模型,x[2]将得到z坐标 -
F_PROFILE宏将值返回给Fluent求解器,这里定义了一个函数表达式
将上面的代码写到一个文本文件中,保存为文件temp_wall.c。
本案例中的UDF可以使用编译或解释的方式运行。一般情况下编译UDF运行效率更高,但编译依赖于Fluent版本;解释型UDF不依赖于版本,但运行效率更低,通常建议调用频率高或计算开销大的代码采用编译方式运行。
3 Fluent设置
-
启动Fluent。若为2020R2之前的Fluent版本,进入Environment选项卡,激活选项Steup Compilation Environment for UDF并指定udf.bat文件路径。确保在udf.bat文件中指定了Visual Studio的安装路径
注:
若使用Fluent 2020R2版本,则无需使用udf.bat指定编译环境。
”
3.1 读取网格
-
利用菜单File → Read → Mesh…读取网格文件channel.msh
3.2 编译UDF文件
-
右键选择节点User Defined Functions,点击菜单项**Compiled…**打开文件编译对话框
-
如下图所示顺序编译UDF文件 -
点击Add…按钮打开文件对话框添加UDF源文件temp_wall.c -
勾选选项Use Built-in Compiler -
点击按钮Build编译代码 -
代码编译完毕后点击按钮Load加载UDF宏
注:
选项Use Built-In Compiler为2020R2版本新增功能。
”
UDF加载成功后TUI控制台窗口如下图所示。
-
若想要修改UDF代码重新编译,需要右键选择节点User Defined Functions,点击菜单项**Manage…**打开设置对话框
-
如下图所示选中UDF列表项,点击按钮Unload卸载UDF,并重复之前的步骤重新编译UDF
3.3 其他设置
-
激活能量方程
注:
案例UDF指定是温度边界,因此需要激活能量方程。
”
-
采用层流计算。这里根据案例的实际情况选择
-
指定入口速度0.01 m/s
-
合并计算区域(这一步不是必须的)
-
合并壁面边界(这一步非必须)
-
指定壁面边界条件 -
指定边界类型为Temperature -
指定边界条件为udf temp_wall_profile::libudf
-
指定迭代计算参数
-
温度分布如下图所示
-
查看顶部壁面的温度分布
-
温度分布如下图所示,可以看到与UDF所描述的函数是相符的
相关模型文件下载。
本篇文章来源于微信公众号: CFD之道
评论前必须登录!
注册