许可优化
许可优化
产品
产品
解决方案
解决方案
服务支持
服务支持
关于
关于
软件库
当前位置:服务支持 >  软件文章 >  【补档】Fluent UDF错误汇总及解决办法

【补档】Fluent UDF错误汇总及解决办法

阅读数 2
点赞 0
article_banner
注:由于之前Teambition链接挂了,有b友让补档。 收集于B站和博客园 真快哇已经是四年前的事情了。
整理by: bzhan666

Ansys Student 2020R2中Fluent编译UDF简介 - 小肥羊吃草不吃肉 - 博客园

win10 udf编译,LINK : fatal error LNK1104: ????????????kernel32.lib​

使用VC++ UDF Studio探索Fluent UDF手册中没有的宏和函数

VC++ UDF Studio调试解决Received signal SIGSEGV

利用VC++ UDF Studio编译并单步调试Fluent UDF(解决fl process could not be started错误)

1 使用内置编译器

在Ansys Fluent中编译UDF一般都需要额外安装相应版本的Visual Studio编译器,VS的缺点是体量大,占空间,安装后还需要额外进行相关设置才能正常使用。而新版本的Ansys Fluent编译UDF模块中提供了内建编译器(Build-In Compiler),使得脱离VS编译UDF称为可能。

使用内建编译器编译一个测试UDF来看看效果,所使用的测试udf源码如下:

代码块

C


     自动换行
   


     复制代码
   

1234567


// message.c
#include "udf.h"
DEFINE_ON_DEMAND(say_hello)
{
    Message("hello, fluent udf compiler test\n");
}


      复制成功
     
     
     
     

按照正常的编译流程走一遍,结果不能顺利编译(相同的错误在ansys论坛中也被提及点击跳转),错误片段如下:

代码块

powershell


     自动换行
   


     复制代码
   

1234567891011


...
Copied D:\Documents\fluent_case\UDF_test_case/message.c to libudf\\src
(system "copy "G:\ANSYS Inc\ANSYS Student\v202\fluent"\fluent20.2.0\src\udf\sconstruct.udf "libudf\\win64\3d_host\SConstruct" ")
已复制         1 个文件。
(system "copy "G:\ANSYS Inc\ANSYS Student\v202\fluent"\fluent20.2.0\src\udf\scons_test.bat "libudf\\win64\3d_host\scons_test.bat" ")
已复制         1 个文件。
...
D:\\Documents\\fluent_case\\UDF_test_case\\libudf\\win64\\3d_node>G:\\ANSYS Inc\\ANSYS Student\\v202\\fluent/../commonfiles/CPython/3_7/winx64/Release/python/scons 
'G:\\ANSYS' 不是内部或外部命令,也不是可运行的程序
或批处理文件。


      复制成功
     
     
     
     
注:Fluent集成的终端中显示中文会乱码,通过写入transcript文件记录终端信息的方式可以正常查看中文信息。

可以看出,Ansys Fluent内建的编译器是通过python的库scons来实现的,与之相关的有两个脚本文件sconstruct.udf和scons_test.bat,而错误的原因很明显:路径中包含空格,路径却没有使用双引号!

下面给出解决方法和问题分析,只看解决方法即可,有时间可以看看问题分析

1.1 解决方法

Step1 修改G:\ANSYS Inc\ANSYS Student\v202\fluent\fluent20.2.0\src\udf\scons_test.bat文件,给第3行添加双引号:

代码块

powershell


     自动换行
   


     复制代码
   

1234


set PYTHONHOME=%FLUENT_INC%/../commonfiles/CPython/3_7/winx64/Release/python
set PYTHONPATH=%FLUENT_INC%/../commonfiles/CPython/3_7/winx64/Release/python
"%FLUENT_INC%/../commonfiles/CPython/3_7/winx64/Release/python/scons"


      复制成功
     
     
     
     

Step2 修改G:\ANSYS Inc\ANSYS Student\v202\fluent\fluent20.2.0\src\udf\sconstruct.udf文件,为bld和cld的定义中$CC和$CLINK变量添加双引号:

代码块

powershell


     自动换行
   


     复制代码
   

123456


bld = Builder(action = '"$CC" $CFLAGS $DINCPREFIX $SOURCE')
env.Append(BUILDERS = {'Foo' : bld})

cld = Builder(action = '"$CLINK" $DFLAGS /dll /out:$TARGET $SOURCES')
env.Append(BUILDERS = {'Foo_lib' : cld})


      复制成功
     
     
     
     

1.2 问题分析

一步一步来解决问题,检查两个脚本文件。在"G:\ANSYS Inc\ANSYS Student\v202\fluent"\fluent20.2.0\src\udf\scons_test.bat(按照自己的路径找该文件)中:

代码块

powershell


     自动换行
   


     复制代码
   

1234


set PYTHONHOME=%FLUENT_INC%/../commonfiles/CPython/3_7/winx64/Release/python
set PYTHONPATH=%FLUENT_INC%/../commonfiles/CPython/3_7/winx64/Release/python
%FLUENT_INC%/../commonfiles/CPython/3_7/winx64/Release/python/scons


      复制成功
     
     
     
     

果然,line 3中没有添加双引号,如果路径中包含空格(默认安装ansys的路径中包含多个空格),结果就会报错,所以此处自己手动给line3两端添加双引号:"%FLUENT_INC%...scons",即:

代码块

powershell


     自动换行
   


     复制代码
   

1234


set PYTHONHOME=%FLUENT_INC%/../commonfiles/CPython/3_7/winx64/Release/python
set PYTHONPATH=%FLUENT_INC%/../commonfiles/CPython/3_7/winx64/Release/python
"%FLUENT_INC%/../commonfiles/CPython/3_7/winx64/Release/python/scons"


      复制成功
     
     
     
     


再次使用内置的编译器,按照正常的流程编译,结果还是不能顺利通过,再次检查错误提示:

代码块

powershell


     自动换行
   


     复制代码
   

123456789


G:\\ANSYS Inc\\ANSYS Student\\v202\\fluent\\ntbin\\clang\\bin\\clang-cl 
/c /Za /DUDF_EXPORTING /DUDF_NT /DWIN64 /EHa /wd4224 -Wno-return-type 
-Wno-implicit-function-declaration 
...(此处抓重点,只看关键部分)
-I D:\\Documents\\fluent_case\\UDF_test_case\\libudf\\win64\\3d_host 
-I "G:\\ANSYS Inc\\ANSYS Student\\v202\\fluent\\ntbin\\clang\\VC\\include" 
-I "G:\\ANSYS Inc\\ANSYS Student\\v202\\fluent\\ntbin\\clang\\kit\\include\\shared" message.c
'G:\\ANSYS' 不是内部或外部命令,也不是可运行的程序


      复制成功
     
     
     
     

可以看出,实际调用的编译命令是clang-cl,问题还是一样:路径中包含空格,路径却没有使用双引号!查看"G:\ANSYS Inc\ANSYS Student\v202\fluent"\fluent20.2.0\src\udf\sconstruct.udf文件204~208行片段:

代码块

powershell


     自动换行
   


     复制代码
   

123456


bld = Builder(action = '$CC $CFLAGS $DINCPREFIX $SOURCE')
env.Append(BUILDERS = {'Foo' : bld})

cld = Builder(action = '$CLINK $DFLAGS /dll /out:$TARGET $SOURCES')
env.Append(BUILDERS = {'Foo_lib' : cld})


      复制成功
     
     
     
     

其中$CC即对应这里的编译命令clang-cl,可以看出确实没有添加双引号,同样,下面的链接器也没有添加双引号,手动添加之:

代码块

powershell


     自动换行
   


     复制代码
   

123456


bld = Builder(action = '"$CC" $CFLAGS $DINCPREFIX $SOURCE')
env.Append(BUILDERS = {'Foo' : bld})

cld = Builder(action = '"$CLINK" $DFLAGS /dll /out:$TARGET $SOURCES')
env.Append(BUILDERS = {'Foo_lib' : cld})


      复制成功
     
     
     
     


再次使用内建编译器,尝试编译:

代码块

powershell


     自动换行
   


     复制代码
   

12345678910111213141516


# Build
...
2 warnings generated.
"G:\\ANSYS Inc\\ANSYS Student\\v202\\fluent\\ntbin\\clang\\bin\\lld-link" "G:\\ANSYS Inc\\ANSYS Student\\v202\\fluent\\fluent20.2.0\\win64\\3d_node\\fl_mpi2020.lib" "G:\\ANSYS Inc\\ANSYS Student\\v202\\fluent\\fluent20.2.0\\multiport\\win64\\mpi\\shared\\mport.lib" "G:\\ANSYS Inc\\ANSYS Student\\v202\\fluent\\ntbin\\clang\\VC\\lib\\amd64\\libcmt.lib" "G:\\ANSYS Inc\\ANSYS Student\\v202\\fluent\\ntbin\\clang\\VC\\lib\\amd64\\oldnames.lib" "G:\\ANSYS Inc\\ANSYS Student\\v202\\fluent\\ntbin\\clang\\kit\\lib\\winv6.3\\um\\x64\\kernel32.lib" /dll /out:libudf.dll message.obj udf_names.obj
scons: done building targets.

Done.

# Load
...
Laptopyz: Opening library "D:\\Documents\\fluent_case\\UDF_test_case\\libudf"...Done.

Laptopyz: Opening library "D:\\Documents\\fluent_case\\UDF_test_case\\libudf"...
	say_hello
Done.


      复制成功
     
     
     
     

可以看出,结果只有warning,能正常Build和Load,以及调用。


2 使用Visual Studio编译器

2.1 方法1:修改Fluent环境配置脚本udf.bat(推荐)

如果日常有使用VS的需求,可以通过配置VS环境来编译UDF,一般安装比Ansys版本低的VS即可,具体配置说明如下(参考:B站视频​)。

启动Fluent时,查看Environment选项卡,其中指定了默认的VS环境配置脚本udf.bat的路径。


按照该路径打开指定文件,即G:\ANSYS Inc\ANSYS Student\v202\fluent\ntbin\win64\udf.bat,修改相关内容:1)找到与自己所安装的VS版本相对应的配置部分,比如本人电脑安装的是VS2017社区版(对应version 150),找到2017对应的配置部分;2)将默认%ProgramFiles(x86)%替换成VS的安装目录,此处我的VS安装在D:\Program Files (x86)。

注:%ProgramFiles(x86)%为系统默认的一个环境变量,指向路径C:\Program Files (x86),因此如果VS安装在默认路径下,应该能直接调用VS的编译器来编译UDF,否则就需要参考此处的做法来修改



免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

相关文章
技术文档
QR Code
微信扫一扫,欢迎咨询~
customer

online

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 board-phone 155-2731-8020
close1
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

姓名不为空

姓名不为空
手机不正确

手机不正确

手机不正确
公司不为空

公司不为空

公司不为空