50
Fumiya Nozaki 最終更新日: 2015年4月26日 日本語版 OpenFOAM 乱流モデル Turbulence Models

Turbulence Models in OpenFOAM

Embed Size (px)

Citation preview

Page 1: Turbulence Models in OpenFOAM

Fumiya Nozaki

最終更新日: 2015年4月26日

日本語版

OpenFOAM

乱流モデル

Turbulence Models

Page 2: Turbulence Models in OpenFOAM

2

Chapter 1.

OpenFOAM の乱流モデル

Page 3: Turbulence Models in OpenFOAM

3

乱流モデルのソースコードのディレクトリ

乱流モデルのソースコードのディレクトリ: $FOAM_SRC/turbulenceModels

非圧縮性流れ計算用のモデル

圧縮性流れ計算用のモデル

Page 4: Turbulence Models in OpenFOAM

4

乱流モデルのソースコードのディレクトリ

非圧縮性流れ計算用の乱流モデル: $FOAM_SRC/turbulenceModels/incompressible

• RAS ディレクトリ Reynolds-averaged Navier-Stokes (RANS) の各モデルのクラスの ソースファイル (~.C) とヘッダファイル (~.H) が格納されています.

• LES ディレクトリ Large eddy simulation (LES) の各モデルのクラスの ソースファイルとヘッダファイルが格納されています.

Page 5: Turbulence Models in OpenFOAM

圧縮性流れ計算用の乱流モデル: $FOAM_SRC/turbulenceModels/compressible

• RAS ディレクトリ Reynolds-averaged Navier-Stokes (RANS) の各モデルのクラスの ソースファイル (~.C) とヘッダファイル (~.H) が格納されています.

• LES ディレクトリ Large eddy simulation (LES) の各モデルのクラスの ソースファイルとヘッダファイルが格納されています.

5

乱流モデルのソースコードのディレクトリ

Page 6: Turbulence Models in OpenFOAM

6

使用可能な乱流モデル

ソルバーにより,使用できる乱流モデルが異なります. • RANS モデルのみ使用可能なソルバー

• RANS モデルに加えて,LES モデルも使用可能なソルバー

simpleFoam, SRFSimpleFoam, boundaryFoam, porousSimpleFoam, buoyantSimpleFoam,

buoyantBoussinesqSimpleFoam, buoyantBoussinesqPimpleFoam, and other solvers

pimpleFoam, pimpleDyMFoam, SRFPimpleFoam, pisoFoam, buoyantPimpleFoam,

chtMultiRegionFoam, chtMultiRegionSimpleFoam, and other solvers

Page 7: Turbulence Models in OpenFOAM

7

使用可能な乱流モデル

ソルバーがどちらのタイプかは,ほとんどの場合, createFields.H ファイルの以下の記述で確認できます. • RANS モデルのみ使用可能なソルバー

• RANS モデルに加えて,LES モデルも使用可能なソルバー

autoPtr<incompressible::turbulenceModel> turbulence

(

incompressible::turbulenceModel::New(U, phi, laminarTransport)

);

autoPtr<incompressible::RASModel> turbulence

(

incompressible::RASModel::New(U, phi, laminarTransport)

);

Page 8: Turbulence Models in OpenFOAM

8

乱流モデルの設定ファイル

2つのタイプのソルバーでは,使用する乱流モデルの指定に必要な 設定ファイルが異なります. • RANS モデルのみ使用可能なソルバーの場合

- constant/RASProperties のみ必要 • RANS モデルに加えて,LES モデルも使用可能なソルバーの場合

- constant/turbulenceProperties

RANS 計算(RASModel),LES 計算(LESModel),層流計算(laminar) のどの計算を行うのかをこのファイルで指定します.

加えて - constant/LESProperties (LES 計算を行う場合に必要) - constant/RASProperties (RANS 計算を行う場合に必要)

層流計算の場合には,constant/turbulenceProperties のみ必要です.

Page 9: Turbulence Models in OpenFOAM

9

乱流モデルの設定ファイル:turbulenceProperties

/*--------------------------------*- C++ -*----------------------------------*¥

| ========= | |

| ¥¥ / F ield | OpenFOAM: The Open Source CFD Toolbox |

| ¥¥ / O peration | Version: 2.3.0 |

| ¥¥ / A nd | Web: www.OpenFOAM.org |

| ¥¥/ M anipulation | |

¥*---------------------------------------------------------------------------*/

FoamFile

{

version 2.0;

format ascii;

class dictionary;

location "constant";

object turbulenceProperties;

}

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

simulationType RASModel;

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

simulationType RASModel simulationType LESModel simulationType laminar

: RANS 計算の場合 : LES 計算の場合 : 層流計算の場合

Page 10: Turbulence Models in OpenFOAM

10

乱流モデルの設定ファイル:RASProperties

/*--------------------------------*- C++ -*----------------------------------*¥

| ========= | |

| ¥¥ / F ield | OpenFOAM: The Open Source CFD Toolbox |

| ¥¥ / O peration | Version: 2.3.0 |

| ¥¥ / A nd | Web: www.OpenFOAM.org |

| ¥¥/ M anipulation | |

¥*---------------------------------------------------------------------------*/

FoamFile

{

version 2.0;

format ascii;

class dictionary;

location "constant";

object RASProperties;

}

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

RASModel kEpsilon;

turbulence on;

printCoeffs on;

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

• RASModel: 計算に使用する RANS モデルを指定 • turbulence: 乱流計算 (on) と層流計算 (off) の 切り替え

• printCoeffs: ソルバー開始時にモデル定数を ターミナルへ標準出力するか否かのコントロール

Page 11: Turbulence Models in OpenFOAM

/*--------------------------------*- C++ -*----------------------------------*¥

| ========= | |

| ¥¥ / F ield | OpenFOAM: The Open Source CFD Toolbox |

| ¥¥ / O peration | Version: 2.3.0 |

| ¥¥ / A nd | Web: www.OpenFOAM.org |

| ¥¥/ M anipulation | |

¥*---------------------------------------------------------------------------*/

FoamFile

{

version 2.0;

format ascii;

class dictionary;

location "constant";

object RASProperties;

}

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

RASModel hogehoge;

turbulence on;

printCoeffs on;

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

11

RANS モデルのリストの表示

RASModel に適当な名前を指定して,ソルバーを実行すると, 使用可能な RANS モデルのリストを表示してくれます.

次のページに続きます.

Page 12: Turbulence Models in OpenFOAM

12

RANS モデルのリストの表示

--> FOAM FATAL ERROR: Unknown RASModel type hogehoge Valid RASModel types: 18 ( LRR LamBremhorstKE LaunderGibsonRSTM LaunderSharmaKE LienCubicKE LienCubicKELowRe LienLeschzinerLowRe NonlinearKEShih RNGkEpsilon SpalartAllmaras kEpsilon kOmega kOmegaSST kkLOmega laminar qZeta realizableKE v2f )

例えば,simpleFoam の場合, 非圧縮流れ計算用の RANS モデル が 18種類 選択可能であることが分かります. laminar は,層流計算用なので, 実質 17 種類のモデルです.

Page 13: Turbulence Models in OpenFOAM

13

モデル定数

それぞれの乱流モデルには,モデル定数が定義されています.

例えば,非圧縮性流れ計算用の 標準 k-ε モデル (kEpsilon) の場合

ソースコードにデフォルト値が定義されています: $FOAM_SRC/turbulenceModels/incompressible/RAS/kEpsilon

𝑅𝑘 = 𝑣𝑗𝜕𝑘

𝜕𝑥𝑗−

𝜕

𝜕𝑥𝑗𝜈 +

𝜈𝑡𝜎𝑘

𝜕𝑘

𝜕𝑥𝑗− 𝑃𝑘 + 𝜀 = 0

𝑅𝜀 = 𝑣𝑗𝜕𝜀

𝜕𝑥𝑗−

𝜕

𝜕𝑥𝑗𝜈 +

𝜈𝑡𝜎𝜀

𝜕𝜀

𝜕𝑥𝑗− 𝑐1𝑃𝑘

𝜀

𝑘+ 𝑐2

𝜀2

𝑘= 0

𝜈𝑡 = 𝑐𝜇𝑘2

𝜀

:OpenFOAMでの変数名

C1 C2 Cmu sigmaEps

Page 14: Turbulence Models in OpenFOAM

14

モデル定数の確認

設定ファイル RASProperties において,printCoeffs の設定を on にすることで,ソルバー実行時にモデル定数値を標準出力できます.

Create time Create mesh for time = 0 Reading field p Reading field U Reading/calculating face flux field phi Selecting incompressible transport model Newtonian Selecting RAS turbulence model kEpsilon kEpsilonCoeffs { Cmu 0.09; C1 1.44; C2 1.92; sigmaEps 1.4; } No finite volume options present

Page 15: Turbulence Models in OpenFOAM

15

モデル定数の編集

モデル定数をデフォルト値から変更したい場合 1. 前ページのようにデフォルト値を表示させて、 2. これを RASProperties ファイルにコピー & ペーストして, 3. デフォルト値から変更したい変数の値を編集

FoamFile { version 2.0; format ascii; class dictionary; location "constant"; object RASProperties; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // RASModel kEpsilon; turbulence on; printCoeffs on; kEpsilonCoeffs { Cmu 0.09; C1 1.44; C2 1.92; sigmaEps 1.4; } // ************************************************************************* //

デフォルト値は、 標準的な値が設定されているので 変更が必要な機会は あまり多くないかもしれません.

Page 16: Turbulence Models in OpenFOAM

16

Chapter 2.

RANS モデルのクラスの設計

Page 17: Turbulence Models in OpenFOAM

17

乱流モデルのクラスの関係

/*---------------------------------------------------------------------------*¥

Class kEpsilon Declaration

¥*---------------------------------------------------------------------------*/

class kEpsilon

:

public RASModel

{

protected:

// Protected data

// Model coefficients

dimensionedScalar Cmu_;

dimensionedScalar C1_;

dimensionedScalar C2_;

dimensionedScalar sigmaEps_;

派生クラス名

基底クラス名

kEpsilon クラスは,RASModel クラスの派生クラスです.

kOmega クラスなど,その他の RANS モデルのクラスも

RASModel の派生クラスです.

RASModel

kEpsilon

親クラス

子クラス

継承

Page 18: Turbulence Models in OpenFOAM

18

kEpsilon クラスのメンバ

kEpsilon クラスのメンバ

• データメンバ - モデル定数 (Cmu_,C1_,C2_,sigmaEps_) - 乱流変数 (k_,epsilon_,nut_) - Runtime タイプ名

• コンストラクタ,デストラクタ

• メンバ関数

- DkEff(),DepsilonEff(): 乱流変数の拡散係数 - R(): レイノルズ応力テンソル - divDevReff(volVectorField& U): 拡散項の離散化 - correct(): 乱流変数 𝑘 と 𝜀 の輸送方程式を解いて, 渦粘性係数 𝜈𝑡 を計算

など

Page 19: Turbulence Models in OpenFOAM

19

メンバ関数: correct()

RANS モデルにより,渦粘性係数の計算方法は異なります.

turbulenceModel クラスは,correct() を純粋仮想関数として定義した 抽象クラスです.

RASModel

kEpsilon

継承

turbulenceModel

継承

virtual void correct() = 0;

void turbulenceModel::correct()

{

transportModel_.correct();

if (mesh_.changing())

{

y_.correct();

}

}

Page 20: Turbulence Models in OpenFOAM

20

メンバ関数: correct()

RANS モデルにより,渦粘性係数の計算方法は異なります.

RASModel クラスでも,correct() を仮想関数として定義しています.

virtual void correct();

void RASModel::correct()

{

turbulenceModel::correct();

}

RASModel

kEpsilon

継承

turbulenceModel

継承

Page 21: Turbulence Models in OpenFOAM

21

メンバ関数: correct()

RANS モデルにより,渦粘性係数の計算方法は異なります.

基底クラスの仮想関数 correct() を再定義することにより, RANS モデルの渦粘性計算をカスタマイズしています.

void kEpsilon::correct()

{

RASModel::correct();

if (!turbulence_)

{

return;

}

volScalarField G(GName(), nut_*2*magSqr(symm(fvc::grad(U_))));

// Update epsilon and G at the wall

epsilon_.boundaryField().updateCoeffs();

// Dissipation equation

tmp<fvScalarMatrix> epsEqn

(

fvm::ddt(epsilon_)

+ fvm::div(phi_, epsilon_)

- fvm::laplacian(DepsilonEff(), epsilon_)

==

C1_*G*epsilon_/k_

- fvm::Sp(C2_*epsilon_/k_, epsilon_)

);

epsEqn().relax();

epsEqn().boundaryManipulate(epsilon_.boundaryField());

solve(epsEqn);

bound(epsilon_, epsilonMin_);

(以下省略)

RASModel

kEpsilon

継承

turbulenceModel

継承

Page 22: Turbulence Models in OpenFOAM

22

Chapter 3.

乱流モデルのカスタマイズ

Page 23: Turbulence Models in OpenFOAM

23

カスタマイズの手順

Chalmers 大学の Håkan Nilsson 先生の資料 [1] の手順でカスタマイズが可能です.

ここでは,この資料の手順にしたがって kEpsilon モデルのカスタマイズを行ってみます.

kEpsilon モデルのソースコードをコピーします.

$ cd $WM_PROJECT_DIR

$ cp -r --parents src/turbulenceModels/incompressible/RAS/kEpsilon ¥ > $WM_PROJECT_USER_DIR

$ cd $WM_PROJECT_USER_DIR/src/turbulenceModels/incompressible/RAS

$ mv kEpsilon mykEpsilon

補足説明 • 入力コマンドが長くなる場合には,バックスラッシュ『¥』で改行を行い,コマンド入力を複数行に分けることができます.

• WM_PROJECT_USER_DIR などの OpenFOAM の環境変数は,etc/bashrc ファイルで定義されています.

Page 24: Turbulence Models in OpenFOAM

24

カスタマイズの手順

$FOAM_SRC/turbulenceModels/incompressible/RAS/Make を参考にして,ビルドに必要な Make/files と Make/options ファイルを準備します.

Make ディレクトリを作成します.

$ mkdir Make Make ディレクトリの下に files という名前のファイルを作成します.このファイルに,次の2行を記述して保存します.

mykEpsilon/mykEpsilon.C LIB = $(FOAM_USER_LIBBIN)/libmyIncompressibleRASModels

Page 25: Turbulence Models in OpenFOAM

25

カスタマイズの手順

Make ディレクトリの下に options という名前のファイルを作成します. このファイルには,以下のように記述します.

EXE_INC = ¥ -I$(LIB_SRC)/turbulenceModels ¥ -I$(LIB_SRC)/transportModels ¥ -I$(LIB_SRC)/finiteVolume/lnInclude ¥ -I$(LIB_SRC)/meshTools/lnInclude ¥ -I$(LIB_SRC)/turbulenceModels/incompressible/RAS/lnInclude LIB_LIBS = ¥ -lincompressibleTurbulenceModel ¥ -lfiniteVolume ¥ -lmeshTools

ソースコードのファイル名を Make/files の記述に合わせて修正します. $ cd mykEpsilon $ mv kEpsilon.C mykEpsilon.C $ mv kEpsilon.H mykEpsilon.H $ rm kEpsilon.dep

Page 26: Turbulence Models in OpenFOAM

26

カスタマイズの手順

ソースコード内のクラス名を修正します. $ sed -i -e "s/kEpsilon/mykEpsilon/g" mykEpsilon.C $ sed -i -e "s/kEpsilon/mykEpsilon/g" mykEpsilon.H

(オプション) カスタマイズしたモデルを使用している目印を作成します.mysimpleFoam.C ファイルに次の1行を加えます.

補足説明 • sed コマンドの –i オプションで,対象ファイルの上書き編集が可能です.

{ Info << "Defining my own kEpsilon model" << endl; bound(k_, kMin_); bound(epsilon_, epsilonMin_); nut_ = Cmu_*sqr(k_)/epsilon_; nut_.correctBoundaryConditions(); printCoeffs(); }

Page 27: Turbulence Models in OpenFOAM

27

カスタマイズの手順

その他必要なカスタマイズを行います.

コンパイルして,動的リンクライブラリを作成します. $ cd ../ $ wmake libso

User Guide [2] 75ページ

Page 28: Turbulence Models in OpenFOAM

28

カスタマイズの手順

次のような表示があれば,コンパイル成功です. (省略) /platforms/linux64GccDPDebug/lib/libmyIncompressibleRASModels.so' is up to date.

以上が,乱流モデルのカスタマイズの手順です.

Page 29: Turbulence Models in OpenFOAM

29

カスタマイズした乱流モデルの使用

カスタマイズした乱流モデルの使用

system/controlDict ファイルに次の行を加えます.

FoamFile { version 2.0; format ascii; class dictionary; location "system"; object controlDict; } // * * * * * * * * * * * * * * * * * * * * * * * * * * // libs ("libmyIncompressibleRASModels.so"); application simpleFoam; startFrom latestTime;

Page 30: Turbulence Models in OpenFOAM

30

カスタマイズした乱流モデルの使用

設定ファイル RASProperties において,RASModel に mykEpsilon を指定することでカスタマイズした乱流モデルを使用できます.

RASModel に適当な名前を指定して ソルバーを実行してみると, 新しいモデルがリストに 加わっているのが確認できます.

--> FOAM FATAL ERROR: Unknown RASModel type hogehoge Valid RASModel types: 19 ( LRR LamBremhorstKE LaunderGibsonRSTM LaunderSharmaKE LienCubicKE LienCubicKELowRe LienLeschzinerLowRe NonlinearKEShih RNGkEpsilon SpalartAllmaras kEpsilon kOmega kOmegaSST kkLOmega laminar mykEpsilon qZeta realizableKE v2f )

Page 31: Turbulence Models in OpenFOAM

31

Chapter 4. RANS モデル

Launder-Sharma low-Re k-𝜀 モデル

Page 32: Turbulence Models in OpenFOAM

32

支配方程式

𝜕𝑘

𝜕𝑡+𝜕 𝑢𝑗𝑘

𝜕𝑥𝑗−

𝜕

𝜕𝑥𝑗𝜈 + 𝜈𝑡

𝜕𝑘

𝜕𝑥𝑗= 𝑃𝑘 − 𝜀 − 𝐷

𝜕𝜀

𝜕𝑡+𝜕 𝑢𝑗𝜀

𝜕𝑥𝑗−

𝜕

𝜕𝑥𝑗𝜈 +

𝜈𝑡𝜎𝜀

𝜕𝜀

𝜕𝑥𝑗= 𝑐1𝑓1𝑃𝑘

𝜀

𝑘− 𝑐2𝑓2

𝜀 2

𝑘+ 𝐸

ここで

𝜈𝑡 = 𝑐𝜇𝑓𝜇𝑘2

𝜀

𝑃𝑘 = 𝜈𝑡𝜕𝑢𝑖𝜕𝑥𝑗

+𝜕𝑢𝑗

𝜕𝑥𝑖

𝜕𝑢𝑖𝜕𝑥𝑗

, 𝐷 = 2𝜈𝜕 𝑘

𝜕𝑥𝑗

2

, 𝐸 = 2𝜈𝜈𝑡𝜕2𝑢𝑘𝜕𝑥𝑖𝜕𝑥𝑗

2

𝑓𝜇 = exp−3.4

1 +𝑅𝑒𝑡50

2 , 𝑓1 = 1, 𝑎𝑓2 = 1 − 0.3exp −𝑅𝑒𝑡2 , 𝑅𝑒𝑡=

𝑘2

𝜈𝜀

渦粘性係数

Damping functions

𝜀 = 𝜀 − 𝐷

Page 33: Turbulence Models in OpenFOAM

33

モデル定数

モデル定数 OpenFOAMの表記 デフォルト値

𝑐𝜇 Cmu 0.09

𝑐1 C1 1.44

𝑐2 C2 1.92

σ𝜀 sigmaEps 1.3

Page 34: Turbulence Models in OpenFOAM

34

モデルに関して

通常のエネルギー散逸率 𝜀 の代わりに,𝜀 についての方程式を解きます. 𝐷 の壁面での値が,𝜀 の壁面での値に等しいので,変数 𝜀 = 𝜀 − 𝐷 の壁面での値は,𝜀 = 0 となり,壁面上の境界条件が取り扱いやすくなります.

高 Re 型のモデルには無い項 𝐸 が追加されている理由 Its inclusion is simply due to the fact that without it the peak level of turbulence kinetic energy at y+ ≈ 20 did not accord with experiment. Several other forms were tried including choosing f1 to be a function of Reynolds number. The form quoted is however, the only one which generated the desired profile of k near the wall. これによると, 壁近傍での乱流エネルギー k の分布が実験と合うように,導入されている項のようです.

文献 [4]

Page 35: Turbulence Models in OpenFOAM

35

モデルに関して

Damping 関数の分布

拡大

Page 36: Turbulence Models in OpenFOAM

36

OpenFOAM の実装|𝑘 の輸送方程式

𝜕𝑘

𝜕𝑡+𝜕 𝑢𝑗𝑘

𝜕𝑥𝑗−

𝜕

𝜕𝑥𝑗𝜈 + 𝜈𝑡

𝜕𝑘

𝜕𝑥𝑗= 𝑃𝑘 − 𝜀 − 𝐷

数式 OpenFOAM

𝜕𝑘

𝜕𝑡 fvm::ddt(k_)

𝜕 𝑢𝑗𝑘

𝜕𝑥𝑗 fvm::div(phi_, k_)

−𝜕

𝜕𝑥𝑗𝜈 + 𝜈𝑡

𝜕𝑘

𝜕𝑥𝑗 - fvm::laplacian(DkEff(), k_)

𝑃𝑘 G

−𝜀 − 𝐷 - fvm::Sp((epsilonTilda_ + D)/k_, k_)

Page 37: Turbulence Models in OpenFOAM

37

OpenFOAM の実装|𝜀 の輸送方程式

𝜕𝜀

𝜕𝑡+𝜕 𝑢𝑗𝜀

𝜕𝑥𝑗−

𝜕

𝜕𝑥𝑗𝜈 +

𝜈𝑡𝜎𝜀

𝜕𝜀

𝜕𝑥𝑗= 𝑐1𝑃𝑘

𝜀

𝑘− 𝑐2𝑓2

𝜀 2

𝑘+ 𝐸

数式 OpenFOAM

𝜕𝜀

𝜕𝑡 fvm::ddt(epsilonTilda_)

𝜕 𝑢𝑗𝜀

𝜕𝑥𝑗 fvm::div(phi_, epsilonTilda_)

−𝜕

𝜕𝑥𝑗𝜈 +

𝜈𝑡𝜎𝜀

𝜕𝜀

𝜕𝑥𝑗

- fvm::laplacian(DepsilonEff(), epsilonTilda_)

𝑐1𝑃𝑘𝜀

𝑘 C1_*G*epsilonTilda_/k_

−𝑐2𝑓2𝜀 2

𝑘

- fvm::Sp(C2_*f2()*epsilonTilda_/k_, epsilonTilda_)

𝐸 E

Page 38: Turbulence Models in OpenFOAM

38

OpenFOAM の実装|乱流変数の輸送方程式

前の2ページの離散化を注意深く見ると,右辺の項で,fvm::Sp が使われている項といない項があるのが分かります. • 符号がマイナスの項 fvm::Sp を使用している • 符号がプラスの項 fvm::Sp を使用していない

今考えている方程式では,右辺でマイナス符号が付いている項を左辺に移項すると係数行列の対角成分を大きくする効果があるので,陰的に扱うために,fvm::Sp を使用しています.

連立方程式を反復法で解く場合,係数行列の対角成分が大きい方が解きやすいため,このような工夫を行っています.

fvm::Sp の詳細は,こちらのスライドの 80 ページをご覧ください.

Page 39: Turbulence Models in OpenFOAM

39

OpenFOAM の実装|Damping functions

𝑓𝜇 = exp−3.4

1 +𝑅𝑒𝑡50

2 , 𝑓2 = 1 − 0.3exp −𝑅𝑒𝑡2 , 𝑅𝑒𝑡=

𝑘2

𝜈𝜀

LaunderSharmaKE.C

Page 40: Turbulence Models in OpenFOAM

40

OpenFOAM の実装|乱流エネルギーの生産率の計算

𝐺 = 2𝜈𝑡1

2

𝜕𝑢𝑖𝜕𝑥𝑗

+𝜕𝑢𝑗𝜕𝑥𝑖

2

=𝜈𝑡2

𝜕𝑢𝑖𝜕𝑥𝑗

𝜕𝑢𝑖𝜕𝑥𝑗

+𝜕𝑢𝑗𝜕𝑥𝑖

𝜕𝑢𝑗𝜕𝑥𝑖

+ 2𝜕𝑢𝑖𝜕𝑥𝑗

𝜕𝑢𝑗𝜕𝑥𝑖

= 𝜈𝑡𝜕𝑢𝑖𝜕𝑥𝑗

+𝜕𝑢𝑗

𝜕𝑥𝑖

𝜕𝑢𝑖𝜕𝑥𝑗

= 𝑃𝑘

乱流エネルギーの生産率の表現

LaunderSharmaKE.C

Page 41: Turbulence Models in OpenFOAM

41

OpenFOAM の実装|D 項と E 項の計算

𝐷 = 2𝜈𝜕 𝑘

𝜕𝑥𝑗

2

, 𝐸 = 2𝜈𝜈𝑡𝜕2𝑢𝑘𝜕𝑥𝑖𝜕𝑥𝑗

2

LaunderSharmaKE.C

E 項は,各 𝑘 = 0,1,2 について,次のヘッセ行列の magSqr の和を計算しています(magSqrGradGrad,次ページ).

𝛻 𝛻𝑢𝑘 =

𝜕2𝑢𝑘𝜕𝑥0𝜕𝑥0

𝜕2𝑢𝑘𝜕𝑥0𝜕𝑥1

𝜕2𝑢𝑘𝜕𝑥0𝜕𝑥2

𝜕2𝑢𝑘𝜕𝑥1𝜕𝑥0

𝜕2𝑢𝑘𝜕𝑥1𝜕𝑥1

𝜕2𝑢𝑘𝜕𝑥1𝜕𝑥2

𝜕2𝑢𝑘𝜕𝑥2𝜕𝑥0

𝜕2𝑢𝑘𝜕𝑥2𝜕𝑥1

𝜕2𝑢𝑘𝜕𝑥2𝜕𝑥2

Page 43: Turbulence Models in OpenFOAM

43

Turbulent Flat Plate|流速分布

𝑢+ =𝑢

𝑢𝜏

𝑦+ =𝑦𝑢𝜏𝜈

Turbulent Flat Plate [5] で検証

Spalding 則については こちらのスライドの 23 ページ

Page 44: Turbulence Models in OpenFOAM

44

Turbulent Flat Plate|𝑘+ 分布

𝑘+ =𝑘

𝑢𝜏2

Page 45: Turbulence Models in OpenFOAM

45

Turbulent Flat Plate|𝜀+ 分布

𝜀+ =𝜀𝜈

𝑢𝜏4

Page 46: Turbulence Models in OpenFOAM

46

𝜀+ 分布に関して補足

前ページの図を見ると,対数則領域において,おおよそ次の関係が成り立っているのが分かります.

𝜀+ =𝜀𝜈

𝑢𝜏4=

1

𝜅𝑦+

これは次式のように変形できます.

𝜀 =𝑢𝜏3

𝜅𝑦

この式に, 𝑢𝜏 = 𝐶𝜇1 4 𝑘 という関係式を代入すれば,壁関数を使用した場合

の境界条件 (epsilonWallFunction) で使用している関係式が得られます.

𝜀𝑃 =𝐶𝜇3 4 𝑘𝑃

3 2

𝜅𝑦𝑃

Page 47: Turbulence Models in OpenFOAM

47

Turbulent Flat Plate|k 方程式の項のバランス

𝜕𝑘

𝜕𝑡+𝜕 𝑢𝑗𝑘

𝜕𝑥𝑗−

𝜕

𝜕𝑥𝑗𝜈 + 𝜈𝑡

𝜕𝑘

𝜕𝑥𝑗= 𝑃𝑘 − 𝜀 + 𝐷

Production (生成)

Dissipation (散逸)

対数則領域では,乱流エネルギーの 生成と散逸のバランスが取れています.

Page 48: Turbulence Models in OpenFOAM

43 ページの図は,下記の gnuplot 設定ファイルを使用して作成しています.

この設定ファイルを,Uprofile.gp 等の名前で保存して,𝑦+と𝑢+の 計算結果ファイル data.txt を用意して,次のコマンドを実行します. gnuplot> load “Uprofile.gp"

48

付録|gnuplot の設定ファイル

set terminal pngcairo enhanced size 800,600 set output "Uprofile.png" set title "Turbulent Flat Plate - Velocity Profile" set logscale x set mxtics 10 set format x "10^{%T}" set grid xtics mxtics ytics set xlabel "y+" set ylabel "u+" set key top left set parametric # u+ range set trange [0:25] # Spaldings law k=0.41 E=9.8 f(t) = t + (exp(k*t) - 1 - k*t*(1 + 0.5*k*t) - 1/6*(k*t)**3)/E set style line 1 lc rgb '#8b1a0e' pt 1 ps 1 lt 1 lw 2 # red set style line 2 lc rgb '#0072bd' pt 6 ps 1.5 lt 1 lw 2 # blue plot f(t),t title "Spalding" with lines ls 1,¥ "data.txt" title "OpenFOAM" with points ls 2

Page 49: Turbulence Models in OpenFOAM

49

参考資料

[1] http://www.tfd.chalmers.se/~hani/kurser/OS_CFD/implementTurbulenceModel.pdf [2] http://foam.sourceforge.net/docs/Guides-a4/UserGuide.pdf [3] https://www.youtube.com/watch?v=Eu_4ppppQmw [4] Jones, W., and Launder, B. The prediction of laminarization with a two-equationmodel of turbulence. Int. J. HeatMass Transfer 15 (1972), 301–314. [5] http://www.grc.nasa.gov/WWW/wind/valid/fpturb/fpturb.html

Page 50: Turbulence Models in OpenFOAM

50

Have fun!