FSI两相流求解器

知乎:多相流在线

原文地址:https://zhuanlan.zhihu.com/p/145583827

 

上期内容主要分享了流固耦合(FSI)数值模拟方法以及OpenFOAM中的FSI工具包,但其流体求解器仅支持单相流模拟,极大地限制了工程应用。本期内容将介绍如何添加基于interFoam的两相流流体求解器,并结合wave2Foam工具进行波浪属性、波浪与大尺度浮冰的相互作用模拟。

技 术 路 线

FSI工具包扩展开发路线主要分为3步(如图1):

图1 FSI工具包扩展开发路线

01 开发流体两相求解器

基于两相interFoam求解器,在原版工具包的src / fluidSolidInteraction / fluidSolvers 文件夹下编译新的interFluid类;

02 添加波浪模型

基于波浪waveFoam求解器,对比其和interFoam区别,编译波浪模拟相关模型到interFluid类中,并重命名interFluid类为waveInterFluid类;

03 编译新的流固耦合求解器

基于fsiFoam求解器,添加波浪模型所需的依赖库,在原版工具包src/solvers文件夹下编译新的waveFsiFoam求解器。

 

所需材料

 

开发流体两相求解器

上期文章提到,流固耦合求解器fsiFoam主程序通过fsi.flow().evolve()方法来调用流体求解器,因此我们需要把interFoam.C实现的功能添加到interFluid.C的evolve()方法中,如图2。

图2 interFluid源代码

格式与内容基本与interFoam.C一致,其中的一些include文件为了避免与源代码冲突,进行了重命名与微调,例如interAlphaEqnSubCycle.H。

变量的声明文件以及相应库的头文件均在interFluid.H中定义。

添加波浪模型

波浪实际上只是自由液面的再分布。wave2Foam采用了relaxation zone模型进行数值造波,该模型还具有防止进出口边界的反射波扰动的特性。其机制为基于速度和标记相实际求解值和目标求解值的空间权重因子对动量方程进行修正以达到指定的波浪属性。

χ为空间权重因子;Øcomputed为N-S和VOF方程中求得的速度和标记相的数值求解;Øtarget为指定波浪的目标值;χ=0表示全部为目标解,χ=1表示全部为数值解。

relaxation zone示意如图3,其中:

  • I 区为造波区,从0到1递增,获得指定波浪属性;
  • 中间区为数值波区,稳定为1,用于数值模拟;
  • II 区为消波区,从1到0递减,消除扰动波的影响。

图3 relaxation zone示意图

空间权重因子随局部坐标系变化而变化,可采用以下指数模型表达:

ξ为局部坐标值;β为幂指数,默认为定值3.5。

回到源代码,waveFoam和interFoam求解器主程序对比如图4,可以看出waveFoam在进行压力-速度耦合前执行了relaxing.correct()指令来达到造波效果。

图4 waveFoam和interFoam源代码对比

因此我们只需要把relaxing.correct()代码添加到interFluid.C中,相应的头文件在interFluid.H中声明即可。添加完成后重命名为waveInterFluid进行编译。

编译流固耦合求解器

由于新增的waveInterFluid流体求解器,调取了wave2Foam工具包中的文件,wave2foam库需要与流固耦合求解器waveFsiFoam建立连接,因此修改Make/options文件为图5:

图5 waveFsiFoam/Make/options文件修改

算 例 示 例

算例在自带的教程beamInCrossFlow的基础上进行修改,波浪属性可以在constant / waveProperties.input中进行设置,如波面位置seaLevel,波形waveType,周期period,波高height等,如图6,得到的模拟计算结果见图7。

图6 波浪属性设置

图7 模拟结果

该求解器也可应用于研究波浪与大尺度浮冰的相互作用,模拟结果示意图见图8:

图8 波浪与大尺度浮冰的相互作用

posted @ 2020-12-26 20:51  Lagomgom  阅读(555)  评论(0)    收藏  举报