OpenFOAM里kOmega模型的问题



  • 各位老师同学好,我最近在尝试用各种不同的湍流模型算发动机尾喷流的问题。在使用OpenFOAM里的kOmega模型进行计算时,参数怎么调算例都会发散,但使用其他模型比如LRR或kOmegaSST都可以比较好的收敛。后来先用kOmegaSST算了个初步结果再换成kOmega模型,算出来的结果依然和预想的结果差别较大。在论坛里搜,发现大家使用kOmegaSST模型较多,因为对模型的了解比较简单,计算的经验也比较少,想问一下是因为OpenFOAM里的kOmega模型不好使吗,为什么大家好像都不怎么用呢?



  • Omega类模型相对于eispilon类对边界条件非常敏感,只能是设置的原因



  • 我毕业课题就是用Omega算传热问题,边界条件的确很敏感!



  • @一颗鸭蛋 好的,谢谢你们的提醒。我后来按照Fluent里初始化的数据给了初始条件,用kOmega模型倒是能直接算下去了,但结果还是不对,您能帮我看看这些边界条件吗?
    mesh.jpg
    这个case是这样的,要算一个喷流,四周流体都是静止的(或者有一点很慢很慢的速度)。喷管入口总温和环境温度相同都是300K,喷管总压是环境压力的1.197倍。各个边界的条件设置如下,用的轴对称网格。
    U

    FoamFile
    {
        version     2.0;
        format      ascii;
        class       volVectorField;
        location    "0";
        object      U;
    }
    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
    
    dimensions      [0 1 -1 0 0 0 0];
    
    internalField   uniform (0 0 0);
    
    boundaryField
    {
        WALL
        {
            type            noSlip;
        }
        FAR
        {
            type            zeroGradient;
        }
        IN
        {
            type            zeroGradient;
        }
        OUT
        {
            type            zeroGradient;
        }
        AXIS
        {
            type            symmetryPlane;
        }
      
        SYM_pos
        {
            type            wedge;
        }
        SYM_neg
        {
            type            wedge;
        }
    }
    

    p

    FoamFile
    {
        version     2.0;
        format      ascii;
        class       volScalarField;
        object      p;
    }
    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
    
    dimensions      [1 -1 -2 0 0 0 0];
    internalField   uniform 101325;
    
    boundaryField
    {
        WALL
        {
            type            zeroGradient;
        }
        FAR
        {
            type            totalPressure;
            p0           uniform 101326;
        }
        IN
        {
            type            totalPressure;
            p0           uniform 121286;
        }
        OUT
        {
            type            fixedValue;
            value         $internalField;
        }
        AXIS
        {
            type            symmetryPlane;
        }
     
        SYM_pos
        {
            type            wedge;
        }
        SYM_neg
        {
            type            wedge;
        }
    }
    

    T

    {
        version     2.0;
        format      ascii;
        class       volScalarField;
        location    "0";
        object      T;
    }
    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
    
    dimensions      [0 0 0 1 0 0 0];
    
    internalField   uniform 300;
    
    boundaryField
    {
           WALL
        {
           type            zeroGradient;
        }
        FAR
        {
            type            fixedValue;
             value           $internalField;
        }
        IN
        {
            type            totalTemperature;
            gamma           1.4;
            psi             thermo:psi;
            T0              uniform 300;
             value          uniform 300;
        }
        OUT
        {
            type            fixedValue;
            value         $internalField;
        }
        AXIS
        {
            type            symmetryPlane;
        }
       
        SYM_pos
        {
            type            wedge;
        }
        SYM_neg
        {
            type            wedge;
        }
    }
    

    k

    FoamFile
    {
        version     2.0;
        format      ascii;
        class       volScalarField;
        location    "0";
        object      k;
    }
    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
    
    dimensions      [0 2 -2 0 0 0 0];
    
    internalField   uniform 0.04;
    
    boundaryField
    {
          WALL
        {
           type            kqRWallFunction;
            value           uniform 113;
        }
        FAR
        {
            type            fixedValue;
            value           uniform 0.04;
        }
        IN
        {
            type            fixedValue;
            value           uniform 113;
        }
        OUT
        {
            type            zeroGradient;
        }
        AXIS
        {
            type            symmetryPlane;
        }
       
        SYM_pos
        {
            type            wedge;
        }
        SYM_neg
        {
            type            wedge;
        }
    }
    
    
    // ************************************************************************* //
    

    omega

    FoamFile
    {
        version     2.0;
        format      ascii;
        class       volScalarField;
        location    "0";
        object      omega;
    }
    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
    
    dimensions      [0 0 -1 0 0 0 0];
    
    internalField   uniform 186;
    
    boundaryField
    {
        FAR
        {
            type            fixedValue;
            value           uniform 186;
        }
        OUT
        {
            type            zeroGradient;
        }
        WALL
        {
            type            epsilonWallFunction;
            value           uniform 783589.9;
        }
        AXIS
        {
            type            symmetryPlane;
        }
        IN
        {
            type            fixedValue;
            value           uniform 783589.9;
        }
        SYM
        {
            type            empty;
        }
        SYM_pos
        {
            type            wedge;
        }
        SYM_neg
        {
            type            wedge;
        }
    }
    
    

    nut

    FoamFile
    {
        version     2.0;
        format      ascii;
        class       volScalarField;
        location    "0";
        object      nut;
    }
    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
    
    dimensions      [0 2 -1 0 0 0 0];
    
    internalField   uniform 0.01;
    
    boundaryField
    {
          WALL
        {
           type            nutkWallFunction;
            value           uniform 0.01;
        }
        FAR
        {
              type            calculated;
            value           uniform 0.01;
        }
        IN
        {
              type            calculated;
            value           uniform 0.01;
        }
        OUT
        {
              type            calculated;
            value           uniform 0.01;
        }
        AXIS
        {
            type            symmetryPlane;
        }
        SYM
        {
            type            empty;
        }
        SYM_pos
        {
            type            wedge;
        }
        SYM_neg
        {
            type            wedge;
        }
    }
    
    

    这是我之前的计算结果,对比喷流轴线上的速度分布和湍动能分布
    result.png
    用Fluent和OpenFOAM的计算做了个对比,kOmegaSST模型两个软件算的差不多,但kOmega模型就差很多,除了换湍流模型其他的计算条件都是一样的。

    然后大家说的边界条件,我现在比较担心壁面处的计算会对结果产生很大影响吗?我查了一下kOmega模型,OpenFOAM里的omega的边界条件似乎只有omegaWallFunction,壁面附近使用壁面函数。我不关心壁面附近边界层的情况,是不是只要保证y+在30~100间就可以?壁面附近的网格间距过大或过小是否都会有问题?



  • 你对比下OpenFOAM跟Fluent的模型参数,看看kOmega的一样么?你的kOmegaSST模拟的结果非常好



  • 另外,你的omega里面用了epsilon的wall function?



  • @东岳 我天,之前一直以为自己用的omegaWallFunction。结果用错了竟然还能算下去,我先把这改了试试。



  • @东岳 老师我把壁面改成omegaWallFunction又跑了一遍,结果改善的不是很明显,我猜是壁面的计算对喷流流场计算影响有限。
    然后我去对比了Fluent中和 OpenFOAM中kOmega方程的区别,其实之前也比较过,发现其实大部分系数都一致,但有两个和流动相关的系数在OpenFOAM里做了简化。具体是这样的:
    标准kOmega方程:
    kom.png
    其他项和系数都一样,但是OpenFOAM里这两项1.png
    的系数和Fluent中存在差别。OpenFOAM把
    2.png
    分别定义为beta和Cmu,取值分别为0.072和0.09.也就是说忽略了3.png 的影响,将其默认为1.
    fluent中的这两项有更细节的计算方法:
    4.png
    由于我也找不到什么别的不同了,所以我就在OpenFOAM的kOmega模型里加上了这两项的计算,又重新跑了一遍case。这回跑出来的结果倒是和Fluent里的计算结果比较接近了,几次对比的结果如下:
    pic.png
    不过我也不敢确定我这样就是对的,或许这两项系数的修改对于我的算例影响很大,对于其他类型的流动影响就不是很大。所以也想看看大家有没有用OpenFOAM里的kOmega模型算过其他的算例,或许对于有些算例使用OpenFOAM默认的kOmega模型就可以算的很好,不需要考虑那两项系数的变化,对于有些算例需要考虑系数的变化,希望能确定一下OpenFOAM里标准kOmega模型的适用范围。
    我把我改的模型放上来,如果老师同学有兴趣可以用这个模型算一下试试。不过改的时候代码编得十分粗糙,就简单实现了功能,运算优化之类的都没有考虑。如果有人愿意帮我检查检查或者看看能不能优化就更好了,谢谢大家~mykOmega.zip



  • 你做的工作非常好。前几天我看到了一个人做简单的射流验证,刚才找了半天没找到。我继续找找


  • OpenFOAM讲师

    @ 东岳 论坛什么时候增加一个帖子收藏功能,有时候看到的好帖子,过了几天就找不到了



  • 有个书签的功能,更收藏一样,就是用起来麻烦,导致基本很难用。你说的确实是个问题



  • @东岳 您是在论坛上看到的吗?我论坛上有人用fluent算了一个平板射流plane free jet的问题,感觉做的蛮好的。
    http://www.cfd-china.com/topic/3457/fluent-模拟-plane-free-jet/2?_=1588670538009



  • 阿就那个,不过 @zousiyu 用Fluent算的,怪不得找半天没找到



  • omega模型适合计算高速流的问题吗?



  • @huoyanxiadebing 哈哈,其实也能看出来用kOmega模型算我这个算例结果和实验差别挺大的,算的不准,或许是不适合这种高速流动。
    做这个对比其实是想说openfoam里的kOmega模型和fluent里的标准kOmega模型不太一样,和我在书上看到的也不太一样,主要是有的系数做了简化。
    这种变化对我的算例的计算结果有较大影响,但对于其他的算例或者流动情况这种简化的影响可能就不会很明显。而且这种简化对计算的影响是积极的还是消极的也不好判断,对于有些流动可能简化了算的更准,对于有些流动可能不简化算的更准,这可以提醒我们以后用OpenFoam的kOmega模型算东西可能要考虑一下这种影响。万一也有朋友想对比一下fluent和openfoam的计算结果,也用了komega模型,也发现差别很大,那我们做的东西还能相互映证一下,没准还更有底气,还能少走个弯路。
    然后kOmega模型的使用范围,我在网上查到的是低雷诺数预测效果较好,但好像高雷诺数也还行。对于自由剪切流比较适合。不过这些概括都比较笼统,我也就只算过一个喷流,没啥工程经验,如果有新算例我也就只能按着网上的建议去试,然后合不合适,有的时候算了才知道,还得具体问题具体分析。我觉得湍流模型这块其实挺有意思的,以我的算例为例,为了算喷流好多人拿不同的湍流模型在那测试,各有各的优劣。不过我觉得我还得多学习学习,吸取前人的经验。



  • @shampooOpenFOAM里kOmega模型的问题 中说:

    明显

    从理论上来说,komega模型不适合高速流流动,你如果单纯的研究边界层或剪切流中这种低速流动,可以用komega模型进行计算,但是你计算的喷管流域中既包括高速流(湍流核心区)也包括低速流(边界层或剪切层),低速区和高速区的湍动粘度系数求解是不相同的,理应使用SST komega。另外,试湍流模型的方法非常不可取,在你计算之前你就应该知道所使用的湍流模型是否适合你的计算域,是直接求解边界层中的流动还是使用壁面函数的经验模型对这种分离流很大的数值结果肯定有影响。



  • @huoyanxiadebing 哇您解释的好清楚,学到了很多,感谢感谢!我积累的实在是太少了,还得加油呢



  • @shampoo 我的KOmega模型算封闭方腔湍流传热算例还处于发散状态 :136: ,不过从你的分享中学习了很多,就像你说的OpenFoam 中的系数被简化,然后我也试试Fluent中的边界条件,之前一直没想到。看了前辈没的分析,感觉很受启发~



  • :144: Yes 我同意 @huoyanxiadebing 说的。每个湍流模型有自己适用的流型。这方面需要特定的研究领域的专家才能有很深的理解。


Log in to reply
 

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