DEFINE_INIT宏经常用于对计算区域中的物理量进行初始化。该宏可以作为Fluent全局初始化(标准初始化及Hybrid初始化)及Patch初始化的一个补充。DEFINE_INIT宏的结构形式比较简单:
DEFINE_INIT(name, d)
其包括两个参数:
name
:宏的名称d
:Domain指针,用于指向初始化函数应用范围的指针。DEFINE_INIT宏没有返回值,需要初始化的物理变量可以在宏内部直接进行赋值。由于DEFINE_INIT宏只有一个Domain指针参数,而想要对物理量赋值需要Thread指针,因此在宏的内部需要Thread在Domain上循环遍历,需要使用循环遍历宏thread_loop_c
或thread_loop_f
。
thread_loop_c(t,d)
{
}
如下面的几何模型,几何尺寸为50 mm x 50 mm。
现在要对$30<y<40$区域进行初始化,指定该区域内的压力为200 pa,x方向的速度为20 m s,温度为400k。其他区域压力为100 pa,x方向速度为10 s,温度为300 k。(注:这里是随便举例,仅为演示udf宏的使用,无实际意义。)< p>
可以写UDF为:
#include "udf.h"
DEFINE_INIT(init_field, d)
{
cell_t c;
Thread *t;
real xc[ND_ND];
thread_loop_c(t,d)
{
begin_c_loop(c,t)
{
C_CENTROID(xc,c,t);
if (xc[1]>0.03 && xc[1]<0.04)
{
C_P(c,t) = 200;
C_U(c,t) = 20;
C_T(c,t) = 400;
}else
{
C_P(c,t) = 100;
C_U(c,t) = 10;
C_T(c,t) = 300;
}
}
end_c_loop(c,t)
}
}
编译并加载UDF。
DEFINE_INIT宏通过点击Function Hooks...
按钮,在打开的User-Defined Function Hooks
对话框加载。
进入Initialization面板,点击按钮Initialize
进行初始化。
初始化的时候需要注意:
”
若DEFINE_INIT给压力和速度之外的物理量进行了赋值,那么确保在初始化之前启用了相应的物理模型。如本示例中使用C_T宏给温度赋值,那么需要先开启Energy模型。 在Initializatin面板中使用 Standard Initialization
,不建议使用Hybrid初始化。
在初始化面板中进行初始化。
初始化完毕后可以在后处理中查看物理量的分布。
注意看,这里速度和温度初始化都没有问题,但压力初始化有问题。
程序中30<y<40区域压力为200 Pa,其他区域压力为100 Pa,而最终初始化完毕后30<y<40区域压力为100 Pa,其他区域压力为0 Pa。目前没找到问题出在哪里。
(完)