本文描述了利用 UDF 宏输出指定坐标位置的物理量的两种方法与例程。
Fluent 中提供了 Report 及 Monitor 工具用于监测指定位置的物理量。但如果位置坐标不是固定的,则难以采用监测的方式实现此功能(其实也不是不可以,只不过需要使用 Scheme 计算监测点的坐标),此时可以利用 UDF 将指定坐标点的物理量输出到文件。
1 宏介绍
在 UDF 中想要输出单元体的物理量,如输出压力可以使用宏 C_P,需要利用到两个参数:Cell_t ct 及 Thread *t。因此输出指定位置的物理量,其核心为利用 UDF 宏根据坐标点的位置获取变量 ct 及 t,这可以使用 UDF 宏 CX_Find_Cell_With_Point 实现。该宏定义于头文件 cxndsearch.h 中。
宏定义为:
- 返回类型为 CX_Cell_ID 的值,之后可以利用 RP_CELL 宏与 RP_THREAD 宏获取到 ct 与 t。
- 参数 ND_search 为一个结构体,其为 Fluent 传递进来的参数,在使用时只需要声明即可。
- double v[3]:为指定的点坐标数组
- double time:通常指定为 0
此宏通常还配合另外两个宏一起使用:
2 测试模型
利用一个简单的方腔顶盖流模型作为测试模型。方腔顶盖流问题是粘性不可压缩流动经典基准问题。其几何模型及边界条件如下图所示。
流场计算基于雷诺数,流体密度,动力粘度,方形腔体的边长。计算设置过程不是本文重点,这里就不详述了,计算完毕后速度分布如下图所示。
- 如下图所示在区域内取一条中轴线,后面用于数据比较
mmexport1595683666844.png - 中轴线上的速度分布如下图所示
mmexport1595683666923.png
下面用 UDF 取出这 20 个点的速度值,并与 Fluent 输出的值进行比较。
3 UDF 编写及加载
采用下面的程序代码:
- 编译 UDF 并 Load,如下图所示
mmexport1595683666994.png - 利用 Execute on Demand 执行 UDF,如下图所示
mmexport1595683667067.png
输出结果为:
将之前导出的数据与 UDF 输出的值放在同一张图中,如下图所示。可以看出,二者具有较好的一致性。
4 另一种方法
另一种获取指定位置网格的方法是使用DPM_Locate_Point
宏,这个文件在 UDF 手册中也没有任何解释。
下面是本案例的例程。
输出结果如下图所示。
利用 UDF 获取计算区域中指定位置的物理量,可以应用在很多的场合,尤其是在跟踪一些运动位置的物理量时,可以将宏放到循环中连续获取不同坐标位置的物理量。本案例在 2D 下测试,若为 3D 模型,需要设置 P[3] 的值,道友们自行尝试。
转载自微信公众号:流沙CAE CFD之道
4 条评论
请问property(例如沸点)可以根据位置来定义嘛?
我调整了一下,现在两种方法都是提示找不到指定点处的网格。
我需要在DEFINE_SOURCE宏里获得指定位置地物理量,两种方法都试过了,但是第一种方法提示找不到网格(could not find cell at ...),第二种方法一开始计算就报错, 提示The fl process could not be started.请问老师计算的时候有碰到过类似情况吗?会是什么原因呢?
您好!我也出现这种问题,想请教一下,您是怎么解决的呀