DPM(Discrete Phase Model, 离散相模型)是指在连续相中包含了如固体颗粒、液体颗粒等离散相的流动模型。
在DPM中,Fluent会忽略离散相颗粒间的相互作用,并假定离散相体积分数很小(手册推荐一般不超过10-12%);Fluent可以选择考虑离散相和连续相之间的交互,即相间动/能量(如果有相变可能还有质量)交换,在相间动量交换的过程中,一个重要的部分就是阻力(曳力)以及阻力系数的选取。
Fluent中已经提供有四个阻力模型,分别是球型阻力模型、非球型阻力模型、斯托克斯-坎宁安阻力模型以及高马赫数阻力模型。
球型阻力模型:这个阻力模型可以看作是对经验公式的拟合,具有很广泛的雷诺数使用范围,阻力系数的值也之和雷诺数有关,该阻力模型的具体信息见文献。
非球型阻力模型:非球型阻力模型需写入形状因子,由于没有用过,所以不太熟悉,也没有去翻文献。
斯托克斯-坎宁安阻力模型:该阻力模型是对斯托克斯阻力模型(著名的雷诺数分之24)的修正,考虑了稀薄气体效应。修正因子的大小与克努森数有关,克努森数已知的情况下,可以得到该阻力定律对应的阻力系数,详细信息见文献: 。
高马赫数阻力模型:这个阻力模型我也没有过多关注,感兴趣的同学可以追Fluent手册里的文献过去看看。
如果以上阻力模型都无法满足你的需求,或者说都无法比较准确的表述你算例中粒子在流场中的行为,那么就需要编写新的阻力定律。好在Fluent DPM提供了阻力定律的接口,可以通过UDF进行编写。
我这边编写的环境是Fluent16.0+VS2010,至于各位的Fluent具体能够搭配什么版本的VS,可以在Fluent安装路径中的udf.bat文件查看(右键,编辑)。进行UDF编写前,需要先配置环境,这里推荐的方法是UP主小道士苏区的视频:ansys fluent udf 环境配置真真最简单的方法了 两分钟配置好。跟着他做就可以了,注意对应的版本号。
一、只涉及雷诺数的阻力定律
很多阻力定律都只与雷诺数有关,这种阻力定律的编写也十分简单。需要包含的头文件与宏定义如下所示:
#include "udf.h"
DEFINE_DPM_DRAG(drag_name,Re,p)
{
... ...
}
其中drag_name是阻力定律的名字,Re是粒子雷诺数(基于粒子直径以及相间相对速度),p是一个指针,指向包含了被追踪粒子的数据的结构体。
可能是由于Fluent运算的原因,最终我们要返回的值,并不直接是阻力系数Cd,而是18ReCd/24,写的时候需要注意。
如果你的阻力定律真的只涉及雷诺数,那就没什么好说的了,直接照搬UDF手册里的例子,做一些更改就好。
Fluent UDF手册P162面例
二、涉及流场参数的阻力定律
如果你的阻力定律不仅需要用到雷诺数,还要用到一些流场的参数,比如温度、密度、动力粘度等,编写可能需要比上面复杂一点,这里我把必要的例子写在下面。
#include "udf.h"
#include "dpm.h" //好像也不用这个头文件,但我还是加上了
DEFINE_DPM_DRAG(drag_name,Re,p)
{
cphase_state_t *c = &(p->cphase) //指针c,指向追踪例子所在网格的流场信息
... ...
}
这里这个指针c很关键,利用它调用流场参数的方法如下(UDF手册中没有总结,这是从算例中总结出来的,这些都是我的理解,不一定正确):
c->sHeat 计算普朗特数时出现,应该是调用比热
c->mu 调用粘度
c->tCond 计算对流换热系数时用到,应该是调用导热系数
c->temp 计算温差时出现,应该是调用温度
c->pressure 调用压力
c->rho 计算施密特数时出现,应该是调用密度
如果需要流场中的参数,那么使用上面的方法应该就可以了。
如果需要当前被追踪粒子的参数,需要使用指针p,具体用法如下。
Fluent UDF 手册中*p的使用方法
利用上面两个方法,我们就可以调用流场的参数以及粒子的参数了,随后直接根据目标阻力定律的表达式编写UDF即可。
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删