创建两个调试目录。
!不要在目录(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的源
码目录。
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
! 需要注意:不管计算节点的数量,用户必须为每个并行版本的求解器(如在三维下有两个目录,二维双精度版本下有两个目录,等等)创建两个调试目录。
6.复制makefile_nt.udf和user_nt.udf到相应版本所建的目录下,如2d。
! 对于并行的版本来说,一定要复制这两个文件到主机和节点目录,即如图7.3.2所示的2d_node and 2d_host目录。 这两个文件的完整路径如下:
path\\Fluent.Inc\\fluent6.+x\\src\\makefile_nt.udf path\\Fluent.Inc\\fluent6.+x\\src\%user_nt.udf
其中path是用户直接安装Fluent.Inc的路径,x是用户安装Fluent版本的相应数(如,fluent6.0为0)。
! 确定makefile_nt.udf和user_nt.udf为最新版本所用文件。如果安装新的FLUENT 6版本,必须复制新的makefile_nt.udf和user_nt.udf到相应的创建目录。 7. 重命名makefile_nt.udf为makefile。
7.3.3 编译和创建用户共享库
下面分别介绍UNIX和Windows系统下如何编译和创建共享库。
UNIX系统
在建立目录并存放文件到相应位置后,便能开始编译和创建共享库。 1. 在用户的src目录下编辑文件makefile,设置参数如下:
? SOURCES = 编译好的用户自定义函数 ? FLUENT INC = 用户的安装路径 下面是一个makefile的例子:
#-----------------------------------------------------------#
# makefile for user defined functions. #
#-----------------------------------------------------------#
#-----------------------------------------------------------#
# User modifiable section.
#-----------------------------------------------------------#
SOURCES= udfexample.c FLUENT_INC= /path/Fluent.Inc
#-----------------------------------------------------------#
# Build targets (do not modify below this line). #-----------------------------------------------------------#
. .
2. 如果体系机构是irix6.5,还需要在makefile中进行附加变化。 (a) 找到makefile文件中找到下面的命令行
CFLAGS_IRIX6R10= -KPIC -ansi -fullwarn -O -n32 (b) 改变“-ansi”为“-xansi”,即
CFLAGS_IRIX6R10= -KPIC -xansi -fullwarn -O -n32 对于其它的体系机构不需要进行以上变动。
3. 在工作目录(如libudf)下,执行make命令,包含前一步(在7.3.2节)确定的体系机构(如ultra),即
make \控制窗口显示信息为:
# linking to ../../src/udfexample.c in ultra/2d # linking to ../../src/makefile in ultra/2d # building library in ultra/2d
# linking to ../../src/udfexample.c in ultra/3d # linking to ../../src/makefile in ultra/3d # building library in ultra/3d
以上面的makefile为例,用户自定义函数udfexample.c被编译和存放于版本所指定的共享库libudf.so中,如在图7.3.1中所示的2d,2d_host和2d_node。虽然在这个例子中只用了一个C函数,但是用户在“SOURCES = in the makefile”下可通过空格分隔多个源文件。
Windows系统
在建立目录并存放文件到相应位置后,便能开始编译和创建共享库。 1. 用文本文件编译user_nt.udf文件,设置参数为:
? SOURCES =编译好的用户自定义函数。在每个文件前加前缀$(SRC),如 一个函数为$(SRC)udfexample.c,两个函数为$(SRC)udfexample.c $ (SRC)udfexample2.c)。 ? VERSION =所用版本,即如图7.3.2所示2d,3d,2ddp,3ddp,2d host,2d node,3d host,3d node,2ddp host,2ddp node,3ddp host,或3ddp node。