吾生有涯 学海无涯
析模有界 知识无界

OpenFOAM教程|06 歧管湍流流动

内容纲要

前面提到用simpleFoam计算稳态湍流流动,可以使用pisoFoam及pimpleFoam计算瞬态湍流流动。

注:这几个求解器只是计算纯流动问题,若涉及到其他物理现象,则需要用其他求解器,或自己动手改造代码。

1 案例描述

本案例利用simpleFoam计算歧管内流体流动。

案例实体计算模型如下图所示,

  • 在SCDM中进行清理并抽取流体区域,并进行边界命名,如下图所示(其他边界全部命名为walls)

  • 在Fluent Meshing中生成多面体网格,如下图所示

注:可以使用任何网格生成工具,推荐使用OpenFOAM自带工具snappyHexMesh生成网格。

  • 导出msh格式计算网格

注:需要取消选项Write Binary Files导出ascii格式的网格文件,否则后面网格转换会出错。

2 OpenFOAM设置

2.1 网格转换

  • 创建案例文件夹mainfold,将msh文件拷贝到当前文件夹中

cp -r $FOAM_TUTORIALS/incompressible/simpleFoam/pitzDaily .
  • 修改文件夹名称为mainfold

mv pitzDaily mainfold
  • 将前面生成的网格文件fluidmodel.msh拷贝到文件夹mainfold中

  • 终端进入文件夹mainfold中,执行命令将网格转化为OpenFOAM能识别的格式

fluent3DMeshToFoam fluidmodel.msh

注意:这里需要使用fluent3DMeshToFoam,使用前面提到的fluentMeshToFoam会出错。

转换成功后终端提示如下图所示。

  • 查看constant/polyMesh/boundary文件,检查边界名称及类型

FoamFile{   version     2.0;   format      ascii;   class       polyBoundaryMesh;   location    "constant/polyMesh";   object      boundary;}
5( inlet1 { type patch; nFaces 153; startFace 149104; } inlet2 { type patch; nFaces 153; startFace 149257; } inlet3 { type patch; nFaces 152; startFace 149410; } outlet { type patch; nFaces 171; startFace 149562; } walls { type wall; inGroups 1(wall); nFaces 5792; startFace 149733; })

这里的边界名称及类型在Fluent Meshing中完全定义好了,所以不需要进行任何干涉。

2.2 constant文件准备

这里拷贝的是pitzDaily算例,该算例是一个湍流模型测试算例。本案例采用kEpsilon模型进行计算,可以先删除掉0文件夹中的一些计算中用不到的文件(仅需保留k、epsilon、nut、p及U文件即可)。文件组织结构如图所示。

1、constant/transportProperties文件

该文件中指定流体的运动粘度,本案例流体介质为空气,设置其运动粘度为1e-5 m2/s,文件内容如下。

FoamFile{   version     2.0;   format      ascii;   class       dictionary;   location    "constant";   object      transportProperties;}
transportModel Newtonian;nu [0 2 -1 0 0 0 0] 1e-05;

2、constant/turbulenceProperties文件

该文件中指定湍流模型。这里采用kEpsilon模型计算湍流,文件内容如下所示。

FoamFile{   version     2.0;   format      ascii;   class       dictionary;   location    "constant";   object      turbulenceProperties;}
simulationType RAS;RAS{ RASModel kEpsilon; turbulence on; printCoeffs on;}

2.3 初始文件准备

1、p文件

该文件指定0时刻压力分布。

FoamFile{   version     2.0;   format      ascii;   class       volScalarField;   object      p;}
dimensions [0 2 -2 0 0 0 0];internalField uniform 0;
boundaryField{ inlet1 { type zeroGradient; }
inlet2 { type zeroGradient; }
inlet3 { type zeroGradient; }
outlet { type fixedValue; value uniform 0; }
walls { type zeroGradient; }
}

文件中指定了边界outlet出口压力为0 m2/s2,注意此处的压力量纲是Pa与kg/m3的比值。

2、0/U文件

该文件中指定速度分布。这里指定三个入口inlet1、inlet2及inlet3的速度为x轴负方向1 m/s。

FoamFile{   version     2.0;   format      ascii;   class       volVectorField;   object      U;}
dimensions [0 1 -1 0 0 0 0];internalField uniform (0 0 0);
boundaryField{ inlet1 { type surfaceNormalFixedValue; refValue uniform 1; }
inlet2 { type fixedValue; value uniform (1 0 0); }
inlet3 { type fixedValue; value uniform (1 0 0); }
outlet { type zeroGradient; }
walls { type noSlip; }}

文件中指定inlet1入口速度为法向1m/s,inlet2与inlet3入口速度为x方向1 m/s,对于本案例来说,两种定义方式是等效的。

3、k文件

k文件设置各边界的湍动能。

FoamFile{    version     2.0;    format      ascii;    class       volScalarField;    location    "0";    object      k;} dimensions      [0 2 -2 0 0 0 0]; internalField   uniform 0.01; boundaryField{    inlet1    {        type            fixedValue;        value           uniform 0.05;    }     inlet2    {        type            fixedValue;        value           uniform 0.05;    }     inlet3    {        type            fixedValue;        value           uniform 0.05;    }      outlet    {        type            zeroGradient;    }     walls    {        type            kqRWallFunction;        value           $internalField;    }}

4、epsilon文件

该文件设置各边界的湍流耗散率。

FoamFile{    version     2.0;    format      ascii;    class       volScalarField;    location    "0";    object      epsilon;} dimensions      [0 2 -3 0 0 0 0]; internalField   uniform 0.5; boundaryField{    inlet1    {        type            fixedValue;        value           $internalField;    }     inlet2    {        type            fixedValue;        value           $internalField;    }     inlet3    {        type            fixedValue;        value           $internalField;    }     outlet    {        type            zeroGradient;    }     walls    {        type            epsilonWallFunction;        value           $internalField;    }}

5、nut文件

该文件指定湍流粘度比。

FoamFile{    version     2.0;    format      ascii;    class       volScalarField;    location    "0";    object      nut;}  dimensions      [0 2 -1 0 0 0 0]; internalField   uniform 0; boundaryField{    inlet1    {        type            calculated;        value           uniform 0;    }     inlet2    {        type            calculated;        value           uniform 0;    }     inlet3    {        type            calculated;        value           uniform 0;    }     outlet    {        type            calculated;        value           uniform 0;    }     walls    {        type            nutkWallFunction;        value           uniform 0;    }}

2.4 system文件准备

1、controlDict文件

指定求解控制文件。

FoamFile{    version     2.0;    format      ascii;    class       dictionary;    location    "system";    object      controlDict;} application     simpleFoam; startFrom       startTime; startTime       0; stopAt          endTime; endTime         1; deltaT          0.01; writeControl    timeStep; writeInterval   20; purgeWrite      0; writeFormat     ascii; writePrecision  6; writeCompression off; timeFormat      general; timePrecision   6; runTimeModifiable true; functions{    #includeFunc residuals}

这里指定计算时间为1 s,本案例为稳态计算,所以这里的1 s并不是真实的时间。指定了时间步长为0.01 s,因此实际上是指定了迭代次数100次。

2、fvSchemes文件

指定求解算法。

FoamFile{    version     2.0;    format      ascii;    class       dictionary;    location    "system";    object      fvSchemes;}  ddtSchemes{    default         steadyState;} gradSchemes{    default         Gauss linear;} divSchemes{    default         none;    div(phi,U)      bounded Gauss linearUpwind grad(U);    div(phi,k)      bounded Gauss limitedLinear 1;    div(phi,epsilon) bounded Gauss limitedLinear 1;    div(phi,omega)  bounded Gauss limitedLinear 1;    div(phi,v2)     bounded Gauss limitedLinear 1;    div((nuEff*dev2(T(grad(U))))) Gauss linear;    div(nonlinearStress) Gauss linear;} laplacianSchemes{    default         Gauss linear corrected;} interpolationSchemes{    default         linear;} snGradSchemes{    default         corrected;} wallDist{    method meshWave;}

关于求解算法,以后再说。

3、fvSolution文件

指定求解方法。

FoamFile{    version     2.0;    format      ascii;    class       dictionary;    location    "system";    object      fvSolution;} solvers{    p    {        solver          GAMG;        tolerance       1e-06;        relTol          0.1;        smoother        GaussSeidel;    }     "(U|k|epsilon)"    {        solver          smoothSolver;        smoother        symGaussSeidel;        tolerance       1e-05;        relTol          0.1;    }} SIMPLE{    nNonOrthogonalCorrectors 0;    consistent      yes;     residualControl    {        p               1e-5;        U               1e-5;        "(k|epsilon)" 1e-5;    }} relaxationFactors{    equations    {        U               0.9;        ".*"            0.9;    }}

这里指定了p、U、k以及epsilon的残差为1e-5,当计算残差低于此值时结束计算。

2.5 开始计算

文件定义完毕后,即可运行命令simpleFoam执行计算。

simpleFoam

这里可以使用foamMonitor监测残差,只不过本机上gnuplot安装有问题,导致该命令无法使用。用excel绘制residuals.dat文件,如下图所示。

若对paraview不熟悉的话,可以利用foamToEnsight将结果数据转化为ensight格式,然后利用ensight进行后处理。

压力分布如图所示。

壁面上与三个入口相邻位置存在压力集中,需要进行处理,本文太长,以后再说怎么处理。


案例相关文件:

链接:

https://pan.baidu.com/s/1aEuY0kAXkL2agZpbRDMgjg

提取码:p3zk

本篇文章来源于微信公众号: CFD之道

赞(0) 打赏
版权声明:未经允许,请勿随意用于商业用途。
文章名称:《OpenFOAM教程|06 歧管湍流流动》
文章链接:https://www.topcfd.cn/12533/
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。
分享到

说两句 抢沙发

评论前必须登录!

 

觉得文章有用就打赏一下文章作者吧

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫

微信扫一扫

登录

找回密码

注册