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
2 帖子 1 发布者 2.4k 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
回复
  • 在新帖中回复
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • 小 离线
    小 离线
    小考拉
    写于 最后由 编辑
    #1

    各位前辈们好!

    我目前尝试在compressibleInterFoam里面添加空化模型,前期经过热心前辈的指点,现在终于可以跑了,在此表示特别感谢!但是跑起来发现求解相方程alpha.water竟然越界了!!

    Courant Number mean: 0.000805796 max: 0.474105
    Time = 5e-07
    
    PIMPLE: iteration 1
    MULES: Solving for alpha.water
    Liquid phase volume fraction = 1  Min(alpha.water) = 1  Max(alpha.water) = 1
      Min(alpha.vapor) = -2.22045e-16  Max(alpha.vapor) = 2.22045e-16
    
    diagonal:  Solving for rho, Initial residual = 0, Final residual = 0, No Iterations 0
    smoothSolver:  Solving for T, Initial residual = 0.97202, Final residual = 9.69394e-06, No Iterations 100
    min(T) 293.15
    GAMGPCG:  Solving for p_rgh, Initial residual = 1, Final residual = 0.000777804, No Iterations 1
    max(U) 10.3973
    min(p_rgh) 7567.84
    GAMGPCG:  Solving for p_rgh, Initial residual = 0.040294, Final residual = 4.4669e-05, No Iterations 1
    max(U) 10.3357
    min(p_rgh) 17859.6
    PIMPLE: iteration 2
    MULES: Solving for alpha.water
    Liquid phase volume fraction = 1  Min(alpha.water) = 1  Max(alpha.water) = 1
      Min(alpha.vapor) = -4.44089e-16  Max(alpha.vapor) = 4.44089e-16
    

    查找了好多论坛里面好多前辈讨论的帖子,自己分析是alpha方程里面源项的处理有问题,alpha方程如下:![D5TYQKE_0X{1C46}Z](LLAB.png](/assets/uploads/files/1593657820208-d5tyqke_0x-1c46-z-llab.png)

    我的alpha方程中源项离散代码如下:

    	Pair<tmp<volScalarField>> vDotAlphal =
            mixture->vDotAlphal();
        const volScalarField& vDotcAlphal = vDotAlphal[0]();
        const volScalarField& vDotvAlphal = vDotAlphal[1]();
        const volScalarField vDotvmcAlphal(vDotvAlphal - vDotcAlphal);
    
        for (int gCorr=0; gCorr<nAlphaCorr; gCorr++)
        {
            volScalarField::Internal Sp
            (
                IOobject
                (
                    "Sp",
                    runTime.timeName(),
                    mesh
                ),
    		    vDotvmcAlphal  //这里参考的是interPhaseChangeFoam的alpha方程MULES:explicitSolve中Sp的设置
            );
    
            volScalarField::Internal Su
            (
                IOobject
                (
                    "Su",
                    runTime.timeName(),
                    mesh
                ),
                // Divergence term is handled explicitly to be
                // consistent with the explicit transport solution
                divU*min(alpha1, scalar(1))+vDotcAlphal   //这里参考的是interPhaseChangeFoam的alpha方程MULES:explicitSolve中Su的设置
            );
    
            forAll(dgdt, celli)
            {
                if (dgdt[celli] > 0.0 && alpha1[celli] > 0.0)
                {
                    Sp[celli] -= dgdt[celli]*alpha1[celli];
                    Su[celli] += dgdt[celli]*alpha1[celli];
                }
                else if (dgdt[celli] < 0.0 && alpha1[celli] < 1.0)
                {
                    Sp[celli] += dgdt[celli]*(1.0 - alpha1[celli]);
                }
            }
    
    
            surfaceScalarField alphaPhi1//对流项与人工压缩项的通量
            (
                fvc::flux
                (
                    phi,
                    alpha1,
                    alphaScheme
                )
              + fvc::flux
                (
                    -fvc::flux(-phir, alpha2, alpharScheme),
                    alpha1,
                    alpharScheme
                )
            );
    
            MULES::explicitSolve
            (
                geometricOneField(),
                alpha1,
                phi,
                alphaPhi1,
                Sp,
                Su,
                1,
                0
            );
    

    等式右端前两项的离散参考的是东岳老师compressibleInterFoam解析中的方法,在此不做任何改动。最后一项空化源项的离散参考interPhaseChangeFoam中alpha方程中显式MULES中Sp和Su的处理,

    由于alpha.water求解的大于1,推断源项离散出了问题,查找资料发现源项离散要保证Sp<0,,,在这里我添加了vDotvmcAlphal (即蒸发率-冷凝率),这一项在不可压求解器的显式MULES中直接设置为了Sp,不可压求解器相方程对应代码如下:

    else
            {
                MULES::explicitSolve
                (
                    geometricOneField(),
                    alpha1,
                    phi,
                    talphaPhiCorr.ref(),
                    vDotvmcAlphal,   //Sp部分
                    (divU*alpha1 + vDotcAlphal)(),//Su部分
                    1,
                    0
                );
    

    按照道理我直接将这一项加到可压缩求解器中的Sp里面,逻辑上应该没有问题,,但确实alpha求解出现了越界问题

    麻烦各位前辈能不能指点一下我这个思路存在哪些问题呢?或者能够给我提供一点建议呢?十分感谢

    小 1 条回复 最后回复
  • 小 离线
    小 离线
    小考拉
    在 中回复了 小考拉 最后由 编辑
    #2

    @小考拉 alpha方程如下:61c83717-3135-4a66-9cdd-c1af5ba33159-image.png

    1 条回复 最后回复

  • 登录

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