DEFINE_EXECUTE_AT_END
是一个通用宏,它在稳态计算每个的迭代步结束时或在瞬态计算的时间步结束时执行,可使用该宏在每次迭代或时间步结束时计算流动参数(如速度、温度、压力等),或执行其他操作(如数据记录、打印输出、调整参数等),该宏对于监控模拟过程中的特定参数或实现自定义的收敛条件非常有用。
宏形式 | 参数类型 | 返回值 |
---|---|---|
DEFINE_EXECUTE_AT_END (name) | UDF name | void |
DEFINE_EXECUTE_AT_END
宏只有一个参数name
,用于指定UDF名称。与DEFINE_ADJUST
宏不同,DEFINE_EXECUTE_AT_END不会传递域指针。因此,如果需要访问域指针,则需要使用GET_Domain(ID)
宏来获取。
示例:计算湍流耗散率(turbulent dissipation)
/********************************************************************
UDF 用于在当前迭代或时间步结束时积分湍流耗散率并在控制台显示
*********************************************************************/
#include "udf.h"
DEFINE_EXECUTE_AT_END(execute_at_end)
{
Domain *d;
Thread *t;
real sum_diss = 0.0;
cell_t c;
// 获取计算域的指针,默认域 ID 为 1(在多相流情况下为混合域)
d = Get_Domain(1);
// 循环遍历域中的所有线程
thread_loop_c(t, d)
{
// 检查线程是否属于流体区域(FLUID_THREAD_P 用于判断线程类型)
if (FLUID_THREAD_P(t))
{
// 遍历线程中的所有单元
begin_c_loop(c, t)
{
// 累加每个单元中的湍流耗散率乘以其体积
sum_diss += C_D(c, t) * C_VOLUME(c, t);
}
end_c_loop(c, t)
}
}
printf("Volume integral of turbulent dissipation: %g\n", sum_diss);
fflush(stdout); // 确保输出立即刷新到控制台
}
DEFINE_EXECUTE_AT_END
宏定义的UDF解释或编译后,需要在User-Defined Function Hooks选项卡进行挂载使用。