fluent算例6 使用UDF定义沸腾与冷凝

fluent算例6 使用UDF定义沸腾与冷凝写在开头问题描述分析1. general2. 边界条件3. 物理模型4. 材料5.UDF6. methods7. 初始化8.动画

fluent算例6 使用UDF定义沸腾与冷凝

写在开头

最近的学习过程中有一点感受,想要分享一下,不知道各位CFDer有没有同感。在很多专业知识上,比如UDF或者某一种算例的关键点,在中文的文献中总是一笔带过,不是不小心带过,而是故意不外露,目前对于UDF的入门,永远都是那两个例子,十几来年了,很少有人会愿意把自己学到的知识真正的分享出来,总是将不好做有困难的那部分藏着掖着,如果大家都可以分享出来应该进步更快吧,对国家的发展或许也是一种帮助,也或许因为自己在寻找解决方法的路漫漫,所以当自己解决以后也不愿意无偿或者有偿分享了。

问题描述

本次算例参考胡坤老师,在其内容之上略有补充。演示源项法模拟水沸腾,在早期版本的Fluent中没有现成的蒸发冷凝模型,需要借助UDF指定质量源与能量源来模拟沸腾现象。在较新的Fluent版本中已经内置了蒸发冷凝模型,本算例中的UDF等同于Fluent中内置的Lee模型。本案例的UDF也可以经过修改用于更复杂的沸腾现象模拟。

 

分析

1. general

  • 瞬态计算

  • 考虑重力

  • 压力求解器

2. 边界条件

在流体域中的液态水,初始温度是372 K,也就是99 ℃,水的沸点是100 ℃,因此想要模拟水的沸腾,需要有热源的输入,才可以使得水达到沸点。而将初始温度设置为99摄氏度也是因为我们不关注水的升温过程,而更关心其沸腾。

  • 底部热源:温度壁面(573 K)

  • 两侧壁面及底部除热源之外的部分:绝热壁面(fluent默认的壁面条件,无需修改)

  • 出口:压力出口边界,常压即可

3. 物理模型

  • 涉及多相流,使用mixture模型,因此需要双精度启动fluent

    • 考虑重力,所以勾选implicit body force

    • 主相是液态水

    • 第二相是气态水,直径0.2mm

  • 涉及温度相关,开启能量方程

  • 速度不大,层流模型

4. 材料

  • 装满液态水的容器中水的沸腾只会设计到液态水和气态水两种物质

  • 从fluent材料库中直接复制water-liquid和water-vapour即可

  • 本次沸腾的传质传热使用UDF,两种材料的标准生成焓都改为0即可

5.UDF

#include "udf.h"
#include "sg_mphase.h"
#define T_SAT 373.15   //饱和温度373.15 K
#define LAT_HT 1.e3 //汽化潜热1000 J/kg
 
// 液相质量源项
DEFINE_SOURCE(liq_src, cell, pri_th, dS, eqn)
{
  Thread *mix_th, *sec_th;
  real m_dot_l;
 
  // mix_th存储主相的Thread指针;sec_th存储次相指针,注意ID
  mix_th = THREAD_SUPER_THREAD(pri_th);
  sec_th = THREAD_SUB_THREAD(mix_th, 1);
 
  // 温度大于饱和温度,表示为蒸发
  if (C_T(cell, mix_th) >= T_SAT)
  {
    //计算蒸发量,注意液相质量流量为负值,0.1为coeff值
    m_dot_l = -0.1 * C_VOF(cell, pri_th) * C_R(cell, pri_th) *
              fabs(C_T(cell, pri_th) - T_SAT) / T_SAT;
    //对体积分数求导
    dS[eqn] = -0.1 * C_R(cell, pri_th) *
              fabs(C_T(cell, pri_th) - T_SAT) / T_SAT;
  }
  else
  {
    //计算冷凝量,液相质量分数为正值
    m_dot_l = 0.1 * C_VOF(cell, sec_th) * C_R(cell, sec_th) *
              fabs(T_SAT - C_T(cell, mix_th)) / T_SAT;
    //若对体积分数求导得到的值为正,干脆直接赋零值
    dS[eqn] = 0.;
  } 
  return m_dot_l;
}
 
// 气相质量源项,解释同上
DEFINE_SOURCE(vap_src, cell, sec_th, dS, eqn)
{
  Thread *mix_th, *pri_th;
  real m_dot_v;
 
  mix_th = THREAD_SUPER_THREAD(sec_th);
  pri_th = THREAD_SUB_THREAD(mix_th, 0);
 
  if (C_T(cell, mix_th) >= T_SAT)
  {
    m_dot_v = 0.1 * C_VOF(cell, pri_th) * C_R(cell, pri_th) *
              fabs(C_T(cell, mix_th) - T_SAT) / T_SAT;
    dS[eqn] = 0.;
  }
  else
  {
    m_dot_v = -0.1 * C_VOF(cell, sec_th) * C_R(cell, sec_th) *
              fabs(T_SAT - C_T(cell, mix_th)) / T_SAT;
 
    dS[eqn] = -0.1 * C_R(cell, sec_th) *
              fabs(C_T(cell, sec_th) - T_SAT) / T_SAT;
  }
 
  return m_dot_v;
}
 
//混合相的能量源项
DEFINE_SOURCE(enrg_src, cell, mix_th, dS, eqn)
{
  Thread *pri_th, *sec_th;
  real m_dot;
  pri_th = THREAD_SUB_THREAD(mix_th, 0);
  sec_th = THREAD_SUB_THREAD(mix_th, 1);
 
  if (C_T(cell, mix_th) >= T_SAT)
  {
    // 得到蒸发量,Lee模型
    m_dot = -0.1 * C_VOF(cell, pri_th) * C_R(cell, pri_th) *
            fabs(C_T(cell, pri_th) - T_SAT) / T_SAT;
 
    //对温度求导,若为负则保留,否则赋值零
    dS[eqn] = -0.1 * C_VOF(cell, pri_th) * C_R(cell, pri_th) / T_SAT;
  }
  else
  {
    //得到冷凝量
    m_dot = 0.1 * C_VOF(cell, sec_th) * C_R(cell, sec_th) *
            fabs(T_SAT - C_T(cell, mix_th)) / T_SAT;
 
    dS[eqn] = -0.1 * C_VOF(cell, sec_th) * C_R(cell, sec_th) / T_SAT;
  }
    
  // 返回热量值,利用潜热与质量流量的乘积得到
  return LAT_HT * m_dot;
}
  • UDF这块我也不是很深理解,大概在其中都有解释

  • 直接将以上内容其复制,使用记事本粘贴,然后将记事本的后缀.txt修改为.c,User Defined Functions-interpreted-点击到刚刚创建的.c文件-interpret即可。

  • 在cell zone conditions中分别双击phase-1(液态水)、phase-2(气态水)、fluid(混合相),都勾选上源项source term,在其中点击mass或者energy后的edit-将0改为1-下拉找到对应的源项(液态水对应-liq::src、气态水对应vapour::src、混合相对应energy::src)-保存即可

6. methods

  • 我使用的默认,和胡老师不太一样

7. 初始化

  • 标准初始化

  • 将初始温度设置为372K

  • 由于沸腾温度为373.15 K,所以可以给温度边界上一层网格patch一个温度

  • 需要使用cell-register将温度壁面上的一层网格进行标记:cell register-new-boundry-选择底部的边界

8.动画

对于瞬态计算可以保存动画,对于本次算例,我们关心的是相的变化

  • 首选新建一个contours,设置成我们关心的样子,选择pahse-选择气相-save

  • solution-activities-create-solution animations-定义动画名-定义迭代多少步保存一个-保存类型可以选择jpeg-定义保存路径-选择要观察的面(contour提前定义好)-ok;计算结束后,animations-playback即可观看-write即可保存动画

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爸爸喊你去学习

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值