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

基于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上的文章

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,634评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,951评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,427评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,770评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,835评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,799评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,768评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,544评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,979评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,271评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,427评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,121评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,756评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,375评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,579评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,410评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,315评论 2 352

推荐阅读更多精彩内容