积鼎CFD:如何利用UDF功能更好实现复杂流体仿真?

用户自定义函数(User-defined functions),顾名思义,用户自己定义的函数,根据每个人的实际需要,自己定义函数、源项或修改边界条件加载到软件中,得到自己想要的结果。VirtualFlow不仅有强大的网格技术和丰富的求解模型,还具有先进的用户自定义功能。

VirtualFlow是通过编写C++来创建用户自定义函数(UDF)的,可调用不同类型的UDF,具体如下:

—阻力系数、升力系数、壁面润滑力系数、粘度

—Paraview定制输出变量

—求解调整:

Begin Iteration 每次迭代前执行 UDF;

End Iteration 每次迭代后执行 UDF;

Initialization 每次初始化执行 UDF;

Simulation Begin 计算前执行 UDF;

Simulation End 计算后执行 UDF;

Output Frequency 每n个迭代步或时间步长执行 UDF;

Before Solver 初始化之后,计算之前执行 UDF;

Every Time Step 每个时间步执行 UDF;

Every Particle Substep 每次求解颗粒步时执行 UDF;

Every Iteration 每个迭代步执行 UDF。

—源项。如质量源项、动量源项、能量源项、湍动能和耗散率源项等。

下面通过具体的案例展示VirtualFlow用户自定义函数操作,如下图所示,模拟储水池中的水通过两台泵吸出过程,VirtualFlow用户自定义函数主要包括以下:

储水池初始化条件设置

用户自定义函数设置随时间变化域内水的质量

储水池结构示意图

模型建立

对储水池计算域进行网格划分,采用VirtualFlow笛卡尔网格技术结合分块网格优化,对计算域分为4个块(block)。

储水池网格

储水池仿真边界条件

模型设置

采用均相多相流进行模拟,两相分别为水和空气,湍流模型为RANS k-ε 模型,求解类型为非稳态求解。

对于两相流,初始界面需要指定,为了给出相的初始位置和初始压力分布,需要对其进行初始化,在此模型中,y_{c}=0.25m为界面位置,y>y_{c}的区域为空气,y<y_{c}的区域为水。

储水池初始化条件设置

在VirtualFlow中,初始化分为普通初始化和高级初始化,该案例设置涉及到复杂边界的初始化,需采用高级初始化条件,创建一个C++子程序,命名为initialconditions.cxx,将此程序文件复制到计算文件夹中,在软件执行窗口点击初始化编译按钮,即可将初始化程序编译到软件中。

VirtualFlow高级初始化按钮

UDF设置随时间变化域内水的质量

此案例中我们想要得到区域内水质量随时间的变化情况,可通过UDF的方式实现,UDF需要准备头文件mass_output.h和主程序文件mass_output.cxx两个文件,其中主程序主要包括变量声明、数据更新计算以及数据输出三部分。

在User Defined Functions窗口添加用户自定义函数,VirtualFlow为用户创建自定义函数提供了很多模板,用户可直接进行添加,如下图所示。

VirtualFlow的UDF模板

当计算结束后,就会产生相应的数据结果文件test_output.dat,数据可以通过Office或文本编辑打开。

模拟结果

在t=0s时的水的体积分数

在t=2s时的水的体积分数

水的质量随时间变化而变化

图1和图2可知,初始水的体积分数随着时间不断减少,图3为储水池内的水的质量随时间变化曲线,可以看到由于泵的吸力水的质量随着时间线性减少,且VirtualFlow得到的结果与解析解结果一致。

总结

通过对储水池的抽水仿真说明了VirtualFlow软件的用户自定义函数功能,VirtualFlow软件不仅提供了多种后处理的模板供用户使用,而且用户可根据需要,对想要的结果进行定制化编写。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值