动量方程如何加入加压力梯度源项?



  • 目的:求解充分发展槽道流动,进出口设置为cyclic周期性边界。通过动量方程中加入流动的驱动力:压力梯度。
    求解器:OpenFOAM v3.0+
    其他参考:fvOptions 的demo:simpleFoam\channel395,设置的是平均速度Ubar,还不是驱动压力;
    目前遇到的问题:通过下面的这3种方法,加入压力梯度源项后,测试了 kEpsilon 和 kOmega 湍流模型,kEpsilon表现正常,kOmega在槽道中心区域算出诡异的速度分布,分析问题可能出现在两方面:1)加源项的方法,2)kOmega湍流模型本身。具体算例,我会在另一个帖子里说明。

    这篇帖子向大家请教添加源项的方法,下面是我尝试的几种方法,不知道是不是正确,请大家帮忙批评指正 :)

    • 尝试1:
      createField 中定义一个压力梯度向量 pGrad,变量类型为volVectorField
    volVectorField pGrad
    (
        IOobject
        (
            "pGrad",
            runTime.timeName(),
            mesh,
            IOobject::MUST_READ,
            IOobject::AUTO_WRITE
        ),
        mesh
    );
    

    simpleFoam 作如下改动:

    solve(UEqn() == -fvc::grad(p)-pGrad); // UEqn.H 
    
    U = HbyA - rAtU()*fvc::grad(p) - rAtU()*pGrad; // pEqn.H
    
    • 尝试2:
      同样需要在 createField.H 中定义 pGrad,不同的是换一种方法改动
      simpleFoam,在 UEqn 中加入 -pGrad:
        tmp<fvVectorMatrix> UEqn
       (
           fvm::div(phi, U)
         + MRF.DDt(U)
         + turbulence->divDevReff(U)
        ==
           fvOptions(U) - pGrad
       );
    
    • 尝试3:
      通过fvOptions加入源项,该方法参考 cfdonline
      这样给动量方程加入了 pGrad=10 的压力梯度
    momentumSource
    {
       type vectorSemiImplicitSource;
       active on;
       selectionMode all;
    
       vectorSemiImplicitSourceCoeffs
       {
          //volumeMode      absolute; // specific
          volumeMode        specific;
          injectionRateSuSp
          {
             U           ( (10 0 0) 0);
          }
       }
    }
    


  • Hi,我觉得你这3种方法都差不多:expressionless:

    另外一种不同的方法是把源项添加到压力方程中,OpenFOAM经常把fvOptions不可包括的源项添加到压力方程中。:expressionless: 例如多相流的的表面张力项



  • @李东岳 谢谢你关注我的问题,我又尝试了槽道层流,上面的源项方法没有问题,个人比较偏向第2种,把压力梯度加入到 UEqn 矩阵中,感觉有点像隐式的求解方法。



  • @李东岳 你好,如何在压力方程中添加源项 包含多相流的的表面张力项?有没有推荐的文档可以学习下?谢谢



  • @CjjJoy

    这个interFoam里面加入到了UEqn,源项添加代码上非常简单啊没有任何难点?你写好了源项放到方程右边不就可以了?


登录后回复
 

与 CFD中文网 的连接断开,我们正在尝试重连,请耐心等待