下面介绍一个出错例子,即在“Interpreted UDFs”控制面板中,编
fluent UDF
译被解释过的UDF时指定了错误的源文件。上面曾介绍过如果仅仅从当前工作目录下启动FLUENT,在“Interpreted UDFs”控制面板中键入用户的C源码的文件名,则case文件和C源码被指定于当前工作目录下。如果用户编译的C源码与工作目录是不同的路径,用户必须输入C源码所在的完整路径。否则会出现以下的错误信息:
gcc: vprofile.c: No such file or directory
gcc: No input files
Error: vprofile.c: line 1: syntax error.
如果编译UDF写完case文件后,接着移动C源码到不同位置,会在接着运行FLUENT的过程中产生同样的错误信息。
为了避免错误,只需要在“Interpreted UDFs”控制面板中的“Source File Name”下输入完全的路径名,然后点击“Compile”。此时写case文件会保存C源码的新路径。
7.3 编译UDF
这一节介绍如何链接编译好的UDF。这一过程需要使用C编译器。大部分UNIX的操作系统提供了C编译器。如果在PC机上运行,需要安装VC++编译器(如微软C++、v6.0或更高的版本)。一旦编译好的UDF库文件在FLUENT运行时链接到FLUENT处理过程,和共享库相关的东西会保存到case文件。因此,只要读取case文件,编译的库文件会自动链接到FLUENT处理过程。在控制窗口将会出现链接状态的报告如下:
Opening library "libp1/ultra/2d/libudf.so"...
p1_adjust
fluent UDF
energy_source
p1_source
p1_diffusivity
p1_bc
Done.
7.3.1 一般程序
编译和链接一个编译好的UDF的一般程序如下所示:
1. 在当前工作目录下,建立专门的目录结构(见7.3.2节)。
2. 编译用户的UDF和修建共享库(见7.3.3节)。
3. 在当前工作目录下运行FLUENT。
4. 读取(或建立)case文件(确信case文件在当前工作目录下)。
5. 链接共享库到FLUENT(见7.3.4节)。
7.3.2 建立目录结构
对于UNIX系统和Windows系统来说,目录结构是不同的。下面分别介绍在两种系统下如何建立目录结构。
UNIX系统
对于UNIX系统下编译的UDF来说,makefile.udf和makefile.udf2两个文件在编译UDF库被需要。makefile文件包含了用户自定义部分,在这部分允许输入用户源函数和FLUENT的安装路径。这些文件的完整路
fluent UDF
径如下:
path/Fluent.Inc/fluent6.+x/src/makefile.udf
path/Fluent.Inc/fluent6.+x/src/makefile.udf2
其中path是用户直接安装Fluent.Inc的路径,x是用户安装Fluent版本的相应数(如,fluent6.0为0)。
! FLUENT安装后所释放的makefile.udf2文件名为Makefile.udf。 下面介绍建立共享库所要求的目录结构。通过下面的例子来介绍目录结构的建立,如图7.3.1所示。
图7.3.1 为编译好的UDF建立库目录的样本(UNIX)
需要注意的是在图7.3.1所示的目录结构为FLUENT的两种版本:二维单精度串型和二维单精度平行。
!不要在目录(2d,2d host,等等)下存放任何文件。当编译用户库(见7.3.3节)时,图7.3.1中所示的文件会自动存放。
1. 在当然工作目录下,创建一个储存用户库的目录(如libudf)。
2. 从以上所示目录下复制makefile.udf2到用户目录(如libudf),
fluent UDF
且改名为Makefile。
3. 在用户创建的库目录下,建立一个储存用户源码、命名为src的源码目录。
4. 复制用户源码(如udfexample.c)到所建的/src目录下。
5. 从以上所示目录下复制makefile.udf到用户的/src目录,并且命名为makefile。
6. 鉴别FLUENT所运行的计算机的体系机构。
(a) 开始FLUENT程序。
(b) 向上滚动FLUENT的控制窗口到“\Starting”信息处,鉴定FLUENT的体系机构。
(c) 退出FLUENT程序。
! 如果体系机构是irix6.5,需要在makefile进行额外的修改。
7. 为体系机构所建不同版本下创建目录(如ultra/2d和ultra/3d)。存在的版本如下所示:
single-precision serial 2D or 3D: 2d or 3d
double-precision serial 2D or 3D: 2ddp or 3ddp
single-precision parallel 2D or 3D: 2d_node and 2d_host or 3d_node and 3d_host
double-precision parallel 2D or 3D: 2ddp_node and 2ddp_host or 3ddp_node and 3ddp_host
! 需要注意:不管计算节点的数量,用户必须为每个并行版本的求解器(如在三维下有两个目录,二维双精度版本下有两个目录,等等)
fluent UDF
创建两个调试目录。
!不要在目录(2d,2d host,等等)下存放任何文件。当编译用户库(见7.3.3节)时,图7.3.1中所示的文件会自动存放。
Windows系统
对于Windows系统下编译的UDF来说,makefile_nt.udf和user_nt.udf两个文件在编译UDF库被需要。user_nt.udf文件中包含了用户自定义部分,在这部分允许输入用户源函数及其它信息。
为了建立共享库所要求的目录结构,需要按照上面所讲的操作步骤进行。通过下面的例子来介绍目录结构的建立,如图7.3.2所示。 需要注意的是在图7.3.2所示的目录结构为FLUENT的两种版本:二维单精度串型和二维单精度并行。
图7.3.2 为编译好的UDF建立库目录的样本(Windows)
1. 在当前工作目录下,创建一个储存用户库的目录(如libudf)。
2. 在用户创建的库目录下,建立一个储存用户源码、命名为src的源
fluent UDF
码目录。
3. 复制用户源码(如udfexample.c)到所建的/src目录下。
4. 建立所使用体系机构的目录,如基于Windows的Intel系统使用的目录为ntx86。
5. 针对所用的体系机构建立不同版本的目录(如ntx86\2d)。存在的版本如下所示:
single-precision serial 2D or 3D: 2d or 3d
double-precision serial 2D or 3D: 2ddp or 3ddp
single-precision parallel 2D or 3D: 2d_node and 2d_host or 3d_node and 3d_host
double-precision parallel 2D or 3D: 2ddp_node and 2ddp_host or 3ddp_node and 3ddp_host