首页 Fluent_UDF_第七章_UDF的编译与链接

Fluent_UDF_第七章_UDF的编译与链接

举报
开通vip

Fluent_UDF_第七章_UDF的编译与链接 第七章 UDF 的编译与链接 第七章 UDF的编译与链接 编写好UDF件(详见第三章)后,接下来则准备编译(或链接)它。在7.2或7.3 节中指导将用户编写好的UDF如何解释、编译成为共享目标库的UDF。 _ 第 7.1 节: 介绍 _ 第 7.2 节: 解释 UDF _ 第 7.3 节: 编译 UDF 7.1 介绍 解释的UDF和编译的UDF其源码产生途径及编译过程产生的结果代码是不同的。编 译后的UDF由C语言系统的编译器编译成本地目标码。这一过程须在FLUENT运行前 完成。在FLUEN...

Fluent_UDF_第七章_UDF的编译与链接
第七章 UDF 的编译与链接 第七章 UDF的编译与链接 编写好UDF件(详见第三章)后,接下来则准备编译(或链接)它。在7.2或7.3 节中指导将用户编写好的UDF如何解释、编译成为共享目标库的UDF。 _ 第 7.1 节: 介绍 _ 第 7.2 节: 解释 UDF _ 第 7.3 节: 编译 UDF 7.1 介绍 解释的UDF和编译的UDF其源码产生途径及编译过程产生的结果代码是不同的。编 译后的UDF由C语言系统的编译器编译成本地目标码。这一过程须在FLUENT运行前 完成。在FLUENT运行时会执行存放于共享库里的目标码,这一过程称为“动态装 载”。 另一方面,解释的UDF被编译成与体系结构无关的中间代码或伪码。这一代码调 用时是在内部模拟器或解释器上运行。与体系结构无关的代码牺牲了程序性能, 但其UDF可易于共享在不同的结构体系之间,即操作系统和FLUENT版本中。如果 执行速度是所关心的,UDF文件可以不用修改直接在编译模式里运行。 为了区别这种不同,在FLUENT中解释UDF和编译UDF的控制面板其形式是不同的。 解释UDF的控制面板里有个“Compile按钮”,当点击“Compile按钮”时会实时 编译源码。编译UDF的控制面板里有个“Open按钮”,当点击“Open按钮” 时会 “打开”或连接目标代码库运行FLUENT(此时在运行FLUENT之前需要编译好目标 码)。 当FLUENT程序运行中链接一个已编译好的UDF库时,和该共享库相关的东西都被 存放到case文件中。因此,只要读取case文件,这个库会自动地链接到FLUENT 处理过程。同样地,一个已经经过解释的UDF文件在运行时刻被编译,用户自定 义的C函数的名称与内容将会被存放到用户的case文件中。只要读取这个case文 件,这些函数会被自动编译。 注:已编译的UDF所用到的目标代码库必须适用于当前所使用的计算机体系结构、 操作系统以及FLUENT软件的可执行版本。一旦用户的FLUENT升级、操作系统改变 了或者运行在不同的类型的计算机,必须重新编译这些库。 第七章 UDF 的编译与链接 UDF必须用DEFINE宏进行定义,DEFINE宏的定义是在udf.h文件中。因此,在用户 编译UDF之前,udf.h文件必须被放到一个可被找到的路径,或者放到当前的工作 目录中。 udf.h文件放置在: path/Fluent.Inc/fluent6.+x/src/udf.h 其中path是Fluent软件的安装目录,即Fluent.Inc目录。X代 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 了你所安装的版 本号。 通常情况下,用户不应该从安装默认目录中复制udf.h文件。编译器先在当前目 录中寻找该文件,如果没找到,编译器会自动到/src目录下寻找。如果你升级了 软件的版本,但是没有从你的工作目录中删除旧版本的udf.h文件,你则不能访 问到该文件的最新版本。在任何情况下都不应该改变udf.h文件。 7.2 UDF解释 这一节介绍编译经过解释的UDF的步骤。一旦经过解释的UDF被编译,用户自定义 的C函数的名称与内容将会被存放到case文件中。只要读取这个case文件,这些 函数便会自动被编译。 编译被解释的UDF的一般程序如下: 1. 如果用户没有在网络Windows计算机上使用并行的FLUENT版本,则需要确定 UDF的C源码和case文件与当前工作目录一致。具体步骤见7.2.2节。 ! 如果源码不在当前工作目录,则用户编译UDF时,用户必须在解释UDF的控制面 板里输入文件的完全路径,而不是只输入文件名。 2. 在当前工作目录下运行FLUENT。 3. 读取(或建立)case文件。 4. 打开“Interpreted UDFs panel”,编译UDF(如vprofile.c)。 第七章 UDF 的编译与链接 图7.2.1 解释的UDF的控制面板 (a) 在“Source File Name”下输入C源码的文件名(如vprofile.c)。 ! 如果自定义的C源码不在工作目录中,用户必须输入完全的自定义的C函数路 径。 当写入case文件时,自定义源码的名称(或源码的完全路径)会存放到case文件 中。 (b) 在“CPP Command Name”指定为C的预处理程序。当然也有其它有效的ANSI C 预处理程序,包括gcc -E和cc –E。详细检查所用的计算机系统管理。 (c) 如果自定义函数局部变量数不引起栈的溢出,则保持“Stack Size”的默认 值为1000。此时,所设 “Stack Size” 的数要远远大于局部变量用的数。 (d) 选择“Display Assembly Listing”,则当函数编译汇编码的清单会出现在 窗口的控制台内。这一选项会保存于case文件,当用户接着运行FLUENT时汇 编码会自动显示。 (e) 如果用户使用“Fluent Inc”提供的C预处理程序,选择“Use Contributed CPP”。 (f) 点击“Compile”编译UDF。 自定义C程序的名称和内容会存入于所写的case文件。只要编译UDF,汇编码会出 现在控制窗口,所示范例如下。 第七章 UDF 的编译与链接 (g) 编译结束点击“Close”。 ! 如果在一次模拟中使用多于一个的UDF,用户需要将这些函数连接在一个C文件 中,例如all.c。然后用“Interpreted UDFs”面板编译连接的文件。这些函 数可以作为边界条件、源项及特性等。 7.2.2 基于Windows并行网络的目录结构 在基于Windows网络上使用并行FLUENT版本需要专门的 方法 快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载 组织用户文件。具体 步骤如下: 1. 在“Fluent.Inc”目录下创建一个名为“udf” 的可写子目录。 2. 在udf目录下创建子目录(如Fluent.Inc\udf\myudf),将UDF的C源码存放于 这个目录下。如果在同一串下多个用户运行工作,每个用户在udf目录下创建 自己的子目录(如Fluent.Inc\udf\abcudf和xyzudf)。 ! 因为源码不在当前工作目录下,所以在编译UDF时必须在“Interpreted UDFs” 面板中输入文件的完全路径。例如,编译example.c文件时,输入如下: \\\Fluent.Inc\udf\myudf\example.c 应输入用户所安装FLUENT的计算机名(如myserver)。 3. 确定所建立的case文件在当前工作目录下。 第七章 UDF 的编译与链接 7.2.3 调试解释的UDF 编译UDF时出错信息会出现在控制窗口中。用户有可能因错误滚动太快不能看到 所用的出错信息。因此调试UDF时用户想关掉“Display Assembly Listing”。 如果在调试UDF的过程中一直打开“Interpreted UDFs”面板,由于在独立窗口 进行编辑,编译按钮则会不断重复编译。然后,直到无出错信息调试和编译才会 结束。 下面介绍一个出错例子,即在“Interpreted UDFs”控制面板中,编译被解释过 的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 energy_source 第七章 UDF 的编译与链接 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的安装路径。这些文件的完整路径如下: 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所示。 第七章 UDF 的编译与链接 图7.3.1 为编译好的UDF建立库目录的样本(UNIX) 需要注意的是在图7.3.1所示的目录结构为FLUENT的两种版本:二维单精度串型 和二维单精度平行。 !不要在目录(2d,2d host,等等)下存放任何文件。当编译用户库(见7.3.3 节)时,图7.3.1中所示的文件会自动存放。 1. 在当然工作目录下,创建一个储存用户库的目录(如libudf)。 2. 从以上所示目录下复制makefile.udf2到用户目录(如libudf),且改名为 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)。存在的版 本如下所示: z single-precision serial 2D or 3D: 2d or 3d 第七章 UDF 的编译与链接 z double-precision serial 2D or 3D: 2ddp or 3ddp z single-precision parallel 2D or 3D: 2d_node and 2d_host or 3d_node and 3d_host z double-precision parallel 2D or 3D: 2ddp_node and 2ddp_host or 3ddp_node and 3ddp_host ! 需要注意:不管计算节点的数量,用户必须为每个并行版本的求解器(如在三 维下有两个目录,二维双精度版本下有两个目录,等等)创建两个调试目录。 !不要在目录(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)。 第七章 UDF 的编译与链接 2. 在用户创建的库目录下,建立一个储存用户源码、命名为src的源码目录。 3. 复制用户源码(如udfexample.c)到所建的/src目录下。 4. 建立所使用体系机构的目录,如基于Windows的Intel系统使用的目录为 ntx86。 5. 针对所用的体系机构建立不同版本的目录(如ntx86\2d)。存在的版本如下 所示: z single-precision serial 2D or 3D: 2d or 3d z double-precision serial 2D or 3D: 2ddp or 3ddp z single-precision parallel 2D or 3D: 2d_node and 2d_host or 3d_node and 3d_host z 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系统下如何编译和创建共享库。 第七章 UDF 的编译与链接 UNIX系统 在建立目录并存放文件到相应位置后,便能开始编译和创建共享库。 1. 在用户的src目录下编辑文件makefile,设置参数如下: z SOURCES = 编译好的用户自定义函数 z 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 "FLUENT ARCH=ultra" 控制窗口显示信息为: 第七章 UDF 的编译与链接 # 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文件,设置参数为: z SOURCES =编译好的用户自定义函数。在每个文件前加前缀$(SRC),如 一个函数为$(SRC)udfexample.c,两个函数为$(SRC)udfexample.c $ (SRC)udfexample2.c)。 z VERSION =所用版本,即如图7.3.2所示2d,3d,2ddp,3ddp,2d host, 2d node,3d host,3d node,2ddp host,2ddp node,3ddp host,或 3ddp node。 z 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 第七章 UDF 的编译与链接 NODE。 下面给出user_nt.udf文件的一个例子: 对于指定多个用户定义函数只需要在SOURCES下输入它们,并用空格分开即可。 2. 在MS-DOS 命令提示窗口,键入nmake建立目录,如\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对话框中输入相对路径 第七章 UDF 的编译与链接 (例如, libudf), 否则输入完整路径,(例如, ~myhome/myfiles/libudf). !注意,如果存放共享库的目录不在当前的工作目录或其子目录下,一定要输入 完整的路径名。 (b) 单击 Open 按钮,这会将共享库连接到 FLUENT 执行文件中。求解器会自动搜 索相应的结构格式和版本。一旦共享库连接到 FLUENT 执行文件以及 case 文 件被写入以后,此连接关系就被保存在 case 文件中。因此,无论何时将 case 文件读入 FLURENT,此共享库都会被自动连接。 7.3.5 编译和连接共享库时常见的错误 指定库的名称 仅当从当前的工作目录下运行FLUENT并且共享库的目录是当前工作目录的子目 录时,才可以在Compiled UDFs 面板上直接输入共享库的目录(例如libudf)。如 果被使用的共享库不在上述位置上,连接此共享库时,必须提供其完整的路径。 否则会出现以下错误: Opening library "libudf/ultra/3d/libudf.so"... Error: open_udf_library: couldn't open library: libudf/ultra/3d/libudf.so 如果将共享库移至其他的位置,而要读入的case文件又包含此共享库的连接,也 会出现上述错误信息。 解决方法 为了解决这个问题,可以在Library Name in the Compiled UDFs 面板上输入共 享库的完整路径,然后单击Open按钮。虽然同样的错误信息仍将出现,但是新的 路径会保存在case文件中。重新读入case文件就会得到正确的连接。 使用不同版本的FLUENT 如果采用一个版本的FLUENT(例如6.0.1)编译UDF,而试图采用另一个不同的版本 (例如6.0.2)读入case文件时,会出现以下错误: Error: open_udf_library: library version 6.0.1 incompatible with solver version 6.0.2 第七章 UDF 的编译与链接 解决办法 用新版本的FLUENT重新编译UDF,然后再次读入case文件。 第七章 UDF的编译与链接 _ 第 7.1 节: 介绍 _ 第 7.2 节: 解释 UDF _ 第 7.3 节: 编译 UDF 7.1 介绍 解释的UDF和编译的UDF其源码产生途径及编译过程产生的结果代码是不同的。编译后的UDF由 另一方面,解释的UDF被编译成与体系结构无关的中间代码或伪码。这一代码调用时是在内部模拟器或褜 为了区别这种不同,在FLUENT中解释UDF和编译UDF的控制面板其形式是不同的。解释UDF的控制� 当FLUENT程序运行中链接一个已编译好的UDF库时,和该共享库相关的东西都被存放到case文件中  注:已编译的UDF所用到的目标代码库必须适用于当前所使用的计算机体系结构、操作系统以及FLUENT软� UDF必须用DEFINE宏进行定义,DEFINE宏的定义是在udf.h文件中。因此,在用户编译UD� udf.h文件放置在: path/Fluent.Inc/fluent6.+x/src/udf.h 其中path是Fluent软件的安装目录,即Fluent.Inc目录。X代表了你所安装的版本号。 通常情况下,用户不应该从安装默认目录中复制udf.h文件。编译器先在当前目录中寻找该文件,如果没找到, 7.2 UDF解释 这一节介绍编译经过解释的UDF的步骤。一旦经过解释的UDF被编译,用户自定义的C函数 编译被解释的UDF的一般程序如下: 1. 如果用户没有在网络Windows计算机上使用并行的FLUENT版本,则需要确定UDF的C源码和� ! 如果源码不在当前工作目录,则用户编译UDF时,用户必须在解释UDF的控制面板里输入文件的完全贃 2. 在当前工作目录下运行FLUENT。 3. 读取(或建立)case文件。 4. 打开“Interpreted UDFs panel”,编译UDF(如vprofile.c� � 图7.2.1 解释的UDF的控制面板 \(a\) 在“Source File Name”下输入C源码的文件名(如vprofile. ! 如果自定义的C源码不在工作目录中,用户必须输入完全的自定义的C函数路径。 当写入case文件时,自定义源码的名称(或源码的完全路径)会存放到case文件中。 \(b\) 在“CPP Command Name”指定为C的预处理程序。当然也有其它有效的ANSI� \(c\) 如果自定义函数局部变量数不引起栈的溢出,则保持“Stack Size”的默认值为 \(d\) 选择“Display Assembly Listing”,则当函数编译汇编码的渀 \(e\) 如果用户使用“Fluent Inc”提供的C预处理程序,选择“Use Cont� \(f\) 点击“Compile”编译UDF。 自定义C程序的名称和内容会存入于所写的case文件。只要编译UDF,汇编码会出现在控制窗口,所示范� � \(g\) 编译结束点击“Close”。 ! 如果在一次模拟中使用多于一个的UDF,用户需要将这些函数连接在一个C文件中,例如all.c。然后� 7.2.2 基于Windows并行网络的目录结构 在基于Windows网络上使用并行FLUENT版本需要专门的方法组织用户文件。具体步骤如下: 在“Fluent.Inc”目录下创建一个名为“udf” 的可写子目录。 在udf目录下创建子目录(如Fluent.Inc\\udf\\myudf),将UDF的C源码� ! 因为源码不在当前工作目录下,所以在编译UDF时必须在“Interpreted UDFs”面板中输入 \\\Fluent.Inc\udf\myudf\example.c 应输入用户所安装FLUENT的计算机名(如myserver)。 3. 确定所建立的case文件在当前工作目录下。 7.2.3 调试解释的UDF 编译UDF时出错信息会出现在控制窗口中。用户有可能因错误滚动太快不能看到所用的出错信息。因此调试� 如果在调试UDF的过程中一直打开“Interpreted UDFs”面板,由于在独立窗口进行编� 下面介绍一个出错例子,即在“Interpreted UDFs”控制面板中,编译被解释过的UD� 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 7.3 编译UDF 这一节介绍如何链接编译好的UDF。这一过程需要使用C编译器。大部分UNIX的操作系统提供� Opening library "libp1/ultra/2d/libudf.so"... p1_adjust 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两个文件圀 path/Fluent.Inc/fluent6.+x/src/makefile.udf path/Fluent.Inc/fluent6.+x/src/makefile.udf2 其中path是用户直接安装Fluent.Inc的路径,x是用户安装Fluent版本的相应数(如,flu ! FLUENT安装后所释放的makefile.udf2文件名为Makefile.udf。 下面介绍建立共享库所要求的目录结构。通过下面的例子来介绍目录结构的建立,如图7.3.1所示。 � 图7.3.1 为编译好的UDF建立库目录的样本(UNIX) 需要注意的是在图7.3.1所示的目录结构为FLUENT的两种版本:二维单精度串型和二维单精度平行。 !不要在目录(2d,2d host,等等)下存放任何文件。当编译用户库(见7.3.3节)时,嘟 1. 在当然工作目录下,创建一个储存用户库的目录(如libudf)。 2. 从以上所示目录下复制makefile.udf2到用户目录(如libudf),且改名为Makefil� 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 ! 需要注意:不管计算节点的数量,用户必须为每个并行版本的求解器(如在三维下有两个目录,二维双精度版本一 !不要在目录(2d,2d host,等等)下存放任何文件。当编译用户库(见7.3.3节)时,嘟 Windows系统 对于Windows系统下编译的UDF来说,makefile_nt.udf和user_nt.ud� 为了建立共享库所要求的目录结构,需要按照上面所讲的操作步骤进行。通过下面的例子来介绍目录结构的建立! 需要注意的是在图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 这两个文件的完整路径如下: path\Fluent.Inc\fluent6.+x\src\makefile_nt.udf path\Fluent.Inc\fluent6.+x\src\user_nt.udf 其中path是用户直接安装Fluent.Inc的路径,x是用户安装Fluent版本的相应数(如,flu ! 确定makefile_nt.udf和user_nt.udf为最新版本所用文件。如果安装新的FLUE� 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节)确定的体系机构! 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被编译和存放于版本所指定的共享库li Windows系统 在建立目录并存放文件到相应位置后,便能开始编译和创建共享库。 1. 用文本文件编译user_nt.udf文件,设置参数为: SOURCES =编译好的用户自定义函数。在每个文件前加前缀$\(SRC\),如  一个函数为$\ VERSION =所用版本,即如图7.3.2所示2d,3d,2ddp,3ddp,2d host,2 PARALLEL NODE =并行连接库。对于求解器的一系列版本无指定的并行连接库。可能的输入为: -{ none: serial -{ smpi: parallel using shared memory \(for mul� -{ vmpi: parallel using shared memory or network� -{ net: parallel using network communicator with� ! 如果使用的是并行求解器,需要复制两个user_nt.udf文件(一个是主目录的,一个是节点目录),并丂 下面给出user_nt.udf文件的一个例子: � 对于指定多个用户定义函数只需要在SOURCES下输入它们,并用空格分开即可。 2. 在MS-DOS 命令提示窗口,键入nmake建立目录,如\\libudf\\ntx86\� 需要注意的是如果创建存在问题,通过键入nmake clean来进行完整的重建。 7.3.4 连接共享库到FLUENT可执行文件 按照7.3.3小节所示的unix或windows环境下的步骤编译共享库后,就可以将其连接到FLU� 从当前工作目录下启动FLUENT。 读取(或设置)case文件。(确认此case文件保存在当前的工作目录下。) 连接共享库到FLUENT执行文件中。 � 如果共享库保存在当前工作目录中,在Library Name对话框中输入相对路径\(例如, libudf !注意,如果存放共享库的目录不在当前的工作目录或其子目录下,一定要输入完整的路径名。 单击Open按钮,这会将共享库连接到FLUENT执行文件中。求解器会自动搜索相应的结构格式和版本。一旦共� 7.3.5 编译和连接共享库时常见的错误 指定库的名称 仅当从当前的工作目录下运行FLUENT并且共享库的目录是当前工作目录的子目录时,才可以在Compiled UDF� Opening library "libudf/ultra/3d/libudf.so"... Error: open_udf_library: couldn't open library: libudf/ultra/3d/libudf.so 如果将共享库移至其他的位置,而要读入的case文件又包含此共享库的连接,也会出现上述错误信息。 解决方法 为了解决这个问题,可以在Library Name in the Compiled UDFs 面� 使用不同版本的FLUENT 如果采用一个版本的FLUENT\(例如6.0.1\)编译UDF,而试图采用另一个不同的版本� Error: open_udf_library: library version 6.0.1 incompatible with solver version 6.0.2 解决办法 用新版本的FLUENT重新编译UDF,然后再次读入case文件。
本文档为【Fluent_UDF_第七章_UDF的编译与链接】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_544399
暂无简介~
格式:pdf
大小:295KB
软件:PDF阅读器
页数:0
分类:建筑/施工
上传时间:2013-01-05
浏览量:28