FLUENT-UDF日记-15-DEFINE_PROFILE

15 篇文章 46 订阅

2.3.23. DEFINE_PROFILE

DEFINE_PROFILE可以定义随空间坐标或时间变化的边界条件或单元区域条件。
可以自定义的变量有:
·速度、压力、温度、湍流动能、湍流耗散率
·质量流量
·质量流量与物理流动时间的函数
·组分质量分数(组分运输)
·体积分数(多相模型)
·壁面热条件(温度、热流、生热率、传热系数和外部发射率等)
·壳层发热率
·壁面粗糙度条件
·壁面剪切和应力条件
·孔隙率
·多孔阻力方向矢量
·壁面粘附接触角(VOF多相模型)
DEFINE_PROFILE仅允许修改壁面热通量的单个值。单个值在ANSYS FLUENT没有线性化的显式源项中使用。如果要线性化壁面热通量的源项并分别考虑传导和辐射传热,则需要使用DEFINE_HEAT_FLUX。

example 1-压力分布

以下名为pressure_profile的UDF根据方程生成抛物线型的压力分布。
此UDF假定网格的生成方式是使原点位于要应用UDF的边界区域的几何中心。
入口中心y值为0,延伸到入口顶部(+0.0745)和底部(-0.0745)

#include "udf.h"
 DEFINE_PROFILE(pressure_profile,t,i)
 {
    real x[ND_ND];    /* 用来存储质心坐标 */
    real y;
    face_t f;
    begin_f_loop(f,t)
      {
       F_CENTROID(x,f,t);
       y = x[1];/*将y轴坐标赋给y*/
       F_PROFILE(f,t,i) = 1.1e5 - y*y/(.0745*.0745)*0.1e5;/*计算压力,传给F_PROFILE*/
      }
    end_f_loop(f,t)
 } 

example 2-速度、湍流动能和湍流耗散率分布

在下面的示例中,DEFINE_PROFILE分别用于生成二维完全发展的管道流动的速度、湍动能和耗散率。定义了三个独立的UDF,分别命名为x_ocity、k_profile和dissip_profile。这些函数串联在单个C源文件中,可以在ANSYS Fluent中解释或编译。

#include "udf.h"
 #define YMIN 0.0      /* constants */
 #define YMAX 0.4064
 #define UMEAN 1.0
 #define B 1./7.
 #define DELOVRH 0.5
 #define VISC 1.7894e-05
 #define CMU 0.09
 #define VKC 0.41
 /*x方向速度*/
 DEFINE_PROFILE(x_velocity,t,i)
 {
    real y, del, h, x[ND_ND], ufree;  
    face_t f;
    h = YMAX - YMIN;
    del = DELOVRH*h;
    ufree = UMEAN*(B+1.);
    begin_f_loop(f,t)
      {
         F_CENTROID(x,f,t);
         y = x[1];
         if (y <= del)
           F_PROFILE(f,t,i) = ufree*pow(y/del,B);
         else
           F_PROFILE(f,t,i) = ufree*pow((h-y)/del,B);
      }
    end_f_loop(f,t)
 }
 /* 湍动能 */
 DEFINE_PROFILE(k_profile,t,i)
 {
    real y, del, h, ufree, x[ND_ND];
    real ff, utau, knw, kinf;
    face_t f;
    h = YMAX - YMIN;
    del = DELOVRH*h;
    ufree = UMEAN*(B+1.);
    ff = 0.045/pow(ufree*del/VISC,0.25);
    utau=sqrt(ff*pow(ufree,2.)/2.0);
    knw=pow(utau,2.)/sqrt(CMU);
    kinf=0.002*pow(ufree,2.);
    begin_f_loop(f,t)
      {
         F_CENTROID(x,f,t);
         y=x[1];
           if (y <= del)
             F_PROFILE(f,t,i)=knw+y/del*(kinf-knw);
           else
             F_PROFILE(f,t,i)=knw+(h-y)/del*(kinf-knw);
      }
    end_f_loop(f,t)
 }
 /* 湍流耗散率 */
 DEFINE_PROFILE(dissip_profile,t,i)
 {
    real y, x[ND_ND], del, h, ufree;
    real ff, utau, knw, kinf;
    real mix, kay;
    face_t f;
    h = YMAX - YMIN;
    del = DELOVRH*h;
    ufree = UMEAN*(B+1.);
    ff = 0.045/pow(ufree*del/VISC,0.25);
    utau=sqrt(ff*pow(ufree,2.)/2.0);
    knw=pow(utau,2.)/sqrt(CMU);
    kinf=0.002*pow(ufree,2.);
    begin_f_loop(f,t)
      {
         F_CENTROID(x,f,t);
         y=x[1];
         if (y <= del)
           kay=knw+y/del*(kinf-knw);
         else
           kay=knw+(h-y)/del*(kinf-knw);
         if (VKC*y < 0.085*del)
           mix = VKC*y;
         else
           mix = 0.085*del;
         F_PROFILE(f,t,i)=pow(CMU,0.75)*pow(kay,1.5)/mix;
      }
    end_f_loop(f,t)
 }
     real r;
    begin_c_loop(c,t)
      {
         C_CENTROID(x,c,t);
         r =x[1];
         F_PROFILE(c,t,i) =
         va1+(va2*r)+(va3*r*r)+(va4*r*r*r)+(va5*r*r*r*r);
       }
     end_c_loop(c,t)
 } 
 DEFINE_PROFILE(fixed_ke,t,i)
 {
    cell_t c;
    real x[ND_ND];
    real r;
    begin_c_loop(c,t)
      {
         C_CENTROID(x,c,t);
         r =x[1];
         F_PROFILE(c,t,i) =
         ka1+(ka2*r)+(ka3*r*r)+(ka4*r*r*r)+(ka5*r*r*r*r)+(ka6*r*r*r*r*r);
      }
    end_c_loop(c,t)
 } 

example 3-固定速度UDF

在下面的示例中,DEFINE_PROFILE用于固定在某单元区域内始终保持不变的量。其中包含FIXED_U、FIXED_V和FIXED_KE三个单独的UDF,它们定义了固定的速度,用于模拟叶轮驱动的混合罐中叶轮的瞬态启动。

#include "udf.h"
 #define FLUID_ID 1
 #define ua1 -7.1357e-2
 #define ua2 54.304
 #define ua3 -3.1345e3
 #define ua4 4.5578e4
 #define ua5 -1.9664e5
 #define va1 3.1131e-2
 #define va2 -10.313
 #define va3 9.5558e2
 #define va4 -2.0051e4
 #define va5 1.1856e5
 #define ka1 2.2723e-2
 #define ka2 6.7989
 #define ka3 -424.18
 #define ka4 9.4615e3
 #define ka5 -7.7251e4
 #define ka6 1.8410e5
 #define da1 -6.5819e-2
 #define da2 88.845
 #define da3 -5.3731e3
 #define da4 1.1643e5
 #define da5 -9.1202e5
 #define da6 1.9567e6
 DEFINE_PROFILE(fixed_u,t,i)
 {
    cell_t c;
    real x[ND_ND];
    real r;
    begin_c_loop(c,t)
      {
         C_CENTROID(x,c,t);
         r =x[1];
         F_PROFILE(c,t,i) =
             ua1+(ua2*r)+(ua3*r*r)+(ua4*r*r*r)+(ua5*r*r*r*r);
       }
    end_c_loop(c,t)
 }
 DEFINE_PROFILE(fixed_v,t,i)
 {
    cell_t c;
    real x[ND_ND];
    real r;
    begin_c_loop(c,t)
      {
         C_CENTROID(x,c,t);
         r =x[1];
         F_PROFILE(c,t,i) =
         va1+(va2*r)+(va3*r*r)+(va4*r*r*r)+(va5*r*r*r*r);
       }
     end_c_loop(c,t)
 } 
 DEFINE_PROFILE(fixed_ke,t,i)
 {
    cell_t c;
    real x[ND_ND];
    real r;
    begin_c_loop(c,t)
      {
         C_CENTROID(x,c,t);
         r =x[1];
         F_PROFILE(c,t,i) =
         ka1+(ka2*r)+(ka3*r*r)+(ka4*r*r*r)+(ka5*r*r*r*r)+(ka6*r*r*r*r*r);
      }
    end_c_loop(c,t)
 } 

example 4-壁面产热率分布

以下名为wallheatGenerate的UDF生成平面导热壁面的产热率文件。对其进行解释或编译后,可在ANSYS FLUENT中的壁面边界条件对话框中激活此UDF

 #include "udf.h"
 DEFINE_PROFILE(wallheatgenerate,t,i)
 {
    real source = 0.001;
    face_t f;
    begin_f_loop(f,t)
        F_PROFILE(f,t,i) = source;
    end_f_loop(f,t)
 } 

example 5-作为物理流动时间函数的质量流量UDF

以下名为tm_pout2的UDF在物理时间步长大于0.2秒时将质量流量从1kg/s调整为1.35kg/s。对其进行解释或编译后,可以在ANSYS FLUENT中的压力出口边界条件对话框中激活此UDF,方法是选择指定目标质量流量选项,然后从相应的下拉列表中选择UDF名称。

/* UDF for setting target mass flow rate in pressure-outlet   */
 /* at t0.2 sec the target mass flow rate set to 1.00 kg/s    */
 /* when t0.2 sec the target mass flow rate will change to 1.35 kg/s */
 #include "udf.h"
 DEFINE_PROFILE(tm_pout2, t, nv)
 {
    face_t f ;
    real flow_time = RP_Get_Real("flow-time");/*RP_Get_Real("flow-time")与CURRENT_TIME等价,都是用于获取当前物理时间,但RP_Get_Real不能用在cell或者face的循环中,太耗费时间*/
    if (flow_time < 0.2)
    {
         printf("Time   = %f sec. \n",flow_time);
         printf("Targeted mass-flow rate set at 1.0 kg/s \n");
         begin_f_loop(f,t)
          {
             F_PROFILE(f,t,nv) = 1.0 ;
          }
         end_f_loop(f,t)
      }
    else
      {
         printf("Time   = %f sec. \n",flow_time);
         printf("Targeted mass-flow rate set at 1.35 kg/s \n") ;
         begin_f_loop(f,t)
           {
            F_PROFILE(f,t,nv) = 1.35 ;
           }
         end_f_loop(f,t)
	  }
  } 

example 6-质量流量入口的质量流量UDF

以下名为INTERT_MF的UDF最初指定前10毫秒的质量流量为3.0千克/秒,然后在接下来的10毫秒内将其增加到4.0千克/秒,之后指定5.0千克/秒。

#include "udf.h"
  DEFINE_PROFILE(inlet_mf,th,i)
 {
   face_t f;
   real flow_time = CURRENT_TIME;/*CURRENT_TIME查找当前的流动时间,它对所有节点都可用,访问它一次并将值存储在局部变量中比为Face循环中的每个面都访问一次更有效*/
   begin_f_loop(f,th)
     {
       if(flow_time <= 0.01)
          F_PROFILE(f,th,i) = 3.0;
       else if(flow_time <=0.02)
          F_PROFILE(f,th,i) = 4.0;
       else
          F_PROFILE(f,th,i) = 5.0;
     }
    end_f_loop(f,th);
 }
  • 23
    点赞
  • 111
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
一个 Fluent 尾流 UDF 是用于在 Fluent 定义自定义边界条件的用户定义函数。它可以用于模拟尾流等复杂流动场景。 在 Fluent UDF 可以编写为 DLL 或 shared library,并可以通过 FLUENT UDF 编译器进行编译。编写 UDF 的语言可以是 C、C++ 或 Fortran。 对于尾流 UDF,您需要定义一个函数,该函数将在 Fluent 的每个时间步长被调用。在这个函数,您可以设置自定义的边界条件,例如速度、压力或温度。 下面是一个示例尾流 UDF 的代码: ``` #include "udf.h" DEFINE_PROFILE(inlet_velocity, thread, nv) { real x[ND_ND]; real y, z; real time = RP_Get_Real("flow-time"); face_t f; begin_f_loop(f, thread) { F_CENTROID(x, f, thread); y = x[1]; z = x[2]; if (y <= 0.0) { F_PROFILE(f, thread, nv) = 1.0 + 0.5 * sin(time); } } end_f_loop(f, thread) } ``` 在这个例子,我们定义了一个名为 "inlet_velocity" 的 UDF,它将在 Fluent 的每个时间步长被调用。在这个函数,我们使用 sine 函数定义了一个自定义的边界条件,以模拟尾流的速度场。 要在 Fluent 使用此 UDF,请按照以下步骤操作: 1. 在 Fluent 打开您的模型。 2. 选择 "Define" 菜单,然后选择 "User-Defined"。 3. 在 "User-Defined Functions" 窗口,选择 "Compiled UDFs"。 4. 点击 "Load" 按钮,并选择您的 UDF 文件。 5. 在 "Define" 菜单,选择 "Boundary Conditions"。 6. 选择您要定义自定义边界条件的边界。 7. 在 "Boundary Conditions" 窗口,选择 "User Defined"。 8. 在 "UDF Function Name" 输入您的 UDF 函数名,例如 "inlet_velocity"。 9. 点击 "Apply" 按钮,然后点击 "OK" 按钮。 现在,您已经成功地将您的尾流 UDF 应用于 Fluent 模型的自定义边界条件。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值