中科大FLUENT讲稿 第七章 自定义函数-5(3)

2019-01-27 11:44

该函数用于定义代数滑流混合模型(algebraic slip mixture model)的滑流速度(slip velocity)。该函数作用范围是整个网格区域,无返回值。使用见4.9。

7.2.8 特定线的指针

在很多应用UDF的场合,需要在一条特定的线上进行操作。为满足这种要求,首先,可以从Boundary Conditions 面板得到需要操作的线的ID,然后就可用宏Lookup_Thread将指针指向该条线。

在下面的例子中, C语言函数Print_Thread_Face_Centroids调用FLUENT的宏Lookup_Thread将指针指向特定的线,然后将线上所有面的质心坐标输入文件中。宏

DEFINE_ON_DEMAND定义的函数get_coords取出其中的两条线,并打印线上所有面的质心坐标。

#include “udf.h”

extern Domain *domain FILE *fout

static void

Print_Thread_Face_Centroids(Domain *domain,int id) {

real FC[2]; face_t f;

Thread *t=Lookup_Thread(domain,id);

fprintf(fout, “thread id %d\\n”,id); begin_f_loop(f,,t) {

F_CENTROID(FC,f,t);

fprintf(fout,“f%d %g %g %g\\n”,f,FC[0],FC[1],FC[2]); }

end_f_loop(f,t) fprintf(fout,“\\n”); }

DEFINE_ON_DEMAND(get_coords) {

fout = fopen(“faces.out”,“w”);

Printf_Thread_Face_Centroids(domain,2); Printf_Thread_Face_Centroids(domain,4); fclose(fout); }

7.2.9 函数体

89

7.2.9.1 介绍

用户自定义函数体部分包含在紧跟着宏DEFINE_定义的大括弧内,如下例。这和标准C语言函数体的定义是相同的。

DEFINE_PROPERTY(cell_viscosity,cell,thread) {

real mu_lam;

real temp = C_T(cell,thread);

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; }

7.2.9.2 Interpreted UDFs的限制性

Interpreted型书写函数体时并不能完全应用C语言函数,这在前面有过论述。此外,数量的单位制必须采用国际单位制。

7.2.9.3 函数的功能

UDFs执行五种功能:

1. 返回变量值; 2. 调节参数;

3. 返回变量值并且调节参数;

4. 调节FLUENT的变量(不以参数形式传递); 5. 向case或data文件读写信息。

宏定义的函数返回类型如果不是void型,就返回实型值。下面的例子分别说明不同功能的函数。

7.2.9.4 返回变量值

下面的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;

90

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];

91

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) {

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 ++;

92

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 辅助几何关系 Name(Arguments) C_NNODES(c,t) C_NFACES(c,t) F_NNODES(f,t)

93

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


中科大FLUENT讲稿 第七章 自定义函数-5(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2008年秋VFP上机练习试卷1(注意保存、以后有用)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: