Fluent UDF(三)数据访问宏(1)

前述章节介绍了Fluent数据结构及常用的循环操作宏。UDF的核心在于数据的获取与处理,数据获取宏是UDF重要的组成部分,也是后续一系列DEFINE宏学习的基石。

本节开始逐步介绍各类ANSYS Fluent数据访问宏。

1 Node Macros

节点 (Node) 是Fluent最底层的数据结构,也是最基本的网格组件,网格 (Mesh) 实际上由一系列节点构成。

对于网格节点,主要关注两个参数:节点位置和节点数量。

1.1 获取节点位置

可利用下表所述节点宏获取节点位置坐标信息,该在头文件metric.h中被定义。

参数类型返回值
NODE_X(node)Node *nodereal x coordinate of node
NODE_Y(node)Node *nodereal y coordinate of node
NODE_Z(node)Node *nodereal z coordinate of node
1.2 获取节点数量

可利用F_NNODES宏获取网格面上节点数量,该宏在头文件mem.h中定义。

参数类型返回值
F_NNODES(f,t)face_t f, Thread *tint number of nodes in a face

节点宏使用较少,具体用法比较简单,后续应用再给出具体用法。

2 Face Macros

Face Macros用于访问和操作 Ansys Fluent 中面(Face)变量。这些宏以 F_ 为前缀,可以返回与面相关的各种物理和流动变量,采用以国际单位制(SI)。这些宏在 mem.hmetric.h 文件中定义。

2.1 面心坐标 (F_CENTROID)

F_CENTROID(x,f,t)宏用于获取网格面中心F_CENTROID 查找面 f 的中心坐标位置,并将坐标存储在数组 x 中。数组 x 的维度取决于求解器是2D还是3D的,可使用 ND_ND 宏定义数组 x ,其根据求解问题自动返回相应的维数。

ND_ND为常数,在2D模型中其值为2,在3D模型中其值为3

参数类型返回值
F_CENTROID(x,f,t)real x[ND_ND], face_t f, Thread *tx (face centroid)

示例:遍历指定面的质心坐标并打印输出

#include "udf.h"

// 定义 ADJUST 宏,每次迭代执行
DEFINE_ADJUST(face_centroid, domain)
{
    real FC[ND_ND];  // 定义一个数组用于存储坐标
    face_t face;  // 定义一个 face_t 类型的变量,用于存储面索引
    int FACE_ID = 16;  // 定义面 ID,在 Fluent 中查看,可以用宏常量定义:#define FACE_ID 16
    real fx, fy;  // 定义变量存储坐标值

    // 查找在domain中ID为FACE_ID的面线程face_thread
    Thread *face_thread;
    face_thread = Lookup_Thread(domain, FACE_ID);//后续数据获取宏介绍

    // 检查face_thread是否为空
    if (face_thread == NULL)
    {
        Message("Error: face_thread is NULL. Check FACE_ID.\n");
        return;
    }

    // 遍历 face_thread 中的所有面face
    begin_f_loop(face, face_thread)
    {
        F_CENTROID(FC, face, face_thread);  // 获取面 face 的质心坐标,并存储在 FC 数组中
        fx = FC[0];  // 获取 x 坐标
        fy = FC[1];  // 获取 y 坐标

        // 打印坐标信息
        Message("Centroid Coordinates: x = %f, y = %f\n", fx, fy);
    }
    end_f_loop(face, face_thread)  // 结束面循环
}

演示案例网格如下,几何尺寸 20 × 40 mm 20×40 \text{mm} 20×40mm ,为直观展现上述 UDF 功能,案例网格尺寸设置为 5 mm 5\text{mm} 5mm ,现演示如何使用面心坐标 (F_CENTROID)宏获取入口面面心坐标。

本案例网格比较少,可以直接得出面网格面心坐标为 ( 0 , 2.5 ) , ( 0 , 7.5 ) , ( 0 , 12.5 ) , ( 0 , 17.5 ) (0,2.5),(0,7.5),(0,12.5),(0,17.5) (0,2.5),(0,7.5),(0,12.5),(0,17.5) 此处单位为mm

案例网格
导入网格后,可在边界条件信息栏查看面ID在这里插入图片描述
将上述inlet ID=16 赋值给UDF中的FACE_ID,并将UDF文件保存为centroid.c,读入Fluent进行编译在这里插入图片描述

编译完成后,ADJUST宏需要挂载使用:在这里插入图片描述

设置边界条件,inlet类型为速度入口,outlet为压力出口,其余默认。混合初始化完成后设置迭代次数为1在这里插入图片描述

点击 Calculate 进行迭代计算,在控制台面板可查看输出结果与预想结果吻合。
在这里插入图片描述

2.2 面法向向量 (F_AREA)

F_AREA 宏可以获取面线程中指定面的网格面法向向量,该功能主要用于求解通过某些面的物理量分量。

参数类型返回值
F_AREA(A,f,t)A[ND_ND], face_t f, Thread *tA (area vector)

一个简单的片段:

{
  real NV_VEC(A); /*定义向量A*/
  F_AREA(A, f, t);
}

注意:F_AREA宏通过传址调用返回值,参数A可以是数组A[ND_ND],也可以是向量。如果定义为向量,后面可以很方便的利用向量运算(点积和叉积等)。

Fluent 规定,边界区域面法线方向朝外,内部区域面法线方向根据右手定则按节点数递增的顺序确定。
在这里插入图片描述

Fluent 根据约定将相邻单元分配到内部面(c0 和 c1):面法线指向外部的单元称为单元 C0,面法线指向内部的单元称为单元 c1。换句话说,面法线方向总是从单元格 c0 指向单元格 c1。

2.3 边界面流动变量宏

Fluent提供了一系列用于访问边界面上的流动变量宏。

参数类型返回值
F_U(f,t)face_t f, Thread *t,u 方向速度
F_V(f,t)face_t f, Thread *t,v 方向速度
F_W(f,t)face_t f, Thread *t,w 方向速度
F_T(f,t)face_t f, Thread *t,温度
F_H(f,t)face_t f, Thread *t,热焓
F_K(f t)face_t f, Thread *t,湍动能
F_D(f,t)face_t f, Thread *t,湍流动能耗散率
F_YI(f,t,i)face_t f, Thread *t, int i组分质量分数

**注意:**使用密度基求解器,需要注意以下几点:

  • 求解器不存储焓值 F_H(f,t)
  • 边界类型为 wall, symmetry 和 axis 的壁面不分配速度数组 (F_U(f,t), F_V(f,t), 和 F_W(f,t))

建议使用 NNULLP() 宏来避免读取未分配的内存,例如,可以通过以下方法检查 x-velocity 变量的内存存储情况:

/* check for x-velocity boundary storage */

if(NNULLP(THREAD_STORAGE(t, SV_U))) {} 
2.4 边界面/内部面流动变量宏

除了上述一系列边界面流体变量宏外,Fluent还提供了一些可以访问内部面和边界面的流量变量宏。

密度基求解器不能采用 F_P(f,t)

参数类型返回值
F_P(f,t)face_t f, Thread *t,压力
F_FLUX(f,t)face_t f, Thread *t质量流量

F_FLUX 可访问获取在面线程 t 中通过给定面 f 的实际质量流量。如果流动方向与面法线方向相同(由 F_AREA 确定 ),则 Ansys Fluent 求解器计算的 F_FLUX 符号为正;反之则相反。即流体流出为正,流入为负

注意:求解器计算的流量符号与 Fluent GUI(例如流量报告对话框)中报告的流量符号相反。

本节介绍了用于网格节点网格面数据访问宏,后续章节继续介绍其他数据获取宏。

  • 20
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于Fluent UDF(User Defined Function),您可以参考以下骤进行学习: 1. 理解Fluent UDF的概念:Fluent UDF是用于扩展Fluent软件功能的用户自定义函数。它允许您通过编写自己的函数来实现特定的建模、求解或后处理任务。 2. 学习Fluent UDF的基础知识:了解Fluent UDF的基本语法、函数类型和参数传递方式。可以阅读Fluent UDF文档或参考Fluent UDF教程,以了解如何编写和使用UDF代码。 3. 选择编程语言:Fluent UDF支持多种编程语言,如C、C++和Fortran。选择一种您熟悉或感兴趣的编程语言,并学习其语法和相关开发环境。 4. 编写UDF代码:按照Fluent UDF的语法规则,编写您的自定义函数。根据您的需求,可以实现不同类型的UDF,例如边界条件、源项或用户定义的模型。 5. 编译和加载UDF:将编写好的UDF代码编译为动态链接库,并将其加载到Fluent软件。这样,您就可以在Fluent界面使用自定义函数。 6. 验证和调试:在Fluent软件验证您的UDF是否正常工作。如果出现错误或问题,可以使用调试工具和日志信息进行排查。 7. 进一学习和应用:通过解决实际问题或参与相关项目来进一学习和应用Fluent UDF。与其他用户交流经验、参加培训课程或阅读相关文献也是提高技能的有效途径。 请注意,Fluent UDF的学习过程可能需要一定的时间和耐心。不断练习和实践,您将能够熟练地使用Fluent UDF来解决复杂的流体力学问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值