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代码来满足不同用户的特殊需要。当然,FLUENTUDF并不是什么问题都可以解决的,在下面的章节中我们就会具体介绍一下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就是公路,连接的CellFace,CellFace就相当于公路上汽车停靠的站点,Cell_t这个面向的是单元,而Face_t面向的是边或者面(二维或三维)。在FLUENT循环过程中,一般是用Thread作线程检索,而Cell或者Face作检索过程中位置参数的指示。

2、解释型interpreted和编译型compiled UDF的比较

编译型UDFFLUENT的构建方式一样。脚本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电磁分析 

编辑
在线报名:
  • 客服在线请直接联系我们的客服,您也可以通过下面的方式进行在线报名,我们会及时给您回复电话,谢谢!
验证码

全国服务热线

1358-032-9919

广州公司:
广州市环市中路306号金鹰大厦3800
电话:13580329919
          135-8032-9919
培训QQ咨询:点击咨询 点击咨询
项目QQ咨询:点击咨询
email:kf@1cae.com