Fluent UDF中直接调用math.h中的误差函数erf、erfc

我们知道误差函数定义为

 

 这是一个带积分的函数,Fluent UDF中想自己写代码实现起来相当不方便,精度还不一定能保证。幸好C++11中为我们将这个函数内置在数学头文件math.h中,但是想要兼容C++11我们必须使用Visual Studio2013(或更高)和一款名为VC++ UDF Studio的专业UDF编写调试插件配合。具体过程如下:

1. 官网下载VC++ UDF Studio插件 (https://vcudfstudio.github.io)并安装,建议下载学术版(如想进一步采购注册,对高校老师学生比较优惠)

   

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)。 网址是:  https://www.microsoft.com/en-US/download/details.aspx?id=40770

 

如果未安装上面的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,是正确的。

 

 

posted @ 2022-04-07 16:22  SuperUDF  阅读(571)  评论(0)    收藏  举报