Ansys Student 2020R2中Fluent编译UDF简介
使用内建编译器
在Ansys Fluent中编译UDF一般都需要额外安装相应版本的Visual Studio编译器,VS的缺点是体量大,占空间,安装后还需要额外进行相关设置才能正常使用。而新版本的Ansys Fluent编译UDF模块中提供了内建编译器(Build-In Compiler),使得脱离VS编译UDF称为可能。
使用内建编译器编译一个测试UDF来看看效果,所使用的测试udf源码如下:
// message.c
#include "udf.h"
DEFINE_ON_DEMAND(say_hello)
{
Message("hello, fluent udf compiler test\n");
}
按照正常的编译流程走一遍,结果不能顺利编译(相同的错误在ansys论坛中也被提及点击跳转),错误片段如下:
...
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' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
可以看出,Ansys Fluent内建的编译器是通过python的库scons来实现的,与之相关的有两个脚本文件sconstruct.udf
和scons_test.bat
,而错误的原因很明显:路径中包含空格,路径却没有使用双引号!
一步一步来解决问题,检查两个脚本文件。在"G:\ANSYS Inc\ANSYS Student\v202\fluent"\fluent20.2.0\src\udf\scons_test.bat
(按照自己的路径找该文件)中:
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"
,即:
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"
再次使用内置的编译器,按照正常的流程编译,结果还是不能顺利通过,再次检查错误提示:
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行片段:
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
,可以看出确实没有添加双引号,同样,下面的链接器也没有添加双引号,手动添加之:
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})
再次使用内建编译器,尝试编译:
# 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
,以及调用。
使用Visual Studio编译器
如果日常有使用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。
另一种使用VS编译UDF的方式:在VS相关的命令提示符中启动Fluent。
安装VS之后,(在软件启动栏中)能发现随之新添加了几个与VS相关的命令提示符,比如适用于 VS 2017 的 x64 本机工具命令提示
。打开该命令提示符,在终端中输入"G:\ANSYS Inc\ANSYS Student\v202\fluent\ntbin\win64\fluent.exe"
启动Fluent即可。
原理说明:VS相关的命令提示符启动后,首先会激活VS相关的环境变量,再该终端中启用的程序(fluent)会自动应用相关的环境变量,因此可以直接调用VS的编译器来编译链接UDF。
Ansys Student 2020R2中Fluent编译UDF简介的更多相关文章
- 在Visual Studio中直接编译Fluent的UDF
VS版本:Visual Studio 2013 Fluent版本:Fluent18.2 首先我们启动VS Studio中直接编译Fluent的UDF" title="在Visual ...
- 在Visual Studio中直接编译Fluent的UDF(修正)
原文见:http://blog.sina.com.cn/s/blog_14d64daa10102xkg4.html 主要是修正几个问题: 首先是头文件填入的顺序需要严格按照我前文给出的顺序填写,否则可 ...
- Fluent操作流程&&udf编译
Fluent 操作流程 1, 读网格模型 2, Scale修改单位 3, Check检查网格是否符合要求,最小体积不能出现负数 4, Time 选择瞬态,重力设置 5, Models-Multipha ...
- 编译udf小软件(附视频教程)
小软件下载地址(不仅支持Visual Studio并且打包gcc,解压即可编译): https://pan.baidu.com/s/1XPfjfY8DC2KKS8gj1KhutQ 提取码: 6kju ...
- GCC编译UDF和gdb调试UDF
Fluent版本:19.0 前面我们介绍过使用VS来编译和调试UDF,其实我们也可以用GCC来编译UDF.gdb调试UDF.本次介绍的方法更具有通用性,也适用于Linux下Fluent的UDF编译和调 ...
- DB表的关系及EF中Fluent API的使用
现在使用多数的数据库是关系型数据库,那么表与表之间的关系就会显得尤其重要,对于数据的CRUD处理和以后数据的分析有很大的好处.下面是对于数据库中对表关系的理解以及在EF中使用Fluent API来创建 ...
- OSG中的示例程序简介
OSG中的示例程序简介 转自:http://www.cnblogs.com/indif/archive/2011/05/13/2045136.html 1.example_osganimate一)演示 ...
- OSG中的示例程序简介(转)
OSG中的示例程序简介 1.example_osganimate一)演示了路径动画的使用 (AnimationPath.AnimationPathCallback),路径动画回调可以作用在Camera ...
- linux中的strings命令简介2
摘自:http://blog.csdn.net/stpeace/article/details/46641069 linux中的strings命令简介 之前我们聊过linux strings的用法和用 ...
随机推荐
- Git的详细使用
关于Git的详细使用,下面博主的博客写的非常的详细! 可以参考一下. https://blog.csdn.net/qq_19835247/article/details/104620042 人生需要准 ...
- JDK、JRE与JVM之间的关系
初学JAVA很容易被其中的很多概念弄的傻傻分不清楚,首先从概念上理解一下吧: JDK(Java Development Kit)简单理解就是Java开发工具包,JRE(Java Runtime Env ...
- C++入门记-构造函数和析构函数
前文回顾 本文档环境基于Vscode + GCC + CodeRunner 关于C++的环境搭建请参考下面链接: C++入门记-大纲 由于本人具有C#开发经验,部分相同的知识就不再赘述了.只列一下需要 ...
- 树(Tree)解题总结
定义 树是一种抽象数据类型(ADT)或是实现这种抽象数据类型的数据结构,用来模拟具有树状结构性质的数据集合.它是由 n(n>0) 个有限节点组成一个具有层次关系的集合.. 二叉搜索树(Binar ...
- SplashImage
关于Unity启动时间过长(启动黑屏时间长)的问题 https://blog.csdn.net/h5q8n2e7/article/details/50484458 Unity3D游戏开发之“重写Uni ...
- Vue中父组件使用子组件的emit事件,获取emit事件传出的值并添加父组件额外的参数进行操作
需求是这样的,需要输入这样一个列表的数据,可以手动添加行,每一行中客户编号跟客户姓名是自动关联的,就是说选取了客户姓名之后,客户编号是自动填充的,客户姓名是一个独立的组件,每一个下拉项都是一个大的对象 ...
- leetcode刷题-69x的平方根
题目 实现 int sqrt(int x) 函数. 计算并返回 x 的平方根,其中 x 是非负整数. 由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去. 示例 1: 输入: 4输出: 2 思 ...
- jenkins参数传递
官方说明:https://wiki.jenkins.io/display/JENKINS/Parameterized+Build 1.添加参数传递 参数类型解析: 2.在 Execute shell ...
- Linux:mysql编译安装
mysql安装包有源码包和二进制包.源码包安装时需要编译.二进制包安装时不需要编译. 二进制格式的包名字很长,都带有版本号.适应平台.适应的硬件类型等,而源码格式仅仅就是一个版本号的tar包. 源代码 ...
- [算法]类似n sum个数的问题(DP)
题目 求和为target的数组元素组合数,含重复. 例: 输入 arr = { 1, 2, 3, 3, 4 } ,target = 6 输出 4 题解 dp[i][j]代表到数组第i-1个元素,目标和 ...