加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

解释型UDF与编译型UDF

(2016-07-01 09:39:22)
分类: fluent

编译型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编程语言或其它注意的求解器数据结构的限制。

 

http://s1/mw690/005Q8S6mzy72UaFIWWcf0&690

http://s15/mw690/005Q8S6mzy72UaFL4uO5e&690

0

阅读 收藏 喜欢 打印举报/Report
后一篇:UDF实例
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有