求助:液池热毛细对流算例,已编译好求解器和算例,但就是和文献自编程序不一样



  • 在提问题之前,首先给大家科普一下热毛细对流

    6811441d-4ce5-4d00-9b20-c0b51df30da6-image.png

    当液池两端的温度不一样的时候,一端热一端冷,在液体表面张力的作用下,会产生热毛细流动。热毛细流动是空间微重力环境下的主要自然对流形式。

    表面张力会随着温度变化,温度高的地方表面张力低,温度低的地方表面张力高,表面张力不均匀成为驱动微重力流动的因素。由于表面张力又称毛细力,所以这种表面张力温度效应驱动流动,又称为热毛细流动,或者叫做Marangoni对流。

    液池的形状是下面这样

    4afccb0c-b5f5-430e-926a-582bb4af10fa-image.png

    这个液池上表面是自由液面,其他是墙壁,内外环给不同的温度,使其在自由面造成热毛细对流的效果,我参考了这个文献

    https://doi.org/10.1016/j.ijheatmasstransfer.2018.10.016

    当时就被他自由面上的温度场分布震惊了,怎么是五彩斑斓状!!!

    7dd84862-fe53-4bc6-877c-e55fb9655303-image.png

    按他的设置,OPENFOAM出来的自由面温度场是这样

    31fda71e-4948-4873-a0a6-f0316eddf143-image.png

    而且我昧心的感觉我这个结果还挺合理的。。。。。
    更有厉害的能做出更不可思议的场分布,还能转起来

    http://dx.doi.org/10.1016/j.ijheatmasstransfer.2017.05.066

    6db4485e-0e99-470e-b570-16fcaf576d55-image.png

    CASE实现起来很简单,无重力,用pimple算法,多了一个上自由面速度随温度梯度变化的边界条件

    21d48cba-c29b-4e40-89ab-6219e67e0588-image.png

    三维网格是200 40 14

    d873e696-56b3-405e-bad1-aa2a491e8a02-image.png

    case文件:传不上,求解器:也传不上。。。我微信13842091526,感兴趣的想算一下的加我啊,8核几十分钟就出结果



  • 液池热毛细对流算例,已编译好求解器和算例,但就是和文献自编程序不一样

    非常有意思的东西,具体什么对不上?



  • @东岳 老师你看它自由面温度场一块一块的高低分明,我这努力了好几天,写出的边界条件它温度均匀的扩散出去9f4af203-80de-4d3c-8b31-ed5697730a00-image.png



  • 这是按照文献给出的边界条件

    tmp<vectorField > marangoniFvPatchVectorField::snGrad() const
    {
    return this->patch().deltaCoeffs()*(*this - patchInternalField());
    }
    // Evaluate the field on the patch
    void marangoniFvPatchVectorField::evaluate()
    {
        //Info << "entering  marangoniFvPatchVectorField::evaluate()" << endl;
        if (!this->updated())
        {
    	//Info << "marangoniFvPatchVectorField::evaluate(): calling updatecoeffs" << endl;
            this->updateCoeffs();
        }
    
         vectorField nHat = this->patch().nf();
         vectorField pif = this->patchInternalField();
         scalarField deltas=this->patch().deltaCoeffs();
    
     	fvPatchField<vector> gradT =this->patch().lookupPatchField<volVectorField, vector>("gradT");
     	vectorField  gradT_internal = gradT.patchInternalField();
    	vectorField gradTplane= transform(I - sqr(nHat),gradT_internal);
     	vectorField pifplane= transform(I - sqr(nHat),pif);
     	fvPatchField<vector> gradC =this->patch().lookupPatchField<volVectorField, vector>("gradC");
     	vectorField  gradC_internal = gradC.patchInternalField();
     	vectorField gradCplane= transform(I - sqr(nHat),gradC_internal);
    
    	vectorField result=pifplane+(tmarangonicoeff_*gradTplane+cmarangonicoeff_*gradCplane)/deltas;
    
     	vectorField::operator=
     	    (
    	     result
     	     );
     
    
        transformFvPatchVectorField::evaluate();
    }
    


  • 哎我去,是不是应该用updatecoff隐式赋值边界条件



  • 信息量好大.. :xinlei:



  • 虽然没人关注但是还是做下最近研究的总结,以备后来人作参考少走弯路,经多次验证比较,文献中图278f3d70-5b79-4a7c-8e59-fb889d36c092-image.png
    可能为速度场,表面温度场怎么也出不来图中所示效果,代码有点小问题,不过不大总结完毕


  • OpenFOAM教授

    @麦迪文 文献竟然还有这种操作,给作者写个comment吧。



  • 近期在研究两相欧拉模型和做实验比较忙,稍后会把openfoam模拟的结果温度云图和速度云图传上来供大家分析下



  • @麦迪文 等着看云图


Log in to reply