FLUENT UDF 教程

所需积分/C币:31 2014-07-13 12:14:48 1.54MB PDF
收藏 收藏 1
举报

FLUENT UDF 中文版教程 流体分析
extern domain *domain DEFINE ON DEMAND(my udn) is to be replaced by DEFINE ON DEMAND(my udf) Domain domain: domain- get Domain(1) The macro C VoF accesses volume fraction values from the Fluent solver. C VOF(c pt[i]) has two arguments, c and pti. c is the cell identifier. ptli is the pointer to the corresponding phase-level thread for the ith phase, where i is the phase domain index For example, C VOF(C,pi[i]) can be used to return the volume fraction of the ith phase fluid at cell c. The pointer pt[i] can also be retrieved using THREAD SUB THREAD, discussed in Section 6.5.4, using i as an argument For compiled UDF, the makefile called Makefile udf that was provided in previous FLUENt releases has been renamed to makefi le udf2. See Section 7.3.2 for more details For multiphase flow problems, you will need to supply your own user-defined scalar flux function instead of using the default function provided by fluent DEF INE_ PROPERTY is to be used to deline UDF for particle or droplet diameter for the mixture model, previously the Algebraic Slip Mixture Model (ASMM), instead of the DEF INE DRIFT DI AM macro 1.5UDF基础 ·1.5.1输运方程 1.52单元( Cells),面,区域( Zones)和线( Threads 1.5.3操作 1.5.4求解器数据 5.5运仃 1.51输运方程 FLUENT求解器建立在有限容积法的基础上,这种方法将计算域离散为有限数目的控 制体或是单元。网柊单元是 FLUENT中基本的计算单元,这些单元的守恒特性必须保证。 也就是说}通输运方程,例如质量,动量,能量方程的积分形式可以应用到伃个单元: 8 OEL pydv+s, psv.da=y rvg. dA+y sadr (15.1) unsteady convection diffusion generation 此处,是描述普通输运数量的变量( a general transportable quantity),根据所求解的输运 方程它可取不同的值。下面是在输运方程中可求解的的子集。 Transport equation Variable for continuity r momentum velocity ( u) y momentum velocity( v) z momentum velocity( wi) energy enthalpy( h) turbulent kinetic energy k turbulent dissipation rate E species transport mass fraction of species(ri 守恒与否需要知道通过单元边界的通量。因此,需计算出单元和面上的属性值( properties)。 1.52单元( Cells),面,区域( Zones)和线( Threads) 单元和单元面被组合为一些区域( zones),这些区域规定了计算域(例如,入口,出 口,壁面)的物理组成( physical componcnts)。当用户使用 FLUENT中的UDF时,用户 的UDF可调用流伓区域或是边界区域的计算变量( solution variables)。UDF需要获得适 当的变量,比如说是区域参考( a zone reference)和单元ID,以便标定各个单元。 区域(Aσonc)是一群单元或单元面的集合,它可以由模型和区域的物理特征(比如入 出∏,壁面,流体区域)来标定。例如,·些被指定为面域( a face zone)的单元面可 以被指定为 yelocity- inlet类聖,由此,速度也就可指定了。线( a thread)是 FLUENT数 据结构的内部名称,可被用来指定一个区域。 Thread结构可作为数据储存器米使用,这些 数据对于它所表小的单元和面来说是公用的( The Thread structure acts as a container for data that is common to the group of cclls or faccs that it represents 1.5.3操作 多数的UDF任务需要在一个线的所有单元和面上重复执行。比如,定义一个自定义轮 廓函数( a custom profile function)则会对一个面线上( in a face thread)的所有单元和面进 行循坏。为了用户方便, Fluent Inc向用户提供了一些循坏宏工具( looping macro utilities) 来执行对单元,面,节点(node)和线( threads)的重复操作。例如,单元循环宏( Cell-looping macros)可以对给定单元线上的所有单元进行循环操作( loop over cells in a given cell thread allowing access to all of the cells)。而血循环宏(Face- looping macros)则可调用所有给定 面线( a given face thread)的面。 Fluent提供的循环工具请见 Chapter6。 在某些情况下,UDF需要对杲个变量操作,而这个变量恰恰又不能直接被当作变量来 传递调用。比如,如果用户使用 DEFINE ADJUST宏来定义UDF,求解器将不会向它传递 thread指针。这种情况下,用户函数需要用 Fluent提供的宏来调用线指针( thread pointer) 见 Chapter6 1.54求解器数据 通过 FLUENT用户界面将C函数(它已被编译和连接)连接到求解器上可实现调用求 解器变量。一旦UDF和求解器正确连接,无论何时,函数都可调用求解器数据。这些数据 将会被作为用户变量自动地传递给UDF。注意,所有的求解器变量,不管是求解器传递给 UDF的,还是UDF传递给求解器的,都使用SI单位 1.55运行 UDF将会在侦定时刻被 FLUENT调用。但是,也可对它们进行异步执行,使用 DEFINE ON DEMAND宏,还可在需要时( on demand)执行。详情请见42.3 16解释和编译UDF的比较 编译UD和 FLUENT的构建方式样。脚本 Makefile被用来调用C编译器来构建 个当地目标代码库( a native object code library)。目标代码库包含高级C语言源代码的机器 语言翻译。代码库在 FLUENT运行时由“动态加载”( dynamic loading")过程连接到 FLUENT上。连接后,与共亨库的联系( the association with the shared library)将会被保存 在用户的casc文什中,这样,当 FLUENT以后再读入casc文件时,此编译库将会与 FLUENT 自动连接。这些斥是针对计算机的体系结构和·定版本的 FLUENT使用的。所以,当 FLUENT更新,或计算机操作系统改变,或是在不同类型的机器上运行时,这些库必须重 新构建 而解释UDF则是在运行吋,直接从C语言源代码编译和装载( compiled and loaded directly from the C source code)。在 FLUENT运行中,源代码被编译为中介的独立于物理 结构的使用C预处理程序的机器代码( an intermediate, architecture- independent machine code)。当UDF被调用时,机尜代码由内部仿真器( an internal emulator),或注释尜 ( Interpreter)执行。注释器不具备标准C编译器的所有功能;它不支持C语言的某些原理 ( elements)。所以,在使用 interpreted UDF吋,有语言限制(见3.2)。例如, interpreted UDF不能够通过废夼结构( dereferencing structures)来获得 FLUENT数据。要获得数据结 构,必须使用由 FLUENT提供的预定义宏。另一个例子是 FLUENT interpreter不能识别指 针数组。这些功能必须由 compiled udF来执行。 编译后,用户的C函数名称和内容将会被储存在case文件中。函数将会在读入case文 件时被自动编译。独立于物理结构的代码的外层( This extra layer of architecture- independent code)可能会导致执行错误( a performance penal!y),但却可使UDF共亨不同的物理结构, 操作系统,和 Fluent版本。如果运行速度较慢,UDF不用被调节就可以编译代码的形式(in compiled mode)运行。 FLUENT中的 compiled和 interpreted UDF请见 Chapter7。 选择 interpreted UDF或是 compiled UDF时,注意以卜内容: Interpreted UDF o对其它平台是便捷的( portable) 可作为( compiled UDF)来运行。 o不需C编译器 o比 compiled UDF慢 需要较多的代码 在使用C语言上有限制。 σ不能与编译系统或用户库( compiled system or user libraries)连接。 o只能使用预定义宏来获得 FLUENT结构中的数据。(见 Chapters5和6) Compiled udF 比 interpreted UDF运行快。 在使用C语言上不存在限制 可用任何ANSl- compliant C编译器编译 o能调用以其他语言编写的函数( specifics are system-and compiler-dependent) o机器物理结构需要用户建立 FLUENT(2Dor3D)的每个版本的共享库(a shared library for each version of FLUENT(2D or 3D) needed for your machine architecture) o如果包含有注释器( Interpreter)不能处理得C语言元素,则不能作为 ( interpreted UDF)运行。 总的来说,当决定使用那种类型的UDF时: 使用 interpreted UDF作为简单的函数 使用 compiled uDf作为复杂的函数,这些函数 对CPU有较大要求(例如每次运行时,在每个单元上均须调用的属性UDF ( a property udf)。 需要使用编译库( require access to a compiled library)。 17一个step- by-stepUDF例子 编辑UDF代码,并且在用户的 FLUENT模型中有效使用它,须遵循以卜七个基木步骤: 1.定义用户模型 2.编制C语言源代码。 3.运行 FLUENT,读入,并设置case文件。 4.编译或注释( Compile or interpret)C语言源代码。 5.在 FLUENT中激活UDF 6.开始计算。 7.分析计算结果,并与期望值比较 在开始解决问题前,用户必须使用UDF定义希望解决的问题(Step1)。例如,加入 用户希望使用UDF来定义一个用户化的边界条件( a customized boundary profile)。用户 首先需要定义一系列数学方程来描述这个条件。 接下来用户需要将这些数学方程(概念设计, conceptual design)用C语言写成一个函 数(Step2)。用户可用文本编辑器米完成这一步。以c为后缀名米把这个文件保存在工作 路径下。 写完C语言函数后,用户即可运行 FLUENT并且读入或设置case文件(Step3)。对 C语言源代码进行注释,编译,和调试( Interpret, compile, and debug),并在 FLUENT屮 激活用户函数(Step5)。最后,运行计算(Step6),分析结果并与期望值比较。(Step 7)。根据用户对结果的分析,可将上述整个过程重复几次。具体如下。 Step1:定义用户模型 生成和使用UDF的第一步是定义用户的模型方程。 如图 Figurel.7.l所小的涡轮叶片。模拟叶片围的流场使用」非结构化阏格。讣算域由底 端的周期性边界( a periodic boundary on thc bottom)延伸到顶端的相同部分( an identical one on the top),速度入口在左边,压力出口在右边。 Turbine Vane(1551 cells, 2405 faces, 893 nodes) Figure 1.7. 1: The Grid for the turbine Vane Example 文中对入口κ速度为常数分布和抛物线分布的流场进行了比较。分段线性的分布可由边 界场选项得到( the application of a profile using a piecewise-linear profile is available with the oundary profiles option),而多项式分布则只能使用用户自定义函数得到。 进口速度为常数(20ms)的结果如图1.7.2和1.7.3所示。当流动沿着涡轮叶片 进行时,初始速度场被改变了。 5.96e+01 3.74e+01 3.19e+01 2.63e+01 2.07e+01 9.54e+00 396电00 Turbine Vane(1551 cells, 2405 faces, 893 nodes) Contours of Velocity Magnitude〔m〕 Figure 1.7.2: Velocity Magnitude Contours for a Constant Inlet x Velocity 6.11401 3.16e+01 198电01 205电+00 Turbine Vane (1551 cell, 2405 faces, 893 nodes Velocity Vectors colored By Velocity Magnitude (m) Figure 1.7.3: Velocity Vectors for a Constant Inlet x Velocity 假定现在要设涡轮叶片入∏速度x不是常数值,其分布如下 x=20-20 0r745 士 变量y在入口中心处为0.0,在入口上部和下部则分别为0.0745m而入口中心处的x 速度为20ms,边界上为0。 用户可用UDF描述这一分布,并将它应运到 FLUENT模型中来解决这类问题。 Step2:编制C语言源代码 选定方程定义UDF后,用户可用任意文本编辑器米书写C语言代码。以扩展名c保存 源代鹘文件保存到工作路径下。关于UDF的书写请参考 Chapter3 下面是一个怎样在UDF中应用方程的例子。UDF的功能由主要的 DEFINE宏(the leading define macro)米定义。此处,DEⅠ NE PROFILE宏用来表示下面的代码旨在给 求解器提供边界的轮廓信息。书中将在以后部分讨论其它的 DEFINE宏 冰本*米米本水本本本米本冰*本本水*米本本本**本本小水米本冰本*本本**本本水*米本本木米本**水本本*本/ Lldfexample.c UDF for specifying a steady-state velocity profile boundary condition */ 木本水本水木冰冰本水水冰本冰本本*本冰本*冰冰水冰水冰本*水本冰本水木本冰本本本水本本本水本本水**冰冰本水木冰冰本冰冰本本水本水本/ #includeudf h DEFINE PROFILE(nlet x velocity, thread, index) real X[NDND]: /* this will hold the position vector * rcal y; face tf: begin f loop(f, thread F CENTROID(X f,thread) F PROFILE(, thread, index)=20.-y*y/(0745*0745)* 20 cnd f loop(f, thread) DEFINE PROFILE宏的第一个变量 inlet x velocity用来定义速度入口面板中的函数。名称 可任意指定。在给定的边界区域上的所有单元面( identified by f in the face loop)上将会使 用函数的这个方程。当用户在 FLUENT用户界面选定UDF作为边界条件时,将会自动定 义线( thread)。下标由 begin f loop应用程序自动定义。UDF中, begin f loop被用来形 成对边界区域上所有单元面的循环( loop through all cell faces in the boundary zone)。对于每 个面,面的质心( the face centroid)的坐标可由 F CENTROID宏来获得。抛物线方程中用 到了y坐标y,速度值通过 F PROFILE宏来返回给面。 begin f loop宏和 F PROFILE 宏都是UENT提供的宏。详情请见 Chapter5。 Step3:运行 FLUENT,读入,并设置case文件 建立UDF后,用户开始设置 FLUENT 1.在工作路径下启动 FLUENT。 2.读入(或设置)case文件(如果case文件以前设置过,请确认它是否被保存在了工作路 径下) Step4:编详或注释( Compile or interpret)C语言源代码 这部分将例中的源代码作为 interpreted UDF来编译。注意,这个例子不可应用于 Windows 的并行网络( Windows parallel networks)。完整的编译和连接UDF请见 Chapter7 1.确认UDF的case文件(如果以前设置过)和C语言源代码在工作路径卜 2.用 Interpreted UDF面板编译UDF(例如, udfexample.c)。 Define -7 User-Defined- Functions -Interpreted. Figure 1.7.4: The Interpreted UDF Panel Intepreted UDFS Source File name udfexample. cPP Command Name cpp Stack siz 10000 A Display Assembly Listing H Use Contributed CPP Compile Close Help (a)在 Source file namc下键入C话言源代码文件(例如, udfexample.c) !如果用户源代码不在目前工作路径下,则在编译UDF时,需在 Interpreted UDF 面板中间如文件完整的路径 (b)在 CPP Command name一栏里,选择C处理器 (c) Stack size缺省设置为10000。如果用户函数的局部变量数目大于1000,.将会 导致堆栈溢出。这种情况下,应将 Stack size设置为比局部变量大的数。

...展开详情
试读 127P FLUENT  UDF 教程
立即下载 低至0.43元/次 身份认证VIP会员低至7折
    抢沙发
    一个资源只可评论一次,评论内容不能少于5个字
    关注 私信 TA的资源
    上传资源赚积分,得勋章
    最新推荐
    FLUENT UDF 教程 31积分/C币 立即下载
    1/127
    FLUENT  UDF 教程第1页
    FLUENT  UDF 教程第2页
    FLUENT  UDF 教程第3页
    FLUENT  UDF 教程第4页
    FLUENT  UDF 教程第5页
    FLUENT  UDF 教程第6页
    FLUENT  UDF 教程第7页
    FLUENT  UDF 教程第8页
    FLUENT  UDF 教程第9页
    FLUENT  UDF 教程第10页
    FLUENT  UDF 教程第11页
    FLUENT  UDF 教程第12页
    FLUENT  UDF 教程第13页
    FLUENT  UDF 教程第14页
    FLUENT  UDF 教程第15页
    FLUENT  UDF 教程第16页
    FLUENT  UDF 教程第17页
    FLUENT  UDF 教程第18页
    FLUENT  UDF 教程第19页
    FLUENT  UDF 教程第20页

    试读已结束,剩余107页未读...

    31积分/C币 立即下载 >