UDF宏有两种方式可以被Fluent所接受:编译和解释。其中有一些宏既可以被解释也可以被编译,而一些宏则只能被解释。有一些场合只接受编译后的UDF(如动网格中的一些宏),而有些场合既可以接受编译的UDF,还能接受解释后的UDF。那么解释型的UDF与编译型的UDF到底存在何种差异?本文主要描述解释型UDF,而编译型UDF涉及到的问题更多,我们留到下次再说。
解释型UDF
解释型UDF不需要额外的编译器,利用Fluent软件自身即可解释源代码。在解释过程中,UDF源代码被C预处理器解释成中间的,独立于计算机体系之外的机器代码。之后在调用UDF的过程中,这些被解释器生成的机器代码将在内部仿真器或解释器上被执行。当然,这种以解释的方式运行无可避免的会损失计算性能。但是以解释方式运行的UDF有个好处:其可以不加修改的在不同体系的计算机上、不同的操作系统以及不同的Fluent版本中运行。
当UDF的计算性能很重要时,建议以编译的形式运行UDF。所有解释型UDF都可以以编译的方式被Fluent加载。
在UDF被解释后保存cas文件,之后再打开cas文件时,UDF能够直接被加载,而无需重新解释。
解释型UDF的局限性
解释型的最大优势是一次解释,到处可以执行,能够跨平台、跨架构、跨操作系统、跨版本。但是解释型UDF也存在其局限性。主要体现在:
- 无法使用
goto
语句 - 只支持ANSI-C语法
- 不支持直接数据结构引用(direct data structure references)
- 不支