【OpenFOAM案例】02 本身动手

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

前面讲到了利用icoFoam求解器计算弯曲管道中流体混合问题。如今来本身动手作一个简单的案例,仍是利用icoFoam求解器。icoFoam求解器计算的是瞬态不可压层流流动问题,是OpenFOAM中最简单的求解器之一。shell

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

案例描述

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

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

雷诺数:
\[ Re= \frac{\rho u D}{\mu} = \frac{1000 \times 0.1 \times 0.01}{0.001} =1000 \]
几何及网格如图所示。在ICEM CFD中建立几何并划分网格,各边界命名如图所示。生成并输出网格pipe.msh。post

OpenFOAM准备

本案例采用icoFoam求解器进行求解。所以先从tutorials文件夹中拷贝一个icoFoam模板,咱们这里仍是使用前面的elbow文件夹。学习

在此以前,先建立一个工做文件夹。我用命令在run路径下建立文件夹pipe。spa

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文件夹下。code

网格转换

进入到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内容,可微信扫描下方二维码关注微信公众号。

相关文章
相关标签/搜索