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

Linux中编译Fluent UDF

最近总有道友在后台问Linux下安装ANSYS以及Linux下编译UDF的问题,懒得一个个的回复了,干脆整理成文得了。

关于ANSYS安装的问题,公众号不便发布相关文章(毕竟很久以前发过某软件的安装教程,然后后台有人威胁说要举报),其实并不复杂,按照安装说明一路Next就行了,需要注意安装时使用管理员模式,最简单的无异于使用root进行安装,这样才能防止由于权限问题导致安装失败。另一个就是注意Linux发行版及其版本,ANSYS明确支持的发行版并不多,参看官方说明,貌似只支持Red Hat Enterprise Linux (RHEL)、SUSE的企业版与桌面版以及CentOS,而且还有版本上的限制,其他发行版及其版本也可能装的上,但不保证一定能装的上,个人建议还是按官方明确指定的Linux版本安装。

另一个就是Linxu系统下编译Fluent UDF,这个就更简单了,和Windows不同,绝大多数Linux系统中是内置了编译器的,Fluent可以直接利用内置的编译器进行UDF的编译。

在Linux系统中,可以使用GCC编译UDF。

首先确认系统中已经存在有编译工具,主要是gcc与make,利用下面的命令检测是否安装。

gcc --version
make --version

如下图所示,给出了程序的版本号,则表示系统内已经安装好了编译工具。

一般Linux系统中都默认安装了GCC,不过也要放置有的系统没有安装,故事先检查一下总是没错的。若系统中未安装GCC和make,则需要手动安装。这两个软件非常通用,网上可以找到一大堆的安装方法。如CentOS中可以使用命令sudo yum install gcc make,Ubuntu系统中可以使用sudo apt-get install build-essential进行安装。

主要有两种编译方式:

  • 在Fluent内部编译
  • 在Fluent外部编译

1 Fluent内部编译

先编写一个测试UDF,代码如下:

#include "udf.h"
DEFINE_ON_DEMAND(Test)
{
Message0("nHello,Fluent!n");
}

这是一个极简的UDF程序,目的是在TUI窗口输出一段信息。将代码命名为demo.c

  • 启动Fluent,选择工作路径与UDF源文件路径一致
  • 点击工具栏按钮User-Defined → Functions → Compiled...打开UDF编译对话框
  • 在Compiled UDFS对话框中添加源文件(如下图所示的demo.c),点击按钮Build即可进行编译,编译完毕后点击按钮Load可加载UDF

TUI窗口中可以查看编译过程,如下图所示没有错误提示,表示UDF成功编译且加载。

可以测试UDF。本案例的UDF非常简单,仅仅在屏幕上打印一行文本。

  • 点击按钮Execute on Demand...打开对话框
  • 如下图所示,选择Execute on Demand选项为前面加载的Test::libudf,点击按钮Execute执行该UDF

运行结果如下图所示,可以看到,UDF成功执行,其在TUI窗口打印出来预制的文本。

再看工作路径下的情况,可以看到增加了相当多的内容。

在Linux中编译UDF并不需要额外配置环境变量,只要系统中安装了GCC及make即可。

2 Fluent外部编译

也可以在Fluent外部直接使用GCC进行编译,得到动态库文件后在Fluent中直接加载。外部编译UDF比较麻烦,需要手动准备文件,不过这种方式可以手工定义编译选项,比内部编译方式要更灵活一些,可以用来编译一些需要调用外部动态库的UDF。

2.1 准备文件

若要编译UDF文件,需要利用到Fluent安装路径下的3个文件:makefile.udf、makefile.udf2及user.udf。

需要创建一些文件夹:

  • 在工作路径下创建文件夹libudf
  • 将Fluent路径中的makefile.udf2文件拷贝到libudf中,重新命名为makefile
  • 在libudf中创建文件夹src
  • 将源文件(如本案例demo.c)拷贝到src文件夹中
  • 将Fluent路径中的makefile.udf文件拷贝到src文件夹,并将其命名为makefile
  • 在libudf文件夹下根据当前系统类型创建子文件夹(如64位x86类型的linux系统使用lnamd64
  • 在lnamd64文件夹下创建子文件夹,文件夹名称根据编译类型决定,如三维双精度创建文件夹3ddp_host与3ddp_node。(可选的包括2ddp_node/2ddp_host、2d_node/2d_host、3d_node/2d_host,成对出现)
  • 将Fluent路径中的user.udf文件拷贝到lnamd64文件夹下的两个子文件夹中

创建完毕后的libudf文件夹结构如下所示。

在libudf路径下可以使用下面的命令完成上面的工作:

mkdir libudf && cd libudf
cp /ansys_inc/v211/fluent/fluent21.1.0/src/udf/makefile.udf2 makefile
mkdir src && cd src
cp ../../demo.c .
cp /ansys_inc/v211/fluent/fluent21.1.0/src/udf/makefile.udf makefile
cd ..
mkdir lnamd64 && cd lnamd64
mkdir 3ddp_host 3ddp_node
cp /ansys_inc/v211/fluent/fluent21.1.0/src/udf/user.udf 3ddp_host
cp /ansys_inc/v211/fluent/fluent21.1.0/src/udf/user.udf 3ddp_node

2.2 修改文件

  • 修改两个子文件夹(如3ddp_host及3ddp_node)中的user.udf文件。用文本编辑器打开user.udf文件,修改文件内容为
CSOURCES = demo.c
HSOURCES =
FLUENT_INC=/ansys_inc/v211/fluent

注意两个文件夹中都要修改。修改完毕后如下图所示。

注:这里CSOURCES后面跟的是源文件的名称,可以有多个源文件,以空格分隔。HSOURCES后面跟的是头文件列表,也可以有多个头文件,以空格分隔。FLUENT_INC后面跟的是Fluent的安装路径,自己根据本机安装路径进行修改。

  • 进入libudf文件夹,输入命令
 make "FLUENT_ARCH=lnamd64"

若如下图所示没有出现任何错误信息,且提示生成文件libudf.so,则表示编译成功。

注:这里的lnamd64表示64位linux操作系统,通常情况下无需修改,若本机安装的不是64位系统,则需要根据具体情况进行修改。

此时libudf文件夹中的文件结构如下图所示。

2.3 测试

  • 启动Fluent。注意启动方式要与前面编译的UDF一致,如前面编译的是三维双精度版本,那么在启动Fluent的时候就要以三维双精度的形式启动

注:其实说反了,应该是我们使用什么类型的求解器,那么在前面就编译成什么类型的UDF。

  • 点击按钮User-Defined → Functions → Manage...打开UDF Library Manager对话框
  • 如下图所示,在Library Name中输入libudf,点击按钮Load加载UDF
  • 点击按钮Execute on Demand...打开对话框
  • 如下图所示,选择Execute on Demand选项为前面加载的Test::libudf,点击按钮Execute执行该UDF

执行结果如下图所示,可以看到程序顺利执行。

3 总结

Linux系统中在Fluent内部编译UDF非常简单,只要操作系统中安装有GCC及make,无需配置任何环境变量,即可在Fluent中进行UDF的编译。也可以在Fluent外部手动编译UDF,总体来讲也不算复杂。需要注意的是:Fluent内置的编译器Use Built-in Compiler在Linux系统中不可用。


(本文结束)

本篇文章来源于微信公众号: CFD之道

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

说两句 抢沙发

评论前必须登录!

 

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

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

支付宝扫一扫

微信扫一扫

登录

找回密码

注册