! 需要注意:不管计算节点的数量,用户必须为每个并行版本的求解器(如在三维下有两个目录,二维双精度版本下有两个目录,等等)创建两个调试目录。
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
fluent 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.
#
#-----------------------------------------------------------#
fluent UDF
#-----------------------------------------------------------#
# 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),即
fluent UDF
make "FLUENT ARCH=ultra"
控制窗口显示信息为:
# 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。
fluent UDF
PARALLEL NODE =并行连接库。对于求解器的一系列版本无指定的并行连接库。可能的输入为:
-{ none: serial
-{ smpi: parallel using shared memory (for
multiprocessor machines)
-{ vmpi: parallel using shared memory or network with vendor MPI software
-{ net: parallel using network communicator with RSHD software
! 如果使用的是并行求解器,需要复制两个user_nt.udf文件(一个是主目录的,一个是节点目录),并且指定两个文件适当的SOURCE, VERSION, and PARALLEL NODE。
下面给出user_nt.udf文件的一个例子:
对于指定多个用户定义函数只需要在SOURCES下输入它们,并用空格分开即可。
2. 在MS-DOS 命令提示窗口,键入nmake建立目录,如
fluent UDF
\libudf\ntx86\2d\。
需要注意的是如果创建存在问题,通过键入nmake clean来进行完整的重建。
7.3.4 连接共享库到FLUENT可执行文件
按照7.3.3小节所示的unix或windows环境下的步骤编译共享库后,就可以将其连接到FLUENT程序中。将共享库连接到FLUENT程序中的步骤如下:
1. 从当前工作目录下启动FLUENT。
2. 读取(或设置)case文件。(确认此case文件保存在当前的工作目录下。)
3. 连接共享库到FLUENT执行文件中。
(a) 如果共享库保存在当前工作目录中,在Library Name对话框中输入相对路径(例如, libudf), 否则输入完整路径,(例如, ~myhome/myfiles/libudf).
!注意,如果存放共享库的目录不在当前的工作目录或其子目录下,
fluent UDF
一定要输入完整的路径名。
(b) 单击Open按钮,这会将共享库连接到FLUENT执行文件中。求解器会自动搜索相应的结构格式和版本。一旦共享库连接到FLUENT执行文件以及case文件被写入以后,此连接关系就被保存在case文件中。因此,无论何时将case文件读入FLURENT,此共享库都会被自动连接。
7.3.5 编译和连接共享库时常见的错误
指定库的名称
仅当从当前的工作目录下运行FLUENT并且共享库的目录是当前工作目录的子目录时,才可以在Compiled UDFs 面板上直接输入共享库的目录(例如libudf)。如果被使用的共享库不在上述位置上,连接此共享库时,必须提供其完整的路径。否则会出现以下错误: Opening library "libudf/ultra/3d/libudf.so"...