添加源项fvOptions编译出错



  • 各位老师好,大家好:
    最近在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;
    


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


  • 离散相副教授

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



  • @东岳 老师您好,添加这个项就是想在不改变网格的条件下,在某个位置设置一个新的入口,设置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);//
    


  • @马乔 老师您好,非常感谢老师您的指点,我仔细对比了一下,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
        }
    


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

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



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

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

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



  • @东岳 非常感谢老师的指点,已经成功编译了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;
    


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

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



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


Log in to reply
 

CFD中文网 2016 - 2020 | 京ICP备15017992号-2