UDF的宏用法及相关算例.docx
- 文档编号:7415123
- 上传时间:2023-05-11
- 格式:DOCX
- 页数:85
- 大小:573.49KB
UDF的宏用法及相关算例.docx
《UDF的宏用法及相关算例.docx》由会员分享,可在线阅读,更多相关《UDF的宏用法及相关算例.docx(85页珍藏版)》请在冰点文库上搜索。
UDF的宏用法及相关算例
7自概念函数(UDF)
,概述
用户自概念函数(User-DefinedFunctions,即UDFs)能够提高FLUENT程序的标准计算功能。
它是用C语言书写的,有两种执行方式:
interpreted型和compiled型。
Interpreted型比较容易利用,可是可利用代码(C语言的函数等)和运行速度有限制。
Compiled型运行速度快,而且也没有代码利用范围的限制,但利用略为繁琐。
咱们能够用UDFs来概念:
a)边界条件
b)源项
c)物性概念(除比热外)
d)表面和体积反映速度
e)用户自概念标量输运方程
f)离散相模型(例如体积力,拉力,源项等)
g)代数滑流(algebraicslip)混合物模型(滑流速度和微粒尺寸)
h)变量初始化
i)壁面热流量
j)利用用户自概念标量后处置
边界条件UDFs能够产生依托于时刻,位移和流场变量相关的边界条件。
例如,咱们能够概念依托于流动时刻的x方向的速度入口,或概念依托于位置的温度边界。
边界条件剖面UDFs用宏DEFINE_PROFILE概念。
有关例子能够在和中找到。
源项UDFs能够概念除DO辐射模型之外的任意输运方程的源项。
它用宏DEFINE_SOURCE概念。
有关例子在和中能够找到。
物性UDFs可用来概念物质的物理性质,除比热之外,其它物性参数都能够概念。
例如,咱们能够概念依托于温度的粘性系数。
它用宏DEFINE_PROPERTY概念,相关例子在中。
反映速度UDFs用来概念表面或体积反映的反映速度,别离用宏DEFINE_SR_RATE和DEFINE_VR_RATE概念,例子见。
离散相模型用宏DEFINE_DPM概念相关参数,见。
UDFs还能够对任意用户自概念标量的输运方程进行初始化,概念壁面热流量,或计算存贮变量值(用用户自概念标量或用户自概念内存量)使之用于后处置。
相关的应用见于,,和。
UDFs有着普遍的应用,本文并非能一一表达。
若是在利用中碰到问题,能够联系FLUENT技术支部门要求帮忙。
在此推荐一个网站,上面有FLUENT论坛,可进行相关询问和讨论。
7.1.1书写UDFs的大体步骤
在利用UDFs处置FLUENT模型的进程中,咱们一样依照下面五步进行:
1.概念上函数设计
2.利用C语言书写
3.编译调试C程序
4.执行UDF
5.分析与比较结果
第一步分析咱们所处置的模型,目的是取得咱们要书写的UDF的数学表达式。
第二步将数学表达式转化成C语言源代码。
第三步编译调试C语言源代码。
第四步在FLUENT中执行UDF。
最后一步,将所取得的结果与咱们要求的进行比较,若是不知足要求,那么需要重复上面的步骤,直到与咱们期望的吻合为止。
7.1.2Interpreted型与Compiled型比较
CompiledUDFs执行的是机械语言,这和FLUENT本身运行的方式是一样
的。
一个叫做Makefile的进程能够激活C编辑器,编译咱们的C语言代码,从而成立一个目标代码库,目标代码库中包括有高级C语言的低级机械语言诠释。
在运行的时候,一个叫做“dynamicloading”的进程将目标代码库与FLUENT连接。
一旦连接以后,连接关系就会在case文件中与目标代码库一路保留,因此读入case文件时,FLUENT就会自动加载与目标代码库的连接。
这些库的成立是基于特定运算机和特定FLUENT版本的,因此升级FLUENT版本后,就必需从头成立相应的库。
相反,InterpretedUDFs是在运行的时候直接装载编译C语言代码的。
在这种情形下,生成的机械代码不依托于运算机和FLUENT版本。
编译后,函数信息将会保留在case文件中,因此读入case文件时,FLUENT也会自动加载相应的函数。
InterpretedUDFs具有较强的可移植性,而且编译比较简单。
关于简单的UDFs,若是对运行速度要求不高,一样就采纳Interpreted型的。
下面列出的是两种UDFs的一些特性:
1.InterpretedUDFs
——独立于运算机结构;
——能够完全看成CompiledUDFs利用;
——不能与其它编译系统或用户库连接;
——只支持部份C语言,不能包括:
goto语句,非ANSI-C语法,结构,联合,函数指针,函数数组等。
!
InterpretedUDFs能够利用FLUENT提供的宏,间接引用存贮于FLUENT的变量,详见。
2.CompiledUDFs
——运行速度比InterpretedUDFs快;
——能够完全于C语言结合;
——能够用任何兼容ANSI-C的编辑器编译;
——对不同FLUENT版本(2D或3D)需要成立不同的共享库;
——不必然能够看成InterpretedUDFs利用。
咱们在利用中第一要依照具体情形,明确利用哪一种UDFs,然后才能进一步去实现,在利用中要注意上面表达的事项。
第二节书写UDFs
概述
书写Interpreted型和Compiled型用户自概念函数的进程和书写格式是一样的。
要紧的区别在于与C语言的结合程度,Compiled型能够完全利用C语言的语法,而Interpreted型只能利用其中一小部份,这在前面有过论述。
7.2.2UDF格式
通用的UDF格式由三部份组成:
1.概念恒定常数和包括库文件,别离由#DEFINE和#INCLUDE陈述(见);
2.宏DEFINE_*概念UDF函数(见);
3.函数体部份(见)
包括库有,,,,等,其中是必不可少的,书写格式为#include“”;所有数值都应采纳SI单位制;函数体部份字母采纳小写,Interpreted型只能够包括FLUENT支持的C语言语法和函数。
7.包括库
库文件必需C函数开头包括。
7.概念函数
简介
Fluent公司提供了一套宏,来帮忙咱们概念函数。
这些宏都以DEFINE_开始,对它们的说明包括在文件中,因此咱们必需要包括库。
为了方便利用,咱们把对文件中说明宏列在附录A中。
UDF利用宏DEFINE_概念,括号列表中第一个参数代表函数名。
例如
DEFINE_PROFILE(inlet_x_velocity,thread,position)
概念了一个名为inlet_x_velocity的函数。
!
所有函数名必需小写
紧接着函数名的是函数的输入参数,如上函数inlet_x_velocity有两个输入参数:
thread和position,thread是一个指针,指向数据类型Thread,position是个整数(见)。
UDF编译和连接以后,函数名就会出此刻FLUENT相应的下拉列表内。
如上述函数,编译连接以后,就能够在相应的边界条件面板内找到一个名为inlet_x_velocity的函数,选定以后就能够够利用。
7..2文件中对宏DEFINE_的说明
在文件中,对附录A的宏作了说明,例如:
#defineDEFINE_PROFILE(name,t,I)voidname(Thread*t,inti)
通用的宏说明格式为
#definemacroreplacement-text
在编译前,C预处置器(即cpp)先进行宏替代。
例如
DEFINE_PROFILE(inlet_x_velocity,thread,position)
替代为
voidinlet_x_velocity(Thread*thread,intposition)
替代后的函数返回实型值或不返回任何值。
如上述函数由于是void型的,因此不返回任何值。
7..3宏DEFINE
宏DEFINE是用来概念UDFs的,能够分为三类:
通用的,离散相的和多相的。
从宏DEFINE下划线的后缀,咱们能够看出该宏是用来概念哪一种类型函数的。
如DEFINE_SOURCE概念的函数用来修改输运方程源项,DEFINE_PROPERTY概念的函数用来概念物质的物理性质。
通用的宏在详述,离散相和多相的别离在中详述。
下面是附录A的简列。
通用类型:
1.DEFINE_ADJUST
2.DEFINE_DIFFUSIVITY
3.DEFINE_HEAT_FLUX
4.DEFINE_INIT
5.DEFINE_ON_DEMAND
6.DEFINE_PROFILE
7.DEFINE_PROPERTY
8.DEFINE_RW_FILE
9.DEFINE_SCAT_PHASE_FUNC
10.DEFINE_SOURCE
11.DEFINE_SR_RATE
12.DEFINE_UDS_FLUX
13.DEFINE_UDS_UNSTEADY
14.DEFINE_VR_RATE
离散相模型:
1.DEFINE_DPM_BODY_FORCE
2.DEFINE_DPM_DRAG
3.DEFINE_DPM_EROSION
4.DEFINE_DPM_INJECTION_INIT
5.DEFINE_DPM_LAW
6.DEFINE_DPM_OUTPUT
7.DEFINE_DPM_PROPERTY
8.DEFINE_DPM_SCALAR_UPDATE
9.DEFINE_DPM_SOURCE
10.DEFINE_DPM_SWITCH
多相模型:
1.DEFINE_DRIFT_DIAMETER
2.DEFINE_SLIP_VELOCITY
7..2数据类型的概念
作为对C语言数据类型的补充,FLUENT概念了几种特殊的数据类型,最经常使用的是:
Thread,cell_t,face_t,Node和Domain。
Thread是相应边界或网格区域的结构类型数据;cell_t表示单唯一个操纵体体积元,用来概念源项或物性;face_t对应于网格面,用来概念入口边界条件等;Node表示相应的网格节点;Domain是一种结构,其中包括所有的threads,cells,faces和nodes。
!
Thread,cell_t,face_t,Node和Domain要区分大小写。
7.通用宏及其概念的函数
宏DEFINE用来概念UDFs,下面是通用宏的具体说明。
.1DEFINE_ADJUST
Name
Arguments
ArgumentsType
ReturnType
DEFINE_ADJUST
domain
Domain*domain
void
该函数在每一步迭代开始前,即在求解输运方程前执行。
能够用来修改调剂流场变量,计算积分或微分等。
参数domain在执行时,传递给处置器,通知处置器该函数作用于整个流场的网格区域。
如何激活该函数请参见,具体求解例子见,和。
7.2.5.2DEFINE_DIFFUSIVITY
Name
Arguments
ArgumentsType
ReturnType
DEFINE_DIFFUSIVITY
c,t,i
cell_tc,Thread*t,inti
real
该函数概念的是组分扩散系数或用户自概念标量输运方程的扩散系数,c代表网格,t是指向网格线的指针,i表示第几种组分或第几个用户自概念标量(传递给处置器)。
函数返回的是实型数据。
例子见。
7.2.5.3DEFINE_HEAT_FLUX
Name
Arguments
ArgumentsType
ReturnType
DEFINE_HEAT_FLUX
f,t,c0,t0,
cid,cir
face_tf,Thread*t,
cell_tc,Thread*t0,
realcid[],realcir[]
void
该函数概念的是网格与临近壁面之间扩散和辐射热流量。
f表示壁面,t指向壁面线,c0表示临近壁面的网格,t0指向网格线。
函数中需要给出热扩散系数(cid)和辐射系数(cir),才能求出扩散热流量(qid)和辐射热流量(qir)。
在计算时,FLUENT依照下面的公式求解:
qid=cid[0]+cid[1]×C_T(c0,t0)-cid[2]×F_T(f,t)-cid[3]×pow(F_T(f,t),4)
qir=cir[0]+cir[1]×C_T(c0,t0)-cir[2]×F_T(f,t)-cir[3]×pow(F_T(f,t),4)
该函数无返回值。
如何激活函数见,例子见。
7.2.6DEFINE_INIT
Name
Arguments
ArgumentsType
ReturnType
DEFINE_INIT
domain
Domain*domain
void
该函数用于初始化流场变量,它在FLUENT默许的初始化以后执行。
作用区域是全场,无返回值。
函数的激活见,例子见和。
7.2.7DEFINE_ON_DEMAND
Name
Arguments
ArgumentsType
ReturnType
DEFINE_ON_DEMAND
void
该函数不是在计算中由FLUENT自动挪用,而是依照需要手工调剂运行。
如何执行见,例子见。
7.2.8DEFINE_PROFILE
Name
Arguments
ArgumentsType
ReturnType
DEFINE_PROFILE
t,i
cell_tc,Thread*t
real
该函数概念边界条件。
t指向概念边界条件的网格线,i用来表示边界的位置。
函数在执行时,需要循环扫遍所有的边界网格线,值存贮在F_PROFILE(f,t,i)中,无返回值。
选择利用本函数见,例子见,,,,和。
7.2.9DEFINE_PROPERTY
Name
Arguments
ArgumentsType
ReturnType
DEFINE_PROPERTY
c,t
cell_tc,Thread*t
real
该函数用来概念物质物性参数。
c表示网格,t表示网格线,返回实型值。
利用见,例子见。
7.2.10DEFINE_RW_FILE
Name
Arguments
ArgumentsType
ReturnType
DEFINE_RW_FILE
fp
FILE*fp
void
该函数用于读写case和data文件。
fp是指向所读写文件的指针。
利用见,例子见。
7.2.11DEFINE_SCAT_PHASE_FUNC
Name
Arguments
ArgumentsType
ReturnType
DEFINE_SCAT
_PHASE_FUNC
c,f
realc,real*f
real
该函数概念DO(DiscreteOrdinate)辐射模型中的散射相函数(radiationscatteringphasefunction)。
计算两个变量:
从i向到j向散射的辐射能量分数和前向散射因子(forwardscatteringfactor)。
c表示的是i和j向夹角的余弦值,散射的能量分数由函数返回,前向散射因子存贮在指针f所指的变量中。
处置器对每种物质,都会挪用此函数,别离成立各物质的散射矩阵。
7.2.12DEFINE_SOURCE
Name
Arguments
ArgumentsType
ReturnType
DEFINE_SOURCE
c,t,dS,i
cell_tc,Thread*t,realdS[],inti
real
该函数概念,除DO辐射模型之外,输运方程的源项。
在计算中,函数需要扫描全场网格。
c表示网格,t表示网格线,dS表示源项对所求输运方程的标量的偏导数,用于对源项的线性化;i标志所概念源项对应于哪个输运方程。
利用见,例子见,,,。
7.2.13DEFINE_SR_RATE
Name
Arguments
ArgumentsType
ReturnType
DEFINE_SR_RATE
f,t,r,mw,yi,rr
face_tf,Thread*t,Reaction*r,real*mw,real*yi,real*rr
void
该函数概念表面化学反映速度。
f表示面,t表示面的线,r是结构指针,表示化学反映;mw和yi是个实型指针数组,mw存贮物质的分子量,yi存贮物质的质量分数,rr设置函数的一个相关参数。
函数无返回值,利用见。
7.2.14DEFINE_UDS_FLUX
Name
Arguments
ArgumentsType
ReturnType
DEFINE_UDS_FLUX
f,t,i
face_tf,Thread*t,inti
real
该函数概念用户自概念标量输运方程(user-definedscalartransportequations)的对流通量。
f,t别离表示所求通量的面和面的线,i表示第几个输运方程(有处置器传递给本函数)。
7.2.15DEFINE_UDS_UNSTEADY
Name
Arguments
ArgumentsType
ReturnType
DEFINE_UDS_UNSTEADY
c,t,i,
apu,su
cell_tc,Thread*t,inti,real*apu,real*su
void
该函数概念用户自概念标量输运方程的非稳态项。
c表示网格,t表示网格线,i表示第几个输运方程。
在FLUENT中,非稳态项移到RHS中,并以下面的方式离散:
方程右边第一项为apu,第二项为su。
本函数无返回值。
7.2.16DEFINE_VR_RATE
Name
Arguments
ArgumentsType
ReturnType
DEFINE_VR_RATE
c,t,r,mw,yi,rr,rr_t
cell_tc,Thread*t,Reaction*r,real*mw,real*yi,real*rr,real*rr_t
void
该函数概念体积化学反映速度。
c表示网格,t表示网格线,r表示结构指针,表示化学反映进程,mw指针数组指向存贮物质分子量的变量,yi指向物质的质量分数;rr和rr_t别离设置层流和湍流时函数相关参数。
函数无返回值,利用见,例子见。
7.离散相模型宏及其概念的函数
离散模型(DPM)的宏概念的函数与通用宏所概念的函数书写格式是一样的。
关于离散相需要强调结构指针p,能够用它取得颗粒的性质和相关信息。
下面是具体的宏概念。
7..1DEFINE_DPM_BODY_FORCE
Name
Arguments
ArgumentType
ReturnType
DEFINE_DPM
_BODY_FORCE
p,i
Tracked_Particle*p,inti
real
该函数用于概念除重力和拉力之外的所有体积力。
p为结构指针,i可取0,1,3别离表示三个方向的体积力。
函数返回的是加速度。
利用见,例子见。
7..2DEFINE_DPM_DRAG
Name
Arguments
ArgumentType
ReturnType
DEFINE_DPM_DRAG
Re,p
Tracked_Particle*p,realRe
real
该函数概念拉力系数CD,Re为Reynolds数,与颗粒直径和相关于液相速度有关。
拉力概念为:
函数返回的值是18*CD*Re/24。
利用见,例子见。
7..3DEFINE_DPM_EROSION
Name
Arguments
ArgumentType
ReturnType
DEFINE_DPM_EROSION
p,t,f,normal,alpha,Vmag,mdot
Tracked_Particle*p,Thread*t,
face_tf,realalpha
,realnormal,
realVmag,realmdot
void
该函数概念颗粒撞击壁面湮灭或产生速度。
t为撞击面的线,f为撞击面;数组normal存贮撞击面的单位法向量;alpha中存贮颗粒轨道与撞击面的夹角;Vmag存贮颗粒速度大小,mdot存贮颗粒与壁面撞击率。
函数无返回值,颗粒湮灭或产生的计算结果存贮在面变量F_STORAGE_R(f,t,SV_DPMS_EROSION)和F_STORAGE_R(f,t,SV_DPMS_ACCRETION)中。
利用见。
7..4DEFINE_DPM_INJECTION_INIT
Name
Arguments
ArgumentType
ReturnType
DEFINE_DPM
_INJECTION_INIT
i
Injection*I
void
该函数用于概念颗粒注入轨道时的物理性质。
I是指针,指向颗粒产生时的轨道。
对每一次注入,该函数需要在第一步DPM迭代前挪用两次,在随后颗粒进入区域前每一次迭代中再挪用一次。
颗粒的初始化,诸如位置,直径和速度能够通过该函数设定。
函数无返回值。
7..5DEFINE_DPM_LAW
Name
Arguments
ArgumentType
ReturnType
DEFINE_DPM_LAW
p,ci
Tracked_Particle*p,intci
void
该函数概念液滴和燃烧颗粒的热和质量传输速度。
p的意义如前所述,ci表示持续相和离散相是不是耦合求解,取1时表示耦合,0时表示不耦合。
颗粒的性质随着液滴和颗粒与其周围物质发生传热、传质而改变。
函数无返回值。
DEFINE_DPM_OUTPUT
Name
Arguments
ArgumentType
ReturnType
DEFINE_DPM_OUTPUT
header,f,p,pt,plane
intheader,
FILE*fp,Tracked_particle*p,Thread*t,Plane*plane
void
该函数能够取得颗粒通过某一平面(见FLUENT用户手册)时的相关变量。
header在函数第一次调历时,设为1,以后都为0;fp为文件指针,指向读写相关信息的文件;p为结构指针,t指向颗粒所通过的网格线;plane为
Plane型结构指针(),若是颗粒不是穿过一个平面而是仅仅穿过网格表面,值取为NULL。
输出信息存贮于指针fp所指向的文件,函数无返回值。
例子见。
7..7DEFINE_DPM_PROPERTY
Name
Arguments
ArgumentType
ReturnType
DEFINE_DPM_PROPERTY
c,t,p
cell_tc,
Thread*t,Tracked_Particle*p
real
该函数用于概念离散相物质的物理性质。
p为结构指针,c表示网格,t表示网格线。
函数返回实型值。
7..8DEFINE_DPM_SCALAR_UPDATE
Name
Arguments
ArgumentType
ReturnType
DEFINE_DPM
_SCALAR_UPDATE
c,t,initialize,p
cell_tc,
Thread*t
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- UDF 用法 相关