吾生有涯 学海无涯
析模有界 知识无界

PyFluent中进行Fluent UDF编译与加载

内容纲要

本文演示在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~1ANSYS Incv222fluent"fluent22.2.0srcudfsconstruct.udf "libudf\win642ddp_hostSConstruct" ")
1 file(s) copied.
(system "copy "C:PROGRA~1ANSYS Incv222fluent"fluent22.2.0srcudfscons_test.bat "libudf\win642ddp_hostscons_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~1ANSYS Incv222fluent"fluent22.2.0srcudfsconstruct.udf "libudf\win642ddp_nodeSConstruct" ")
1 file(s) copied.
(system "copy "C:PROGRA~1ANSYS Incv222fluent"fluent22.2.0srcudfscons_test.bat "libudf\win642ddp_nodescons_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之道

赞(0) 打赏
版权声明:未经允许,请勿随意用于商业用途。
文章名称:《PyFluent中进行Fluent UDF编译与加载》
文章链接:https://www.topcfd.cn/33174/
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。
分享到

说两句 抢沙发

评论前必须登录!

 

觉得文章有用就打赏一下文章作者吧

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫

微信扫一扫

登录

找回密码

注册