首页/文章/ 详情

112、 使用Visual Studio调试并行的UDF详细操作步骤

1天前浏览16

0. VS调试UDF简介

Fluent使用UDF时,可以使用VS进行编写代码,但只能在Fluent软件内编译,导致编写代码时无法查看是否存在错误,也无法使用关键词提示,更无法进行调试。

 


如何能让UDF的编写和普通C语言代码一样可以调试呢?通过本文的操作流程,可以实现UDF代码的关键词提示,错误提醒及代码Debug, 同时还可以实现无需配置环境变量即可实现UDF代码的编译。

 


1. UDF需要的文件

Fluent软件在编译UDF的过程会生成libudf文件夹(也可能是其他的名称,取决于Library Name)

 


这个文件夹下包含了两个文件夹,其中src为UDF源文件,win64为编译生成的文件。需要的就是win64文件夹下的文件。

 

 

Win64文件夹下有两个文件(并行),分别是host节点的文件和node节点的文件。两文件夹下内容相同,其中主要的就是libudf.dl、libudf.dl和libudf.dl文件。

 

 

 

 

 

 

 

 

 

 

 

 

 

 
 


我们需要使用VS生成这两个文件夹,并包含其中的文件



2. 提前写好UDF代码

这里提供提前写好的UDF代码,当然也可以设置好后重新再VS中编写

 


代码:









#include "udf.h"DEFINE_ON_DEMAND(on_demand_calc){    Message("111\n");    Message("222\n");    Message("333\n");}
 


3. 使用VS创建新项目

由于要生成两个文件夹,分别是host节点的文件和node节点的文件。因此需要两个项目,分别是host项目和node项目。


3.1 先创建host新项目

先创建host新项目,node项目在host基础上更改即可


 


Windows桌面向导

 

 

输入项目名称和位置,点击创建。这里的项目名称为2ddp_host,而解决方案名称为2ddp。后面再创建node项目时,可以将host项目和node项目放到一起。可参考“VS创建项目路径问题”


 

应用程序类型选择:动态链接库.dll,其他选项勾选空项目


 

右击源文件--添加:如果提前写好的UDF就添加现有项,把UDF导入进来。否则就添加新建项,新写UDF。UDF的写法这里不多赘述。

 


此时的UDF虽然导入进去,会出现红色波浪线,同时无法生成解决方案。


 


 



3.2 创建node项目

右击解决方案,添加--新建项目


 

点击windows桌面向导,下一步。

 

项目名称为2ddp_node,其他的和host项目设置相同

 

 

同样地,node节点也要添加源文件。这里的源文件和host的源文件完全一致。


 

这样设置之后,解决方案下面会包含两个项目文件夹


 


4. 配置调试环境

所谓的配置调试环境就是将UDF所需要的目录全部包含进去,这样UDF在调试的时候就能够识别到所有的头文件,从而不会出错。


配置过程类似EDEM API配置过程。


Host项目和node项目都需要配置环境,两者的配置方法相似,仅有一点区别。这里以host为例进行配置,node的配置区别下面也会讲解


4.1 右击项目名称--属性

 


4.2 属性页设置:Debug、x64

 点击配置管理器

 


4.3 活动解决方案平台:x64

 


4.4 C/C++附加包含目录

 


这里要添加的目录主要是makefile_nt.udf文件中的目录。文件地址:D:\software\ANSYS2023R2\ANSYS Inc\v232\fluent\fluent23.2.0\src\udf


 


使用笔记本打开makefile_nt.udf文件,下图即为需要包含的目录。

 

在配置项目属性之前,我们首先需要熟悉makefile中常用的四个宏定义:

  • FLUENT_INC(FLUENT安装路径:本文中为D:\software\ANSYS2023R2\ANSYS Inc\v232\fluent)

  • FLUENT_ARCH(Fluent架构,有ntalpha、ntx86和win64三个值,本文中为win64)

  • VERSION(UDF版本,共2d、3d、2ddp、3ddp、2d_host、3d_host、2ddp_host、3ddp_host、2d_node、3d_node、2ddp_node、3ddp_node版本,本文以3ddp版本为例)

  • RELEASE(FLUENT版本号,本文为23.2.0)

这里的符号是为了确定包含目录的绝对地址的。实际上可以分为三类:


第一类:即第一个包含目录。根据自己模型的维数和精度来选择。

-I"$(FLUENT_INC)"\fluent$(RELEASE)\$(FLUENT_ARCH)\$(VERSION) \

 



第二类:就是这个文件夹下的几个src目录


 

第三类:最后一个目录-I"$(FLUENT_INC)"\include


 

注:添加包含目录需要严格按照makefile_nt.udf中包含的头文件顺序。


将上述目录全部包含之后,会发现源文件不再有波浪线。


 

但生成解决方案仍然会出错


 

注:

  •  对于并行UDF(实际上从Fluent20.0之后的版本都是并行了),由于需要在libudf中生成两个文件2ddp_host和2ddp_node,因此需要创建两个项目。每个项目所包含的目录不同。主要区别就体现在第一个包含目录。

  • 对于2ddp_host

    D:\software\ANSYS2023R2\ANSYS Inc\v232\fluent\fluent23.2.0\win64\2ddp_host


  • 对于2ddp_node

    D:\software\ANSYS2023R2\ANSYS Inc\v232\fluent\fluent23.2.0\win64\2ddp_node


    其他的保持相同即可


  • 附加包含目录找不到tgrid/src,直接包含win64目录即可


 


5. 添加链接器


 

 

 

 
 

对2dd_host,需要把win64下的2ddp_host文件包含进去。根据模型维数和精度修改。


 

附加依赖项,把fl2320.lib添加进去


 


 


fl2320.lib即2ddp文件下的一个文件


 

再次生成解决方案,成功


 

对于node项目,需要把win64下的2ddp_node文件包含进去


 

附加依赖项,把fl_mpi2320.lib添加进去


 

6. 修改UDF代码

需要对UDF代码(源文件)进行修改,添加上几行代码。这里的修改需要对host和node项目的源文件都进行修改。


 

这里的修改是根据makefile_nt.udf文件进行修改的


 

其中







__declspec(dllexport) UDF_Data udf_data[] ={"on_demand_calc",(void(*)(void))on_demand_calc,UDF_TYPE_ON_DEMAND};__declspec(dllexport) int n_udf_data = sizeof(udf_data) / sizeof(UDF_Data);
 

on_demand_calc和on_demand_calc为DEFINE宏的名字;UDF_TYPE_ON_DEMAND需要根据使用的DEFINE宏来进行修改


 

注:

如果使用多个DEFINE宏怎么办???对于多个DEFINE宏,需要增加这个语句,并且以,分隔

 


可以正常编译并运行


 




7. 生成libudf文件

右击host项目--属性--常规--输出目录


 

在Configuration\后面添加libudf\win64\2ddp_host。会在解决方案目录下生成Debug\libudf\win64\2ddp_host


 

同理,node项目需要在Configuration\后面添加libudf\win64\2ddp_node。


 


把这个libudf复制到Fluent路径下


 


 


打开Fluent,编译栏不需要添加Source Files,在Library Name处输入libudf,然后点击load即可。Fluent文本输出栏出现宏名称则说明编译成功。


 


 


注:上述方法使得每次修改代码后生成的libudf都需要复制到Fluent文件夹下。我们可以修改VS生成的libudf位置,让其直接在Fluent文件下。


对2ddp_host文件


 


对2ddp_node文件

 


8. VS调试UDF

Fluent成功加载VS编译好的文件后,在VS中调试---附加到进程。


 


选择fl开头的程序,注意不要选择fluent.exe

 


在源文件中设置断点,单击代码行的最左边。或者添加监视


 


在FLuent中执行UDF会跳到VS界面。添加监视,右击某个变量可以添加监视,监测某个量的变化


 


 


对代码修改后,重新附加到进程,不需要重新选择程序

 


9. 保存模板

上面的流程比较繁琐,尤其是包含附加目录,可以将每种类型的项目都保存成模板,下次可以直接使用。

比如将2ddp_host保存成模板


 


 


下次使用可以直接从模板新建项目


 


10. VS创建项目路径问题

解决方案比项目高一级,一个解决方案下面可能有多个项目。


 

对于UDF并行问题,解决方案名称设置为2ddp或3ddp;项目名称分别设置为2ddp_host和3ddp_host。位置可与Fluent同一路径下,新建一个文件夹。不勾选”将解决方案和项目放在同一目录中”


 


 


来源:Fluent学习笔记
FluentUDFUGEDEMANSYS
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2025-05-30
最近编辑:1天前
Fluent学习笔记
博士 签名征集中
获赞 149粉丝 444文章 157课程 3
点赞
收藏
作者推荐
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习计划 福利任务
下载APP
联系我们
帮助与反馈