Fluent UDF简介
2016-11-30 by:CAE仿真在线 来源:互联网
什么是UDF
用户自定义函数,或UDF,是用户自编的程序,它可以动态的连接到FLUENT求解器上来提高求解器性能。用户自定义函数用C语言编写。使用DEFINE宏来定义。UDF中可使用标准C语言的库函数,也可使用FLUENT提供的预定义宏,通过这些预定义宏,可以获得FLUENT求解器得到的数据。
UDF使用时可以被当作解释函数或编译函数。解释函数在运行时读入并解释。而编译UDF则在编译时被嵌入共享库中并与FLUENT连接。解释UDF用起来简单,但是有源代码和速度方面的限制不足。编译UDF执行起来较快,也没有源代码限制,但设置和使用较为麻烦。
为什么要使用UDF
一般说来,任何一种软件都不可能满足每一个人的要求,FLUENT也一样,其标准界面及功能并不能满足每个用户的需要。UDF正是为解决这种问题而来,使用它我们可以编写FLUENT代码来满足不同用户的特殊需要。当然,FLUENT的UDF并不是什么问题都可以解决的,在下面的章节中我们就会具体介绍一下FLUENT UDF的具体功能。现在先简要介绍一下UDF的一些功能:
l 定制边界条件,定义材料属性,定义表面和体积反应率,定义FLUENT输运方程中的源项,用户自定义标量输运方程(UDS)中的源项扩散率函数等等。
l 在每次迭代的基础上调节计算值
l 方案的初始化
l (需要时)UDF的异步执行
l 后处理功能的改善
l FLUENT模型的改进(例如离散项模型,多项混合物模型,离散发射辐射模型)
UDF基础
1、单元(Cells),面(Faces),区域(Zones)和线程(Threads)
单元和单元面被组合为一些区域(zones),这些区域规定了计算域(例如,入口,出口,壁面)的物理组成。当用户使用FLUENT 中的UDF 时,用户的UDF 可调用流体区域或是边界区域的计算变量。UDF需要获得适当的变量,比如说是区域参考和单元ID,以便标定各个单元。
区域(A zone)是一群单元或单元面的集合,它可以由模型和区域的物理特征(比如入口,出口,壁面,流体区域)来标定。例如,一些被指定为面域(a face zone)的单元面可以被指定为velocity-inlet 类型,由此,速度也就可指定了。线程(A thread)是FLUENT 数据结构的内部名称,可被用来指定一个区域。Thread 结构可作为数据储存器来使用,这些数据对于它所表示的单元和面来说是公用的。
打个比方来说,Thread就是公路,连接的Cell和Face,Cell和Face就相当于公路上汽车停靠的站点,Cell_t这个面向的是单元,而Face_t面向的是边或者面(二维或三维)。在FLUENT循环过程中,一般是用Thread作线程检索,而Cell或者Face作检索过程中位置参数的指示。
2、解释型interpreted和编译型compiled UDF的比较
编译型UDF和FLUENT的构建方式一样。脚本Makefile 被用来调用C编译器来构建一个当地目标代码库。目标代码库包含高级C语言源代码的机器语言翻译。代码库在FLUENT 运行时由“动态加载”过程连接到FLUENT上。连接后,与共享库的联系将会被保存在用户的case文件中。这样,当FLUENT以后再读入case文件时,此编译库将会与FLUENT 自动连接。这些库是针对计算机的体系结构和一定版本的FLUENT使用的。所以,当FLUENT更新,或计算机操作系统改变,或是在不同类型的机器上运行时,这些库必须重新构建。
编译型UDF需要安装C语言编译器,FLUENT支持的编译器类型可从安装目录下v150\fluent\ntbin\ntx86中的udf.bat文件中查询。
而解释UDF则是在运行时,直接从C语言源代码编译和装载。在FLUENT运行中,源代码被编译为中介的独立于物理结构的使用C预处理程序的机器代码。当UDF 被调用时,机器代码由内部仿真器或注释器执行。注释器不具备标准C编译器的所有功能,它不支持C语言的某些原理。所以,在使用 interpreted UDF 时,有语言限制。例如,interpreted UDF 不能够通过废弃结构(dereferencing structures)来获得FLUENT 数据。要获得数据结构,必须使用由FLUENT 提供的预定义宏。还有就是是FLUENT interpreter不能识别指针数组。这些功能必须由compiled UDF 来执行。
编译后,用户的C函数名称和内容将会被储存在case文件中。函数将会在读入case文件时被自动编译。独立于物理结构的代码的外层可能会导致执行错误,但却可使UDF共享不同的物理结构,操作系统和FLUENT版本。如果运行速度较慢,UDF不用被调节就可以编译代码的形式(in compiledmode)运行。
选择interpreted UDF或是compiled UDF时,注意以下内容:
-
Interpreted UDF
o 对其它平台是便捷的(portable)。
o 可作为(compiled UDF)来运行。
o 不需C编译器。
o 比compiled UDF慢。
o 需要较多的代码。
o 在使用C语言上有限制。
o 不能与编译系统或用户库(compiled system or user libraries)连接。
o 只能使用预定义宏来获得FLUENT结构中的数据。
-
Compiled UDF
o 比interpreted UDF运行快。
o 在使用C语言上不存在限制。
o 可用任何ANSI-compliant C 编译器编译。
o 能调用以其他语言编写的函数 (specifics are system-and compiler-dependent)。
o 机器物理结构需要用户建立FLUENT (2D or 3D) 的每个版本的共享库(a shared library for eachversion of FLUENT (2D or 3D) needed for your machine architecture)。
o 如果包含有注释器(interpreter)不能处理得C语言元素,则不能作为(interpreted UDF )运行。
总的来说,当决定使用那种类型的UDF 时:
-
使用interpretedUDF作为简单的函数
-
使用compiled UDF作为复杂的函数,这些函数
o 对CPU有较大要求(例如每次运行时,在每个单元上均须调用的属性UDF(a property UDF)。
o 需要使用编译库(require access to acompiled library)。
解释式UDF的限制
解释式UDF不能包含以下C语言:
-
goto语句。
-
非ANSI-C原型语法
-
直接的数据结构查询(direct datastructure references)
-
局部结构的声明
-
联合(unions)
-
指向函数的指针(pointers tofunctions)
-
函数数组。
在访问FLUENT求解器数据的方式上解释式UDF也有限制。解释式UDF不能直接访问存储在FLUENT结构中的数据。它们只能通过使用Fluent提供的宏间接地访问这些数据。另一方面,编译式UDF没有任何C编程语言或其它注意的求解器数据结构的限制。
——————————
原文摘录自网络,版权归原作者所有
相关标签搜索:Fluent UDF简介 Fluent培训 Fluent流体培训 Fluent软件培训 fluent技术教程 fluent在线视频教程 fluent资料下载 fluent分析理论 fluent化学反应 fluent软件下载 UDF编程代做 Fluent、CFX流体分析 HFSS电磁分析