我们知道误差函数定义为
这是一个带积分的函数,Fluent UDF中想自己写代码实现起来相当不方便,精度还不一定能保证。幸好C++11中为我们将这个函数内置在数学头文件math.h中,但是想要兼容C++11我们必须使用Visual Studio2013(或更高)和一款名为VC++ UDF Studio的专业UDF编写调试插件配合。具体过程如下:
1. 官网下载VC++ UDF Studio插件并安装,建议下载学术版(如想进一步采购注册,对高校老师学生比较优惠)
2. 安装Visual Studio 2013(或更高)专业版或旗舰版(Express版不支持),勾选“Microsoft Foundation Classes for C++”选项,其它选项视个人喜好。注意,Visual Studio 2013 请使用带update5的版本,对于其它更早期的2013版本,可能出现无法找到“afxv_cpu.h”文件,甚至插件菜单混乱的情况。安装前保证网络畅通。否则,可能会报告“WindowSDKDir”变量找不到的错误(如下图所示)。
3. 下载安装Visual C++ MFC多字节字符库(Visual C++ MFC Multi-Byte-Character-Set Library)。 网址是: Download Multibyte MFC Library for Visual Studio 2013 from Official Microsoft Download Center
如果未安装上面的Visual C++ MFC多字节字符库,可能会出现如下错误。
4. 双击桌面图标,选择需要版本后会自动启动Fluent,读入case后点击Fluent嵌入菜单中的“Start Visual Studio”子菜单。
5. 输入如下示例源代码,并点击“编译UDF”按钮直到编译通过。有任何错误提示,可以双击提示行直接定位到源码中的错误行。编译通过后按“加载到Fluent”按钮即可载入到Fluent中。
#include "udf.h"
#include <math.h>
DEFINE_ON_DEMAND(ttt)
{
//直接调用erf、 erff、 erfl、 erfc、 erfcf、 erfcl函数
real erf_value = erf(1.0);
real erfc_value=erfc(1.0);
Message0("erf=%g, erfc=%g\n", erf_value, erfc_value);
}
6. 执行DEFINE宏,本例由于erf函数放在DEFINE_ON_DEMAND宏中,所以在Execute On Demand对话框里面手动执行。
7. 运行结果如下,看到两个数加起来是1,是正确的。