CFD中文网

    CFD中文网

    • 登录
    • 搜索
    • 最新

    twoPhaseEulerFoam中的IATE模型系数

    OpenFOAM
    2
    34
    5488
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • U
      upc_ngh 最后由 编辑

      各位前辈,在使用双流体IATE模型时发现,内部读入的表征碰撞聚集的IATE系数Crc、Cti好像并未参与计算,更改这两个系数,计算结果没有差异,计算代码如下,最后返回tR,但是赋值是给了R,这个是不是有问题,还请各位老师指点一下,谢谢

      Foam::tmp<Foam::volScalarField>//计算Cti,破碎项的
      Foam::diameterModels::IATEsources::turbulentBreakUp::R() const
      {
      
          tmp<volScalarField> tR
          (
              new volScalarField
              (
                  IOobject
                  (
                      "R",
                      iate_.phase().U().time().timeName(),
                      iate_.phase().mesh()
                  ),
                  iate_.phase().U().mesh(),
                  dimensionedScalar("R", dimless/dimTime, 0)
              )
          );
      
          volScalarField R = tR();
      
          scalar Cti = Cti_.value();
          scalar WeCr = WeCr_.value();
          volScalarField Ut(this->Ut());
          volScalarField We(this->We());
          const volScalarField& d(iate_.d()());
      
          forAll(R, celli)
          {
              if (We[celli] > WeCr)
              {
                  R[celli] =
                      (1.0/3.0)
                     *Cti/d[celli]
                     *Ut[celli]
                     *sqrt(1 - WeCr/We[celli])
                     *exp(-WeCr/We[celli]);
              }
          }
          return tR;
      }
      
      Foam::tmp<Foam::volScalarField>//计算Crc,碰撞聚集项的
      Foam::diameterModels::IATEsources::randomCoalescence::R() const
      {
      
          tmp<volScalarField> tR
          (
              new volScalarField
              (
                  IOobject
                  (
                      "R",
                      iate_.phase().U().time().timeName(),
                      iate_.phase().mesh()
                  ),
                  iate_.phase().U().mesh(),
                  dimensionedScalar("R", dimless/dimTime, 0)
              )
          );
      
          volScalarField R = tR();
      
          scalar Crc = Crc_.value();
          scalar C = C_.value();
          scalar alphaMax = alphaMax_.value();
          volScalarField Ut(this->Ut());
          const volScalarField& alpha = phase();
          const volScalarField& kappai = iate_.kappai();
          scalar cbrtAlphaMax = cbrt(alphaMax);
       
      
          forAll(R, celli)
          {
              if (alpha[celli] < alphaMax - SMALL)
              {
      
                  scalar cbrtAlphaMaxMAlpha = cbrtAlphaMax - cbrt(alpha[celli]);
      
                  R[celli] =
                      (-12)*phi()*kappai[celli]*alpha[celli]
                     *Crc
                     *Ut[celli]
                     *(1 - exp(-C*cbrt(alpha[celli]*alphaMax)/cbrtAlphaMaxMAlpha))
                     /(cbrtAlphaMax*cbrtAlphaMaxMAlpha);
      
              }
          }
      
          return  tR;
      }
      
      
      Foam::tmp<Foam::volScalarField>//计算Cwe,这个有作用
      Foam::diameterModels::IATEsources::wakeEntrainmentCoalescence::R() const
      {
          return (-12)*phi()*Cwe_*cbrt(CD())*iate_.a()*Ur();
      }
      
      1 条回复 最后回复 回复 引用
      • 李东岳
        李东岳 管理员 最后由 编辑

        更改这两个系数,计算结果没有差异

        因为不一定处于破碎区。里面存在临界微博数的判断。

        线上CFD课程开始报名:http://www.dyfluid.com/class.html

        CFD高性能服务器 http://dyfluid.com/servers.html

        1 条回复 最后回复 回复 引用
        • U
          upc_ngh 最后由 编辑

          东岳老师我通过添加输出得到了,无论对于Crc还是Cti这两项都是进行了计算,在Crc、Cti那个函数里面输出一个给定单元格R[1927]值,这时候的输出都是有值的,但是在下面函数里面输出时发现,Crc和Cti计算得到的R值均是0,是不是我上面提到的Crc和Cti的函数返回是有问题的,还是有什么其他东西,另外即使临界韦伯数判断,那对于Crc这个临界体积分数判断,应该大部分的单元格还是满足它的判定条件的,希望各位前辈指点一二,不胜感激!

            forAll(sources_, j)
              {
          Info << "\nStarting R\n" << endl;
          Info << R[1927] << endl;
                  R -= sources_[j].R();
          Info << R[1927] << endl;
              }
          
          1 条回复 最后回复 回复 引用
          • U
            upc_ngh 最后由 编辑

            各位前辈,经过验证发现,对于IATE模型中表示气泡聚合和破碎的Crc和Cti并未参与计算,因为这两个函数的返回值是tR,而进行赋值计算的是R,经过连续输出发现,赋值计算的R无论是否为0,返回值tR始终为0,因此对于Crc、Cti无论改变为多大的值对于气泡的聚合破碎毫无作用。
            在将返回值改为R以后,由于给定算例的连续相速度始终为0,而Crc和Cti计算R表达式中用到了连续相速度,所以还会出现返回值一直为0的情况,若改变算例,连续相速度给一定值后,就会发现此时返回值是tR时,返回值还一直为0,但返回值是R时,发现此时返回值就发生了变化,粒径分布也就发生了变化。因此在想是不是这个程序返回值tR是写错了还是我有哪个地方搞错了,请各位老师指点一下。另外还遇到一个问题就是在linux系统下,将返回值改正为R以后会报错如下:(以上所说的测试是基于Windows版本的绿化版本),希望各位前辈给点建议,这个错误应该怎么处理,不胜感激!

            --> FOAM FATAL ERROR: 
            different patches for fvPatchField<Type>s
            
                From function void Foam::fvPatchField<Type>::check(const Foam::fvPatchField<Type>&) const [with Type = double]
                in file /opt/openfoam4/src/finiteVolume/lnInclude/fvPatchField.C at line 209.
            
            FOAM aborting
            
            #0  Foam::error::printStack(Foam::Ostream&) at ??:?
            #1  Foam::error::abort() at ??:?
            #2  Foam::GeometricField<double, Foam::fvPatchField, Foam::volMesh>::operator-=(Foam::GeometricField<double, Foam::fvPatchField, Foam::volMesh> const&) at ??:?
            #3  Foam::diameterModels::IATE::correct() at ??:?
            #4  Foam::twoPhaseSystem::correct() at ??:?
            #5  ? at ??:?
            #6  __libc_start_main in "/lib/x86_64-linux-gnu/libc.so.6"
            #7  ? at ??:?
            已放弃 (核心已转储)
            
            1 条回复 最后回复 回复 引用
            • 李东岳
              李东岳 管理员 最后由 编辑

              @upc_ngh 在 twoPhaseEulerFoam中的IATE模型系数 中说:

              由于给定算例的连续相速度始终为0

              这个不应该啊?为什么是0

              线上CFD课程开始报名:http://www.dyfluid.com/class.html

              CFD高性能服务器 http://dyfluid.com/servers.html

              U 1 条回复 最后回复 回复 引用
              • U
                upc_ngh @李东岳 最后由 编辑

                @李东岳 这个地方我表述错了,但是在算例中即使把Crc、Cti调整到100000000这个量级对计算结果还是毫无影响,即使存在临界数的判断,Crc这个依靠相分数判断的碰撞聚集项肯定会发生变化。还有就是对R赋值,返回却是tR,这个地方对吗,我现在是这个地方不理解,谢谢东岳老师的解答。

                1 条回复 最后回复 回复 引用
                • 李东岳
                  李东岳 管理员 最后由 编辑

                  把这一行

                  volScalarField R = tR();
                  

                  改成

                  volScalarField& R = tR.ref();
                  

                  再试试

                  线上CFD课程开始报名:http://www.dyfluid.com/class.html

                  CFD高性能服务器 http://dyfluid.com/servers.html

                  1 条回复 最后回复 回复 引用
                  • 李东岳
                    李东岳 管理员 最后由 编辑

                    怎么样 有进展么

                    线上CFD课程开始报名:http://www.dyfluid.com/class.html

                    CFD高性能服务器 http://dyfluid.com/servers.html

                    U 1 条回复 最后回复 回复 引用
                    • U
                      upc_ngh 最后由 编辑

                      东岳老师不好意思,我现在试试,刚看到您的回复贴

                      1 条回复 最后回复 回复 引用
                      • U
                        upc_ngh @李东岳 最后由 编辑

                        @李东岳 东岳老师我刚刚试了一下,还是不行,会报同样的错误

                        1 条回复 最后回复 回复 引用
                        • 李东岳
                          李东岳 管理员 最后由 编辑

                          我测试了一下,可以编译

                          线上CFD课程开始报名:http://www.dyfluid.com/class.html

                          CFD高性能服务器 http://dyfluid.com/servers.html

                          U 1 条回复 最后回复 回复 引用
                          • U
                            upc_ngh @李东岳 最后由 编辑

                            @李东岳 对的,可以编译,但是运行算例还是会报错,和我以前一样,编译通过,运行出错

                            1 条回复 最后回复 回复 引用
                            • 李东岳
                              李东岳 管理员 最后由 编辑

                              4楼那个错误么,我测试了下运行也没有错误,你是不是动别的东西了

                              线上CFD课程开始报名:http://www.dyfluid.com/class.html

                              CFD高性能服务器 http://dyfluid.com/servers.html

                              1 条回复 最后回复 回复 引用
                              • U
                                upc_ngh 最后由 编辑

                                那老师方便把您改动好的代码发我一下吗,我对着检查再看看,谢谢老师

                                1 条回复 最后回复 回复 引用
                                • 李东岳
                                  李东岳 管理员 最后由 编辑

                                  把这一行

                                  volScalarField R = tR();
                                  

                                  改成

                                  volScalarField& R = tR.ref();
                                  

                                  就这个 没别的了

                                  线上CFD课程开始报名:http://www.dyfluid.com/class.html

                                  CFD高性能服务器 http://dyfluid.com/servers.html

                                  1 条回复 最后回复 回复 引用
                                  • U
                                    upc_ngh 最后由 编辑

                                    那最后一行还是return tR吗?

                                    1 条回复 最后回复 回复 引用
                                    • 李东岳
                                      李东岳 管理员 最后由 编辑

                                      :142:

                                      线上CFD课程开始报名:http://www.dyfluid.com/class.html

                                      CFD高性能服务器 http://dyfluid.com/servers.html

                                      1 条回复 最后回复 回复 引用
                                      • U
                                        upc_ngh 最后由 编辑

                                        这种情况,我一会再测试一下Crc和Cti是否参与了计算,谢谢老师百忙之中抽空解答我的疑惑,谢谢:xinxin3:

                                        1 条回复 最后回复 回复 引用
                                        • 李东岳
                                          李东岳 管理员 最后由 编辑

                                          有进展么

                                          线上CFD课程开始报名:http://www.dyfluid.com/class.html

                                          CFD高性能服务器 http://dyfluid.com/servers.html

                                          U 1 条回复 最后回复 回复 引用
                                          • U
                                            upc_ngh @李东岳 最后由 编辑

                                            @李东岳 目前是这样的,按照东岳老师您的意见更改完以后,是可行的,Crc和Cti均可以正常参与计算了。但是计算结果和在windows下仅仅返回R的计算结果是不一样的,不知道其中原因。目前正在使用老师您的结果在跑,观察计算结果,十分感谢东岳老师的帮助:high:
                                            第二种是仅仅把

                                            return tR;
                                            改成
                                            return R;
                                            
                                            1 条回复 最后回复 回复 引用
                                            • 李东岳
                                              李东岳 管理员 最后由 编辑

                                              结果怎么样

                                              线上CFD课程开始报名:http://www.dyfluid.com/class.html

                                              CFD高性能服务器 http://dyfluid.com/servers.html

                                              U 1 条回复 最后回复 回复 引用
                                              • U
                                                upc_ngh @李东岳 最后由 李东岳 编辑

                                                @李东岳 已经完全正常了,多谢东岳老师一路指点,谢谢。首先能获得结果,然后再获得精准的结果:146:

                                                1 条回复 最后回复 回复 引用
                                                • 李东岳
                                                  李东岳 管理员 最后由 编辑

                                                  好。

                                                  IATE这个目前研究的少,你可以试试。也可以用其他模型对比下。很多模型可以选,比如矩方法、section方法、n传输方法、OPOSPM等

                                                  线上CFD课程开始报名:http://www.dyfluid.com/class.html

                                                  CFD高性能服务器 http://dyfluid.com/servers.html

                                                  1 条回复 最后回复 回复 引用
                                                  • U
                                                    upc_ngh 最后由 编辑

                                                    好的东岳老师,我再琢磨看看,感谢感谢:xinxin:

                                                    1 条回复 最后回复 回复 引用
                                                    • 李东岳
                                                      李东岳 管理员 最后由 编辑

                                                      结果怎样了,有什么进展

                                                      线上CFD课程开始报名:http://www.dyfluid.com/class.html

                                                      CFD高性能服务器 http://dyfluid.com/servers.html

                                                      1 条回复 最后回复 回复 引用
                                                      • U
                                                        upc_ngh 最后由 编辑

                                                        感谢李老师还一直挂念,目前还在用ITAE计算一些工况水一水毕业论文,计算结果是正常的。您上面说的方法在双欧拉里面可以选嘛,怎么使用还请李老师指点一下

                                                        1 条回复 最后回复 回复 引用
                                                        • 李东岳
                                                          李东岳 管理员 最后由 编辑

                                                          完全没问题,目前我对OpenFOAM双欧拉模型中植入DQST算法非常感兴趣。不过自己一直没时间做。如果你读博士的话,或许可以搞一搞。

                                                          线上CFD课程开始报名:http://www.dyfluid.com/class.html

                                                          CFD高性能服务器 http://dyfluid.com/servers.html

                                                          U 1 条回复 最后回复 回复 引用
                                                          • U
                                                            upc_ngh @李东岳 最后由 编辑

                                                            @李东岳 谢谢东岳老师,如果确定读博再深入学习看看能不能尝试下,最后还是很感谢李老师一直的指导,祝愿中文网和OKS课程红红火火:xinxin2:

                                                            李东岳 1 条回复 最后回复 回复 引用
                                                            • 李东岳
                                                              李东岳 管理员 @upc_ngh 最后由 编辑

                                                              @upc_ngh 看到你在别的帖子回复了 我在这里回你 你这个IATE的算的怎样了 我一直打算玩这个呢一直没空 成果搞出来发出来看看啊

                                                              线上CFD课程开始报名:http://www.dyfluid.com/class.html

                                                              CFD高性能服务器 http://dyfluid.com/servers.html

                                                              U 1 条回复 最后回复 回复 引用
                                                              • U
                                                                upc_ngh @李东岳 最后由 编辑

                                                                @李东岳 主要是用来算液固流的,因为缺少固体颗粒破碎和聚集的效率因子,算出来的粒径分布和实验还是存在比较大的误差,大致就像下面这样。因为想做出固相沉积的样子,所以看到老师上个帖子有算沉积的,想学习一下,结果感觉自己植入太难。估计得再报一次补习班了。:xinlei:
                                                                粒径分布.jpg

                                                                1 条回复 最后回复 回复 引用
                                                                • 李东岳
                                                                  李东岳 管理员 最后由 编辑

                                                                  @upc_ngh 在 twoPhaseEulerFoam中的IATE模型系数 中说:

                                                                  缺少固体颗粒破碎和聚集的效率因子

                                                                  这个篇流体力学了,可能得找找流体力学的东西了。然后在CFD里面植入一下。

                                                                  你那个图,DPMFoam是预测出来的结果?聚丙破碎怎么弄的?

                                                                  另外IATE用于气固?之前有先例么,我这面看的都是用于气液。

                                                                  还有,粒径分布那个很难预测的特别好。你那个结果,放到sci里面,也说得过去。

                                                                  线上CFD课程开始报名:http://www.dyfluid.com/class.html

                                                                  CFD高性能服务器 http://dyfluid.com/servers.html

                                                                  U 1 条回复 最后回复 回复 引用
                                                                  • U
                                                                    upc_ngh @李东岳 最后由 编辑

                                                                    @李东岳 DPM那个是自己在paiSpring那个模型下面添加的颗粒碰撞聚集得到的结果,粒径分布是还可以,但因为实际工程中固相颗粒数量很大以及流场压力不稳定,计算起来非常慢就没有再去接着做了;IATE用到液固我也没见过,就是做着看看,找不到相关的参考文献,就大致算成这样,就准备放论文里面了。还有一个问题想请教一下老师,就是老板准备让植入一个1D的管道沉积模型,想要看看在openfoam框架下能不能做,具体内容这篇参考文献:[https://www.sciencedirect.com/science/article/pii/S0920410520310585]

                                                                    李东岳 1 条回复 最后回复 回复 引用
                                                                    • 李东岳
                                                                      李东岳 管理员 @upc_ngh 最后由 编辑

                                                                      @upc_ngh 我大略看了一下,如果正确的话,无非方程1、2、3、10、11,离散形式是18、19、21、22、23,完全可以植入。不过没看明白为什么要做1维的算法,莫非管道很长为了节约时间?

                                                                      线上CFD课程开始报名:http://www.dyfluid.com/class.html

                                                                      CFD高性能服务器 http://dyfluid.com/servers.html

                                                                      U 1 条回复 最后回复 回复 引用
                                                                      • U
                                                                        upc_ngh @李东岳 最后由 编辑

                                                                        @李东岳 对的,大概有十几公里,那谢谢东岳老师,我再使劲努努力钻研一下。个人觉得根据文献植入算法太难了,虽然能看懂离散和求解过程,但是想在openfoam里面实现觉得难度挺大的,当时老师您带我们植入的单相可压缩的,目前这是两相可压缩,我努力努力,再次感谢东岳老师的持续关心:xinxin:

                                                                        1 条回复 最后回复 回复 引用
                                                                        • First post
                                                                          Last post