24小时热门版块排行榜    

查看: 1948  |  回复: 4
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

bianboshen

新虫 (初入文坛)

[交流] UDF源项编写中如何调用壁面温度

楼主新人,目前想写一个液滴的能量源项,但是在源项中不知道如何调用壁面温度,代码如下,可以编译,但无法运行。
DEFINE_SOURCE(liq_enrg_src, c, sec_th, dS, eqn)
{

  Thread *mix_th, *pri_th, *t;
  Domain *domain=Get_Domain(1);
  int zone_ID=18;/*wall ID*/
  real m_dot_d=0;
  real kd=0;
  real Cnt=0;
  real a;
  real b;
  real d=0;
  real vg=0;
  real Reg=0;
  real tr=0;
  real Enrg_Source=0;
  face_t f;
  mix_th = THREAD_SUPER_THREAD(sec_th);
  pri_th = THREAD_SUB_THREAD(mix_th,0);
  t=Lookup_Thread(domain,zone_ID);

  begin_f_loop(f, t)
{
  Cnt=(1.0-C_VOF(c,pri_th))*C_R(c,sec_th);
  a=Cnt/C_R(c,pri_th);
  if(a<0.3)
  {
          kd=0.18*sqrt(0.026/(C_R(c,pri_th)*0.008));
  }
  else
  {
          kd=pow(a,-0.85)*sqrt(0.026/(C_R(c,pri_th)*0.008));
  }
  m_dot_d=kd*Cnt;

    dS[eqn]=0;

  vg=sqrt(pow(C_U(c,pri_th),2)+pow(C_V(c,pri_th),2)+pow(C_W(c,pri_th),2));

  Reg=C_R(c,pri_th)*vg*0.008/C_MU_EFF(c,pri_th);

  d=0.00796*0.026/C_R(c,pri_th)/pow(C_VOF(c,pri_th)*vg,2)*pow(Reg,2/3)*pow(C_R(c,pri_th)/C_R(c,sec_th),-1/3)*pow(C_MU_EFF(c,pri_th)/C_MU_EFF(c,sec_th),2/3);

  tr=3.14*sqrt(C_R(c,sec_th)*d*d*d/16/0.026);

  b=pow(18*pow(C_K_L(c,pri_th)*tr,3)*C_R(c,pri_th)*LAT_HT*pow(m_dot_d,5)/pow(C_R(c,sec_th),4)/C_MU_EFF(c,pri_th)/(1.0-C_VOF(c,pri_th))/(F_T(f,t)-T_SAT),0.25);

  Enrg_Source=(F_T(f,t)-T_SAT)*b*4/0.008;

  if(C_T(c,mix_th)<T_SAT)
  {  
   return 0;
   }
   else
   {
   return Enrg_Source;
   }
   }
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

bianboshen

新虫 (初入文坛)

引用回帖:
4楼: Originally posted by sfbook at 2016-12-28 10:46:57
可以实现,但是要遍历一遍所有网格,按照坐标判断cell位置,然后判断取用与否。
相对的,只把udf加载到壁面上倒是很容易实现。...

这个是我重新写的,不知是否已经实现我所说的功能,另我这个源项加进去是要模拟液滴与壁面之间的对流换热,所以我的想法是给壁面液体设置一个正能量源项,给气体设置一个负的能量源项。
DEFINE_SOURCE(liq_enrg_src, c, sec_th, dS, eqn)
{

  Thread *mix_th, *pri_th, *t;
  Domain *domain=Get_Domain(1);
  int zone_ID=18;/*wall ID*/
  real m_dot_d=0;
  real kd;
  real Cnt;
  real a;
  real Area[ND_ND];
  real b;
  real d;
  real vg;
  real Reg;
  real tr;
  real Enrg_Source=0;
  face_t f;
  mix_th = THREAD_SUPER_THREAD(sec_th);
  pri_th = THREAD_SUB_THREAD(mix_th,0);
  t=Lookup_Thread(domain,zone_ID);
  begin_f_loop(f, t)
{
if(c == F_C0(f,t))
        {
  Cnt=(1.0-C_VOF(c,pri_th))*C_R(c,sec_th);
  a=Cnt/C_R(c,pri_th);
  if(a<0.3)
  {
          kd=0.18*sqrt(0.026/(C_R(c,pri_th)*0.008));
  }
  else
  {
          kd=pow(a,-0.85)*sqrt(0.026/(C_R(c,pri_th)*0.008));
  }
  m_dot_d=kd*Cnt;
  vg=sqrt(pow(C_U(c,pri_th),2)+pow(C_V(c,pri_th),2)+pow(C_W(c,pri_th),2));

  Reg=C_R(c,pri_th)*vg*0.008/C_MU_L(c,pri_th);

  d=0.00796*0.026/C_R(c,pri_th)/pow(C_VOF(c,pri_th)*vg,2)*pow(Reg,2/3)*pow(C_R(c,pri_th)/C_R(c,sec_th),-1/3)*pow(C_MU_L(c,pri_th)/C_MU_L(c,sec_th),2/3);

  tr=3.14*sqrt(C_R(c,sec_th)*d*d*d/16/0.026);

b=pow(18*pow(C_K_L(c,pri_th)*tr,3)*C_R(c,pri_th)*LAT_HT*pow(m_dot_d,5)/pow(C_R(c,sec_th),4)/C_MU_EFF(c,pri_th)/(1.0-C_VOF(c,pri_th))/(F_T(f,t)-T_SAT),0.25);
F_AREA(Area,f,t);
Enrg_Source=(F_T(f,t)-T_SAT)*b/C_VOLUME(c,mix_th)/(1-C_VOF(c, pri_th))*NV_MAG(Area);
dS[eqn]=0;
//Enrg_Source=2;
   return Enrg_Source;
        }
        }
end_f_loop(f, t)
  }
5楼2016-12-28 13:28:51
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 5 个回答

sfbook

银虫 (小有名气)


小木虫: 金币+0.5, 给个红包,谢谢回帖
壁面ID下调用的真的是壁面本身的数据。。。跟近壁面区域的差距还是很大的,你想要近壁面数据就得从主流流体里面找坐标在近壁面区域的cell。
2楼2016-12-27 16:16:32
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

bianboshen

新虫 (初入文坛)

引用回帖:
2楼: Originally posted by sfbook at 2016-12-27 16:16:32
壁面ID下调用的真的是壁面本身的数据。。。跟近壁面区域的差距还是很大的,你想要近壁面数据就得从主流流体里面找坐标在近壁面区域的cell。

感谢回帖,我目前要调用确实是壁面温度,将源箱只加载在与壁面相连的边界层中的cell上,其他cell不不加。这样是可以实现的么?

发自小木虫Android客户端
3楼2016-12-27 23:44:14
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

sfbook

银虫 (小有名气)


小木虫: 金币+0.5, 给个红包,谢谢回帖
引用回帖:
3楼: Originally posted by bianboshen at 2016-12-27 23:44:14
感谢回帖,我目前要调用确实是壁面温度,将源箱只加载在与壁面相连的边界层中的cell上,其他cell不不加。这样是可以实现的么?
...

可以实现,但是要遍历一遍所有网格,按照坐标判断cell位置,然后判断取用与否。
相对的,只把udf加载到壁面上倒是很容易实现。
4楼2016-12-28 10:46:57
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
普通表情 高级回复(可上传附件)
信息提示
请填处理意见