【OpenFOAM v2006】正方形断面ダクトの二次流れの計算

OpenFOAM v2006で正方形断面ダクトに発生するプラントルの第二種二次流れの計算を行う

計算に使ったファイルはGithubにアップしてある
mtkbirdman.com/duct395

はじめに

矩形断面ダクトでは,レイノルズ応力の非等方性に起因して主流方向に垂直な断面に二次流が生じる

プラントルの第二種二次流れと呼ばれるこの流れは矩形部の角で特に顕著であり,角に向かう流れを生じる

参考
直管路内の乱流 (第二種二次流れの数値解析)

前回の記事(≫【OpenFOAM v2006】低Re数型非線形RANSモデルの実装)で非等方性のRANSモデルを実装したので,正方形断面の第二種二次流れを計算してみようと思う

モデル作成

OpenFOAMに矩形ダクトのチュートリアルはないようなので,channel395をベースに側面をすべてwallに変更したものを用いる

メッシュ作成

system/blockMeshDict
/*--------------------------------*- C++ -*----------------------------------*\
| =========                 |                                                 |
| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
|  \\    /   O peration     | Version:  v1812                                 |
|   \\  /    A nd           | Web:      www.OpenFOAM.com                      |
|    \\/     M anipulation  |                                                 |
\*---------------------------------------------------------------------------*/
FoamFile
{
    version     2.0;
    format      ascii;
    class       dictionary;
    object      blockMeshDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

scale   1;

vertices
(
    (0 0 0)
    (4 0 0)
    (0 1 0)
    (4 1 0)
    (0 2 0)
    (4 2 0)

    (0 0 2)
    (4 0 2)
    (0 1 2)
    (4 1 2)
    (0 2 2)
    (4 2 2)

    (0 0 1)
    (4 0 1)
    (0 1 1)
    (4 1 1)
    (0 2 1)
    (4 2 1)
);

blocks
(
    hex (0 1 3 2 12 13 15 14)   (60 36 36) simpleGrading (1 36 36)
    hex (2 3 5 4 14 15 17 16)   (60 36 36) simpleGrading (1 -36 36)
    hex (12 13 15 14 6 7 9 8)   (60 36 36) simpleGrading (1 36 -36)
    hex (14 15 17 16 8 9 11 10) (60 36 36) simpleGrading (1 -36 -36)
);

edges
(
);

boundary
(
    bottomWall
    {
        type            wall;
        faces           ((0 1 13 12)(12 13 7 6));
    }
    topWall
    {
        type            wall;
        faces           ((4 16 17 5)(16 10 11 17));
    }

    sideWalls
    {
        type            wall;
        faces           ((0 1 3 2)(2 3 5 4)(6 7 9 8)(8 9 11 10));
    }

    inlet
    {
        type            cyclic;
        neighbourPatch  outlet;
        faces           ((0 2 14 12)(2 4 16 14)(14 16 10 8)(12 14 8 6));
    }
    outlet
    {
        type            cyclic;
        neighbourPatch  inlet;
        faces           ((1 3 15 13)(3 5 17 15)(15 17 11 9)(13 15 9 7));
    }
);

mergePatchPairs
(
);

// ************************************************************************* //

適当にメッシュを切って適当にGradingをつけてみた

条件設定

主要なものだけ

ここにないものはGithubのコードを参照

0/epsilon
/*--------------------------------*- C++ -*----------------------------------*\
| =========                 |                                                 |
| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
|  \\    /   O peration     | Version:  v2006                                 |
|   \\  /    A nd           | Website:  www.openfoam.com                      |
|    \\/     M anipulation  |                                                 |
\*---------------------------------------------------------------------------*/
FoamFile
{
    version     2.0;
    format      ascii;
    class       volScalarField;
    object      epsilon;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

dimensions      [0 2 -3 0 0 0 0];

internalField   uniform 1;

boundaryField
{
    bottomWall
    {
        type            epsilonLowReWallFunction;
        value           $internalField;
    }
    topWall
    {
        type            epsilonLowReWallFunction;
        value           $internalField;
    }
    sideWalls
    {
        type            epsilonLowReWallFunction;
        value           $internalField;
    }
    inlet
    {
        type            cyclic;
    }
    outlet
    {
        type            cyclic;
    }
}

// ************************************************************************* //

epsilonLowReWallFunctionは自作の壁関数
【OpenFOAM v2006】低Re数型非線形RANSモデルの実装

0/k
/*--------------------------------*- C++ -*----------------------------------*\
| =========                 |                                                 |
| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
|  \\    /   O peration     | Version:  v1812                                 |
|   \\  /    A nd           | Web:      www.OpenFOAM.com                      |
|    \\/     M anipulation  |                                                 |
\*---------------------------------------------------------------------------*/
FoamFile
{
    version     2.0;
    format      ascii;
    class       volScalarField;
    location    "1";
    object      k;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

dimensions      [0 2 -2 0 0 0 0];

internalField   uniform 1;

boundaryField
{
    bottomWall
    {
        type            fixedValue;
        value           uniform 1e-32;
    }
    topWall
    {
        type            fixedValue;
        value           uniform 1e-32;
    }
    sideWalls
    {
        type            fixedValue;
        value           uniform 1e-32;
    }
    inlet
    {
        type            cyclic;
    }
    outlet
    {
        type            cyclic;
    }
}

// ************************************************************************* //

壁面では滑りなし条件\(k=0\)だが,0割りを防ぐために小さい値を指定

0/nut
/*--------------------------------*- C++ -*----------------------------------*\
| =========                 |                                                 |
| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
|  \\    /   O peration     | Version:  v1812                                 |
|   \\  /    A nd           | Web:      www.OpenFOAM.com                      |
|    \\/     M anipulation  |                                                 |
\*---------------------------------------------------------------------------*/
FoamFile
{
    version     2.0;
    format      ascii;
    class       volScalarField;
    location    "1";
    object      nut;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

dimensions      [0 2 -1 0 0 0 0];

internalField   uniform 0;

boundaryField
{
    bottomWall
    {
        type            nutLowReWallFunction;
        value           uniform 0;
    }
    topWall
    {
        type            nutLowReWallFunction;
        value           uniform 0;
    }
    sideWalls
    {
        type            nutLowReWallFunction;
        value           uniform 0;
    }
    inlet
    {
        type            cyclic;
    }
    outlet
    {
        type            cyclic;
    }
}

// ************************************************************************* //

組み込みのnutLowReWallFunctionを使用

constant/turbulenceProperties
/*--------------------------------*- C++ -*----------------------------------*\
| =========                 |                                                 |
| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
|  \\    /   O peration     | Version:  v2006                                 |
|   \\  /    A nd           | Website:  www.openfoam.com                      |
|    \\/     M anipulation  |                                                 |
\*---------------------------------------------------------------------------*/
FoamFile
{
    version         2;
    format          ascii;
    class           dictionary;
    location        "constant";
    object          turbulenceProperties;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

simulationType  RAS;

RAS
{
    RASModel        AJL2005;
    //RASModel        LamBremhorstKE;
    turbulence      on;
    printCoeffs     on;
}

// ************************************************************************* //

自作の非線形RANSモデルAJL2005と,比較として組み込みの低Re数型線形RANSモデルLamBremhorstKEを回してみる

system/controlDict
/*--------------------------------*- C++ -*----------------------------------*\
| =========                 |                                                 |
| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
|  \\    /   O peration     | Version:  v1812                                 |
|   \\  /    A nd           | Web:      www.OpenFOAM.com                      |
|    \\/     M anipulation  |                                                 |
\*---------------------------------------------------------------------------*/
FoamFile
{
    version     2.0;
    format      ascii;
    class       dictionary;
    location    "system";
    object      controlDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

application     simpleFoam;
startFrom       startTime;
startTime       0;
stopAt          endTime;
endTime         5000;
deltaT          1;
writeControl    timeStep;
writeInterval   5000;
purgeWrite      0;
writeFormat     ascii;
writePrecision  6;
writeCompression off;
timeFormat      general;
timePrecision   6;
runTimeModifiable true;

functions
{
    #includeFunc    residuals
    #includeFunc    "sample"
    #includeFunc    "turbulenceFields"
    #includeFunc    "wallShearStress"
}

libs
(
    "libmyTurbulenceModels.so"
    "libmyWallFunctions.so"
);

// ************************************************************************* //

ぶっちゃけ5000回も計算する必要ない.2000回くらいで十分

Allrun
#!/bin/sh

cd ${0%/*} || exit 1                        # Run from this directory
. $WM_PROJECT_DIR/bin/tools/RunFunctions    # Tutorial run functions
#------------------------------------------------------------------------------ 

runApplication blockMesh
runApplication decomposePar -cellDist
runParallel $(getApplication)
runApplication reconstructPar -latestTime
runApplication postChannel

exit

#------------------------------------------------------------------------------

計算実行

./Allrunで計算を実行する

AJL2005の残差の推移はこんな感じ

2000回を超えたくらいで残差が収束していることがわかる

結果

paraViewで可視化した結果を示す

まずはAJL2005で計算した流れ場から

参考文献に書いてあるような角に向かう二次流れが発生している

次にLamBremhorstKEで計算した流れ場

線形モデルでは応力テンソルの非等方性を表現できないので二次流れは発生していない

まとめ

正方形断面ダクトの二次流れが計算できた

自分が作ったものでこういう事実を確認・検証できるのは面白い

Sponsored Link

コメント

タイトルとURLをコピーしました