UDF的宏用法及相关算例 联系客服

发布时间 : 星期三 文章UDF的宏用法及相关算例更新完毕开始阅读6c9cff1c866fb84ae45c8df1

下面的UDF计算与温度有关的粘性系数,并返回该值。 #include “udf.h”

DEFINE_PROPERTY(cell_viscosity,cell,thread)/*定义物性的宏*/ {

real mu_lam;

real temp = C_T(cell,thread);/*变量temp存放网格的温度*/ if (temp > 288.) mu_lam = 5.5e-3; else if (temp > 286.)

mu_lam = 143.2135 – 0.49725 * temp; else

mu_lam = 1.;

return mu_lam;/*变量mu_lam存放粘性系数值,函数返回该值*/ }

7.2.9.5 调节参数

下面的UDF给出简单二元气相系统的体积反应速率。 #include “udf.h”

#define K1 2.0e-2 #define K2 5.

DEFINE_VR_RATE(user_rate,cell,thread,r,mole_weight,species_mf,rate,rr_t) {

real s1 = species_mf[0]; real mw1 = mole_weight[0];

if (FLUID_THREAD_P(thread) && THREAD_VAR(thread) .fluid. porous) *rate = K1*s1/pow((1.+K2*s1),2.)/mw1; else

*rate = 0.; }

函数名为 user_rate,函数体中用if语句判断是否处于多孔介质区,仅在多孔介质区有化学反应。 7.2.9.6 返回变量值并调节参数

下面的UDF定义的是swirl-velocity的源项。 #include “udf.h”

#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并且返回其值。函数的各项参数的意义参见2.5.10。 7.2.9.7 调节FLUENT变量

下面的函数调节存贮于内存的FLUENT变量,函数定义了x方向速度的边界条件。 #include “udf.h”

DEFINE_PROFILE(inlet_x_velocity,thread,position) {

87

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.2.9.8 读写data或case文件

下面的函数介绍了如何读写静态变量kount,如何计算静态变量请参见4.6。 #include “udf.h”

int kount = 0; /*定义静态变量kount*/ DEFINE_ADJUST(demo_calc,domain) {

kount ++;

printf(“kount = %d\\n”,kount); }

DEFINE_RW_FILE(writer,fp) {

printf(“Writing UDF data to data file…\\n”);

fprintf(fp,”%d”,kount); /*将kount写入data文件中*/ }

DEFINE_RW_FILE(writer,fp) {

printf(“Reading UDF data from data file…\\n”);

fscanf(fp,“%d”,&kount); /*从数据文件中读取kount值*/ }

上面有三个函数。如果迭代10次,则kount值为10,然后将当前值10存贮到数据文件中,如果下次将kount值读入FLUENT继续运算,则kount将在10的基础上增加。我们可以存贮任意多的静态变量,不过读写顺序必须一致。 7.2.10 解法器函数(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.10.2 辅助几何关系

88

Name(Arguments) C_NNODES(c,t) C_NFACES(c,t) F_NNODES(f,t) Name(Arguments) Argument Type cell_t c, Thread *t cell_t c, Thread *t face_t f, Thread *t Returns 网格节点数 网格面数 面节点数 Source mem.h mem.h mem.h Returns x(网格坐标) x(面坐标) A(面矢量) 面矢量A大小 2D或3D网格体积;对称体网格体积/2π Source metric.h metric.h metric.h metric.h metric.h 7.2.10.3 网格坐标与面积 Argument Type 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 C_CENTROID(x,c,t) F_CENTROID(x,f,t) F_AREA(A,f,t) NV_MAG(A) C_VOLUME(c ,t) 7.2.10.4 节点坐标与节点(网格)速度

列表中的节点速度与移动网格模拟有关。 Name(Arguments) NODE_X[node] NODE_Y[node] NODE_Z[node] NODE_GX[node] NODE_GY[node] NODE_GZ[node] Argument Type Node *node Node *node Node *node Node *node Node *node Node *node Returns 节点的x坐标 节点的y坐标 节点的z坐标 节点的x向速度 节点的y向速度 节点的z向速度 Source metric.h metric.h metric.h mem.h mem.h mem.h 7.2.10.5 面变量

下面列表中的函数只能在segregated solver中获取,耦合计算时不能引用的。 Name(Arguments) F_P(f,t) F_U(f,t) F_V(f,t) F_W(f,t) F_T(f,t) F_H(f,t) F_K(f,t) F_D(f,t) F_YI(f,t,i) F_UDSI(f,t,i) F_UDMI(f,t,i) Argument Type 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 face_t f, Thread *t face_t f, Thread *t, int i face_t f, Thread *t, int i face_t f, Thread *t, int i Returns 压力 u速度 v速度 w速度 温度 焓 湍流动能 湍流能量耗散系数 组分质量分数 用户自定义标量(i表示第几个方程) 用户自定义内存变量(i表示第几个) Source mem.h(all) 7.2.10.6 网格变量

下面列表中的是网格变量,不像面变量,网格变量在耦合与非耦合计算中都能获取(available in both the segregated and the coupled solvers)。下面三个列表中所列出的分别是:计算变量、导数和物性参数。 Name(Arguments) C_P(c,t) C_U(c,t) C_V(c,t)

Argument Type 参数类型都定义为: cell_t c, Returns 压力 u速度 v速度 89

Source mem.h C_W(c,t) C_T(c,t) C_H(c,t) C_YI(c,t) C_UDSI(c,t,i) C_UDMI(c,t,i) C_K(c,t) C_D(c,t) C_RUU(c,t) C_RVV(c,t) C_RWW(c,t) C_RUV(c,t) C_RVW(c,t) C_RUW(c,t) C_FMEAN(c,t) C_FMEAN2(c,t) C_FVAR(c,t) C_FVAR2(c,t) C_PREMIXC(c,t) C_LAM_FLAME _SPEED(c,t) C_CRITICAL_STRAIN _RATE(c,t) C_POLLUT(c,t,i) C_VOF(c,t,0) C_VOF(c,t,1) Name(Arguments) C_DUDX(c,t) C_DUDY(c,t) C_DUDZ(c,t) C_DVDX(c,t) C_DVDY(c,t) C_DVDZ(c,t) C_DWDX(c,t) C_DWDY(c,t) C_DWDZ(c,t) C_DP(c,t)[i] C_D_DENSITY(c,t)[i] Name(Arguments) C_R(c,t) C_MU_L(c,t) C_MU_T(c,t) C_MU_EFF(c,t) C_K_L(c,t) C_K_T(c,t) C_K_EFF(c,t) C_CP(c,t) C_RGAS(c,t) C_DIFF_L(c,t,i,j) Thread *t, int i, int j w速度 温度 焓 组分质量分数 用户自定义标量 用户自定义内存变量 湍流动能 湍流能量耗散系数 uu雷诺应力 vv雷诺应力 ww雷诺应力 uv雷诺应力 vw雷诺应力 uw雷诺应力 第一平均混合物分数 第二平均混合物分数 第一混合物分数偏差 第二混合物分数偏差 反应进程变量 层流火焰速度 临界应变率 污染物组分 第一相体积分数 第二相体积分数 Returns 各向速度导数 压力梯度(i表示方向) 密度梯度(i表示方向) Returns 密度 层流粘性系数 湍流粘性系数 有效粘性系数 导热系数 湍流导热系数 有效导热系数 比热 气体常数 层流组分扩散系数 90 sg_mem.h Argument Type Source mem.h Argument Type Source mem.h