}
函数名为 user_rate,函数体中用 if 语句判断是否处于多孔介质区,仅在多孔介质区有化学反应。
7..6 返回变量值并调节参数
下面的 UDF 定义的是 swirl-velocity 的源项。
#include “”
#define OMEGA 50 /* rotational speed of swirler */
#define WEIGHT 1.e20 /* weighting coefficients in linearized equation */
DEFINE_SOURCE(user_swirl,cell,thread,dS,eqn)
{
real w_vel,x[ND_ND],y,source;
CENTROID(x,cell,thread);
y = x[1];
w_vel = y*OMEGA; /* linear w_velocity at the cell */
source = WEIGHT*(w_vel – C_WSWIRL(cell,thread));
dS[eqn] = -WEIGHT;
return source;
}
函数名为 user_swirl,函数计算了变量 source 并且返回其值。函数的各项参数的意义参见。
7..7 调节 FLUENT 变量
下面的函数调节存贮于内存的 FLUENT 变量,函数定义了 x 方向速度的边界条件。
#include “”
DEFINE_PROFILE(inlet_x_velocity,thread,position)
{
real x[ND_ND];
real y;
face_t f;
begin_f_loop(f,thread)
{
F_CENTROID(x,f,thread);
y = x[1];
F_PROFILE(f,thread,position) = 20. -y*y/(.0745*.0745)*20;
}
end_f_loop(f,thread)
}
函数的参数 position 是个数字标签,标记每一步循环(loop)中被设置的变量。函数调节的 FLUENT 变量
F_PROFILE。
7..8 读写 data 或 case 文件
下面的函数介绍了如何读写静态变量 kount,如何计算静态变量请参见 4.6。
#include “”
int kount = 0; /*定义静态变量 kount*/
DEFINE_ADJUST(demo_calc,domain)
{
kount ++;
printf(“kount = %d ”,kount);
}
DEFINE_RW_FILE(writer,fp)
{
printf(“Writing UDF data to data file… ”);
fprintf(fp,”%d”,kount); /*将 kount 写入 data 文件中*/
}
DEFINE_RW_FILE(writer,fp)
{
printf(“Reading UDF data from data file… ”);
fscanf(fp,“%d”,&kount); /*从数据文件中读取 kount 值*/
}
上面有三个函数。如果迭代 10 次,则 kount 值为 10,然后将当前值 10 存贮到数据文件中,如果下次将 kount 值读入
FLUENT 继续运算,则 kount 将在 10 的基础上增加。我们可以存贮任意多的静态变量,不过读写顺序必须一致。
7. 解法器函数(Solver Functions)
7.2.10.1 概述
在很多情况下,UDF 需要得到 FLUENT 解法器中的数据。例如:
1. 所求解的变量及其导数(例如,速度,温度等);
2. 网格和面几何性质(例如,面面积,网格体积,网格质心坐标等);
3. 物质的物理性质(例如,密度,粘性系数,导热系数等)。
! 我们可以取出比热,但是不能修改。
我们可以利用下一节所列 FLUENT 提供的解法器函数,得到解法器中的数据。这里所说的函数是从广义上讲的,因
为其中包括函数和宏,只有在源文件 appropriate.h 中定义的才是真正的函数。
! 如果使用的是 Interpreted 型的 UDF,则只能使用这些 FLUENT 提供的解法器函数。
解法器函数可以与 C 函数一起在函数体中混合使用。为方便起见,一些最常用的 C 函数列在附录 B 中。
下面章节列出的函数中包括它们的参数,参数类型和返回值,还有对该函数说明的源文件。例如
C_CENTROID(x,c,t)
有三个参数:x,c 和 t,其中 c 和 t 为输入参数,x 为输出参数,输出网格的坐标值。
7..2 辅助几何关系
Name(Arguments) Argument Type Returns Source
C_NNODES(c,t)
C_NFACES(c,t)
F_NNODES(f,t)
cell_t c, Thread *t
cell_t c, Thread *t
face_t f, Thread *t
网格节点数
网格面数
面节点数
7..3 网格坐标与面积
Name(Arguments) Argument Type Returns Source
C_CENTROID(x,c,t)
F_CENTROID(x,f,t)
F_AREA(A,f,t)
NV_MAG(A)
C_VOLUME(c ,t)
real x[ND_ND],cell_t c,
Thread *t
real x[ND_ND], face_t f,
Thread *t
A[ND_ND],face_t f,
Thread *t
A[ND_ND]
cell_t c, Thread *t
x(网格坐标)
x(面坐标)
A(面矢量)
面矢量 A 大小
2D 或 3D 网格
体积;对称体
网格体积/2π
7..4 节点坐标与节点(网格)速度
列表中的节点速度与移动网格模拟有关。
Name(Arguments) Argument Type Returns Source
NODE_X[node]
NODE_Y[node]
NODE_Z[node]
NODE_GX[node]
NODE_GY[node]
NODE_GZ[node]
Node *node
Node *node
Node *node
Node *node
Node *node
Node *node
节点的 x 坐标
节点的 y 坐标
节点的 z 坐标
节点的 x 向速度
节点的 y 向速度
节点的 z 向速度
7..5 面变量
下面列表中的函数只能在 segregated solver 中获取,耦合计算时不能引用的。
Name(Arguments) Argument Type Returns Source
F_P(f,t)
F_U(f,t)
F_V(f,t)
F_W(f,t)
F_T(f,t)
F_H(f,t)
face_t f, Thread *t
face_t f, Thread *t
face_t f, Thread *t
face_t f, Thread *t
face_t f, Thread *t
face_t f, Thread *t
face_t f, Thread *t
压力
u 速度
v 速度
w 速度
温度
焓
mem.h(all)