首页/文章/ 详情

PyFluent中进行Fluent UDF编译与加载

精品
作者优秀平台推荐
详细信息
文章亮点
作者优秀
优秀教师/意见领袖/博士学历/特邀专家
平台推荐
内容稀缺
2年前浏览5422

本文演示在PyFluent中进行UDF编译、加载及调用过程。

Fluent2022R2版本中可以利用PyFluent进行仿真流程控制,利用其进行Fluent二次开发简直不要太香。

要利用PyFluent进行UDF编译与加载,可以参照下面的步骤。

1、本机编译环境

首先需要配置好本机的UDF编译环境,确保能够在Fluent中成功进行UDF编译,即在下面的对话框中能够通过Build按钮进行UDF编译。

2、准备测试UDF

随便写个最简单的UDF进行测试。代码如下:

#include "udf.h"
DEFINE_ON_DEMAND(test)
{
   Message0("hello, UDF!\n");
}

将程序保存为testUDF.c

3、PyFluent中编译并加载UDF

基本原理为参照TUI命令进行编译。

在TUI中编译及加载运行此UDF的命令为:

/define/user-defined> use-built-in-compiler? yes
/define/user-defined/compiled-functions compile "libudf" yes y "testUDF.c" "" ""
/define/user-defined/compiled-functions load "libudf"
/define/user-defined/execute-on-demand "test::libudf"

可以利用PyFluent重复此过程。

import ansys.fluent.core as pyfluent
solver = pyfluent.launch_fluent(precision="double", processor_count=8, mode="solver",version="2d")

# 启用内置编译器
solver.tui.define.user_defined.use_built_in_compiler("yes")
# 编译UDF源文件testUDF.c
solver.tui.define.user_defined.compiled_functions("compile","libudf","yes","y","testUDF.c","","")
# 加载udf
solver.tui.define.user_defined.compiled_functions("load","libudf")

程序输出如下所示。

 Give C-Source file names:

Give header file names:
Copied d:\Demo/testUDF.c to libudf\\src
"y" is not found Copied y to libudf\\src
(system "copy "C:\PROGRA~1\ANSYS Inc\v222\fluent"\fluent22.2.0\src\udf\sconstruct.udf "libudf\\win64\2ddp_host\SConstruct" ")
       1 file(s) copied.
(system "copy "C:\PROGRA~1\ANSYS Inc\v222\fluent"\fluent22.2.0\src\udf\scons_test.bat "libudf\\win64\2ddp_host\scons_test.bat" ")
       1 file(s) copied.
(chdir "libudf")(chdir "win64\\2ddp_host")Compiler used is  "C:\\PROGRA~1\\ANSYS Inc\\v222\\fluent"\\ntbin\\clang\\bin\\clang-cl
Linker used is  "C:\\PROGRA~1\\ANSYS Inc\\v222\\fluent"\\ntbin\\clang\\bin\\lld-link
Copy("d:\\Demo\\libudf\\win64\\2ddp_host\\resolve.exe", "C:\\PROGRA~1\\ANSYS Inc\\v222\\fluent\\ntbin\\win64\\resolve.exe")
Copy("d:\\Demo\\libudf\\win64\\2ddp_host\\testUDF.c", "d:\\Demo\\libudf\\src\\testUDF.c")
c_sources  ['testUDF.c', 'udf_names.c']
c_sources_  ['testUDF.c']
(system "copy "C:\PROGRA~1\ANSYS Inc\v222\fluent"\fluent22.2.0\src\udf\sconstruct.udf "libudf\\win64\2ddp_node\SConstruct" ")
       1 file(s) copied.
(system "copy "C:\PROGRA~1\ANSYS Inc\v222\fluent"\fluent22.2.0\src\udf\scons_test.bat "libudf\\win64\2ddp_node\scons_test.bat" ")
       1 file(s) copied.
(chdir "libudf")(chdir "win64\\2ddp_node")Compiler used is  "C:\\PROGRA~1\\ANSYS Inc\\v222\\fluent"\\ntbin\\clang\\bin\\clang-cl
Linker used is  "C:\\PROGRA~1\\ANSYS Inc\\v222\\fluent"\\ntbin\\clang\\bin\\lld-link
Copy("d:\\Demo\\libudf\\win64\\2ddp_node\\resolve.exe", "C:\\PROGRA~1\\ANSYS Inc\\v222\\fluent\\ntbin\\win64\\resolve.exe")
Copy("d:\\Demo\\libudf\\win64\\2ddp_node\\testUDF.c", "d:\\Demo\\libudf\\src\\testUDF.c")
c_sources  ['testUDF.c', 'udf_names.c']
c_sources_  ['testUDF.c']

Done.

DESKTOP-HK2IOKB: Opening library "d:\\Demo\\libudf"...Done.

DESKTOP-HK2IOKB: Opening library "d:\\Demo\\libudf"...
test
Done.

可以看到UDF已经被顺利加载。

4、执行UDF

如果从TUI改造代码,按道理可以使用下面的代码调用此UDF

solver.tui.define.user_defined.execute_on_demand("test::libudf")

然而不知道哪里出了问题,程序给出下面的错误信息,并且Fluent自动退出。

rror: eval: unbound variable
Error Object: test::libudf
Invalid string.

Error: %udf-on-demand: invalid function name
Error Object: #f

Error: %udf-on-demand: invalid function name
Error encountered in critical code section

看错误提示似乎是函数名test::libudf不对,但是在Fluent中利用TUI命令/define/user-defined/execute-on-demand "test::libudf"的确是可以运行的,如下图所示。

喝了口水,突然觉得应该是函数名必须使用字符串,灵机一动改成了下面的形式:

solver.tui.define.user_defined.execute_on_demand('"test::libudf"')

果然可以运行了,如下图所示。

这里只是一个简单的UDF编译调用测试案例,对于其他各种复杂案例,按理也可以依此方法进行处理。


(完)


来源:CFD之道
FluentUDF二次开发控制
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2022-11-25
最近编辑:2年前
CFD之道
博士 | 教师 探讨CFD职场生活,闲谈CFD里外
获赞 2566粉丝 11300文章 734课程 27
点赞
收藏
作者推荐
未登录
1条评论
半山外
签名征集中
1年前
您好,想问一下pyfluent操作手册这个东西到哪里找,有偿提问
回复
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈