MULES, CMULES and IMULES 测试


  • 网格教授 OpenFOAM教授 管理员

    对流项永远是个大问题,在纯对流问题中,显性的高阶格式是无条件不稳定的。于是耗散非常严重的upwind依然人见人爱。但在某些情况下,变量的耗散会引起数值计算的不精准。尤其在界面捕获的俩相流中,相传输方程为纯对流方程,一阶空间离散格式会导致相界面的模糊,但是高阶格式除了会产生相变量的越界导致计算发散。

    今天没事测试了一下各种MULES,算例非常简单,标量对流传输。结果见图吧。

    0_1512121538830_捕获2.JPG
    上图是中心差分无条件震荡(注意横坐标和时间点和下图都不同)

    0_1512121560960_捕获3.JPG
    上图是MULES的迎风插值

    0_1512121579905_捕获.JPG
    上图是MULES+中心插值,型线挺好。


    但是用复杂算例测试还是越界了 :big_mouth:
    想看越界的可以算算tutorials/basic/scalarTransportFoam/下面的pitzDaily算例,把扩散系数设置为0.


  • 网格教授 OpenFOAM教授 管理员

    高阶格式一直是CFDer的追求,在群体平衡模型矩方法领域,可实现性是个老大难,目前为了变量的有界只能使用一阶迎风。有一些人研究的高阶格式在2011年2013年和2017年年初分别发在了计算物理上。我在想MULES能不能用在我的领域上。


  • 网格教授 OpenFOAM教授 管理员

    对比一下MULES(FCT)和vanLeer格式。下面是某点的M0,这个点均有界。

    0_1512652947662_捕获.JPG

    另外一点的M0,vanLeer越界了

    0_1512653029253_捕获2.JPG

    整个流场的M0最小值,vanLeer越界了

    0_1512653067847_捕获3.JPG



  • 东岳老师,能否提个不情之请,可以分享下算例吗?我目前也在看对流项的差值格式,想学习下这方面的知识。


  • 网格教授 OpenFOAM教授 管理员

    算例非常简单,就是1维对流问题。不过可以给你个思路制作求解器。改编scalarTransportFoam

    #include "fvCFD.H"
    #include "simpleControl.H"
    #include "MULEStest.H"
    #include "FCT.H"
    
    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
    
    int main(int argc, char *argv[])
    {
        #include "setRootCase.H"
        #include "createTime.H"
        #include "createMesh.H"
    
        simpleControl simple(mesh);
    
        #include "createFields.H"
    
        // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
    
        Info<< "\nCalculating scalar transport\n" << endl;
    
        #include "CourantNo.H"
    
        while (simple.loop())
        {
            Info<< "\n\nTime = " << runTime.timeName() << nl << endl;
    
    		scalarField phiTout;
    
            while (simple.correctNonOrthogonal())
            {
    			phiT = phi * fvc::interpolate(T);
    
    			phiTout = phiT.ref();
    			Info << "phiT before MULES " << phiTout << nl << nl;
    
    			//MULEStest::explicitSolve(T, phi, phiT, 9, 0);
    			FCT(T, phi, phiT, 9, 0);
    
                //fvScalarMatrix TEqn
                //(
                //    fvm::ddt(T)
                //  + fvc::div(phiT)
                //);
                //TEqn.relax();
                //TEqn.solve();
            }
    
    		scalarField TOUTPUT = T.ref();
    
    		phiTout = phiT.ref();
    
    		Info << "\n\nT is " << TOUTPUT << nl;
    		Info << "phiT after MULES " << phiTout << nl;
    
            runTime.write();
        }
    
        //Info<< "End\n" << endl;
    
        return 0;
    }
    

    通过MULES学习插值格式太复杂了



  • @李东岳 好的,非常感谢东岳老师:happy:



  • @李东岳 MULES(FCT)格式是什么意思,用mules 的vanleer 和不用的对比吗


  • 网格教授 OpenFOAM教授 管理员

    MULES(FCT)

    MULES就是FCT的变种,区别在于限制器的求解和原始文献有点不同。使用FCT的时候,需要指定一种高阶格式,比如linear或者vanLeer


  • OpenFOAM讲师

    前辈,弱弱的问一句,这个分布图是用paraview做的么?像这种不同时刻的怎么做呢😂


  • 网格教授 OpenFOAM教授 管理员

    不,是gnuplot做的,目前在小岛等汽车,只能帮你到这里了:happy:


  • OpenFOAM讲师

    @李东岳 多谢前辈 我自己研究一下~



  • @李东岳 老师 我也想知道测试格式算例是啥样的?您写的上面代码解标量方程那个Matrix代码是不是不该注释掉啊


  • 网格教授 OpenFOAM教授 管理员

    @金石为开
    等回德国我回复你。MULES这个2018年应该可以写个解析出来。2016年就在计划中,但是有别的事情要搞。