《用户自定义函数 FLUENT 入门培训说课材料》由会员分享,可在线阅读,更多相关《用户自定义函数 FLUENT 入门培训说课材料(23页珍藏版)》请在金锄头文库上搜索。
1、用户自定义函数,FLUENT 入门培训,简 介,什么是用户自定义函数(UDF)? 用户自定义函数,或UDF,是用户自编的程序,它可以动态的连接到Fluent求解器上来提高求解器性能。 标准C语言的库函数 Trigonometric, exponential, control blocks, do-loops, file i/o等。 预定义宏 通过这些预定义宏,可以获得Fluent求解器得到的数据。 为什么要使用UDF? 标准界面及功能并不能满足每个用户的需要 。 定制边界条件,定义材料属性,定义表面和体积反应率,定义FLUENT输运方程中的源项,用户自定义标量输运方程(UDS)中的源项扩散率函
2、数等等。 在每次迭代的基础上调节计算值 (需要时)UDF的异步执行 方案的初始化。,用户介入FLUENT求解器,User-Defined Properties,User-Defined BCs,Segregated,PBCS,Exit Loop,Repeat,Check Convergence,Update Properties,Solve Turbulence Equation(s),Solve Species,Solve Energy,Initialize,Begin Loop,DBCS,Solve Other Transport Equations as required,Solver?
3、,Solve Mass, Momentum, Energy, Species,User-defined ADJUST,UDF基础,单元和单元面被组合为一些区域(zones),这些区域规定了计算域(例如,边界条件、源项) 在 UDF中, 域(zones) 用线(threads)来联系。 循环宏( looping macro)对线上的所有单元进行操作。 例如: 用面循环宏访问面域 3(zone 3)(入口)上的563个面。 每个面的位置都通过对空间上的设置来计算表示 在用户操作界面中,可以自动调用UDF中定义的求解器变量 所有的求解器变量,都使用SI单位。,例题抛物线入流速度条件,二维弯管中,我们
4、来定义一个抛物线入流速度条件 x 方向上的速度用下面公式定义,第一步 准备源代码,函数inlet_x_velocity 通过 DEFINE_PROFILE宏来定义 所有UDF中的宏都使用DEFINE_ 开头。 inlet_x_velocity 将会在用 户操作界面中选择定义。 在DEFINE_PROFILE中,通过 thread和nv分别对域和变量定 义。 宏 begin_f_loop 能循环指向 线上所有的面 f F_CENTROID 宏表示单元x方向的向量 F_PROFILE 宏代表面 f 上的速度分量,#include udf.h“ DEFINE_PROFILE(inlet_x_velo
5、city, thread, nv) float x3; /* Position vector*/ float y; face_t f; begin_f_loop(f, thread) F_CENTROID(x,f,thread); y = x1; F_PROFILE(f, thread, nv) = 20.*(1.- y*y/(.0745*.0745); end_f_loop(f, thread) ,第三步 解释或编译UDF,解释 UDF 把UDF源代码文件输入 Source File Name列表中。 点击 Interpret。 FLUENT控制面板中将会显示汇编语言代码。,编译 UDF 把
6、UDF源代码文件输入 Source Files 列表中。 点击 Build ,创建UDF库函数。 点击 Load ,读取UDF库函数。 如果需要还能清除(unload)库函数,Define,User-Defined,Functions,Interpreted,Define,User-Defined,Functions,Compiled,Define,User-Defined,Functions,Manage,比较解释和编译的 UDF,既可以运行时通过读入和解释来调用函数,也可以通过使用FLUENT中的编译器把函数编译到一个公共的函数库。 比较解释和编译代码 解释 解释的程序只是保存在电脑内存中
7、。 按“一个接一个”的基本顺序运行代码。 优势 不需要第三方编译器。 劣势 运行慢,占内存。 编译 (详细内容请参阅FLUENT用户手册中的介绍) UDF 代码被一次性编译成机器语言 (目标文件). 高效地运行 UDFs。 创建能被求解器链接的函数库。 具备很多解释没有的功能,例如并行算法( mixed mode arithmetic )、结构申明( structure references )等。,第四步 激活 UDF,选择要使用UDF的窗口,例子中,我们打开边界条件设置窗口。 点击X-Velocity 右边的下拉菜单,把Constant 换成UDF函数。,第五步和第六步 运行计算,在Ite
8、rate对话框中,可以改变UDF Profile Update Interval 的值 (默认值为 1). 这个值用来控制UDF更新速度 (如果是非定常,还可以是计算步数和计算步长) 。 运行计算。,例中的数值解,右图显示的是二维弯管中的速度场。 下图显示的是入口的速度矢量,注意 使用的抛物线函数。,宏,宏是FLUENT定义的函数。 UDF通过DEFINE_ 宏定义函数。 变量宏可以调用域上变量和单元信息。 工具宏具有循环功能,线指示器,向量和数值函数。 宏都被定义在头文件中(header file) udf.h 的头文件必须包涵在源代码中。 #include “udf.h” 头文件必须在有效
9、的工作路径中。 一般保存在 Fluent.Inc/src/ 路径下 UDF用户手册中列出了所有经常使用的宏。,Help,More Documentation,DEFINE 宏,任何UDF都必须以DEFINE_ 宏开始: 18 个通用解算器宏和 13 个离散相模型宏和多项宏 (未列出):,DEFINE_ADJUST(name,domain); 通用目标 UDF ,每个计算步都被调用 DEFINE_INIT(name,domain); 初始化计算域变量 DEFINE_ON_DEMAND(name); 定义“根据需要运行”的函数 DEFINE_RW_FILE(name,fp); 用户读写case/d
10、ata文件 DEFINE_PROFILE(name,thread,index); defines boundary profiles定义边界条件 DEFINE_SOURCE(name,cell,thread,dS,index); defines source terms定义源项 DEFINE_HEAT_FLUX(name,face,thread,c0,t0,cid,cir); defines heat flux定义热流通量 DEFINE_PROPERTY(name,cell,thread); defines material properties定义材料属性 DEFINE_DIFFUSIVIT
11、Y(name,cell,thread,index); 定义UDS和特殊的差分格式 DEFINE_UDS_FLUX(name,face,thread,index); 定义UDS通量项 DEFINE_UDS_UNSTEADY(name,cell,thread,index,apu,su); 定义UDS衰减项 DEFINE_SR_RATE(name,face,thread,r,mw,yi,rr); 定义面反应系数 DEFINE_VR_RATE(name,cell,thread,r,mw,yi,rr,rr_t); 定义vol反应系数 DEFINE_SCAT_PHASE_FUNC(name,cell,fa
12、ce); defines scattering phase function for DOM定义DOM中相散射函数 DEFINE_DELTAT(name,domain); 定义非定常问题中的时间步长变量 DEFINE_TURBULENT_VISCOSITY(name,cell,thread); 定义湍流粘性计算方式 DEFINE_TURB_PREMIX_SOURCE(name,cell,thread,turbflamespeed,source); 定义湍动火焰速度 DEFINE_NOX_RATE(name,cell,thread,nox); 定义NOx中的产生和消失系数,线和循环工具宏,cel
13、l_t c; 定义 c 为单元线(cell thread) face_t f;定义 f 为面线(face thread) Thread *t; t定义 t 为线指针 Domain *d; d定义 d 为所有线指针 thread_loop_c(t, d) 循环访问域d中单元线t上的所有单元 thread_loop_f(t, d) 循环访问域d中面线t上的所有面 begin_c_loop(c, ct) end_c_loop(c, ct) 循环访问单元线ct上的所有c单元 begin_f_loop(f, ft) end_f_loop(f, ft) 循环访问面线ft上的所有f面 c_face_loop
14、(c, t, n) 循环访问线t上的所有面单元c Thread *tf = Lookup_Thread(domain, ID); 返回域名为ID的线指针 ID = THREAD_ID(tf); 返回线指针tf指向的域名(ID),cell_t, face_t, Thread, Domain 是 FLUENT UDF 数据结构的一部分,几何和时间宏,C_NNODES(c,t); 返回节点/单元 C_NFACES(c,t); 返回面/单元 F_NNODES(f,t);返回节点/面 C_CENTROID(x,c,t);返回单元质心坐标于数组x中 F_CENTROID(x,f,t); 返回表面中心坐标于
15、数组x中 F_AREA(A,f,t); 返回面向量于数组 A中 C_VOLUME(c,t); 返回单元体积 C_VOLUME_2D(c,t); 返回二维单元体积 (轴对称模型) real flow_time(); 返回实际时间 int time_step; 返回计算步数 RP_Get_Real(“physical-time-step”); 返回计算步长,单元变量宏,C_R(c,t);密度 C_P(c,t);压力 C_U(c,t);U方向速度 C_V(c,t);V方向速度 C_W(c,t);W方向速度 C_T(c,t);温度 C_H(c,t);焓 C_K(c,t);湍流运动能 (k) C_D(c
16、,t);湍流运动能的分散速率 () C_O(c,t);确定的分散速率 () C_YI(c,t,i);物质质量分数 C_UDSI(c,t,i); 用户定义的标量 C_UDMI(c,t,i); 用户定义的存储器 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_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);