fluent算例6 使用UDF定义沸腾与冷凝写在开头问题描述分析1. general2. 边界 条件3. 物理模型4. 材料5.UDF6. methods7. 初始化8.动画
最近的 学习 过程中有一点感受,想要分享一下,不知道各位CFDer有没有同感。在很多专业知识上,比如UDF或者某一种算例的关键点,在中文的文献中总是一笔带过,不是不小心带过,而是故意不外露,目前对于UDF的入门,永远都是那两个例子,十几来年了,很少有人会愿意把自己学到的知识真正的分享出来,总是将不好做有困难的那部分藏着掖着,如果大家都可以分享出来应该进步更快吧,对国家的发展或许也是一种帮助,也或许因为自己在寻找解决方法的路漫漫,所以当自己解决以后也不愿意无偿或者有偿分享了。
本次算例参考胡坤老师,在其内容之上略有补充。演示源项法 模拟 水沸腾,在早期版本的Fluent中没有现成的蒸发冷凝模型,需要借助UDF指定质量源与能量源来模拟沸腾现象。在较新的Fluent版本中已经内置了蒸发冷凝模型,本算例中的UDF等同于Fluent中内置的Lee模型。本案例的UDF也可以经过修改用于更复杂的沸腾现象模拟。

在流体域中的液态水,初始温度是372 K,也就是99 ℃,水的沸点是100 ℃,因此想要模拟水的沸腾,需要有热源的输入,才可以使得水达到沸点。而将初始温度设置为99摄氏度也是因为我们不关注水的升温过程,而更关心其沸腾。
#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;
}对于瞬态计算可以保存动画,对于本次算例,我们关心的是相的变化
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删