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. MPPICInterFoam 中如何通过alphac得到alpha1和alpha2?

MPPICInterFoam 中如何通过alphac得到alpha1和alpha2?

已定时 已固定 已锁定 已移动 OpenFOAM
45 帖子 5 发布者 29.9k 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
回复
  • 在新帖中回复
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • Z 离线
    Z 离线
    zhouxu
    在 2022年4月29日 01:14 中回复了 Tens 最后由 编辑
    #13

    @tens 膜拜大佬的作息

    1 条回复 最后回复
  • T 离线
    T 离线
    Tens 神
    在 2022年4月29日 01:48 中回复了 Jasper 0 最后由 编辑
    #14

    @jasper-0 难道讲的不好理解吗:135:
    因为alpha1和alpha2是占连续相的而不是总的,连续相中只有液相或者气相,所以除了液相(alpha1)就是气相(alpha2=1-alpha1),这个1不是总体积,而是总的连续相。
    换个意思说,如果全部是占总体积的分数,颗粒为1-alphac,连续液相为alpha1*alphac,连续气相为alpha2 * alphac

    1 条回复 最后回复
  • J 离线
    J 离线
    Jasper 0
    写于2022年4月29日 05:45 最后由 编辑
    #15

    @tens 感谢大佬的解答!也就是说通过以下代码求得的alpha1是占连续相的体积分数?那最后结果跑出来后要想得到总的alpha1是不是要在paraview里面做计算alpha1*alphac?

     MULES::explicitSolve
    
                (
    
                    alphac,
    
                    alpha1,
    
                    phiCN,
    
                    alphaPhi10,
    
                    Sp,
    
                    (Su + divU*min(alpha1(), scalar(1)))(),
    
                    oneField(),
    
                    zeroField()
    
                );
    
            }
    
    T J 2 条回复 最后回复 2022年4月29日 06:53
  • T 离线
    T 离线
    Tens 神
    在 2022年4月29日 06:53 中回复了 Jasper 0 最后由 编辑
    #16

    @jasper-0 是的吧

    J 1 条回复 最后回复 2022年4月29日 07:27
  • J 离线
    J 离线
    Jasper 0
    在 2022年4月29日 07:27 中回复了 Tens 最后由 编辑
    #17

    @tens 多谢大佬!:146:

    1 条回复 最后回复
  • J 离线
    J 离线
    Jasper 0
    在 2022年4月29日 07:52 中回复了 Jasper 0 最后由 编辑
    #18

    @jasper-0 在 MPPICInterFoam 中如何通过alphac得到alpha1和alpha2? 中说:

    @tens 感谢大佬的解答!也就是说通过以下代码求得的alpha1是占连续相的体积分数?那最后结果跑出来后要想得到总的alpha1是不是要在paraview里面做计算alpha1*alphac?

     MULES::explicitSolve
    
                (
    
                    alphac,
    
                    alpha1,
    
                    phiCN,
    
                    alphaPhi10,
    
                    Sp,
    
                    (Su + divU*min(alpha1(), scalar(1)))(),
    
                    oneField(),
    
                    zeroField()
    
                );
    
            }
    

    我发现interFoam中alpha1(即alpha1)的求解对应下面这个公式,
    fc8b4830-ff2d-443a-963e-2296c8a0dd98-image.png
    而MPPICInterFoam中通过以上代码求得的alphan为
    02fcca20-ece1-40c3-887e-2300c61638e5-image.png
    公式右边第二项ca41a44d-3aca-4f4c-a1fa-fb6db0acee7d-image.png 是用alpha占连续相的体积分数算出来的,
    而2e01bf25-6b01-4028-bc0c-7ba891a59490-image.png 和d27bc105-6b30-492f-a60a-83197f4a6f52-image.png 都是总的相分数,

    所以此方程右边第二项是不是应该乘以个alphac呢?即
    c6f853e2-97b5-4810-ba56-dbd5f2ba9053-image.png
    还望大佬解答一下,万分感谢!

    T 1 条回复 最后回复 2022年4月29日 11:10
  • T 离线
    T 离线
    Tens 神
    在 2022年4月29日 11:10 中回复了 Jasper 0 最后由 Tens 编辑 2022年4月29日 19:19
    #19

    @jasper-0 这个公式是哪里看到的,字母对应的意义不理解,在程序中相体积分数应该是通过控制方程求的吧

    fvScalarMatrix alpha1Eqn
            (
                (
                    LTS
                  ? fv::localEulerDdtScheme<scalar>(mesh).fvmDdt(alphac, alpha1)
                  : fv::EulerDdtScheme<scalar>(mesh).fvmDdt(alpha1)
                )
              + fv::gaussConvectionScheme<scalar>
                (
                    mesh,
                    phiCN,
                    upwind<scalar>(mesh, phiCN)
                ).fvmDiv(phiCN, alpha1)
             - fvm::Sp(fvc::ddt(alphac) + fvc::div(phiCN), alpha1)
             ==
                Su + fvm::Sp(Sp + divU, alpha1)
            );
    
            alpha1Eqn.solve();
    

    c1a86900-c8cb-4725-8012-786156c338bc-image.png

    J 1 条回复 最后回复 2022年4月29日 11:27
  • J 离线
    J 离线
    Jasper 0
    在 2022年4月29日 11:27 中回复了 Tens 最后由 编辑
    #20

    @tens 这一步应该是用upwind格式求出来alpha1之后然后下面再通过MULES::correct进行修正。如果不进行修正的话,就是我之前提到的MULES::explicitSolve,在MULESTemplates.C里面定义了这个函数:

    template<class RdeltaTType, class RhoType, class SpType, class SuType>
    void Foam::MULES::explicitSolve
    (
    const RdeltaTType& rDeltaT,
    const RhoType& rho,
    volScalarField& psi,
    const surfaceScalarField& phiPsi,
    const SpType& Sp,
    const SuType& Su
    )
    {
    Info<< "MULES: Solving for " << psi.name() << endl;
    const fvMesh& mesh = psi.mesh();
    scalarField& psiIf = psi;
    const scalarField& psi0 = psi.oldTime();
    psiIf = 0.0;
    fvc::surfaceIntegrate(psiIf, phiPsi);
    if (mesh.moving())
    {
    psiIf =
    (
    mesh.Vsc0()().field()*rho.oldTime().field()
    *psi0*rDeltaT/mesh.Vsc()().field()
    + Su.field()
    - psiIf
    )/(rho.field()*rDeltaT - Sp.field());
    }
    else
    {
    psiIf =
    (
    rho.oldTime().field()*psi0*rDeltaT
    + Su.field()
    - psiIf
    )/(rho.field()*rDeltaT - Sp.field());
    }
    psi.correctBoundaryConditions();
    }

    其中

     psiIf =
         (
             rho.oldTime().field()*psi0*rDeltaT
           + Su.field()
           - psiIf
         )/(rho.field()*rDeltaT - Sp.field());
    

    就是我上面提到的方程f0e20d8f-9383-4c9d-b4e4-9b8533c8c69c-image.png
    alphan应该就是最终求得的新的时间步的体积分数

    T 1 条回复 最后回复 2022年4月29日 13:44
  • T 离线
    T 离线
    Tens 神
    在 2022年4月29日 13:44 中回复了 Jasper 0 最后由 Tens 编辑 2022年4月29日 21:47
    #21

    @jasper-0
    0e85dbdf-ee3c-449b-ac56-b0e366bf4679-image.png
    懂了,现在就是说是红色部分的问题对吧,我看了代码中这部分是通过下面代码求的

    fvc::surfaceIntegrate(psiIf, phiPsi)
    

    而里面的phiPsi则对应的这一部分
    87b34b23-8ec8-40f0-bb9e-001511b06be6-image.png
    通过追踪

    alphaPhi10 = talphaPhi1Un;
    
    //又查到
    
    tmp<surfaceScalarField> talphaPhi1Un
            (
                fvc::flux
                (
                    phiCN(),
                    cnCoeff*alpha1 + (1.0 - cnCoeff)*alpha1.oldTime(),
                    alphaScheme
                )
              + fvc::flux
                (
                   -fvc::flux(-phir, alpha2, alpharScheme),
                    alpha1,
                    alpharScheme
                )
            );
    

    而其中的phiCN则

    tmp<surfaceScalarField> phiCN(alphaPhic);
    // Calculate the Crank-Nicolson off-centred volumetric flux
    if (ocCoeff > 0)
    {
    phiCN = cnCoeff*alphaPhic + (1.0 - cnCoeff)*alphaPhic.oldTime();
    }

    如果不采用CN格式phiCN就等于alphaPhic,又查到

     alphacf = fvc::interpolate(alphac);
    alphaPhic = alphacf*phi;
    

    所以本质上图一中红色部分还是通过alphac*alpha1得到的

    J 2 条回复 最后回复 2022年4月29日 13:55
  • J 离线
    J 离线
    Jasper 0
    在 2022年4月29日 13:55 中回复了 Tens 最后由 编辑
    #22

    @tens 懂了懂了,大佬牛!:146:

    T Z 2 条回复 最后回复 2022年4月29日 14:11
  • T 离线
    T 离线
    Tens 神
    在 2022年4月29日 14:11 中回复了 Jasper 0 最后由 编辑
    #23

    @jasper-0
    互相交流,以前从没这么认真的看过这么底层的东西,这次也学到了很多:chitang:

    J 1 条回复 最后回复 2022年4月29日 14:15
  • J 离线
    J 离线
    Jasper 0
    在 2022年4月29日 14:15 中回复了 Tens 最后由 编辑
    #24

    @tens :chouchou:

    1 条回复 最后回复
  • Z 离线
    Z 离线
    zhe
    在 2022年5月13日 08:11 中回复了 Jasper 0 最后由 编辑
    #25

    @jasper-0 你好,看到你这个问题却是很有意思。解释的code与公式对应起来了。但我相问一下,那么最终为什么interFoam和MPPICInterFoam的公式还是不一样啊?

    J 1 条回复 最后回复 2022年5月13日 08:26
  • J 离线
    J 离线
    Jasper 0
    在 2022年5月13日 08:26 中回复了 zhe 最后由 编辑
    #26

    @zhe MPPICInterFoam 就是多了个alphac啊,考虑拉格朗日粒子对体积分数的影响

    Z 1 条回复 最后回复 2022年5月13日 08:30
  • Z 离线
    Z 离线
    zhe
    在 2022年5月13日 08:30 中回复了 Jasper 0 最后由 编辑
    #27

    @jasper-0 换句话说,alphac在interFoam里就是1,所以可以直接省略。谢谢。

    J 1 条回复 最后回复 2022年5月13日 08:34
  • J 离线
    J 离线
    Jasper 0
    在 2022年5月13日 08:34 中回复了 zhe 最后由 编辑
    #28

    @zhe 对

    1 条回复 最后回复
  • Z 离线
    Z 离线
    zhe
    写于2022年5月14日 14:16 最后由 编辑
    #29

    我测试了一下大家说的,在MPPICInterFoam里,加入粒子。但是alpha.water和alphac是不符合逻辑的。在最底部分,应该是只有水,那么alpha的值就该都是0.38。为什么在alpha.water却是0.62?

    alpha.png

    J 1 条回复 最后回复 2022年5月15日 04:04
  • J 离线
    J 离线
    Jasper 0
    在 2022年5月15日 04:04 中回复了 zhe 最后由 编辑
    #30

    @zhe alpha.water 是占连续相的体积分数,如果没有空气只有水的话,理论上应该alpha.water都是1吧,你看看是不是你alpha.water图例显示的问题?

    Z 1 条回复 最后回复 2022年5月15日 10:30
  • Z 离线
    Z 离线
    zhe
    在 2022年5月15日 10:30 中回复了 Jasper 0 最后由 编辑
    #31

    @jasper-0 理论上,是应该这样的。我有两个问题:第一,哪里提到alpha1和aloha2只是占连续相的比值?我们希望它只是占连续相比值,但code里并没有提过吧。我是怕先入为主了,因为确实对不上。第二,你对比的alpha1的求解公式,帮助很大。但从物理意义上来说,alpha1*alphac就是考虑了粒子影响后的求解方式?它俩相乘是啥意义啊?

    1 条回复 最后回复
  • J 离线
    J 离线
    Jasper 0
    在 2022年5月16日 02:48 中回复了 Tens 最后由 编辑
    #32

    @tens 在 MPPICInterFoam 中如何通过alphac得到alpha1和alpha2? 中说:

    @jasper-0
    0e85dbdf-ee3c-449b-ac56-b0e366bf4679-image.png
    懂了,现在就是说是红色部分的问题对吧,我看了代码中这部分是通过下面代码求的

    fvc::surfaceIntegrate(psiIf, phiPsi)
    

    而里面的phiPsi则对应的这一部分
    87b34b23-8ec8-40f0-bb9e-001511b06be6-image.png
    通过追踪

    alphaPhi10 = talphaPhi1Un;
    
    //又查到
    
    tmp<surfaceScalarField> talphaPhi1Un
            (
                fvc::flux
                (
                    phiCN(),
                    cnCoeff*alpha1 + (1.0 - cnCoeff)*alpha1.oldTime(),
                    alphaScheme
                )
              + fvc::flux
                (
                   -fvc::flux(-phir, alpha2, alpharScheme),
                    alpha1,
                    alpharScheme
                )
            );
    

    而其中的phiCN则

    tmp<surfaceScalarField> phiCN(alphaPhic);
    // Calculate the Crank-Nicolson off-centred volumetric flux
    if (ocCoeff > 0)
    {
    phiCN = cnCoeff*alphaPhic + (1.0 - cnCoeff)*alphaPhic.oldTime();
    }

    如果不采用CN格式phiCN就等于alphaPhic,又查到

     alphacf = fvc::interpolate(alphac);
    alphaPhic = alphacf*phi;
    

    所以本质上图一中红色部分还是通过alphac*alpha1得到的

    @zhe 看这条消息,code中就是按这个公式求的,alphan*alphac是真实的相体积分数,因此求得的alphan就是占连续相的体积分数

    Z 1 条回复 最后回复 2022年5月25日 15:46
2022年4月27日 09:32

22/45

2022年4月29日 13:55

未读 23
2022年5月26日 12:25
  • 登录

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