• 【OpenFOAM案例】02 自己动手


    前言:很多人说OpenFOAM很难,要啃上很多的理论书籍,什么流体力学、计算流体力学、矩阵理论、线性代数、数值计算、C++程序设计神马的,看看光这一堆书就能吓倒绝大多数的人。其实我们并不一定要从这些基础的东西入手,我觉得要学习使用一个工具,首先使它运转起来才是最靠谱的。通过大量实例练习,做多了自然就能有所感悟。

    前面讲到了利用icoFoam求解器计算弯曲管道中流体混合问题。现在来自己动手做一个简单的案例,还是利用icoFoam求解器。icoFoam求解器计算的是瞬态不可压层流流动问题,是OpenFOAM中最简单的求解器之一。

    关于此求解器内部实现原理,我们以后再慢慢剖析,一开始就讲一大堆的公式推导会吓坏小朋友的。闲话少说,我们来开始我们的案例。

    案例描述

    一个非常简单的管道流动问题。我们不强调问题多复杂,只关注OpenFOAM解决问题的思路。

    流体流经一个直径0.01m,长度0.5m的管道,计算其内部流场。流体介质为水,密度1000kg/m3,动力粘度0.001 pa.s,入口流速0.1 m。

    雷诺数:

    [Re= frac{ ho u D}{mu} = frac{1000 imes 0.1 imes 0.01}{0.001} =1000 ]

    几何及网格如图所示。在ICEM CFD中创建几何并划分网格,各边界命名如图所示。生成并输出网格pipe.msh。

    OpenFOAM准备

    本案例采用icoFoam求解器进行求解。因此先从tutorials文件夹中拷贝一个icoFoam模板,我们这里还是使用前面的elbow文件夹。

    在此之前,先创建一个工作文件夹。我用命令在run路径下创建文件夹pipe。

    mkdir $FOAM_RUN/pipe
    

    之后利用命令copy一个elbow文件夹到pipe下面。

    cp -r $FOAM_TUTORIALS/incompressible/icoFoam/elbow/ $FOAM_RUN/pipe
    

    这样的话,pipe文件夹下就有了elbow文件夹。如果有洁癖的话,可以把elbow文件夹命名为pipe,或者把elbow文件夹下的文件copy到pipe文件夹下,然后删除掉elbow。这里懒得折腾,直接进入到elbow路径下,并把前面生成的pipe.msh文件拷贝到elbow文件夹下。

    网格转换

    进入到elbow目录下,利用命令:

    fluentMeshToFoam pipe.msh
    

    此命令将网格pipe.msh转化为OpenFOAM能够识别的网格文件。

    elbow目录如下所示:

    ├── 0
    │   ├── p
    │   └── U
    ├── Allclean
    ├── Allrun
    ├── constant
    │   ├── polyMesh
    │   │   ├── boundary
    │   │   ├── cellZones
    │   │   ├── faces
    │   │   ├── faceZones
    │   │   ├── neighbour
    │   │   ├── owner
    │   │   ├── points
    │   │   └── pointZones
    │   └── transportProperties
    ├── elbow.msh
    ├── pipe.msh
    └── system
        ├── controlDict
        ├── foamDataToFluentDict
        ├── fvSchemes
        └── fvSolution
     
    4 directories, 19 files
    

    此时可以查看polyMesh文件夹下的boundary文件。文件内容为:

    FoamFile
    {
        version     2.0;
        format      ascii;
        class       polyBoundaryMesh;
        location    "constant/polyMesh";
        object      boundary;
    }
    // * * * * * * * * * * * * * * //
     
    3
    (
        INLET
        {
            type            patch;
            nFaces          288;
            startFace       210864;
        }
        OUTLET
        {
            type            patch;
            nFaces          288;
            startFace       211152;
        }
        WALL
        {
            type            wall;
            inGroups        1(wall);
            nFaces          7968;
            startFace       211440;
        }
    )
    

    检查文件边界名称分别为:INLET、OUTLET以及WALL。这些是我们在ICEM CFD中定义的Part名称。此文件不需要修改。

    设置p文件与U文件

    0文件夹中包含有p文件和U文件。

    先利用命令打开p文件,删除一些没用的边界,修改其内容为:

    FoamFile
    {
        version     2.0;
        format      ascii;
        class       volScalarField;
        object      p;
    }
    // * * * * * * * * * * * * //
     
    dimensions      [0 2 -2 0 0 0 0];
     
    internalField   uniform 0;
     
    boundaryField
    {
        INLET
        {
            type            zeroGradient;
        }
     
        OUTLET
        {
            type            fixedValue;
            value           uniform 0;
        }
     
        WALL
        {
            type            zeroGradient;
        }
     
    }
    

    再打开U文件,修改其内容为:

    FoamFile
    {
        version     2.0;
        format      ascii;
        class       volVectorField;
        object      U;
    }
    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
     
    dimensions      [0 1 -1 0 0 0 0];
     
    internalField   uniform (0 0 0);
     
    boundaryField
    {
        INLET
        {
            type            fixedValue;
            value           uniform (0.1 0 0);
        }
        OUTLET
        {
            type            zeroGradient;
        }
        WALL
        {
            type            noSlip;
        }
    }
    

    这里修改INLET边界的速度为x方向0.1 m/s。

    修改transportProperties文件

    此文件中设置一些常数项,本案例只需要设置运动粘度即可。

    FoamFile
    {
        version     2.0;
        format      ascii;
        class       dictionary;
        location    "constant";
        object      transportProperties;
    }
    // * * * * * * * * * * * * * * * * * * * * * * * //
     
    nu              [0 2 -1 0 0 0 0] 1e-6;
    

    注意这里设置的是运动粘度,其量纲单位是m2/s。

    设置controlDict文件

    打开controlDict文件

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

    计算

    回到elbow目录下,运行命令:

    icoFoam 
    

    也可以用并行计算:

    mpiexec -n 6 icoFoam
    

    利用6个cpu进行计算。

    此时可以利用命令监测残差:

    foamMonitor -l postProcessing/residuals/0/residuals.dat
    

    注意:此方法是建立在已安装gnuplot的基础之上,否则是看不到残差的。我的机器上blueCFD使用此命令出错,但是在虚拟机中用OpenFOAM没有任何问题,我不清楚是gnuplot没安装好还是其他什么原因。看不到残差曲线的,将就着看输出的数据好了。

    后处理

    输入命令:

    paraFoam
    

    软件自动启动ParaView,可观察剖面上速度分布云图,如图所示。


    更多关于CFD内容,可微信扫描下方二维码关注微信公众号。

  • 相关阅读:
    Oracle-学习笔记(==》集合函数与分组四)
    Mysql--学习笔记(==》简单查询三)
    Mysql-学习笔记(==》插入修改数据二)
    Mysql-学习笔记(==》建表修改一)
    EasyUI的DataGrid 打印导出
    SQL 中ROLLUP 用法
    easyui commbox嵌入一个checkbox的实现
    Easyui Layout Center 全屏方法扩展
    Datagrid扩展方法InitEditGrid{支持单元格编辑}
    Datagrid扩展方法onClickCell{easyui-datagrid-扩充-支持单元格编辑}
  • 原文地址:https://www.cnblogs.com/LSCAX/p/7074325.html
Copyright © 2020-2023  润新知