Fluent UDF中调用Matlab函数(以误差函数erf为例)

(3) 2024-04-20 14:23

Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说Fluent UDF中调用Matlab函数(以误差函数erf为例),希望能够帮助你!!!。

Fluent UDF中经常需要用到一些常见算法,例如插值、拟合、矩阵运算等等,这些在UDF中是没有现成函数实现的,理论上需要我们自己去写函数。另一方面我们又注意到这些运算恰恰是Matlab的强项,几乎调用一个现成的函数就完成了目的。所以我们有什么办法把Matlab函数给UDF直接调用呢?

这里提供一种借助于VC++ UDF Studio插件 (https://vcudfstudio.github.io)实现调用Matlab函数的方法,且编译好以后的UDF库拿到没有安装对应Matlab版本的机器上仍然可以使用。以前硫酸亚铜博客(https://www.cnblogs.com/liusuanyatong/p/12128082.html)提供的方法是依赖于Matlab运行库,编译好的UDF库如果拿到没有安装相应Matlab版本机器上是没法运行的。 

下面我们以调用Matlab中的erf误差函数为例来说明整个使用过程。

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

Fluent UDF中调用Matlab函数(以误差函数erf为例)_https://bianchenghao6.com/blog__第1张Fluent UDF中调用Matlab函数(以误差函数erf为例)_https://bianchenghao6.com/blog__第2张

2. 安装Visual Studio(支持VS2010~2019社区、专业或旗舰版,建议安装VS2010旗舰版), C++和C#一起安装,对于64位Fluent还要勾选X64编译器。

 Fluent UDF中调用Matlab函数(以误差函数erf为例)_https://bianchenghao6.com/blog__第3张

 3. 安装Matlab 2014a ~ 2021b任一版本,必须勾选Matlab Coder,其它视自己喜好安装。

Fluent UDF中调用Matlab函数(以误差函数erf为例)_https://bianchenghao6.com/blog__第4张

 4. 管理员权限打开桌面图标,选择需要的版本并勾选“调用Matlab”后会自动启动Fluent,读入case并点击Fluent嵌入菜单中的“Start Visual Studio”子菜单。

Fluent UDF中调用Matlab函数(以误差函数erf为例)_https://bianchenghao6.com/blog__第5张  Fluent UDF中调用Matlab函数(以误差函数erf为例)_https://bianchenghao6.com/blog__第6张Fluent UDF中调用Matlab函数(以误差函数erf为例)_https://bianchenghao6.com/blog__第7张

 5. 把自带的matlab函数文件MatlabAdd.m改名为MatlabErf.m,另外一个自动生成的文件MatlabFunctionTester.m是用来在Matlab中测试调试函数文件用的,这里可以不用管。然后双击打开编辑MatlabErf.m,输入以下自定义Matlab函数体。因为这个函数很简单,肯定正确,所以不需要利用MatlabFunctionTester.m来调试它。 

function [out]= MatlabErf(in)
		out = erf(in)
end

 Fluent UDF中调用Matlab函数(以误差函数erf为例)_https://bianchenghao6.com/blog__第8张

 6. 点击工具栏上“将.m文件转为C/C++”按钮,输入参数“in”设为float类型,矩阵不需要设置,然后点击“确定”开始转换。

 Fluent UDF中调用Matlab函数(以误差函数erf为例)_https://bianchenghao6.com/blog__第9张

Fluent UDF中调用Matlab函数(以误差函数erf为例)_https://bianchenghao6.com/blog__第10张

7. 等待片刻,转换完成后,会自动将对应的转换得到的C/C++头文件MatlabLibrary.h加入到UDF工程中。

Fluent UDF中调用Matlab函数(以误差函数erf为例)_https://bianchenghao6.com/blog__第11张

8. 在udf_source.cpp文件中输入如下示例源代码,并点击“编译UDF”按钮直到编译通过。有任何错误提示,可以双击提示行直接定位到源码中的错误行。编译通过后按“UDF库加载到Fluent”按钮即可载入到Fluent中。 

#include "udf.h"
extern "C"
{
	#include "MatlabLibrary.h" //调用Matlab函数声明的头文件
}
DEFINE_ON_DEMAND(testMatlab)
{
	// 调用Matlab中Erf函数
	real MatErf = MatlabErf(1.0);
	Message0("Matlab Erf(1.0)=%g\n", MatErf);
}

 Fluent UDF中调用Matlab函数(以误差函数erf为例)_https://bianchenghao6.com/blog__第12张 

如果出现INFINITY,NAN未声明的标识符的错误,那么请使用较高版本的Visual Studio,例如Visual Studio2015或更高。

Fluent UDF中调用Matlab函数(以误差函数erf为例)_https://bianchenghao6.com/blog__第13张

9. 执行DEFINE宏,本例由于erf函数放在DEFINE_ON_DEMAND宏中,所以在Execute On Demand对话框里面手动执行。

 Fluent UDF中调用Matlab函数(以误差函数erf为例)_https://bianchenghao6.com/blog__第14张

 Fluent UDF中调用Matlab函数(以误差函数erf为例)_https://bianchenghao6.com/blog__第15张

10. 运行结果如下,结果是正确的。

 Fluent UDF中调用Matlab函数(以误差函数erf为例)_https://bianchenghao6.com/blog__第16张

今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

上一篇

已是最后文章

下一篇

已是最新文章

发表回复