Navigation

    CFD中文网

    CFD中文网

    • Login
    • Search
    • 最新

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

    OpenFOAM
    7
    24
    12140
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • Bob在学习OpenFOAM
      Bob在学习OpenFOAM last edited by Bob在学习OpenFOAM

      目的:求解充分发展槽道流动,进出口设置为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);
            }
         }
      }
      
      1 Reply Last reply Reply Quote
      • 李东岳
        李东岳 管理员 last edited by 李东岳

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

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

        线上CFD课程 7月1日报名截止 http://dyfluid.com/class.html
        CFD高性能服务器 http://dyfluid.com/servers.html

        Bob在学习OpenFOAM C D 我 4 Replies Last reply Reply Quote
        • Bob在学习OpenFOAM
          Bob在学习OpenFOAM @李东岳 last edited by

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

          1 Reply Last reply Reply Quote
          • C
            CjjJoy @李东岳 last edited by

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

            1 Reply Last reply Reply Quote
            • 李东岳
              李东岳 管理员 last edited by

              @CjjJoy

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

              线上CFD课程 7月1日报名截止 http://dyfluid.com/class.html
              CFD高性能服务器 http://dyfluid.com/servers.html

              1 Reply Last reply Reply Quote
              • D
                D.Benjamin @李东岳 last edited by

                @东岳 老师您好,我想请教几个问题:

                1. 楼主加入了一个源项体积矢量pGrad,这个矢量,OpenFOAM是如何识别为压力梯度呢?也就是说OpenFOAM怎么知道pGrad就是▽p呢?楼主上面的场的设置,OpenFOAM应该只认识pGrad是一矢量,而不知道它就是代表着▽p吧?
                2. 楼主尝试的第三种方法,U ((10 0 0) 0);表示什么意思?(10 0 0)不就表示速度矢量值了吗?
                  若能够获得老师的回复,我将不胜感激!!

                OpenFOAM初学者,希望和大家共同交流

                1 Reply Last reply Reply Quote
                • 李东岳
                  李东岳 管理员 last edited by

                  也就是说OpenFOAM怎么知道pGrad就是▽p呢?

                  不知道,在声明pGrad之后,需要赋值,比如:

                  pGrad = fvc::grad(p);
                  

                  这样才可以。楼主那个应该没写这部分

                  U ((10 0 0) 0);

                  这不是简单的速度矢量了,这是给injectionRateSuSp关键词赋值

                  线上CFD课程 7月1日报名截止 http://dyfluid.com/class.html
                  CFD高性能服务器 http://dyfluid.com/servers.html

                  D 1 Reply Last reply Reply Quote
                  • D
                    D.Benjamin @李东岳 last edited by 李东岳

                    @东岳 老师您好,谢谢你的回复,我还想追问一下,赋值的这部分代码应该写到哪个地方?下面我写了两个方案,哪一个方案是正确的?还有,我发现在laplacianFoam的解析中,有两种定义场的方式,如下面的图片所示,定义场"T"的时候是mesh,而定义场"gradTx"的时候,mesh被替换成了gradT.component(vector::x),正是因为对此疑惑,我才有上面两种方案是否合理的疑惑,望老师给与答复,感激不尽!
                    0_1537532008564_1.PNG

                    0_1537532016263_2.PNG

                    0_1537532538546_3.PNG

                    0_1537532648432_4.PNG

                    OpenFOAM初学者,希望和大家共同交流

                    气 1 Reply Last reply Reply Quote
                    • 李东岳
                      李东岳 管理员 last edited by

                      方案二是正确的,方案一mesh下面不能赋值,可以直接写fvc::grad(p)。

                      同理,下面那个T,如果直接给gradT....,就不需要写mesh了,直接赋值。

                      线上CFD课程 7月1日报名截止 http://dyfluid.com/class.html
                      CFD高性能服务器 http://dyfluid.com/servers.html

                      1 Reply Last reply Reply Quote
                      • 气
                        气固两相流 @D.Benjamin last edited by

                        @d-benjamin 请问按照方案二加入压力梯度后,在算例中应该如何给压力梯度赋值呢?

                        气固两相流模拟

                        D 1 Reply Last reply Reply Quote
                        • 李东岳
                          李东岳 管理员 last edited by

                          他已经赋值了

                          pGrad = fvc::grad(p);
                          

                          线上CFD课程 7月1日报名截止 http://dyfluid.com/class.html
                          CFD高性能服务器 http://dyfluid.com/servers.html

                          气 1 Reply Last reply Reply Quote
                          • 气
                            气固两相流 @李东岳 last edited by

                            @东岳 0_1542938612456_222.png

                            东岳老师,我的错误显示是我没有在0文件夹下建立 pGrad 文件,建立pGrad的文件的话,这个地方应该怎么赋值,而且如果已经在blockMesh中设置周期性边界条件cyclic的话,那么pGrad不就和p一样了依然没有压差么?

                            气固两相流模拟

                            1 Reply Last reply Reply Quote
                            • 李东岳
                              李东岳 管理员 last edited by

                              volVectorField pGrad
                              (
                                  IOobject
                                  (
                                      "pGrad",
                                      runTime.timeName(),
                                      mesh,
                                      //IOobject::MUST_READ,
                                      IOobject::NO_READ,
                                      IOobject::AUTO_WRITE
                                  ),
                                  mesh,
                                  Zero
                                  //vector(1, 0, 0)
                              );
                              

                              因为你代码pGrad为必须读取,你做上面的改动。可以把pGrad设置为默认的(0 0 0)。也可以写为vector(1, 0, 0)

                              线上CFD课程 7月1日报名截止 http://dyfluid.com/class.html
                              CFD高性能服务器 http://dyfluid.com/servers.html

                              气 1 Reply Last reply Reply Quote
                              • D
                                D.Benjamin @气固两相流 last edited by

                                @气固两相流 你好,正如东岳老师所说,只要在0文件夹下有p文件,就会按照给的式子进行赋值了

                                OpenFOAM初学者,希望和大家共同交流

                                气 1 Reply Last reply Reply Quote
                                • 气
                                  气固两相流 @李东岳 last edited by

                                  @东岳 非常感谢东岳老师的回答,但是直接对他赋具体值zero或者vector(1 0 0)没有成功,但是fvc::grad( p )是没有问题的

                                  气固两相流模拟

                                  1 Reply Last reply Reply Quote
                                  • 气
                                    气固两相流 @D.Benjamin last edited by

                                    @d-benjamin 嗯嗯,谢谢您的回答,直接赋值fvc::grad ( p)是没有问题的

                                    气固两相流模拟

                                    1 Reply Last reply Reply Quote
                                    • 我
                                      我是河滩 last edited by

                                      你好,你在尝试1中加压力梯度源项,为什么对UEqn.H和pEqn.H都做了修改?
                                      simple算法求NS方程是分两步,UEqn.H是预估步,pEqn.H包括校正步。既然在预估步就加入了源项,为什么在校正步pEqn.H还要添加源项呢?
                                      另外,对于尝试3 fvoptions,这种方法的源项是加在simple求解的哪一步中了?是和尝试2相同吗?

                                      动边界

                                      D 1 Reply Last reply Reply Quote
                                      • D
                                        D.Benjamin @我是河滩 last edited by

                                        @我是河滩 你好,他只修改了U的方程,并没有修改p方程,只是定义了一个新的压力梯度场。他上面三个尝试应该都是一样的。有一点我不是很明白,就是尝试3中的volumeMode,两个关键字absolute和specific有什么具体的区别。如果东岳老师可以帮忙解答一下就好了。@东岳

                                        OpenFOAM初学者,希望和大家共同交流

                                        张 1 Reply Last reply Reply Quote
                                        • 我
                                          我是河滩 @李东岳 last edited by

                                          @东岳 在 动量方程如何加入加压力梯度源项? 中说:

                                          多相流的的表面张力项

                                          如何把源项加入到压力方程中,和动量方程加源项有何区别?

                                          动边界

                                          李东岳 1 Reply Last reply Reply Quote
                                          • 张
                                            张RP @D.Benjamin last edited by 李东岳

                                            @D-Benjamin 请参照 http://www.cfd-china.com/topic/208/fvoptions-rho-yi-与scalarsemiimplicitsource/9

                                            1 Reply Last reply Reply Quote
                                            • 李东岳
                                              李东岳 管理员 @我是河滩 last edited by

                                              @我是河滩
                                              加入到压力方程更加无震荡
                                              加入到动量方程更简单

                                              线上CFD课程 7月1日报名截止 http://dyfluid.com/class.html
                                              CFD高性能服务器 http://dyfluid.com/servers.html

                                              1 Reply Last reply Reply Quote
                                              • 我
                                                我是河滩 last edited by

                                                谢谢。

                                                动边界

                                                李东岳 1 Reply Last reply Reply Quote
                                                • 李东岳
                                                  李东岳 管理员 @我是河滩 last edited by

                                                  @我是河滩 你做什么方向的啊,

                                                  线上CFD课程 7月1日报名截止 http://dyfluid.com/class.html
                                                  CFD高性能服务器 http://dyfluid.com/servers.html

                                                  1 Reply Last reply Reply Quote
                                                  • 我
                                                    我是河滩 last edited by

                                                    运动物体计算,浸入边界。

                                                    动边界

                                                    1 Reply Last reply Reply Quote
                                                    • Referenced by  vbcwl vbcwl 
                                                    • Referenced by  vbcwl vbcwl 
                                                    • First post
                                                      Last post

                                                    CFD中文网 | 东岳流体 | 京ICP备15017992号-2
                                                    论坛登录问题反馈可联系 li.dy@dyfluid.com