Fluent UDF 中文教程UDF第7章 编译与链接 下载本文

内容发布更新时间 : 2024/11/8 8:47:01星期一 下面是文章的全部内容请认真阅读。

创建两个调试目录。

!不要在目录(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。