解释型UDF与编译型UDF

分类: 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
Compiled UDF
总的来说,当决定使用那种类型的UDF 时:
使用interpretedUDF作为简单的函数
使用compiled UDF作为复杂的函数,这些函数
解释式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