[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究竟有什么问题,不胜感激。
施加内热源的事情,用不用udf就不清楚了。追问
你好~请问一下,怎么才能在不使用UDF的情况下捕捉到相界面呢?
我的实际情况是:需要找到相界面,并且在相界面网格中施加热量,整个过程要在计算中一直进行下去。
FLUENT案例02:DPM模型
1.1 案例描述
1.2 学习目标
1.3 模拟内容
2 启动FLUENT并导入网格
3 材料设置
4 Cell Zones Conditions
5 Calculate
6 定义Injecions
7 定义DPM材料
8 颗粒追踪
9 设置粒子分布直径
10 粒子追踪
11 统计出口面上粒径分布
12 修改壁面边界以捕捉颗粒
13 颗粒追踪
14 考虑湍流效应
15 考虑冲蚀
16 后处理查看壁面冲蚀云图
17 导出数据到CFD-POST
18 CFD-POST操作
本案例延续案例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个轨迹
- 每一个液滴直径均为,其密度为,因此液滴质量为
- 这里假设从相同位置以相同条件进入计算域的粒子具有相同的轨迹
- 计算中输入的质量流量为1kg/s,因此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 设置粒子分布直径
- 设置计算域材料为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个轨迹
- 每一个液滴直径均为,其密度为,因此液滴质量为
- 这里假设从相同位置以相同条件进入计算域的粒子具有相同的轨迹
- 计算中输入的质量流量为1kg/s,因此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 设置粒子分布直径
- 鼠标双击模型树节点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个轨迹
- 每一个液滴直径均为,其密度为,因此液滴质量为
- 这里假设从相同位置以相同条件进入计算域的粒子具有相同的轨迹
- 计算中输入的质量流量为1kg/s,因此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 设置粒子分布直径
- 鼠标双击模型树节点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个轨迹
- 每一个液滴直径均为,其密度为,因此液滴质量为
- 这里假设从相同位置以相同条件进入计算域的粒子具有相同的轨迹
- 计算中输入的质量流量为1kg/s,因此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分布指的是颗粒质量分数与直径间的函数关系:
式中,为平均粒径
- 双击模型树节点Models > Discrete Phase(On) > Injections > Injection-0,如下图所示。
- 在弹出的对话框中进行如下设置
- 设置Diameter Distribution为Rosin-rammler
- 设置Min Diameter为1e-4
- 设置Max Diameter为5e-4
- 设置Mean Diameter为4e-4
- 设置Number of Diameters为10
- 点击OK按钮确认操作并关闭对话框。如下图所示。
10 粒子追踪
- 采用第8步相同的方式进行Particle Tracks
粒子追踪(颗粒停留时间)如下图所示。
此时TUI窗口消息如下图所示。
此时追踪的粒子数量变为了1580个,是因为在上一步中设置Number of Diameters为10,所以总的粒子数量为个。
11 统计出口面上粒径分布
粒子追踪(颗粒停留时间)如下图所示。
此时TUI窗口消息如下图所示。
此时追踪的粒子数量变为了1580个,是因为在上一步中设置Number of Diameters为10,所以总的粒子数量为个。
-鼠标点击模型树节点Results > Reports > Discrete Phase > Sample,如下图所示。
- 在弹出的对话框(如下图所示)中选择Boundaries为outlet,选择Release from Injections为injection-0,点击Compute按钮,如下图所示。
- 点击模型树节点Results > Reports > Discrete Phase > Histogram,弹出如下图所示的对话框。
- 点击Read…按钮,加载上一步生成的文件outlet.dpm
- 进行如下图所示设置。选择Sample为outlet,选择variable为diameter,选择weight为mass-flow
- 点击Plot按钮显示图像。如下图所示。(也可以将数据输出,然后用其他后处理工具绘图)
12 修改壁面边界以捕捉颗粒
- 鼠标双击模型树节点Boundary Conditions > wall-fluid(wall),弹出边界设置对话框
- 切换到DPM标签页,设置Boundary cond. Type为Trap,如下图所示
- 点击OK按钮关闭对话框
13 颗粒追踪
按第8步相同的方法进行粒子追踪。TUI窗口显示如下图所示的信息。
可以看出,释放了1580个颗粒,其中逃逸857个,捕捉723个。
颗粒追踪(粒子停留时间)如下图所示。
14 考虑湍流效应
- 双击模型树节点Models > Discrete Phase(On) > Injections > Injection-0,弹出如下图所示对话框。
- 切换至Turbulent Dispersion标签页,激活Discrete Random Walk Model,设置Number of Tries为10,点击OK按钮关闭对话框。
- 采用如步骤8所描述的粒子追踪方法。
TUI窗口显示消息如下图所示。
从图中可以看出,追踪颗粒数量变为了15800,其中逃逸5324,捕捉3591,追踪未完成6885
追踪颗粒之所以变为了15800,是因为使用随机模型的时候设置了Number of Tries为10,故总颗粒数量为
这里反映有未完成颗粒,可以通过增大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
TUI窗口显示消息如下图所示。
从图中可以看出,追踪颗粒数量变为了15800,其中逃逸5324,捕捉3591,追踪未完成6885
追踪颗粒之所以变为了15800,是因为使用随机模型的时候设置了Number of Tries为10,故总颗粒数量为
这里反映有未完成颗粒,可以通过增大Discrete Phase Model面板中的Max Number of Step来改善。该值默认为500。将此值增大至2000,则未完成颗粒消失。
- 计算冲蚀必须使用双向耦合
为计算资源考虑,关闭Discrete Random Walk
双击模型树节点Discrete Phase,在弹出的对话框中进行如下图所示的设置。
进入Solution > Run Calculation节点,进行如下图所示设置。
由于本例设置的颗粒材料为液滴,因此壁面采用的是Trap,若为固态颗粒计算冲蚀,则需要设置壁面行为为Reflect。实际计算时还需要对壁面DPM行为参数进行设置,这里采用默认参数。
16 后处理查看壁面冲蚀云图
- 双击模型树节点Results > Graphics > Contours ,弹出如下图所示对话框
- 在弹出的对话框中进行如下图所示设置
点击Display按钮显示冲蚀云图,如下图所示。
17 导出数据到CFD-POST
点击Display按钮显示冲蚀云图,如下图所示。
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捕捉相界面问题的主要内容,如果未能解决你的问题,请参考以下文章
我是新手,想用Gambit软件生成一个简单的网格到Fluent中怎么办啊,不是田字形的,求帮忙
用fluent 中Vof求解瞬态可压缩气体冲击液面问题,进口为压力进口,出口为压力出口。