Navigation

    CFD中文网

    CFD中文网

    • Login
    • Search
    • 最新

    添加源项fvOptions编译出错

    OpenFOAM
    3
    10
    1550
    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.
    • M
      merlinizlf last edited by

      各位老师好,大家好:
      最近在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 Reply Last reply Reply Quote
      • 李东岳
        李东岳 管理员 last edited by

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

        CFD课程 改成线上了 http://dyfluid.com/class.html
        CFD高性能服务器 http://dyfluid.com/servers.html

        M 1 Reply Last reply Reply Quote
        • 马乔
          马乔 副教授 last edited by

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

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

          M 1 Reply Last reply Reply Quote
          • M
            merlinizlf @李东岳 last edited by

            @东岳 老师您好,添加这个项就是想在不改变网格的条件下,在某个位置设置一个新的入口,设置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 Reply Last reply Reply Quote
            • M
              merlinizlf @马乔 last edited by

              @马乔 老师您好,非常感谢老师您的指点,我仔细对比了一下,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 Reply Last reply Reply Quote
              • M
                merlinizlf last edited by

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

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

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

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

                  添加质量源项到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://dyfluid.com/class.html
                  CFD高性能服务器 http://dyfluid.com/servers.html

                  M 1 Reply Last reply Reply Quote
                  • M
                    merlinizlf @李东岳 last edited by

                    @东岳 非常感谢老师的指点,已经成功编译了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 Reply Last reply Reply Quote
                    • 李东岳
                      李东岳 管理员 @merlinizlf last edited by

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

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

                      CFD课程 改成线上了 http://dyfluid.com/class.html
                      CFD高性能服务器 http://dyfluid.com/servers.html

                      M 1 Reply Last reply Reply Quote
                      • M
                        merlinizlf @李东岳 last edited by

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

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

                        1 Reply Last reply Reply Quote
                        • First post
                          Last post

                        CFD中文网 | 东岳流体 | 京ICP备15017992号-2