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

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

网格线,dS表示源项对所求输运方程的标量的偏导数,用于对源项的线性化;i标志所定义源项对应于哪个输运方程。使用见 4.2,例子见5.2.1,5.2.2,5.3,6.2.1。

7.2.13 DEFINE_SR_RATE Name DEFINE_SR_RATE Arguments f,t,r,mw,yi,rr Arguments Type Return Type face_t f,Thread *t,void Reaction *r,real *mw,real *yi,real *rr 该函数定义表面化学反应速率。f表示面,t表示面的线,r是结构指针,表示化学反应;mw和yi是个实型指针

数组,mw存贮物质的分子量,yi存贮物质的质量分数,rr设置函数的一个相关参数。函数无返回值,使用见4.8。

7.2.14 DEFINE_UDS_FLUX Name DEFINE_UDS_FLUX Arguments f,t,i Arguments Type Return Type face_t f,Thread *t,int real i 该函数定义用户自定义标量输运方程(user-defined scalar transport equations)的对流通量。f,t分别表示所求通量的面和面的线,i表示第几个输运方程(有处理器传递给本函数)。

7.2.15 DEFINE_UDS_UNSTEADY Name DEFINE_UDS_UNSTEADY Arguments c,t,i, apu,su Arguments Type Return Type cell_t c,Thread *t,void int i,real *apu,real *su 该函数定义用户自定义标量输运方程的非稳态项。c表示网格,t表示网格线,i表示第几个输运方程。在FLUENT中,非稳态项移到RHS中,并以下面的方式离散:

? ????dVunsteady_term???t

?????n?????n?1?

??????V ?t??

??Vn??Vn?1?????

?t?t方程右边第一项为apu,第二项为su。本函数无返回值。 7.2.16 DEFINE_VR_RATE ?Name DEFINE_VR_RATE Arguments Arguments Type Return Type void c,t,r,mw,yi,rr,cell_t c,Thread *t,rr_t Reaction *r,real *mw,real *yi,real *rr,real *rr_t 该函数定义体积化学反应速率。c表示网格,t表示网格线,r表示结构指针,表示化学反应过程,mw指针数组指向存贮物质分子量的变量,yi指向物质的质量分数;rr和rr_t分别设置层流和湍流时函数相关参数。函数无返回值,使用见4.8,例子见6.4.1。

7.2.6 离散相模型宏及其定义的函数

离散模型(DPM)的宏定义的函数与通用宏所定义的函数书写格式是一样的。对于离散相需要强调结构指针p,可以用它得到颗粒的性质和相关信息。下面是具体的宏定义。

7.2.6.1 DEFINE_DPM_BODY_FORCE Name DEFINE_DPM _BODY_FORCE Arguments p,i Argument Type Tracked_Particle *p,int i Return Type real 该函数用于定义除了重力和拉力之外的所有体积力。p为结构指针,i可取0,1,3分别表示三个方向的体积力。函数返回的是加速度。使用见4.4,例子见5.4.2。

7.2.6.2 DEFINE_DPM_DRAG

83

Name Arguments Argument Type Return Type DEFINE_DPM_DRAG Re,p Tracked_Particle *p, real real Re FD?? 224?pDp

函数返回的值是18*CD*Re/24。使用见4.4,例子见5.4.3。 7.2.6.3 DEFINE_DPM_EROSION Name Arguments 该函数定义拉力系数CD,Re为Reynolds数,与颗粒直径和相对于液相速度有关。拉力定义为: 18?CReDArgument Type Return Type DEFINE_DPM_EROSION p,t,f,normal,alpha,Tracked_Particle *p,void Vmag,mdot Thread *t, face_t f,real alpha ,real normal, real Vmag,real mdot 该函数定义颗粒撞击壁面湮灭或产生速率。t为撞击面的线,f为撞击面;数组normal存贮撞击面的单位法向量;alpha中存贮颗粒轨道与撞击面的夹角;Vmag存贮颗粒速度大小,mdot存贮颗粒与壁面撞击率。函数无返回值,颗粒湮灭或产生的计算结果存贮在面变量F_STORAGE_R(f,t,SV_DPMS_EROSION)和F_STORAGE_R(f,t,SV_DPMS_ACCRETION)中。使用见4.4。

7.2.6.4 DEFINE_DPM_INJECTION_INIT Name DEFINE_DPM _INJECTION_INIT Arguments i Argument Type Injection *I Return Type void 该函数用于定义颗粒注入轨道时的物理性质。I是指针,指向颗粒产生时的轨道。对每一次注入,该函数需要在第一步DPM迭代前调用两次,在随后颗粒进入区域前每一次迭代中再调用一次。颗粒的初始化,诸如位置,直径和速度可以通过该函数设定。函数无返回值。

7.2.6.5 DEFINE_DPM_LAW Name Arguments Argument Type Tracked_Particle *p,int ci Return Type void DEFINE_DPM_LAW p,ci 该函数定义液滴和燃烧颗粒的热和质量传输速率。p的意义如前所述,ci表示连续相和离散相是否耦合求解,取1时表示耦合,0时表示不耦合。颗粒的性质随着液滴和颗粒与其周围物质发生传热、传质而改变。函数无返回值。

2.6.6 DEFINE_DPM_OUTPUT Name Arguments Argument Type Return Type DEFINE_DPM_OUTPUT header,void f,p,pt,plane int header, FILE *fp,Tracked_particle *p, Thread *t,Plane *plane 该函数可以得到颗粒通过某一平面(见FLUENT用户手册14.10.6)时的相关变量。header在函数第一次调用时,设为1,以后都为0;fp为文件指针,指向读写相关信息的文件;p为结构指针,t指向颗粒所经过的网格线;plane为 Plane型结构指针(dpm.h),如果颗粒不是穿过一个平面而是仅仅穿过网格表面,值取为NULL。输出信息存贮于指针fp所指向的文件,函数无返回值。

例子见5.4.1。

7.2.6.7 DEFINE_DPM_PROPERTY Name Arguments Argument Type cell_t c, Thread *t,84

Return Type real DEFINE_DPM_PROPERTY c,t,p

Tracked_Particle *p 该函数用于定义离散相物质的物理性质。p为结构指针,c表示网格,t表示网格线。函数返回实型值。 7.2.6.8 DEFINE_DPM_SCALAR_UPDATE Name DEFINE_DPM _SCALAR_UPDATE Arguments c,t,initialize,p Argument Type cell_t c, Thread *t, int initialize,Tracked_particle *p Return Type void 该函数用于更新与颗粒相关的变量或求它们在整个颗粒寿命时间的积分。与颗粒相关的变量可用宏

P_USER_REAL(p,i)取出。c表示颗粒当前所处的网格,t为该网格线。initialize在初始调用本函数时,取为1,其后调用时,取为0。在计算变量对颗粒轨道的积分时,FLUENT就调用本函数。存贮颗粒相关变量的数组大小需要在FLUENT的DPM面版上指定。函数无返回值。

函数的使用见4.4,例子见5.4.1。 7.2.6.9 DEFINE_DPM_SOURCE Name Arguments Argument Type Return Type void DEFINE_DPM_SOURCE c,t,S,strength,p cell_t c,Thread *t,dpms_t *S, real strength, Tracked_Particle *p 该函数用于计算,给定网格中的颗粒在与质量、动量和能量交换项耦合DPM求解前的源项。c表示当前颗粒所在的网格,t为网格线,S为结构指针,指向源项结构dpms_t,其中包含网格的源项。strength表示单位时间内流过的颗粒数目。

p为结构指针。函数求得的源项存贮于S指定的变量中,无返回值。使用见4.4。

7.2.6.10 DEFINE_DPM_SWITCH Name Arguments Argument Type Tracked_Particle *p,int ci Return Type void DEFINE_DPM_SWITCH p,ci 该函数是FLUENT默认的颗粒定律与用户自定义的颗粒定律之间,或不同的默认定律和自定义定律之间的开关函数。p为结构指针,ci为1时,表示连续相与离散相耦合求解,0时表示不耦合求解。

! 参数类型中的Tracked_Particle,dpms_t等是FLUENT为相关模型定义的数据类型。具体含义可以参见相应章节。 7.2.7 多相模型的宏及其定义的函数 7.2.7.1 DEFINE_DRIFT_DIAM Name Arguments Argument Type cell_t c,Thread *t real real DEFINE_DRIFT_DIAM c,t 该函数用于定义代数滑流混合模型(algebraic slip mixture model)颗粒或液滴的直径。c为网格,t为网格线。函数返回颗粒或液滴的直径。使用见4.10。 7.2.7.2 DEFINE_SLIP_VELOCITY Name Arguments Argument Type Domain *domain real void DEFINE_SLIP_VELOCITY domain 该函数用于定义代数滑流混合模型(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

85

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 函数体 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 返回变量值

86