许多学习了一段时间Fluent的朋友们会开始接触到一个叫UDF的东东,这个东东的全称叫User Define Function,翻译成中文可以是“用户自定义功能”或“用户自定义函数”。
许多想入门UDF的朋友在学习UDF前面临的第一个问题应该是UDF环境变量设置的问题,这个问题可能已经成为新手入门UDF的一个门槛了。UDF环境变量设置现在网上百度也能搜到一些教程,这里我不操作如何进行UDF环境变量设置,这个可以自行找资料解决。
在设置好环境变量后,大家接下来关心的应该是Fluent支持的串行与并行了,因为在编写UDF时,这个UDF可以编写成串行的也可以编写成并行的,但不同版本Fluent对于它的真串行和真并行还是有区别的。本人是在学习过程中从一些前辈们处了解到大概从Fluent 17.2或是Fluent 18.0开始,Fluent启动界面中Processing Options下的Serial不再是真串行了,而是单核并行,所以许多新手入门UDF时总是容易碰到编写的UDF在Serial方式启动后进行UDF编译,易出现报错的情况。报错可能有两种原因,一种可能是你的UDF环境变量没有设置好,另一种可能是Fluent串行或是并行的启动方式不正确。建议大家最好安装Visual Studio 2010版本,因为该版本搭配各种Fluent版本算是最稳定的,本人是用Visual Studio 2013版本,暂时没有出现任何问题,但还是建议新手安装Visual Studio 2010版本,稳一些!
一 编译UDF时常出现的问题
二 本人电脑系统及Fluent版本
三 用于测试的简单UDF程序
#include "udf.h"
DEFINE_ON_DEMAND(my_udf)
{
Message("Welcome to Fluent!\n");
}
该C程序参考UDF帮助手册编写,将用于编译UDF测试。
四 Fluent各版本串行与并行测试
Serial方式
▼ 我们以Serial串行方式启动Fluent 17.0。
这里我们发现,我们以串行方式启动编译的UDF生成的是单句信息,生成的动态库文件也是单个,这里的串行方式是真串行方式。
Parallel -1 方式
▼ 执行完该UDF程序生成了两个动态库文件,一个是主机节点host生成的,一个是0节点n0生成的,信息语句也生成了两条。
Serial方式
▼ 我们以Serial串行方式启动Fluent 17.2。
▼ 可以在控制台中读取到一些信息。
▼ 执行该UDF程序,在控制台发现生成了我们在C程序中编写的信息,该测试完成。
Parallel -1 方式
▼ 以1线程启动Fluent。
▼ 从控制台发现,主机节点host和0节点n0都使用了,刚刚设置的1线程也就生效了。
Serial方式
▼ 我们以Serial串行方式启动Fluent 18.0。
▼ 可以在控制台中读取到一些信息。
▼ 执行该UDF程序,在控制台发现生成了我们在C程序中编写的信息,该测试完成。
Parallel -1 方式
这里的并行我设置了1线程,我在尝试设置为0线程时发现,点击启动Fluent时,线程数自动变为了1。
Serial方式
▼ 我们以Serial串行方式启动Fluent 18.2。
▼ 但发现控制台中出现了两个节点,一个是主机host节点,一个是n0节点,可以判断Fluent 18.2的Serial串行是伪串行,实际上是单线程并行方式启动,在编写UDF时尤其是编写并行UDF时一定要注意。
▼ 从控制台中发现,动态库文件生成了两个,但信息语句只生成了一个。
Parallel -0 方式
▼ 这里我们可以看到控制台中只显示生成了一个动态库文件,信息语句也只生成了一个。
Serial方式
▼ 我们以Serial串行方式启动Fluent 19.0。
▼ 从上一个版本18.2开始,19.0也是这样了。
▼ 两个动态库文件,一条信息语句,很明显的伪串行。
Parallel -0 方式
▼ 将线程设置为0启动。
▼ 可以在控制台中读取到一些信息。
▼ 这里我们可以看到控制台中只显示生成了一个动态库文件,信息语句也只生成了一个。
Serial方式
Parallel -0 方式
Serial方式
▼ 我们以Serial串行方式启动Fluent 2019R3。
▼ 可以在控制台中读取到一些信息。
▼ 这里的Fluent 2019R3和Fluent 19.2的伪串行又有些区别了,这里不仅生成了两个动态库文件,还生成了两条信息语句。
Parallel -0 方式
▼ 这里用0线程并行方式启动。
▼ 在控制台中显示如上信息。
这是谷歌翻译的内容,请参考着理解。
Fluent现在默认使用并行模式和单个进程来执行“串行”。您已选择在旧版串行模式(也称为“-t0”)中启动Fluent。此模式与Fluent中的许多较新增强功能不兼容,并且可能在将来的版本中删除。建议您改用默认的串行模式。如果使用默认模式是因为使用默认模式时遇到问题,请让ANSYS支持联系人了解详细信息,以便我们改进产品。
▼ 只生成了一个动态库文件和一条信息语句。
▼ 从Fluent 2020R1启动界面已经找不到Serial这个英文单词了,而且红色框中的Solver Processes线程数最小只能设置为1,已经不存在所谓的串行或是0线程并行了。
▼ 使用了主机节点host和n0节点两个节点计算。
▼ 生成了两个动态库文件和两条信息语句。
在这里,大家要明白这一点,Fluent 2020R1已经不存在以-t0方式启动串行了,现在只有并行了,编写UDF时更要注意这个问题。
下载地址:Fluent UDF中文教程