说明:本文经验是根据知乎回答(https://zhuanlan.zhihu.com/p/378848954?utm_campaign=shareopn&utm_medium=social&utm_psn=1787448727763501056&utm)总结出的个人经验,仅供参考。
调用方法:UDF静态调用dll-动态调用dll
Fluent版本:2024R1;vs版本:2017;
文中所提到的文件链接已经放在末尾了,设置的是永久有效;
Fluent和visual studio的安装位置我都放在E盘,为方便可以安装在C盘,然后环境变量LIB,LIBPATH,PATH,INCLUDE及系统变量PATH配置可以参考B站教程。
1.编译一个简单UDF(参考UDF手册2.3.30.3.处给的示例),在fluent的user-defined function中选择编译型UDF然后add-->build,但是不要点load(我的UDF放在E:\udf_file处);
2.VS中新建动态链接库项目(记住这个项目名A),修改pch.h和pch.cpp文件(头文件和源文件中),这里可以直接复制guide\Tutorial demo folder\01-Dynamic_call_refpropDll中对应的文件,把Debug旁边的x86改为x64,再点“本地Windows调试”,注意下方显示生成了dll和lib文件,此处会有报错无法直接运行,这个不用理会;
3.编写调用dll的udf文件,此处可以直接复制 guide\Tutorial demo folder\02-Call_test 处的 02-Call_test.cpp 文件,然后将文件名称改为第一步中的udf文件名(比如我第一步用的udf名称为 inletvelocity.c ,那这里也要把这个udf的名称改为 inletvelocity.c),并将此文件复制到udf所在文件夹中的 libudf\src 处替换原有文件(不改名的话就需要将 3d_host 和 3d_node 中的 user_nt.udf 文件中的第一行的inletvelocity.c改为新写的udf的名字,否则后面会出错);(说明:有的叫3d_host,有的叫3ddp_host; node的那个也一样,只要是host和node就行,前面的前缀应该不太重要)
4.安装sed软件,或者用everything找到vs中的sed.exe文件,并复制路径名称,找个地方改成“路径\sed.exe”的形式,留作接下来使用,若是重新安装的话,也是一样改成“路径\sed.exe”的形式(例如我的就是"E:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\CommonExtensions\Microsoft\TeamFoundation\Team Explorer\Git\usr\bin\sed.exe",此处如果不加英文双引号后面的操作会报错“E:\Program..”不是运行程序);
5.使用记事本打开 libudf\win64\3d_host(libudf\win64\3d_node)文件夹中的 user_nt.udf 文件,在下方加上这两行
FLUENT_INC=C:\Program Files\ANSYS Inc\v195\fluent
FLUENT_ARCH= win64
第一行等号后的路径改为自己电脑中fluent所在的路径;(这两个文件夹即 host 和 node 中需要修改的地方以及操作基本都是类似的)
6.使用记事本打开 libudf\win64\3d_host(libudf\win64\3d_node)文件夹中的 makefile 文件添加第二步生成的lib文件引用(如下图),文件名即为第二步中的项目名A:
CPP_LIB=项目名A.lib
$(CPP_LIB)
删除这一行:resolve.exe -udf $(CSOURCES) -head_file ud_io1.h
然后再将文件中的所有sed改为上面提到的“路径\sed.exe”,记得将中文双引号换为英文双引号,例图如下:


7.在开始菜单中找到“Developer Command Prompt for VS 2017”或者是“VS 2017的开发人员命令提示符 ”,右键-->更多-->以管理员形式打开,转入以下VS目录
(例如:输入指令“cd C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Auxiliary\Build”),如果VS不是安装在C盘,那么则要先输入“E:”(你的VS安装路径所在盘),再输入命令例如“cd E:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Auxiliary\Build”,完成后继续输入:
vcvarsall.bat x64 然后按回车键,
再输入指令跳转至 libudf\win64\3d_host 文件夹,例如:
cd E:\udf_file\libudf\win64\3d_host 再按回车键,
输入清除已编译文件命令:nmake /f makefile clean
(我在这一步中间出了挺多次错的,但是按步骤来应该不会再出错了...比较常见的一个错误就是U1052没找到文件“makefile”,后来怎么解决的居然已经忘了...可能就在上面某一步中)
将第二步生成的“项目名A.lib”复制到 3d_host 文件夹中,再将项目名A.dll和REFPRP64.DLL(这个是第二步建立的项目中调用的动态链接库的dll文件)这里两个文件复制到udf所在位置,比如我的就是复制到 E:\udf_file 下(这里我还把教程给的两个.fld文件复制过去了,不知道不复制会不会有问题),这个udf所在位置可以再fluent控制台也就是你一开始build完udf后显示的那个Done下面那一行输入:pwd 来查询,复制完之后重新编译
输入命令:nmake /f makefile 到这里两个文件夹都完成一遍这些操作的话这一步才算结束了;
8.切到刚才没关的fluent,在user-defined function中选择编译型再点击load,加载成功的话调用就算完成了!!!
9.根据自己需要的材料和相应的物性数据修改给的参考文件即Dynamic_call_refpropDll中的pch.h和pch.cpp文件以及Call_test中的Call_test.cpp文件,理论上就能实现自定义调用了!!!(这一步刚刚开始探索...)
链接:https://pan.baidu.com/s/1_R2b5eoIdAW9AmhT3bbhSw?pwd=2ier
提取码:2ier
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删