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. VOF方法给气相添加组分方程,液相部分存在组分,怎么解决

VOF方法给气相添加组分方程,液相部分存在组分,怎么解决

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

    使用compressibleInterFoam,给气相添加组分方程,如下:

    {
        volScalarField Yt(0.0*Y[0]);
    
        alpharho2 =  alpha2*rho2;
        volScalarField alphamuEff("alphamuEff",alpha2*turbulence.muEff());
    
        forAll(Y, i)
        {
            if (i != inertIndex && i != liquidIndex && composition.active(i))
            {
                volScalarField& Yi = Y[i];
    
                fvScalarMatrix YEqn
                (
                    fvm::ddt(alpharho2, Yi)
                  + fvm::div(alpharho2Phi, Yi)
                  - fvm::laplacian(alphamuEff, Yi)
                 ==
                  fvOptions(rho, Yi)
                );
    
                YEqn.relax();
    
                fvOptions.constrain(YEqn);
    
                YEqn.solve("Yi");
    
                fvOptions.correct(Yi);
    
                Yi.max(0.0);
                Yt += Yi;
            }
        }
    
        Y[inertIndex] = scalar(1) - Yt;
        Y[inertIndex].max(0.0);
    
    }
    

    对一个简单的横向射流的算例进行计算,横向流入均匀速度空气(组分只有N2和O2),垂直向上射入水,下图分别为相体积分数和O2的质量分数,在相体积分数为1的部分,为什么还会有气体组分呢。
    df9b3b13-f966-4d03-a40e-d1b016af78c3-image.png
    9bda7341-3276-4334-9728-2ca6e482684f-image.png

    李东岳李 L R 3 条回复 最后回复
  • 李东岳李 离线
    李东岳李 离线
    李东岳 管理员
    在 中回复了 Tens 最后由 编辑
    #2

    @tens 按照你这样植入是避免不了的,需要特殊的算法,推荐你看这个文章 https://www.jianguoyun.com/p/DZ3nYjMQwr6YCBiuyYAE

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

    T 1 条回复 最后回复
  • T 离线
    T 离线
    Tens 神
    在 中回复了 李东岳 最后由 编辑
    #3

    @李东岳 谢谢东岳老师,我研究一下

    1 条回复 最后回复
  • L 在线
    L 在线
    lrl3512
    在 中回复了 Tens 最后由 编辑
    #4

    @Tens 您好,请问一下组分方程解决了吗

    T 1 条回复 最后回复
  • T 离线
    T 离线
    Tens 神
    在 中回复了 lrl3512 最后由 编辑
    #5

    @lrl3512 太复杂了,后面没再弄了

    L 1 条回复 最后回复
  • L 在线
    L 在线
    lrl3512
    在 中回复了 Tens 最后由 编辑
    #6

    @Tens 我参考了icoreactingmultiphasefoam办法,采用mules求解组分方程,您看一下这样可行吗?
    https://cfd-china.com/topic/6366/关于在compressibleinterfoam中添加组分方程

    1 条回复 最后回复
  • R 离线
    R 离线
    Rachel0096
    在 中回复了 Tens 最后由 编辑
    #7

    @Tens 您好,我参考了phaseScalarTransport.C的方法,人为地乘以了alpha来区分界面,您看这样合理嘛?但是在求解过程中,当来流温度过高时,会出现局部质量分数过大的问题,非常困惑
    phaseScalarTransport.C:

    if (phi.dimensions() == dimMass/dimTime)
        {
            const volScalarField& rho =
                mesh_.lookupObject<volScalarField>(rhoName_);
    
            while (control.correctNonOrthogonal())
            {
                fvScalarMatrix PhiEqn
                (
                    fvm::laplacian(Phi, laplacianScheme)
                  + fvc::ddt(rho, alpha)
                  + fvc::div(alphaPhi)
                );
    
                PhiEqn.solve(pName_);
    
                if (control.finalNonOrthogonalIter())
                {
                    alphaPhi += PhiEqn.flux();
                }
            }
    if (alphaPhi.dimensions() == dimMass/dimTime)
        {
            const volScalarField& rho =
                mesh_.lookupObject<volScalarField>(rhoName_);
    
            for (int i=0; i<=nCorr_; i++)
            {
                fvScalarMatrix fieldEqn
                (
                    fvm::ddt(alpha, rho, s_)
                  + fvm::div(alphaPhi, s_, divScheme)
                  - fvm::laplacian
                    (
                        fvc::interpolate(alpha)*fvc::interpolate(D),
                        s_,
                        laplacianScheme
                    )
                 ==
                    fvOptions_(alpha, rho, s_)
                  - fvm::ddt(residualAlpha_*rho, s_)
                  + fvc::ddt(residualAlpha_*rho, s_)
                );
    
                fieldEqn.relax(relaxCoeff);
                fvOptions_.constrain(fieldEqn);
                fieldEqn.solve(schemesField_);
            }
    
    
     if (!alphaSPtr_.valid())
            {
                alphaSPtr_.set
                (
                    new volScalarField
                    (
                        IOobject
                        (
                            "alpha"
                          + word(toupper(fieldName_[0]))
                          + fieldName_(1, fieldName_.size() - 1),
                            mesh_.time().timeName(),
                            mesh_,
                            IOobject::NO_READ,
                            IOobject::AUTO_WRITE
                        ),
                        mesh_,
                        dimensionedScalar(s_.dimensions(), Zero)
                    )
                );
            }
    
            alphaSPtr_() = alpha*s_;//人为地乘以alpha
    

    524e651f-2e76-42b3-83ee-3b9fb49efd53-image.png

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

    https://link.springer.com/article/10.1007/s11440-023-01982-6 可以看下这个文章

    我参考了phaseScalarTransport.C的方法,人为地乘以了alpha来区分界面

    这个也不是特别的稳定。

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

    1 条回复 最后回复

  • 登录

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