使用DEFINE_ON_DEMAND 宏可以定义一个按命令执行的UDF,这比让FLUENT 在计算过程中机械地调用UDF 优越的多。UDF 一旦被激活,可以立即被执行,不过,当求解器正在迭代的时候,函数是不可以调用的。注意,域指示器d 作为DEFINE_ON_DEMAND 的一个自变量,它的传送是明确的。所以,如果想在这个UDF 中使用域变量,那么首先需要使用FLUENT提供的Get_Domain 工具重新得到它。
例子
下面的这个名为on_demand_calc
的UDF,
- 计算和输出关于当前数据场的温度最小值,最大值和平均值。
- 然后,再计算一个温度函数
f(T)=(T-T_min)/(T_max-T_min)
并且把它存放到自定义内存位置0。一旦连接了这个UDF,关于f (T) 的这个场值将在FLUENT的后处理面板中的下拉菜单中变地可用。用户可以在自定义内存…类中通过选择udm-0 选择这个场。如果在执行UDF 之后写了一个数据文件,那么这个自定义内存场将会保存到这个文件中。相应的源代码可以在FLUENT 中被通译或汇编。
/********************************************************************
UDF:计算温度场的函数并存放在自定义内存中。输出温度的最小值,最下值和平均值。
*********************************************************************/
#include "udf.h"
DEFINE_ON_DEMAND(on_demand_calc)
{
Domain *d; /*自从作为一个到DEFINE 宏的自变量,传布域指示器,
Domain数据类型代表了FLUENT中最高水平的数据结构。它充当了一个与网格中所有节点、面和单元线索组合相关的数据容器。*/
real trag = 0.; //定义变量并初始化
real tmax = 0.;
real tmin = 0.;
real temp,volume,vol_tot;
Thread *t: //Thread数据类型是 FLUENT中的数据结构。它充当了一个与它描述的单元或面的组合相关的数据容器。
cell_t c; /*cell_t是线索(thread)内单元标识符的数据类型。它是一个识别给定线索内单元的整数索引。face_t是线索内面标识符的数据类型。它是一个识别给定线索内面的整数索引。*/
d = Get_Domain(1); /*使用FLUENT 设备获得域,
获得控制区,
Get_Domain is a macro that retrieves the pointer to a domain */
/*轮循于域中的所有单元脉络*/
thread_loop_c(t,d) /* We require all cell threads to.. */
{
/*计算温度的最大值,最小值和体积平均值*/
/*轮循于所有的单元*/
begin_c_loop(c,t)
{
volume = C_VOLUME(c,t); /*获得单元体积*/
temp = C_T(c,t); /*获得单元温度*/
if (temp < tmin || tmin == 0.) tmin = temp;
if (temp > tmax || tmax == 0.) tmax = temp;
vol_tot += volume; //总体积
tavg += temp*volume; //温度关于体积积分
}
end_c_loop(c,t)
tavg /= vol_tot; //体积平均温度
printf("\n Tmin = %g Tmax = %g\n Tvag = %g\n",tmin,tmax,tavg);
/*计算温度函数,并存放在自定义内存中*/
/*(位置指标0) */
begin_c_loop(c,t)
{
temp = C_T(c,t);
C_UDMI(c,t,0) = (temp-tmin)/(tmax-tmin); //宏C_UDMI可以用在你的UDF 中去访问一个位于某个单元特殊用户定义内存的位置。 F_UDMIà面内的用户定义特殊内存。
}
end_c_loop(c,t)
}
}
名为on_demand_calc 的函数没有任何明确的自变量。在函数体内,首先函数所用的变量被定义和初始化。在宣布了函数变量之后,一个轮循宏被用来轮循过域中的每一个单元,一个轮循到另一个轮循,从而轮循过所有的单元。在轮循内部,总体积以及温度的最大值,最小值和体积上平均值得到了计算。这些计算结果被输出到FLUENT 的控制台。然后过每一个单元的第二次轮循用来计算函数f (T) ,并把这个函数存放在自定义内存的0 位置。
No comments:
Post a Comment