fluent - UDF-Ch3 写UDF

2020-04-03 10:09

第3章 写UDF

本章主要概述了如何在FLUENT写UDF。 3.1 概述

3.2写解释式UDF的限制

3.3 FLUENT中UDF求解过程的顺序 3.4 FLUENT网格拓扑 3.5 FLUENT数据类型

3.6 使用DEFINE Macros定义你的UDF 3.7在你的UDF源文件中包含udf.h文件 3.8 定义你的函数中的变量 3.9 函数体 3.10 UDF 任务

3.11 为多相流应用写UDF 3.12在并行中使用你的UDF

3.1概述(Introduction)

UDF是用来增强FLUENT代码的标准功能的,在写UDF之前,我们要明确以下几个基本的要求。首先,必须用C语言编写UDF。必须使用FLUENT提供的DEFINE宏来定义UDF。UDF必须含有包含于源代码开始指示的udf.h文件;它允许为DEFINE macros和包含在编译过程的其它FLUENT提供的函数定义。UDF只使用预先确定的宏和函数从FLUENT求解器访问数据。通过UDF传递到求解器的任何值或从求解器返回到UDF的值,都指定为国际(SI)单位。 总之,当写UDF时,你必须记住下面的FLUENT要求。UDF: 1. 采用C语言编写。

2. 必须为udf.h文件有一个包含声明。

3. 使用Fluent.Inc提供的DEFINE macros来定义。

4. 使用Fluent.Inc提供的预定义宏和函数来访问FLUENT求解器数据。 5. 必须使返回到FLUENT求解器的所有值指定为国际单位。

3.2写解释式UDF的限制(Restriction on Writing Interpreted UDF)

无论UDF在FLUENT中以解释还是编译方式执行,用户定义C函数(说明在Section 3.1中)的基本要求是相同的,但还是有一些影响解释式UDF的重大编程限制。FLUENT解释

程序不支持所有的C语言编程原理。解释式UDF不能包含以下C语言编程原理的任何一个: 1. goto 语句。 2. 非ANSI-C原型语法

3. 直接的数据结构查询(direct data structure references) 4. 局部结构的声明 5. 联合(unions)

6. 指向函数的指针(pointers to functions) 7. 函数数组。

在访问FLUENT求解器数据的方式上解释式UDF也有限制。解释式UDF不能直接访问存储在FLUENT结构中的数据。它们只能通过使用Fluent提供的宏间接地访问这些数据。另一方面,编译式UDF没有任何C编程语言或其它注意的求解器数据结构的限制。

Figure 3.3.1 分离解算器的解程序

3.3 FLUENT求解过程中UDF的先后顺序(Sequencing of UDF in the

FLUENT Solution Process)

当你开始写UDF代码的过程时(依赖于你写的UDF的类型),理解FLUENT求解过程中UDF调用的内容或许是重要的。求解器中包含连接你写的用户定义函数的call-outs。知道FLUENT求解过程中迭代之内函数调用的先后顺序能帮助你在给定的任意时间内确定那些数据是当前的和有效的。

Figure 3.3.2 Solution Procedure for the Coupled Solver 分离式求解器

在分离式求解器求解过程中(Figure 3.3.1),用户定义的初始化函数(使用DEFINE_INIT定义的)在迭代循环开始之前执行。然后迭代循环开始执行用户定义的调整函数(使用DEFINE_ADJUST定义的)。接着,求解守恒方程,顺序是从动量方程和后来的压力修正方程到与特定计算相关的附加标量方程。守恒方程之后,属性被更新(包含用户定义属性)。这样,如果你的模型涉及到气体定律,这时,密度将随更新的温度(和压力 and/or 物质质量分数)而被更新。

进行收敛或者附加要求的迭代的检查,循环或者继续或停止。

耦合求解器

在耦合求解器求解过程中(Figure 3.3.2),用户定义的初始化函数(使用DEFINE_INIT定义的)在迭代循环开始之前执行。然后,迭代循环开始执行用户定义的调整函数(使用DEFINE_ADJUST定义的)。接着,FLUENT求解连续、动量和(适合的地方)能量的控制方程和同时地一套物质输运或矢量方程。其余的求解步骤与分离式求解器相同(Figure 3.3.1)。

3.4 FLUENT 网格拓扑

在我们开始讨论FLUENT特殊的数据类型之前,你必须理解网格拓扑学的术语因为FLUENT数据类型是为这些实体定义的。下面是显示在Figure 3.4.1中的网格实体的定义。

Figure 3.4.1 Grid Terminology

单元(cell) 区域被分割成的控制容积 单元中心(cell center) FLUENT中场数据存储的地方 面(face) 单元(2D or 3D)的边界 边(edge) 面(3D)的边界 节点(node) 网格点

单元线索(cell thread) 在其中分配了材料数据和源项的单元组 面线索(face thread) 在其中分配了边界数据的面组 节点线索(node thread) 节点组

区域(domain) 由网格定义的所有节点、面和单元线索的组合

3.5 FLUENT数据类型

除了标准的C语言数据类型如real, int 等可用于在你的UDF中定义数据外,还有几个FLUENT指定的与求解器数据相关的数据类型。这些数据类型描述了FLUENT中定义的网格的计算单位(见Figure 3.4.1)。使用这些数据类型定义的变量既有代表性地补充了DEFINE macros的自变量,也补充了其它专门的访问FLUENT求解器数据的函数。

一些更为经常使用的FLUENT数据类型如下: cell_t face_t Thread Domain Node

cell_t是线索(thread)内单元标识符的数据类型。它是一个识别给定线索内单元的整数下标。face_t是线索内面标识符的数据类型。它是一个识别给定线索内面的整数下标。

Thread数据类型是 FLUENT中的数据结构。它充当了一个与它描述的单元或面的组合相关的数据容器。

Node数据类型也是FLUENT中的数据结构。它充当了一个与单元或面的拐角相关的数据容器。

Domain数据类型代表了FLUENT中最高水平的数据结构。它充当了一个与网格中所有节点、面和单元线索组合相关的数据容器。

!!注意,FLUENT中所有数据类型都是 情形敏感的(case-sensitive)。

3.6 使用DEFINE Macros定义你的UDF

Fluent.Inc为你提供了一套你必须使用它来定义你的UDF的预定义函数。这些定义UDF的函数在代码中作为宏执行,可在作为DEFINE(全部大写)宏的文献中查阅。对每个DEFINE 宏的完整描述和它的应用例子,可参考第四章。

DEFINE宏的通用格式为:


fluent - UDF-Ch3 写UDF.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:光断续器转速计的设计

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: