[Fluent/Gambit] VOF模型中使用UDF捕捉相界面问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Fluent/Gambit] VOF模型中使用UDF捕捉相界面问题相关的知识,希望对你有一定的参考价值。

如题,整个模型分为流体区与固体区,在初始化时利用设置寄存体的方法把流体区初始化为air和fluid这2相。现在想采用UDF方法,捕捉到气液2相的相界面,并施加内热源。整个模型采用并行计算。
UDF如下:

# include "udf.h"
# include "sg_mphase.h"

DEFINE_ADJUST(adjust_vof, d)

#if RP_NODE
int fluid=0;
Domain *subdomain_fluid = DOMAIN_SUB_DOMAIN(d, fluid);
Thread *t;
cell_t c;
real b[ND_ND];
real x;
real y;
real z;
thread_loop_c (t,subdomain_fluid)

begin_c_loop(c,t)

C_CENTROID(b,c,t);
x = b[0];
y = b[1];
z = b[2];
if((C_VOF(c,t) > 0)&&(C_VOF(c,t) < 1))

C_UDMI(c,t,0) = 1;

else
C_UDMI(c,t,0) = 0;

end_c_loop(c,t)

#endif


DEFINE_SOURCE(re_source, cell, thread, dS, eqn)

real source;
#if RP_NODE
if (C_UDMI(cell,thread,0) == 1)

source = 10e15;
dS[eqn] = 0;

else

source = 0;
dS[eqn] = 0;

#endif
return source;


此UDF能够通过fluent编译,但经过function hooks之后(都用不着加载内热源),在计算最开始就出现error:10054报错,一步都不能计算下去。
而如果将define_adjust中的条件判断语句中的关于相体积分数的判断改为一个简单的区域,如一个立方体范围大小的时候,热源能够正确加载于指定范围内。
哪位高手能帮我看看这个UDF究竟有什么问题,不胜感激。

参考技术A 捕捉界面不用单独编写UDF的
施加内热源的事情,用不用udf就不清楚了。追问

你好~请问一下,怎么才能在不使用UDF的情况下捕捉到相界面呢?

我的实际情况是:需要找到相界面,并且在相界面网格中施加热量,整个过程要在计算中一直进行下去。

参考技术B 你好啊 我现在也在做气液相交界面 前辈的UDF可以了吗 求交流啊

FLUENT案例02:DPM模型


本案例延续案例1的模型及计算结果。

1 引子

1.1 案例描述

本案例描述了如何在FLUENT中使用DPM模型。在前面的案例中,模拟了T型管中的单相流动。本案例将使用相同的T型管模型,模拟颗粒进入T型管后的运动轨迹。

1.2 学习目标

本案例学习目标包括:

  • 定义颗粒材料
  • 向计算域中注入颗粒
  • 使用常数或分布函数定义颗粒粒径
  • 包含颗粒的随机效应
  • 预测管道壁面的冲蚀损伤

1.3 模拟内容

本案例模拟的是几何模型与案例1相同,不过介质为丙烷,同时还有水滴注入到计算域中。

  • 模拟液滴被气体带入管道中的运动轨迹
  • 使用分布粒径,预测固体壁面上的冲蚀(或附着)

2 启动FLUENT并导入网格

采用案例1的Case,导入过程这里不详述。

3 材料设置

  • 在FLUENT材料库中添加材料Propane(c3h8)

4 Cell Zones Conditions

  • 设置计算域材料为Propane

5 Calculate

  • 设置计算150步,获取新的计算结果

6 定义Injecions

  • 鼠标双击模型树节点Discrete Phase > Injections,在弹出的对话框中选择按钮Create
    技术分享
  • 在弹出的Set Injection Properties对话框中,进行如下图所示的设置。
    技术分享

7 定义DPM材料

  • 鼠标双击模型树节点Materials > Inert Particle > anthracite,弹出材料属性设置对话框,改变Density参数值为1000,如下图所示,点击按钮Change/Create并关闭对话框。
    技术分享

8 颗粒追踪

  • 鼠标双击模型树节点Results > Graphics > Particle Tracks,弹出颗粒追踪参数设置对话框
    技术分享
  • 点击对话框中的选项Draw Mesh前的复选框,弹出Mesh Display对话框,点击Display按钮。点击Close按钮关闭对话框。
    技术分享
  • 返回Particle Tracks面板,选择Release from Injections列表框中的injection-0,点击按钮Track进行粒子追踪
    技术分享
    此时TUI窗口显示信息如图所示:
    技术分享

    图中信息为:追踪粒子数量158个,其中逃逸158个,丢失0个,捕捉0个,蒸发0个,未完成0个

  • 点击Display按钮,显示粒子追踪图(颗粒停留时间),如下图所示。
    技术分享

关于DPM的一些分析:
在本例中,液滴从”inlet-z”边界释放进入计算域,该边界上有158个网格,追踪158个轨迹

  • 每一个液滴直径均为1×104m,其密度为1000kg/m3,因此液滴质量为5.22×10?10kg
  • 这里假设从相同位置以相同条件进入计算域的粒子具有相同的轨迹
  • 计算中输入的质量流量为1kg/s,因此158个粒子用于表征1.2×107个真实粒子(1/(5.22×10?10×158)
  • The droplet (or particle) progresses through the domain through a large number of small steps. At each step, the solver computes the force balance acting on a single droplet (diameter 1x10-4 m) – hence considering the drag with the surrounding fluid, droplet inertia, and if applicable gravity. The mass transported is that of all the droplets in that stream (1.2x107 droplets/sec).
  • 液滴与连续相间可以是单向耦合也可以是双向耦合。本案例采用的是单向耦合。
    • 单向耦合意味着流体可以影响DPM粒子的动量及能量,但是DPM粒子运动不会影响到其周围连续相的流场。因此可以在后处理中计算DPM轨迹
    • 若有必要的话,可以通过在DPM模型设置面板中激活Interaction with Continuous Phase选项来开启双向耦合。双向耦合计算中连续相收敛要比单向计算困难,往往需要更多的迭代步,在计算的过程中,没有必要再每一个流动迭代步中计算DPM轨迹,通常在5-10个迭代步后更新粒子轨迹。

9 设置粒子分布直径

前面对于粒子直径采用常数,这里改为使用Rosin-Rammler分布。
R-R分布指的是颗粒质量分数与直径间的函数关系:

Y(d)=e?(d/dˉ)n

式中,dˉ为平均粒径

  • 双击模型树节点Models > Discrete Phase(On) > Injections > Injection-0,如下图所示。
    技术分享
  • 在弹出的对话框中进行如下设置
    • 设置Diameter DistributionRosin-rammler
    • 设置Min Diameter1e-4
    • 设置Max Diameter5e-4
    • 设置Mean Diameter4e-4
    • 设置Number of Diameters10
  • 点击OK按钮确认操作并关闭对话框。如下图所示。
    技术分享

10 粒子追踪

  • 采用第8步相同的方式进行Particle Tracks
    技术分享
    粒子追踪(颗粒停留时间)如下图所示。
    技术分享
    此时TUI窗口消息如下图所示。
    技术分享
    此时追踪的粒子数量变为了1580个,是因为在上一步中设置Number of Diameters10,所以总的粒子数量为10×158=1580个。

11 统计出口面上粒径分布

-鼠标点击模型树节点Results > Reports > Discrete Phase > Sample,如下图所示。
技术分享

  • 在弹出的对话框(如下图所示)中选择Boundariesoutlet,选择Release from Injectionsinjection-0,点击Compute按钮,如下图所示。
    技术分享
  • 点击模型树节点Results > Reports > Discrete Phase > Histogram,弹出如下图所示的对话框。
  • 点击Read…按钮,加载上一步生成的文件outlet.dpm
  • 进行如下图所示设置。选择Sampleoutlet,选择variablediameter,选择weightmass-flow
    技术分享
  • 点击Plot按钮显示图像。如下图所示。(也可以将数据输出,然后用其他后处理工具绘图)
    技术分享

12 修改壁面边界以捕捉颗粒

  • 鼠标双击模型树节点Boundary Conditions > wall-fluid(wall),弹出边界设置对话框
  • 切换到DPM标签页,设置Boundary cond. TypeTrap,如下图所示
  • 点击OK按钮关闭对话框
    技术分享

13 颗粒追踪

按第8步相同的方法进行粒子追踪。TUI窗口显示如下图所示的信息。
技术分享
可以看出,释放了1580个颗粒,其中逃逸857个,捕捉723个。
颗粒追踪(粒子停留时间)如下图所示。
技术分享

14 考虑湍流效应

  • 双击模型树节点Models > Discrete Phase(On) > Injections > Injection-0,弹出如下图所示对话框。
  • 切换至Turbulent Dispersion标签页,激活Discrete Random Walk Model,设置Number of Tries10,点击OK按钮关闭对话框。
    技术分享
  • 采用如步骤8所描述的粒子追踪方法。
    TUI窗口显示消息如下图所示。
    技术分享
    从图中可以看出,追踪颗粒数量变为了15800,其中逃逸5324,捕捉3591,追踪未完成6885

    追踪颗粒之所以变为了15800,是因为使用随机模型的时候设置了Number of Tries10,故总颗粒数量为158×NumberofDiameters×NumberofTries
    这里反映有未完成颗粒,可以通过增大Discrete Phase Model面板中的Max Number of Step来改善。该值默认为500。将此值增大至2000,则未完成颗粒消失。

15 考虑冲蚀

  • 计算冲蚀必须使用双向耦合
  • 为计算资源考虑,关闭Discrete Random Walk

  • 双击模型树节点Discrete Phase,在弹出的对话框中进行如下图所示的设置。
    技术分享

  • 进入Solution > Run Calculation节点,进行如下图所示设置。
    技术分享

    由于本例设置的颗粒材料为液滴,因此壁面采用的是Trap,若为固态颗粒计算冲蚀,则需要设置壁面行为为Reflect。实际计算时还需要对壁面DPM行为参数进行设置,这里采用默认参数。

16 后处理查看壁面冲蚀云图

  • 双击模型树节点Results > Graphics > Contours ,弹出如下图所示对话框
  • 在弹出的对话框中进行如下图所示设置
    技术分享
    点击Display按钮显示冲蚀云图,如下图所示。
    技术分享

17 导出数据到CFD-POST

dat文件中并没有包含DPM颗粒轨迹数据,因此需要采用导出的方式将颗粒轨迹导出到文件中。

  • 利用菜单File > Export > Particle History Data,弹出如下图所示对话框
    技术分享
  • 点击按钮Exported Particle Variables…,弹出如下图所示对话框,在对话框中Available Particle Variables列表项中选择需要导出的变量,点击按钮Add Variables将选择的变量添加到左侧的列表中,点击OK按钮关闭对话框。
    技术分享
  • 返回到Export Particle History Data对话框,点击Write按钮输出颗粒轨迹数据。
  • 关闭FLUENT返回至Workbench工程面板。

18 CFD-POST操作

  • 从左侧的组件列表中选择Result拖拽至A3单元格上,双击工程面板中的B2单元格,进入CFD-POST环境
    技术分享
  • 利用菜单File > Import > Import Fluent Particle Track File,如图所示
    技术分享
    打开如下图所示对话框,找到上一步导出的颗粒轨迹文件。
    技术分享
  • 颗粒轨迹导入后,点击模型树节点FLUENT PT for Anthracite,在下方属性窗口中,设置Max Tracks为500

技术分享

  • 设置Color标签页下,进行如下图所示设置
    技术分享
  • 点击Apply按钮,图形框显示粒子追踪图如下图所示。
    技术分享
    技术分享










































































以上是关于[Fluent/Gambit] VOF模型中使用UDF捕捉相界面问题的主要内容,如果未能解决你的问题,请参考以下文章

fluent vof

fluent中VOF法如何模拟正确的水深

我是新手,想用Gambit软件生成一个简单的网格到Fluent中怎么办啊,不是田字形的,求帮忙

用fluent 中Vof求解瞬态可压缩气体冲击液面问题,进口为压力进口,出口为压力出口。

gambit中的体网格skewness大于0.97怎么修改?若仍然存在大于0.97的网格能在fluent中计算么

用FLUENT导入GAMBIT 网格时候出现检查错误怎么回事?出现负体积网格怎么解决修正