【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內容,可微信掃描下方二維碼關注微信公衆號。

相關文章
相關標籤/搜索