Fluent UDF采用的是C语言(C++其实也可以),但有时需要调用其他语言编写的功能代码,或想要使用一些遗留程序功能而又不想将其用C语言改写时,此时可以考虑将其封装编译为动态链接库,然后在UDF中调用动态链接库实现功能重用。
本文演示利用Fluent UDF调用外部动态链接库的过程。
https://www.programmersought.com/article/37373358218/
”
1 创建动态库
几乎所有编译型语言程序都可以被编译为动态库(如常见的C、C++、Fortran等)。
注意在windows系统中,动态库的扩展名为dll,而在linux系统中,动态库的扩展名为so,不管是哪种动态库,其调用方式都一样。
”
本文创建一个C语言编写的dll文件。本例的动态链接库在Visual Studio 2019中创建。
-
启动VS2019创建一个空项目。VS提供了dll创建模板,这里简单起见不搞那么复杂。
-
设置项目的一些基本信息,点击创建按钮创建
-
如下图所示选择添加头文件
-
指定头文件名为 dlldemo.h
-
在头文件dlldemo.h中添加下面的代码,声明一个函数add
extern "C" __declspec(dllexport) double add(double a, double b);
这里根据自己的实际需要进行编写。这里的extern "C"
关键字是用来强制使用C编译器进行编译。其实不要这个也是可以的。
-
创建一个源文件
-
指定源文件名为 dlldemo.cpp
-
在源文件dlldemo.cpp中编写下面的代码
#include "dlldemo.h"
double add(double a, double b)
{
return a + b;
}
-
设置生成方案为 Release及x64
,如下图所示。注意这里如果目标电脑为64位则设置为x64,否则使用默认x86
-
鼠标右键选择解决方案模型树中的 DllDemo
,点击弹出菜单项属性
进行设置
-
如下图所示设置 配置类型
为动态库(.dll)
-
选择菜单生成→生成解决方案或直接按快捷键 F6
进行编译
-
编译完毕后,查看项目文件夹夹 x64/Release
中的文件,如下图所示
这里有两个后面要用到的比较重要的文件:DllDemo.dll及DllDemo.lib。
2 准备Fluent UDF
这里只是编写一个UDF宏用来测试调用上面的动态库,因此简单起见使用DEFINE_ON_DEMAND。
#include "udf.h"
extern double add(double a ,double b);
DEFINE_ON_DEMAND(dlltest)
{
double a = 2.0;
double b = 3.0;
double c = add(a,b);
Message0("hello Dll, The result is:%f",c);
}
将宏文件命名为testDll.c。
3 编译UDF
编译起来有点儿麻烦,这里采用UDF外部编译的方式。
下面的编译方式部分参考了这篇文章:https://www.programmersought.com/article/37373358218/
”
-
找到Fluent安装目录下的 makefile_nt.udf及user_nt.udf
文件。可以使用文件搜索的方式去找,如下图所示
-
将此文件拷贝到UDF源文件目录中,修改 makefile_nt.udf
文件名为makefile
-
在源文件路径下创建目录结构 -
在case文件夹下创建libudf文件夹 -
在libudf文件夹中创建两个文件夹,分别命名为src及win64,将源文件 testDll.c
拷贝到文件夹src中 -
在win64文件夹中创建文件夹2ddp_host与2ddp_node(这里根据目标case创建,若为双精度三维模型则创建3ddp文件夹) -
将前面的动态链接库文件 DllDemo.dll及DllDemo.lib
拷贝到UDF文件夹
UDF文件夹内的文件如下图所示。
文件夹结构如下图所示。
-
将文件 DllDemo.dll、DllDemo.lib、makefile、user_nt.udf
同时拷贝到2ddp_host及2ddp_node(两个文件夹中同时存在这四个文件)
先编译2ddp_host文件夹。
-
用记事本打开2ddp_host文件夹中的 user_nt.udf
文件
注:这里需要修改CSOURCES后面对应的源代码名;修改VERSION修改为2d_host
”
-
用文本编辑器打开 makefile
文件,如下图所示添加代码CPP_LIB=DllDemo.lib
-
如下图所示找到对应的代码行,对代码进行修改
-
从开始菜单中启动 x64 Native Tools Command Prompt for VS 2019
,建议以管理员身份运行
-
利用cd命令进入到2ddp_host文件夹下
-
输入命令 nmake
进行编译,出现如下图所示提示即表示编译成功
注:编译期间可能会出现的一些错误提示:
关于sed的错误,可以在网上自行下载sed.exe程序,然后将其路径放入环境变量path中 关于resolve.exe的错误。可以将路径 ANSYS Incv211fluentntbinwin64
添加到环境变量path中关于FLUENT_INC环境变量未配置的错误。可以新建环境变量FLUENT_INC,并指定其值为Fluent安装路径 ANSYS Incv211fluent
”
编译成功后2ddp_host文件夹中的文件内容如下图所示。
-
相同的方式编译2ddp_node文件夹。这里makefile文件可以直接拷贝过去,而user_nt.def文件需要修改为下面的样子
编译完毕后2ddp_node文件夹中的文件如下所示。
此时编译工作完成。
4 测试
开启Fluent,工作路径设置为上面的工作路径。
-
加载UDF
-
可以看到UDF加载成功
-
选择工具栏按钮Execute on Demand…,在打开的对话框中选择前面加载的UDF,如下图所示,可以看到运行后TUI窗口中输出了我们所有进行的计算信息
注:若Fluent在加载UDF的时候出现
error code:126n
的错误提示,此时可以将前面生成的DllDemo.dll文件拷贝到c:windowssystem32中。此错误有时出现有时不出现,原因不明。”
相关文件:
本文为微课堂课程Fluent】H 二次开发 新增补充课程,已购此课程的道友可以直接观看视频操作(或识别下方二维码直接进入视频)。
下方为手残党专用案例演示配套视频(建议不看):
本篇文章来源于微信公众号: CFD之道
评论前必须登录!
注册