Skip to content
  • 最新
  • 版块
  • 东岳流体
  • 随机看[请狂点我]
皮肤
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • 默认(不使用皮肤)
  • 不使用皮肤
折叠
CFD中文网

CFD中文网

  1. CFD中文网
  2. OpenFOAM
  3. 关于OpenFOAM中,多相流守恒性与鲁棒性的讨论

关于OpenFOAM中,多相流守恒性与鲁棒性的讨论

已定时 已固定 已锁定 已移动 OpenFOAM
6 帖子 3 发布者 4.3k 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
回复
  • 在新帖中回复
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • 四 离线
    四 离线
    四季之中的隐星
    写于 最后由 编辑
    #1

    首先,我们假设一个速度恒定,不考虑压力和体积力,但考虑相变的两相流动过程,此时,k相的控制方程有:
    36ac3b8b-8738-4767-9750-bfd88c33bcef-image.png
    0a9cb944-ad54-42da-8e43-e15076a2a43c-image.png
    其中的Sk表示k相的源项。我们知道,对于一个小网格内,Sk如果较大,而从气到液体或者液体到气体的相变过程势必会在网格上引起额外的对流通量,因为相变会使得体积发生变化。
    在OpenFOAM中所使用的欧拉多相流求解器multiphaseEulerFoam中,相分数方程并未做额外处理,但是在能量方程中,却多了一项,具体的有:
    in file AnisothermalPhaseModel.C

    ···
        const tmp<volScalarField> tcontErr(this->continuityError());
        const volScalarField& contErr(tcontErr());
    ···
        tmp<fvScalarMatrix> tEEqn
        (
            fvm::ddt(alpha, rho, he)
          + fvm::div(alphaRhoPhi, he)
          - fvm::Sp(contErr, he)
    
          + fvc::ddt(alpha, rho, K) + fvc::div(alphaRhoPhi, K)
          - contErr*K
    
          + this->divq(he)
         ==
            alpha*this->Qdot()
        );
    

    其中,continuityError()为
    in file MovingPhaseModel.C

    template<class BasePhaseModel>
    void Foam::MovingPhaseModel<BasePhaseModel>::correctContinuityError
    (
        const volScalarField& source
    )
    {
        volScalarField& rho = this->thermoRef().rho();
    
        continuityError_ = fvc::ddt(*this, rho) + fvc::div(alphaRhoPhi_) - source;
    }
    

    不难看出,当相变/源项存在时,为了防止体积溢出的部分的能量影响网格内能量的计算,添加了一个额外的连续性修正项contErr来消除溢出项的影响(实际上动量方程中也添加了该项)。但是,这样的方式显然会破坏全场内的能量与质量守恒,两相条件蒸发,网格内产生的膨胀体积应当输运到其他网格中,但是这样的处理方式显然没有对该过程进行考虑。
    因为膨胀引起网格面额外通量的分析和计算过程本身十分复杂,考虑起来非常困难,因此只能牺牲一些守恒性换来鲁棒性。但是无论在openfoamwiki中的理论手册、李东岳老师还是其他商业软件中都没有把这一项写在理论说明的文档里。想请教一下各位老师和学者,这样的处理方式是两相求解领域的共识吗?

    T 1 条回复 最后回复
  • 李东岳李 离线
    李东岳李 离线
    李东岳 管理员
    写于 最后由 编辑
    #2

    其中的Sk表示k相的源项。我们知道,对于一个小网格内,Sk如果较大,而从气到液体或者液体到气体的相变过程势必会在网格上引起额外的对流通量,因为相变会使得体积发生变化。

    这方面算法我没有看的太细。但是物理上是应该这个样子。openfoam这面怎么处理的?是某个网格k相体积分数到1之后,就进入到其他的网格单元了么。那周围网格单元的量是怎么分配的呢

    http://dyfluid.com/index.html
    需要帮助debug算例的看这个 https://cfd-china.com/topic/8018

    四 1 条回复 最后回复
  • T 离线
    T 离线
    Tens 神
    在 中回复了 四季之中的隐星 最后由 编辑
    #3

    @四季之中的隐星 不太了解multiphaseEulerFoam这个求解器,但是在compressibleInterFoam中,膨胀体积在相体积分数方程中好像是通过源项dgdt,然后MULES修正来处理的。
    参考CompressibleInterFoam解析
    我看phaseSystemSolve.C文件中好像也这样进行处理了

    四 1 条回复 最后回复
  • 四 离线
    四 离线
    四季之中的隐星
    在 中回复了 Tens 最后由 编辑
    #4

    @Tens dgdt是可压缩性项,而非源项项目,对应在李东岳老师的说明里是这个部分
    a744983b-09df-48e7-aa56-ea6239dd10fd-image.png

    1 条回复 最后回复
  • 四 离线
    四 离线
    四季之中的隐星
    在 中回复了 李东岳 最后由 编辑
    #5

    @李东岳 我目前感觉是在压力方程中进行了一下处理,但是我不太确定。这一项和原始动量方程,以及和连续性方程,能量方程的迭代修正方式。在压力方程中有个这个
    87fe1464-ea73-472c-9aac-693b93bc4f4e-image.png
    这里面的dmdt就是实际上的源项,但是我目前还没看太明白,他怎么迭代回去到能量和连续性方程,以及这一项怎么和速度联系的。 最近还有一些其他的事情,这块代码啃的比较慢

    李东岳李 1 条回复 最后回复
  • 李东岳李 离线
    李东岳李 离线
    李东岳 管理员
    在 中回复了 四季之中的隐星 最后由 编辑
    #6

    压力方程其实就是连续型方程。所以如果压力方程里面有源项,那说明连续性方程那面有了生成,可以理解。就是不知道他这个是怎么分配的。比如一个四边形2D的P网格单元,会有4个相邻单元。那这4个相邻单元的生成都是一样的么?看起来是通过dmdt来控制的。那我估计这个相邻单元的分配,dmdt在这4个网格单元应该不一样。并且应该是通量导致的dmdt变化。

    http://dyfluid.com/index.html
    需要帮助debug算例的看这个 https://cfd-china.com/topic/8018

    1 条回复 最后回复

  • 登录

  • 登录或注册以进行搜索。
  • 第一个帖子
    最后一个帖子
0
  • 最新
  • 版块
  • 东岳流体
  • 随机看[请狂点我]