美文网首页
基于coalChemistryFoam的稠密气固两相求解器开发(

基于coalChemistryFoam的稠密气固两相求解器开发(

作者: charryzzz | 来源:发表于2021-01-11 10:58 被阅读0次

基于coalChemistryFoam的稠密气固两相求解器开发

前文链接:这里请插入上一篇的链接(基于coalChemistryFoam的稠密气固两相求解器开发)

今天和大家继续学习出自Chalmers University of Technology的OpenFOAM课程学生报告

在完成连续相体积分数\alpha的定义之后,我们需要修改原先coalChemistryFoam求解器中的湍流模型,在createFields.H文件中定义了求解器的湍流模型:

Info<< "Creating turbulence model\n" << endl;
autoPtr<compressible::turbulenceModel> turbulence
(
    compressible::turbulenceModel::New
    (
        rho,
        U,
        phi,
        thermo
    )
);

coalChemistryFoam求解器使用的湍流模型是compressible::turbulenceModel::New,其定义在 $FOAM_SRC/TurbulenceModels/compressible/turbulentFluidThermoModels/turbulentFluidThermoModel.H(因为在求解器主文件coalChemistryFoam.C中该头文件被包括)

namespace compressible
{
    typedef ThermalDiffusivity<CompressibleTurbulenceModel<fluidThermo>> turbulenceModel;

该湍流模型是继承CompressibleTurbulenceModel,其中连续相密度仍用\rho描述,并没有包含体积分数\alpha的信息,所以我们需要建立一个新的,继承PhaseCompressibleTurbulenceModel的湍流模型,并使用fluidThermo作为transportModel,仿照turbulentFluidThermoModels文件夹中的文件,我们可以定义一个新的coalChemistryTurbulenceModel模型,这里作者将文件结构做了一些修改:

. // 原turbulentFluidThermoModels 目录
├── derivedFvPatchFields // 边界条件不变
├── makeTurbulenceModel.H // 不变
├── turbulentFluidThermoModel.C 
├── turbulentFluidThermoModel.H
├── turbulentFluidThermoModels.C
└── turbulentFluidThermoModels.H
. // coalChemistryFoam目录
├── coalChemistryTurbulenceModelFwd.H // 可以不用
├── coalChemistryTurbulenceModel.H
├── coalChemistryTurbulenceModels.C

作者将turbulentFluidThermoModels.C 与 turbulentFluidThermoModels.H 合并为coalChemistryTurbulenceModels.C,并删掉了coalChemistryTurbulenceModel.C,至于coalChemistryTurbulenceModel.C的作用目前还是不很清楚,因为我尝试了在OF源代码中删去这一部分,编译下来也没有问题,有了解的小伙伴可以后台留言讨论。

coalChemistryTurbulenceModel.H 内容如下:

#ifndef coalChemistryTurbulenceModel_H
#define coalChemistryTurbulenceModel_H

#include "coalChemistryTurbulenceModelFwd.H" // 这个文件可以不用
#include "PhaseCompressibleTurbulenceModel.H"
#include "ThermalDiffusivity.H"
#include "fluidThermo.H"

// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

namespace Foam
{
      typedef ThermalDiffusivity<PhaseCompressibleTurbulenceModel<fluidThermo>>
          coalChemistryTurbulenceModel;
}

// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

#endif

可以看出现在的coalChemistryTurbulenceModel是PhaseCompressibleTurbulenceModel的子类,然后作者在coalChemistryTurbulenceModels.C中定义了湍流子模型,包括各种RANS模型和LES模型。
通过对比魔改前后的***Models.C文件可以发现:

 makeBaseTurbulenceModel // 魔改前
 (
     geometricOneField, // 返回单位 1
     volScalarField,
     compressibleTurbulenceModel,
     CompressibleTurbulenceModel,
     ThermalDiffusivity,
     fluidThermo
 );
makeBaseTurbulenceModel // 魔改后
(
    volScalarField,
    volScalarField,
    compressibleTurbulenceModel,
    PhaseCompressibleTurbulenceModel,
    ThermalDiffusivity,
    fluidThermo
);

修改后的湍流模型中的增加了一个volScalarField参数,就是连续相的体积分数场。

修改后湍流模型之后,剩下的任务就是魔改控制方程的求解了,在上一期文章中已给出了控制方程的具体表达式,下面以较为复杂的动量方程为例,分析代码的实现方法

// Uc rhoc分别为定义在creatFields.H中的连续相密度和速度
UcEqn = 
 (
     fvm::ddt(alphac, rhoc, Uc) // 时间项
   + fvm::div(alphaRhoPhic, Uc) // 对流项
   + MRF.DDt(alphac*rhoc, Uc) // 旋转体的附加项
   + turbulence->divDevRhoReff(Uc) // 湍流模型
  ==
     alphac*rhoc()*g // 重力
   + coalParcels.SU(Uc) // 颗粒coalParcels与气相的动量交换
   + limestoneParcels.SU(Uc) // 颗粒limestoneParcels与气相的动量交换 
   + fvOptions(rhoc, Uc) // fvOptions表示附加源项,可用作点火源
);

    UcEqn.relax();

    fvOptions.constrain(UcEqn);

    if (pimple.momentumPredictor())
    {
        solve(UcEqn == -alphac*fvc::grad(p)); // 压力梯度项

        fvOptions.correct(Uc);
        Kc = 0.5*magSqr(Uc);
    }

值得注意的一点是,除了颗粒的源项外,动量方程所有的项都经过了体积分数\alpha的修正,因为作者没有提供lagrangian类的具体实现方法,所以具体颗粒源项有没有修改不得而知,但根据lagrangian类的源项计算方法
\dot{S}_{C, u_{i}}=-\frac{1}{V} \sum_{j}^{n}\left[\frac{d\left(m_{p} u_{p, i}\right)}{d t}\right]_{j}
离散相作用于连续相的源项等于网格内所有颗粒产生源项的和对时间的导数,再除以网格的体积,但如果颗粒的体积分数不能忽略,那么应该除以网格当地的连续相体积分数与网格体积之积,即为
\dot{S}_{C, u_{i}}=-\frac{1}{\alpha_cV} \sum_{j}^{n}\left[\frac{d\left(m_{p} u_{p, i}\right)}{d t}\right]_{j}

最后小结一下,这篇学生报告在coalChemistryFoam求解器的基础上,通过增加离散相体积分数使修改后的求解器能适用于稠密气固两相反应流,我们可以借鉴这种思路去二次开发诸如针对稠密多相流的求解器或者针对某些颗粒并不稠密但本身体积相比网格来说不能忽略的求解器,但这里有一些问题需要注意

  1. 如果颗粒体积过大,可能拉格朗日的基本假设就不再成立
  2. 在某一网格内如果连续相的体积分数过小,则可能会造成由于颗粒源项过大而发散的问题
  3. 颗粒尺寸和网格尺寸的相关性问题

关于以上问题,感兴趣的小伙伴可以参考这篇报告的作者后来发表在顶刊Chemical Engineering Journal上的文章

相关文章

  • 基于coalChemistryFoam的稠密气固两相求解器开发(

    基于coalChemistryFoam的稠密气固两相求解器开发 前文链接:这里请插入上一篇的链接(基于coalCh...

  • 基于coalChemistryFoam的稠密气固两相求解器开发(

    基于coalChemistryFoam的稠密气固两相求解器开发 今天和大家一起学习一篇出自于Chalmers Un...

  • 新工具Get-Z3求解器

    首先z3求解器是什么呢? 它是由微软公司开发的一个优秀的SMT求解器(也就定理证明器),它能够检查逻辑表达式的可满...

  • 真空除气器

    真空除气器又称负压除气器,真空除气器在整个钻井液固控系统中平衡钻井压力起到了重要的的作用,能够有效清除泥浆中的有害...

  • MAC OS下安装和使用aspect

    aspect是目前比较活跃的地幔对流求解器,基于Deallii。 安装Dealii 在mac系统下安装也很简单,直...

  • OpenFOAM程序开发入门(3)

    六、OpenFOAM程序开发――求解器的详细分析1 进入icoFoam目录,可以看到createFields.H ...

  • 容不下

    是物有空间,可融什么先?性质未改变,物理反应点;升器大装小,同类状态前;固装液气多,液气固里面;思域有多大,浩瀚无...

  • 迷茫期

    整个实验思路还是没理顺,测了那些参数,最终还是达不到解决问题的目的。 也是,1957年至今,关于气固两相流的研究就...

  • chromium和cef的区别

    1 浏览器开发内核讨论 为何市场上的浏览器多数基于chromium开源代码而不是cef开发,基于此问题展开讨论,...

  • blockMesh-四分之一同心圆柱体网格

    最近需要仿真一个带有coflow的气固两相流射流火焰,其中气相采用DNS,如果进行完整计算域的CFD,网格量在千万...

网友评论

      本文标题:基于coalChemistryFoam的稠密气固两相求解器开发(

      本文链接:https://www.haomeiwen.com/subject/elnsoktx.html