首页/文章/ 详情

Fluent UDF中DEFINE_INIT压力初始化错误

精品
作者优秀平台推荐
详细信息
文章亮点
作者优秀
优秀教师/意见领袖/博士学历/特邀专家
平台推荐
内容稀缺
2月前浏览2271

DEFINE_INIT宏经常用于对计算区域中的物理量进行初始化。该宏可以作为Fluent全局初始化(标准初始化及Hybrid初始化)及Patch初始化的一个补充。DEFINE_INIT宏的结构形式比较简单:

DEFINE_INIT(name, d)

其包括两个参数:

  • name:宏的名称
  • d:Domain指针,用于指向初始化函数应用范围的指针。

DEFINE_INIT宏没有返回值,需要初始化的物理变量可以在宏内部直接进行赋值。由于DEFINE_INIT宏只有一个Domain指针参数,而想要对物理量赋值需要Thread指针,因此在宏的内部需要Thread在Domain上循环遍历,需要使用循环遍历宏thread_loop_cthread_loop_f

thread_loop_c(t,d)
{

}

如下面的几何模型,几何尺寸为50 mm x 50 mm。

现在要对$30<y<40$区域进行初始化,指定该区域内的压力为200 pa,x方向的速度为20 m s,温度为400k。其他区域压力为100 pa,x方向速度为10 s,温度为300 k。(注:这里是随便举例,仅为演示udf宏的使用,无实际意义。)< p>

可以写UDF为:

#include "udf.h"
DEFINE_INIT(init_field, d)
{
   cell_t c;
   Thread *t;
   real xc[ND_ND];
   thread_loop_c(t,d)
     {
        begin_c_loop(c,t)
          {
             C_CENTROID(xc,c,t);
             if (xc[1]>0.03 && xc[1]<0.04)
             {
                 C_P(c,t) = 200;
                 C_U(c,t) = 20;
                 C_T(c,t) = 400;
             }else
             {
                 C_P(c,t) = 100;
                 C_U(c,t) = 10;
                 C_T(c,t) = 300;  
             }
          }
        end_c_loop(c,t)
     }
}

编译并加载UDF。

DEFINE_INIT宏通过点击Function Hooks...按钮,在打开的User-Defined Function Hooks对话框加载。

进入Initialization面板,点击按钮Initialize进行初始化。

初始化的时候需要注意:

  1. 若DEFINE_INIT给压力和速度之外的物理量进行了赋值,那么确保在初始化之前启用了相应的物理模型。如本示例中使用C_T宏给温度赋值,那么需要先开启Energy模型。
  2. 在Initializatin面板中使用Standard Initialization,不建议使用Hybrid初始化。

在初始化面板中进行初始化。

初始化完毕后可以在后处理中查看物理量的分布。

  • 初始温度
  • 初始速度
  • 初始压力

注意看,这里速度和温度初始化都没有问题,但压力初始化有问题。

程序中30<y<40区域压力为200 Pa,其他区域压力为100 Pa,而最终初始化完毕后30<y<40区域压力为100 Pa,其他区域压力为0 Pa。目前没找到问题出在哪里。


(完)

来源:CFD之道
FluentUDF
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2024-09-15
最近编辑:2月前
CFD之道
博士 | 教师 探讨CFD职场生活,闲谈CFD里外
获赞 2567粉丝 11316文章 735课程 27
点赞
收藏
作者推荐

免费 5.0
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈