CFD中文网

    CFD中文网

    • 登录
    • 搜索
    • 最新

    添加源项fvOptions编译出错

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

      各位老师好,大家好:
      最近在twoLiquidMixingFoam中添加fvOptions项后wmake时出现了如下错误,显示我的fvOptions没有定义:

      In file included from my_twoLiquidMixingFoam.C:78:0:
      alphaDiffusionEqn.H: In function ‘int main(int, char**)’:
      alphaDiffusionEqn.H:11:10: error: ‘fvOptions’ was not declared in this scope
             == fvOptions(alpha1)//add
                ^~~~~~~~~
      alphaDiffusionEqn.H:11:10: note: suggested alternative: ‘fvOption_H’
             == fvOptions(alpha1)//add
                ^~~~~~~~~
                fvOption_H
      
      

      但是,我在C文件的开头中添加了fvOptions头文件,此外,Make文件夹中options中也有lfvoptions:

      #include "pimpleControl.H"
      #include "fvOptions.H"//add this
      
      EXE_LIBS = \
          ......
          -lfvOptions \
          -lmeshTools
      

      请问大家这是什么原因?有什么解决办法吗?
      期待大家的回复和解答。

      此外,我还有一个问题,fvOptions和fvOption_H有什么区别呢?我没有找到fvOption_H的文件

      另外,我的alphaDiffusionEqn.H是这样写的

      {
          fvScalarMatrix alpha1Eqn
          (
              fvm::ddt(alpha1)
            - fvc::ddt(alpha1)
            - fvm::laplacian
              (
                  volScalarField("Dab", Dab + alphatab*turbulence->nut()),
                  alpha1
              )
            == fvOptions(alpha1)//add
          );
      
          fvOptions.constrain(alpha1Eqn);//add this
          alpha1Eqn.solve();
          fvOptions.correct(alpha1);//add this
      
          alpha2 = 1.0 - alpha1;
          rhoPhi += alpha1Eqn.flux()*(rho1 - rho2);
      }
      
      rho = alpha1*rho1 + alpha2*rho2;
      

      CFD苦手,能达到发散这一步就欣喜若狂了。。。

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

        先说这个:你这个fvOptions加到了alpha方程,是要处理什么数学问题?

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

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

        M 1 条回复 最后回复 回复 引用
        • 马乔
          马乔 副教授 最后由 编辑

          因为fvOptions只是fv::options的一个对象,这里用了它的操作符()。所以你要定义个fv::option对象。或者直接包含createFvOptions.H吧:xiezuoye:

          装逼没输过,吵架没赢过!

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

            @东岳 老师您好,添加这个项就是想在不改变网格的条件下,在某个位置设置一个新的入口,设置fvOptions后就能通过只修改topoSet中的区域划分来不断修改新的入口的位置。不然的话,没改变一次新的入口的位置就需要重新划分一下网格,太麻烦了。(/ω\)

            之前在pisoFoam中是成功实现了,但是在这里却失败了
            pisoFoam中UEqn改的地方:

                fvm::ddt(U) + fvm::div(phi, U)
              + MRF.DDt(U)
              + turbulence->divDevReff(U)
             ==
                fvOptions(U)
            );
            UEqn.relax();
            fvOptions.constrain(UEqn);//
            

            CFD苦手,能达到发散这一步就欣喜若狂了。。。

            1 条回复 最后回复 回复 引用
            • M
              merlinizlf @马乔 最后由 编辑

              @马乔 老师您好,非常感谢老师您的指点,我仔细对比了一下,pisoFoam的createFields.H中本来就包含了createFvOptions.H这个文件,现在我加上createFvOptions.H后已经编译成功了。

              但是,现在又出现了一个问题,alpha的fvOptions已经可以计算了,但是U在计算过程中却出现了单位不一致的问题,:135: 但是我却检查不出来问题,还请老师您能再指点一下:xinxin:

              报错:

              --> FOAM FATAL ERROR: 
              incompatible dimensions for operation 
                  [U[1 -2 -2 0 0 0 0] ] == [U[0 1 -2 0 0 0 0] ]
              
                  From function void Foam::checkMethod(const Foam::fvMatrix<Type>&, const Foam::fvMatrix<Type>&, const char*) [with Type = Foam::Vector<double>]
                  in file /home/dyfluid/OpenFOAM/OpenFOAM-6/src/finiteVolume/lnInclude/fvMatrix.C at line 1283.
              
              

              UEqn.H代码:

                  fvVectorMatrix UEqn
                  (
                      fvm::ddt(rho, U)
                    + fvm::div(rhoPhi, U)
                    + turbulence->divDevRhoReff(rho, U)
                   == fvOptions(U)//add this
                  );
                  UEqn.relax();
                  fvOptions.constrain(UEqn);//add this
              
                  if (pimple.momentumPredictor())
                  {
                      solve
                      (
                          UEqn
                       ==
                          fvc::reconstruct
                          (
                              (
                                - ghf*fvc::snGrad(rho)
                                - fvc::snGrad(p_rgh)
                              ) * mesh.magSf()
                          )
                      );
              	fvOptions.correct(U);//add this
                  }
              

              CFD苦手,能达到发散这一步就欣喜若狂了。。。

              1 条回复 最后回复 回复 引用
              • M
                merlinizlf 最后由 编辑

                对了,如果还有同伴也需要用到fvOptions的话,有一个网站推荐给大家:
                https://caefn.com/openfoam/fvoptions

                里面写了在算例中添加fvOptions的一些方法,希望对大家有帮助:xinxin:

                CFD苦手,能达到发散这一步就欣喜若狂了。。。

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

                  添加质量源项到alpha方程看起来倒是合理,但很容易越界,例如如果alpha=20怎么办?另外就是在rho方程上添加fvOptions,看起来更合理也不存在越界的问题。不过两种方法我都没测试过。只是第一感觉如此。你可以试试

                  [U[1 -2 -2 0 0 0 0] ] == [U[0 1 -2 0 0 0 0] ]

                  前面是rhoU后面是U,因此单位不统一

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

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

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

                    @东岳 非常感谢老师的指点,已经成功编译了UEqn:xinxin:

                        tmp<fvVectorMatrix> tUEqn//fvVectorMatrix UEqn
                        (
                            fvm::ddt(rho, U)
                          + fvm::div(rhoPhi, U)
                          + turbulence->divDevRhoReff(rho, U)
                         ==
                          fvOptions(rho,U)//add this
                        );
                        fvVectorMatrix& UEqn = tUEqn.ref();//add
                        UEqn.relax();
                        fvOptions.constrain(UEqn);//add this
                    

                    但是,还想请问一下老师,怎样才能在rho方程上添加fvOptions?rho不是只由alpha1和rho1,2决定吗?

                    rho = alpha1*rho1 + alpha2*rho2;
                    

                    CFD苦手,能达到发散这一步就欣喜若狂了。。。

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

                      @merlinizlf 是的。另一个角度,连续性方程一般是跟压力方程有关。但是,在压力方程中添加密度的源项,这就变成了对压力产生影响,进一步影响速度,再影响质量。不清楚这个路子怎么样。所以。可能需要思考一下。目前我没有详细琢磨。

                      你可以先试试在alpha方程上加,加小一点的数值,要不容易越界。

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

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

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

                        @东岳 非常感谢老师:xinxin: ! :xiexie:
                        就是这样迂回的话好像有些难,我还要再思考思考,再尝试尝试 :144:

                        CFD苦手,能达到发散这一步就欣喜若狂了。。。

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