UDF 自定义函数解读ppt课件.ppt
《UDF 自定义函数解读ppt课件.ppt》由会员分享,可在线阅读,更多相关《UDF 自定义函数解读ppt课件.ppt(65页珍藏版)》请在三一办公上搜索。
1、用户自定义函数,UDF,用户自定义函数,用户自定义函数或UDF 是用户自编的程序它可以被动态的连接到Fluent 求解器上来提高求解器性能用户自定义函数用C 语言编写使用DEFINE 宏来定义UDFs 中可使用标准C 语言的库函数也可使用预定义宏Fluent Inc.提供通过这些预定义宏可以获得Fluent 求解器得到的数据,UDF分类与区别,UDFs 使用时可以被当作解释函数或编译函数解释函数在运行时读入并解释编译UDFs 则在编译时被嵌入共享库中并与Fluent 连接解释UDFs 用起来简单但是有源代码和速度方面的限制不足。编译型UDFs 执行起来较快也没有源代码限制但设置和使用较为麻烦,
2、UDF的用途满足用户个性化需求,边界条件材料性质表面与体积反应速率输运方程源项用户标量输运方程(UDS)调节每次迭代值初始化流场异步执行后处理改善模型改进(离散项模型,多相混合物模型,辐射模型等),UDF举例,上壁面温度 300K,绝热壁面,绝热壁面,温度: 315K,温度分布,Profile处理,(Temp point 26)(x 0.00E-03 2.00E-03 4.00E-03 6.00E-03 8.00E-03 1.00E-02 1.20E-02 1.40E-02 1.60E-02 1.80E-02 2.00E-02 2.20E-02 2.40E-02 2.60E-02 2.80E-
3、02 3.00E-02 3.20E-02 3.40E-02 3.60E-02 3.80E-02 4.00E-02 4.20E-02 4.40E-02 4.60E-02 4.80E-02 5.00E-02 )(y 0.00E+00 0.00E+00 0.00E+00 0.00E+00 0.00E+00 0.00E+00 0.00E+00 0.00E+00 0.00E+00 0.00E+00 0.00E+00 0.00E+00 0.00E+00 0.00E+00 0.00E+00 0.00E+00 0.00E+00 0.00E+00 0.00E+00 0.00E+00 0.00E+00 0.00E
4、+00 0.00E+00 0.00E+00 0.00E+00 0.00E+00 )(t 3.49E+02 3.50E+02 3.50E+02 3.47E+02 3.46E+02 3.44E+02 3.41E+02 3.39E+02 3.36E+02 3.33E+02 3.31E+02 3.28E+02 3.26E+02 3.24E+02 3.22E+02 3.20E+02 3.19E+02 3.18E+02 3.17E+02 3.16E+02 3.16E+02 3.16E+02 3.15E+02 3.15E+02 3.15E+02 3.15E+02 ),Profile处理要点,(和一般计算一样
5、设置求解器,模型等)DefineProfileRead (数据)DefineBoundaryCondition所需设置的面ThermalTemperatureTemp t(和一般计算一样,设置其它边值条件、初值条件及求解与结果检查等),UDF处理温度,#include udf.hDEFINE_PROFILE(bottom_temperature, thread, position) real xND_ND;/* this will hold the position vector */ real y; face_t f; begin_f_loop(f, thread) F_CENTROID(x
6、,f,thread); y = x0; F_PROFILE(f,thread,position) = 315. + (y-.044)*(y-.044)/.044/.044*35.; end_f_loop(f, thread),UDF设置边界温度处理要点,(和一般计算一样设置求解器,模型等)DefineUser definedFunctions(Interpreted Or Compiled)编译DefineBoundaryCondition所需设置的面ThermalTemperatureBottom Temperature(和一般计算一样,设置其它边值条件、初值条件及求解与结果检查等),侧面与
7、地面两处UDF,定义一个以上UDF,上壁面温度 300K,温度抛物线分布,绝热壁面,温度: 315K,温度分布,UDF编写,#include udf.hDEFINE_PROFILE(bottom_temperature, thread, position) 程序1DEFINE_PROFILE(side_temperature, thread, position) 程序2 DEFINE_PROFILE(inlet_velocity,thread,position)程序3。,边界温度分布,左侧温度分布 下面温度分布,场温度分布,UDF编写用C语言,注释 /* 这是刘某人讲课示范用的程序 */数据类
8、型 Int:整型 Long:长整型 Real:实数Float:浮点型 Double:双精度 Char:字符型 UDF解释函数在单精度算法中定义real类型为float型,在双精度算法宏定义real为double型。因为解释函数自动作如此分配,所以使用在UDF中声明所有的float和double数据变量时使用real数据类型是很好的编程习惯。,局部变量,局部变量只用于单一的函数中。当函数调用时,就被创建了,函数返回之后,这个变量就不存在了,局部变量在函数内部(大括号内)声明。在下面的例子中,mu_lam和temp是局部变量。,DEFINE_PROPERTY(cell_viscosity, cel
9、l, 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;,FLUENT求解过程中UDFs的先后顺序,非耦合求解器,耦合求解器,FLUENT 网格拓扑,单元(cell) 区域被分割成的控制容积 单元中心(cell center) FLUENT中场数据存储的地方 面(face) 单元(2D or 3D)的边界
10、 边(edge) 面(3D)的边界 节点(node) 网格点 单元线索(cell thread) 在其中分配了材料数据和源项的单元组 面线索(face thread) 在其中分配了边界数据的面组 节点线索(node thread) 节点组 区域(domain) 由网格定义的所有节点、面和单元线索的组合,Fluent数据类型,cell_t face_t Thread NodeDomain,cell_t是线索(thread)内单元标识符的数据类型。它是一个识别给定线索内单元的整数索引。face_t是线索内面标识符的数据类型。它是一个识别给定线索内面的整数索引。 Thread数据类型是FLUENT中
11、的数据结构。它充当了一个与它描述的单元或面的组合相关的数据容器。 Node数据类型也是FLUENT中的数据结构。它充当了一个与单元或面的拐角相关的数据容器。 Domain数据类型代表了FLUENT中最高水平的数据结构。它充当了一个与网格中所有节点、面和单元线索组合相关的数据容器。,使用DEFINE Macros定义UDF,DEFINE_MACRONAME(udf_name, passed-in variables) 这里括号内第一个自变量是你的UDF的名称。名称自变量是情形敏感的必须用小写字母指定。一旦函数被编译(和连接),你为你的UDF选择的名字在FLUENT下拉列表中将变成可见的和可选的。
12、第二套输入到DEFINE 宏的自变量是从FLUENT求解器传递到你的函数的变量。,DEFINE_PROFILE(inlet_x_velocity, thread, index) 用两个从FLUENT传递到函数的变量thread和index定义了名字为inlet_x_velocity的分布函数。这些passed-in变量是边界条件区域的ID(作为指向thread的指针)而index确定了被存储的变量。一旦UDF被编译,它的名字(例如,inlet_x_velocity)将在FLUENT适当的边界条件面板(例如,Velocity Inlet面板)的下拉列表中变为可见的和可选的。,UDF源文件中包含u
13、df.h文件,#include udf.h 通过在你的UDF源文件中包含udf.h,编译过程中所有的DEFINE宏的定义与源代码一起被包含进来。udf.h文件也为所有的C库函数头文件包含#include指示,与大部分头文件是针对Fluent提供的宏和函数是一样的(例如,mem.h)。除非有另外的指示,没必要在你的UDF中个别地包含这些头文件。,DEFINE_PROFILE(inlet_x_velocity, thread, index) 定义在udf.h文件中为 #define DEFINE_PROFILE(name, t, i) void name(Thread *t, int i) 在编译
14、过程中延伸为 void inlet_x_velocity(Thread *thread, int index) 名字为inlet_x_velocity的函数不返回值由于它被声明为空的数据类型。,UDF任务,返回值 修改自变量 返回值和修改自变量 修改FLUENT变量(不能作为自变量传递) 写信息到(或读取信息从)case或data文件,返回值,DEFINE_PROPERTY返回一个udf.h中指定的real数据类型。两个real变量传入函数:通过函数计算层流粘度mu_lam的值,其是温度C_T(cell,thread)的函数。根据单元体温度,计算出mu_lam,在函数结尾,mu_lam值被返回
15、。,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; ,Function that Modify an Argument,判断单元是否在多孔区域,给多孔介质区域定义反应速率;real指针变量rr是一个传递给函数的自变量。UDF使
16、用废弃操作符* 分配反应速率值给废弃指针*rr。指针rr指向的目标是设置反应速率。通过这个操作,存储在内存中这个指针上的字符的地址被改变了,不再是指针地址本身,#include udf.h #define K1 2.0e-2 #define K2 5. DEFINE_VR_RATE(user_rate, c, t, r, mole_weight, species_mf, rr, rr_t) real s1 = species_mf0; real mw1 = mole_weight0; if (FLUID_THREAD_P(t) ,返回一个值和修改一个自变量的函数,DEFINE_SOURCE返回
17、一个在udf.h中指定的数据类型。函数采用自变量ds(它是数组的名字)并设置由eqn指定的元素为关于速度(w_vel)导数的值。(这是z动量方程源项)。这个函数也计算了旋转速度源项的值source,并返回这个值到求解器。,#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)
18、real w_vel, xND_ND, y, source; C_CENTROID(x, cell, thread); y = x1; w_vel = y*OMEGA; /* linear w-velocity at the cell */ source = WEIGHT*(w_vel - C_WSWIRL(cell,thread); dSeqn = -WEIGHT; return source; ,修改FLUENT变量的函数,函数由声明变量f作为face_t数据类型开始。一维数组x和变量y是real 数据类型。循环宏用来在区域中每个面上循环以创建型线或数据数组。在每个循环内,F_CENTRO
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- UDF 自定义函数解读ppt课件 自定义 函数 解读 ppt 课件
链接地址:https://www.31ppt.com/p-1438427.html