首页/文章/ 详情

113、Fluent UDF实现无网格的障碍物扰流

5小时前浏览4

1. 障碍物扰流

一般我们模拟障碍物流动都需要将障碍物画出来,然后进行流动计算。但是如果障碍物比较复杂,一方面障碍物比较难以建模,另一方面还会大大拉低网格质量,可能会导致计算收敛性不好。

 

于是我突然胡思乱想,是否可以不需要单独建模和画网格,而根据障碍物坐标,通过UDF来实现流体障碍物流动?


2. 方法1:Fixed value固定障碍物区域速度为0


首先想到的就是直接将障碍物区域的速度强行设置为0,即使用Cell Zone Conditions→Fixed Values中固定速度为0


 


UDF很容易写,即首先要知道障碍物的坐标信息,然后根据障碍物坐标来令此区域x方向和y方向的速度均为0。


比如,我们在流场中的障碍物为圆,障碍物坐标如下图


 

UDF代码:






#include "udf.h"DEFINE_PROFILE(fixed_value_xy, t, i){    cell_t c;    real xc[ND_ND];    real x, y;    begin_c_loop(c, t)    {        C_CENTROID(xc, c, t);        x = xc[0];        y = xc[1];        if ((x-6)*(x-6)+ (y - 5) * (y - 5)<=0.8)        {            C_UDMI(c, t, 0) = 1;            F_PROFILE(c, t, i) = 0;        }        else        {            C_UDMI(c, t, 0) = 0;        }    }    end_c_loop(c, t)}
 


分别在Fixed_value的x和y方向速度上hook这个UDF


 


可以查看UDM确实是指障碍物位置才等于1,其余部分等于0

 


但是却没有产生任何障碍物扰流效果,这说明这种方式不可行

 



Fixed_value作用机理

实际上,仔细分析也可以想明白。固定速度只是数值约束,不是物理阻力。它是一个硬约束条件,强行把速度设置为 0;并不会引入任何动量交换或剪切效应;该区域就像一个“冻结”的流体区域,不具有“阻挡”或“扰动”的能力。


周围流体会“忽略”它,真实绕流中,流体与障碍物表面有相互作用(壁面摩擦、压强分布);Fixed Value 区域没有这种边界行为,它更像是一个“静止的流体包”。



3. 方法2:通过动量源项实现

通过设置动量源项,使得某一特定区域的速度恰好为0,这样就可以实现障碍物效果,而且通过动量源项只是在方程中添加了源项,并没有违背物理规律。

 


比如还是上面的例子,设置圆形区域动量为-1e5。代码如下:

















#include "udf.h"DEFINE_SOURCE(mom_source, c, t, dS, eqn){  real source = 0.;  real xc[ND_ND];  real x, y;  C_CENTROID(xc, c, t);  x = xc[0];  y = xc[1];  if ((x - 6) * (x - 6) + (y - 5) * (y - 5) <= 0.8)  {    source = -1e5;    dS[eqn] = 0.0;  }  return source;}
 


速度云图如下。可以看到似乎已经出现了障碍物的效果


 


 

这种方式已经接近障碍物扰流了,但难点在于,动量源项难以控制某一区域速度为0。如果给的动量源项过大,可能会出现流体反向流动现象



4. 方法3:高阻力多孔介质区

通过在流场中定义一个“高阻力多孔介质区”来模拟障碍物,将整个区域设置成多孔介质,然后使用UDF将固定区域并赋予极大的粘性阻力系数,使流体在这个区域内几乎无法流动,相当于一个虚拟实体障碍物,即可逼近真实的绕流场。


 



UDF代码如下:






#include "udf.h"DEFINE_PROFILE(resistance_xy, t, i){  face_t f;  real xc[ND_ND];  real x, y;  begin_f_loop(f, t)  {    F_CENTROID(xc, f, t);    x = xc[0];    y = xc[1];    if ((x-3)*(x-3)+ (y - 5) * (y - 5)<=0.3)    {      F_PROFILE(f, t, i) = 1e107;      F_UDMI(f, t, 0) = 1;    }    else    {      F_PROFILE(f, t, i) = 0.0;      F_UDMI(f, t, 0) = 0;    }  }  end_f_loop(f, t)}
 


实现效果如下:

 
 


甚至还可以实现卡门涡街现象

 



但是这个速度云图和真实障碍物的速度云图有明显的区别


 

卡门涡街对比

 



 

5. 总结

我们对这几种方法进行总结

 


总的来说,想要真实模拟障碍物扰流还是需要真实的几何建模,其他的方式都不够准确?


或者说还有什么更好的奇思妙想??欢迎大家评论区留言,互相交流学习!!



来源:Fluent学习笔记
Fluent多孔介质UDF物流控制
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2025-06-07
最近编辑:5小时前
Fluent学习笔记
博士 签名征集中
获赞 149粉丝 444文章 158课程 3
点赞
收藏
作者推荐
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习计划 福利任务
下载APP
联系我们
帮助与反馈