首页/文章/ 详情

VirtualFlow | 如何利用UDF功能更好实现复杂流体仿真?

6月前浏览2415
用户自定义函数(User-defined functions),顾名思义,用户自己定义的函数,根据每个人的实际需要,自己定义函数、源项或修改边界条件加载到软件中,得到自己想要的结果。VirtualFlow不仅有强大的网格技术和丰富的求解模型,还具有先进的用户自定义功能。
SIMPOP
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-ε 模型,求解类型为非稳态求解。

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

       
储水池初始化条件设置        

在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软件不仅提供了多种后处理的模板供用户使用,而且用户可根据需要,对想要的结果进行定制化编写。

来源:多相流在线
多相流UDF湍流VirtualFlow
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2023-11-01
最近编辑:6月前
积鼎科技
联系我们13162025768
获赞 97粉丝 81文章 246课程 0
点赞
收藏
未登录
还没有评论

课程
培训
服务
行家

VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈