“ 本文内容主要来源于Fluent官方文档。”
UDF文件的后缀名为.c或.cpp(例如:myudf.c)。一个源文件可以包含一个或多个UDF,可以定义多个源文件。
UDF是使用Ansys Fluent提供的DEFINE宏定义的。每个UDF必须在源代码文件的开头包含UDF .h文件包含指令(#include " udf .h")。在解释或编译后,UDF将在Ansys Fluent对话框中变得可见和可选择,并可以通过在适当的对话框中选择函数名称来连接到求解器。
01
—
使用DEFINE Macros定义UDF
在以下情况下无法加载udf:未以UNC模式启动Ansys Fluent,且可能在远程机器上启动Host and Node进程。
当使用UDF时:
DEFINE Macro的所有参数都需要放在源代码中的同一行中。将DEFINE语句分割为几行将导致编译错误。
宏(例如,DEFINE_PROFILE)和参数的第一个圆括号之间不能有空格,因为这会在Windows中导致错误。
不要在源代码的注释中包含DEFINE宏语句。这将导致编译错误。
02
—
网格术语
大多数UDF从Ansys Fluent求解器访问数据。因为求解器数据是根据网格组件定义的,所以在编写UDF之前,需要预先学习一些基本的网格术语。
网格被分解成控制体积或单元格。每个单元(cell)由一组节点(nodes)、一个单元中心(cell center)和绑定单元的面(faces)定义。Ansys Fluent使用内部数据结构来定义网格的域;为网格中的单元格、单元面和节点分配顺序;并在相邻细胞之间建立连接。
thread是Ansys Fluent中的一种数据结构,用于存储关于边界或单元格区域的信息。cell thread是单元格的分组,face thread是面的分组。指向thread数据结构的指针通常传递给函数,并在Ansys Fluent中进行操作,以访问由每个thread表示的边界或单元格区域的信息。在边界条件对话框中在Ansys Fluent模型中定义的每个边界或单元格区域都有一个整数zone ID,该zone ID与该zone中包含的数据相关联。在Ansys Fluent的对话框中,看不见术语“thread”,因此在编写UDF时,可以将“zone”视为与“thread”数据结构相同。
使用zone对cell和cell face进行分组,zone通常用于定义模型物理组件的区域(例如,入口、出口、壁、流体区域)。一个cell face可以结合一个或两个cell,这取决于它是边界面还是内部面。domain是Ansys Fluent中的一种数据结构,用于存储cell center、face thread和cell thread集合的信息。
03
—
Fluent中的数据类型
除了标准的C和C+语言数据类型,如real、int等,还有与求解器数据相关的Ansys fluent特定数据类型。这些数据类型表示网格的计算单元。使用这些数据类型定义的变量通常作为参数提供给DEFINE宏,以及访问Ansys Fluent求解器数据的其他特殊函数。
一些比较常用的Ansys Fluent数据类型有:
Node:一种结构数据类型,用于存储与网格点相关的数据。
face_t:一种整数数据类型,用于标识facethread中的特定面。
cell_t:一种整数数据类型,用于标识cell thread中的特定单元格。
Thread:一种结构数据类型,用于存储它所表示的单元格组或面所共有的数据。在Thread数据类型中,有一个指针数组(存储),每个指针指向一个单元格数组或特定字段变量(如压力、速度或梯度)的面值。在该指针数组中,用于标识指向特定字段变量数组(单元格值或面值)的指针的索引类型为Svar。
Svar:用于标识Thread存储中的指针的索引。
Domain:一种结构数据类型,用于存储与网格中节点、面和单元格Thread集合相关的数据。
在Ansys Fluent中使用UDF时,函数可以访问流体和边界区域中各个单元格或单元格面上的解变量。UDF需要传递适当的参数,例如Thread引用(即指向特定Thread的指针)和单元格或面ID,以便能够访问单个单元格或面。注意,面ID或单元格ID本身并不能唯一地标识面或单元格。总是需要thread指针和ID来标识面(或单元格)所属的thread。