网格运动与相对通量转换的问题



  • 大家好,最近重新研究interFoam,关于动网格的处理有些困惑,希望大家指点。

    若网格进行运动,首先interFoam.C中要运行如下内容:

    if (correctPhi)
    {
            // 计算绝对通量
             phi = mesh.Sf() & Uf();
    
            // 求解pcorr,利用其修正phi,保证质量守恒
             #include "correctPhi.H"
    
            // 绝对通量转换为相对通量
             fvc::makeRelative(phi, U);
    
             mixture.correct();
    }
    

    这段代码所做的工作我在注释中标注出来了,不知道是否准确。我的第一个问题是,计算绝对通量为什么不是如下代码:

    phi = fvc::interpolate(U) & mesh.Sf()
    

    按我的理解,直接用Uf()访问的是上一迭代得出的面上速度,网格运动后其不一定与新网格面在一个平面了,而fvc::interpolate(U)是按照更新的网格插值得出的,这样貌似更合理些?

    随后是求解相方程的内容,采用相对通量求解没有问题。

    #include "alphaControls.H"
    #include "alphaEqnSubCycle.H"
    
    mixture.correct();
    

    相方程求解后,我没有发现对rhoPhi采用类似makeRelative()的操作,即程序直接组建速度矩阵然后求解压力泊松方程,并在求解后才执行makeRelative(),位置在pEqn.H:70。这一点我没理解,为什么在动量方程的求解中未使用相对通量,而在求解后才显式地将phi转换为相对通量?

    最后还有个小问题,在求解完压力方程后,将phi转化为相对值之前,即pEqn.H:67,程序还对面上速度进行了更新:

    Uf() = fvc::interpolate(U);
    surfaceVectorField n(mesh.Sf()/mesh.magSf());
    Uf() += n*(phi/mesh.magSf() - (n & Uf()));
    

    后两句存在的意义是什么呢?尤其是最后一句,实在没想明白。

    劳烦大家指点下,我哪里理解有误还是哪个地方知识储备不够,这三个问题困扰我好几天了,查了不少资料也没找到原因,谢谢!


  • 版主 副教授

    面上速度本身就是相邻网格体心插值得到的吧。fvc:interpolate(U) 和 Uf()的区别是不是,只是,前一个时间步和后一个时间步的区别。

    rhoPhi就是密度的通量吧。可能是密度比较容易出现间断点?也可能像上一个的区别,只是之前的和之后的?

    这个区别好像就是显式的和隐式的区别。

    最后一个问题,看起来像是在综合算Uf()的值。Uf()的变化由两部分组成,一部分是由于坐标的变化,一部分是由于自身的变化。就是物质导数。原地不动也会变的那部分叫本地导数,因为运动导致变化的那部分叫迁移导数。那三行,第一行就是迁移导数,后两行是在算本地导数,加上去。第二行是算面上速度原本的方向。本来那个方向乘以面上法向量就是该速度在面法向的投影。第三行就这个方向上的速度算对Uf方向的速度增量。怎么算的还看不出来。



  • @bestucan 你好,非常感谢你的回复,我其实周日晚上就看到了,受到很大启发,也还有些不懂的地方,所以思考了两天才回复。

    第一个问题,我认为应该如你所说,是显式和隐式的区别;
    第二个问题,我将ALE框架下的积分形式的方程手动离散了一下,发现和MULES或isoAdvector中对应的代码一致,用的是相对通量求解的,而rhoPhi也是用相对通量组建的,所以不需要再次进行makeRelative操作;
    第三个问题,我还是没太明白,按照我的理解,fvc::intepolate(U)就应该直接是新的面上速度了。我认为最后一句是不是类似非正交修正的操作?(尤其是相邻网格体心连线没有经过面心的时候)


  • 版主 副教授

    @CFDngu 第三个更像是非正交修正的逆操作。

    假设修非正交修正前的向量是x,那么修正的方程是
    mesh.Sf()=x*mesh.magSf()
    向量乘以面法向量等于在面法向上的分量

    那么x的表达式就是
    x=mesh.Sf()/mesh.magSf()
    这就是那个n的方向。

    n的方向就是网格体心的方向。即使网格原地不动,这个方向的向量也会发生作用。改变该网格的体心位置的数值。

    n乘的这个(phi/mesh.magSf() - (n & Uf())),第一项也是个类似的逆操作,像是把总的量里减去迁移造成的,就是当地向量造成的,再去乘当地向量的方向n

    最多猜这么多了:chigua2:



  • @bestucan 好的,非常感谢,我再研究一下~


Log in to reply
 


CFD中文网 | 东岳流体学术 | 东岳流体商业 | 吉ICP备20003622号-1