20
blockMeshコマンドを用いたメッシュ生成 若嶋 振一郎(NIT, Ichinoseki College) [email protected] 2017/5/21 1 初出: 2017/01/05 更新: 2017/05/20

blockMeshコマンドを用いたメッシュ生成‚³マンド •OpenFOAMで最も基本となるメッシュ生成コマンド(ユーティリティ) •点・線・面・ブロックのデータを設定ファイル(blockMeshDict)に記述し、

Embed Size (px)

Citation preview

Page 1: blockMeshコマンドを用いたメッシュ生成‚³マンド •OpenFOAMで最も基本となるメッシュ生成コマンド(ユーティリティ) •点・線・面・ブロックのデータを設定ファイル(blockMeshDict)に記述し、

blockMeshコマンドを用いたメッシュ生成

若嶋振一郎(NIT, Ichinoseki College)

[email protected]

2017/5/21 1

初出: 2017/01/05更新: 2017/05/20

Page 2: blockMeshコマンドを用いたメッシュ生成‚³マンド •OpenFOAMで最も基本となるメッシュ生成コマンド(ユーティリティ) •点・線・面・ブロックのデータを設定ファイル(blockMeshDict)に記述し、

Outline

1. blockMeshコマンドについて

2. blockMeshDictファイルの書き方

3. メッシュ生成と確認

2017/5/21 2

Page 3: blockMeshコマンドを用いたメッシュ生成‚³マンド •OpenFOAMで最も基本となるメッシュ生成コマンド(ユーティリティ) •点・線・面・ブロックのデータを設定ファイル(blockMeshDict)に記述し、

blockMeshコマンド

• OpenFOAMで最も基本となるメッシュ生成コマンド(ユーティリティ)

•点・線・面・ブロックのデータを設定ファイル (blockMeshDict)に記述し、これをもとに規則的な構造メッシュを生成する

• Multi block対応• メッシュトポロジーの設計が重要

2017/5/21 3点 線・面 ブロック

4

0

1 2

35 6

7

Page 4: blockMeshコマンドを用いたメッシュ生成‚³マンド •OpenFOAMで最も基本となるメッシュ生成コマンド(ユーティリティ) •点・線・面・ブロックのデータを設定ファイル(blockMeshDict)に記述し、

blockMeshDictの書き方

• blockMeshDictはsystemフォルダに置く (昔のバージョンと異なる)

• blockMeshDictの作成方法• 直接テキストファイルとして作成

• マクロ言語プロセッサm4を用いた半自動生成

• blockMeshDict内にコードを記述して半自動生成(後述)• 実行時のコード実行許可が必要(OFのdefaultで許可されている)

• sin, cosなどを利用できる

2017/5/21 4

Page 5: blockMeshコマンドを用いたメッシュ生成‚³マンド •OpenFOAMで最も基本となるメッシュ生成コマンド(ユーティリティ) •点・線・面・ブロックのデータを設定ファイル(blockMeshDict)に記述し、

blockMeshDictの構造

2017/5/21 5

/*--------------------------------*- C++ -*----------------------------------*¥| ========= | || ¥¥ / F ield | OpenFOAM: The Open Source CFD Toolbox || ¥¥ / O peration | Version: 4.1 || ¥¥ / A nd | Web: www.OpenFOAM.org || ¥¥/ M anipulation | |¥*---------------------------------------------------------------------------*/FoamFile{

version 2.0;format ascii;class dictionary;object blockMeshDict;

}// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

convertToMeters 1;

vertices ( );

blocks ( );

edges ( );

boundary ( );

mergePatchPairs ( );

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

メートル単位へのスケール変換ファクタの指定(OFはSI単位で計算)

節点(vertices)の座標数値の指定

ブロック(blocks)の指定

稜線(edges)の指定(節点間をどうつなぐかを指定)

境界面(boundary patch)の指定

マージする境界面ペアの指定

Page 6: blockMeshコマンドを用いたメッシュ生成‚³マンド •OpenFOAMで最も基本となるメッシュ生成コマンド(ユーティリティ) •点・線・面・ブロックのデータを設定ファイル(blockMeshDict)に記述し、

blockMeshDict: vertices ()

•節点の座標を指定

2017/5/21 6

vertices(

(0 0 0) // 節点番号0 (1 0 0) // 節点番号1 (1 1 0) // 節点番号2 (0 1 0) // 節点番号3 (0 0 0.1) // 節点番号4 (1 0 0.1) // 節点番号5 (1 1 0.1) // 節点番号6 (0 1 0.1) // 節点番号7

);

C/C++と同様に,//以降はコメント(間違えないように記入しておくとよい)

• 指定した順に節点番号が暗黙に振られる• 番号は0からスタートする

Page 7: blockMeshコマンドを用いたメッシュ生成‚³マンド •OpenFOAMで最も基本となるメッシュ生成コマンド(ユーティリティ) •点・線・面・ブロックのデータを設定ファイル(blockMeshDict)に記述し、

blockMeshDict: blocks ()

•節点番号を用いて6面体ブロックを指定(複数可能)

2017/5/21 7

blocks(

hex (0 1 2 3 4 5 6 7) (20 20 1) simpleGrading (1 1 1));

6面体(Hexahedra)を指定

6面体を構成する6つの節点番号を指定

ブロックの各稜線方向の分割数を指定

各方向の分割の拡大率を指定

Page 8: blockMeshコマンドを用いたメッシュ生成‚³マンド •OpenFOAMで最も基本となるメッシュ生成コマンド(ユーティリティ) •点・線・面・ブロックのデータを設定ファイル(blockMeshDict)に記述し、

blockMeshDict: blocks ()

2017/5/21 8

blocks(

hex (0 1 2 3 4 5 6 7) (20 20 1) simpleGrading (1 1 1));

Ref: http://cfd.direct/openfoam/user-guide/blockmesh/

x3方向に小さい順に、右手系で節点番号を指定する

x1,x2,x3方向の分割数を指定する

20分割

1分割20分割

Page 9: blockMeshコマンドを用いたメッシュ生成‚³マンド •OpenFOAMで最も基本となるメッシュ生成コマンド(ユーティリティ) •点・線・面・ブロックのデータを設定ファイル(blockMeshDict)に記述し、

blockMeshDict: blocks ()

2017/5/21 9

blocks(

hex (0 1 2 3 4 5 6 7) (20 20 1) simpleGrading (1 1 1));

Ref: http://cfd.direct/openfoam/user-guide/blockmesh/

x1,x2,x3方向の拡大率を指定する

simpleGrading (1 1 1)・・・すべての方向に等分割simpleGrading (2 1 1)・・・x1方向に徐々に大きく

拡大比2となるように分割(最初と最後の分割サイズの比)

simpleGrading (0.5 1 1)・・・x1方向に徐々に小さく拡大比0.5となるように分割

拡大率

Page 10: blockMeshコマンドを用いたメッシュ生成‚³マンド •OpenFOAMで最も基本となるメッシュ生成コマンド(ユーティリティ) •点・線・面・ブロックのデータを設定ファイル(blockMeshDict)に記述し、

blockMeshDict: blocks ()

2017/5/21 10

blocks(

hex (0 1 2 3 4 5 6 7) (20 20 20)edgeGrading (1 1 1 1 2 2 2 2 3 3 3 3)

// simpleGrading (1 2 3)と等価);

Ref: http://cfd.direct/openfoam/user-guide/blockmesh/

その他のgrading: edgeGrading・・・・12本のedge毎に分割比を指定

Page 11: blockMeshコマンドを用いたメッシュ生成‚³マンド •OpenFOAMで最も基本となるメッシュ生成コマンド(ユーティリティ) •点・線・面・ブロックのデータを設定ファイル(blockMeshDict)に記述し、

blockMeshDict: blocks ()

2017/5/21 11

blocks(

hex (0 1 2 3 4 5 6 7) (20 20 1)simpleGrading (1

( (0.2 0.3 4) //20% x2-dir,30% cells, exptn.=4 (0.6 0.4 1) //60% x2-dir,40% cells, exptn.=1 (0.2 0.3 0.25) //20% x2-dir,30% cells, exptn.=0.25

) 1)

);

Ref: http://cfd.direct/openfoam/user-guide/blockmesh/

その他のgrading:multiGrading・・・・simpleGradingの指定の仕方を以下のように変えることで、分割幅を小→大→小のようにも指定できる(便利!)

この場合、x2方向の最初の20%の範囲に、メッシュ分割数の30%が割り振られ、拡大率4で分割され中間の60%の範囲に、メッシュ分割数の40%が割り振られ、拡大率1で等分割され最後の20%の範囲に、メッシュ分割数の30%が割り振られ、拡大率0.25で分割される

Page 12: blockMeshコマンドを用いたメッシュ生成‚³マンド •OpenFOAMで最も基本となるメッシュ生成コマンド(ユーティリティ) •点・線・面・ブロックのデータを設定ファイル(blockMeshDict)に記述し、

blockmeshDict: edges();

•節点と節点をつなぐ線の形式を指定

• とくに指定しなければ直線(Line)でつなぐ

•線の種類: arc, spline(スプライン曲線), polyLine(折れ線), BSpline(Bスプライン曲線), (Line: default)

2017/5/21 12

edges(

arc 1 5 (0.1 0.1 0.5)spline 2 3 ((0 0.1 0.1)(0 0.1 0.2)(0 0.1 0.1))

);

円弧 節点番号1と5を結ぶ 通過点の座標を指定

通過点の座標点列を指定

Page 13: blockMeshコマンドを用いたメッシュ生成‚³マンド •OpenFOAMで最も基本となるメッシュ生成コマンド(ユーティリティ) •点・線・面・ブロックのデータを設定ファイル(blockMeshDict)に記述し、

blockMeshDict: boundary()

•境界条件となるパッチ面の名前、種類を指定

2017/5/21 13

boundary(

fixedWalls{

type wall;faces(

(0 4 7 3)(2 6 5 1)(1 5 4 0)

);}

);

名前を指定(0/U, pなどの境界条件で使用する)

パッチ面のtype

• パッチ面を形成する面を4つの節点番号で指定

• 複数の面を指定した場合は、まとめて名前が付けられる

Page 14: blockMeshコマンドを用いたメッシュ生成‚³マンド •OpenFOAMで最も基本となるメッシュ生成コマンド(ユーティリティ) •点・線・面・ブロックのデータを設定ファイル(blockMeshDict)に記述し、

blockMeshDict: boundary()

•主なパッチ面の種類(type ****)

2017/5/21 14

type 説明 備考

patch 一般的なパッチ面(流入・流出面など)

wall 個体壁面

symmetry 対称面(平面)

symmetryPlane 対称面

empty 2次元計算で利用する仮想境界面

wedge くさび面

cyclic 周期境界条件(メッシュ形状が一致する)neighbourPatchなどの追加指定が必要cyclicAMI 周期境界条件(メッシュ形状が一致しない場合)

Ref: http://cfd.direct/openfoam/user-guide/boundaries/#x24-1680005.2.1

Page 15: blockMeshコマンドを用いたメッシュ生成‚³マンド •OpenFOAMで最も基本となるメッシュ生成コマンド(ユーティリティ) •点・線・面・ブロックのデータを設定ファイル(blockMeshDict)に記述し、

blockMeshDict: mergePatchPairs()

•パッチ名を2つ指定して、結合する

• masterパッチはそのままで、slaveパッチ面の節点などは修正される

2017/5/21 15

mergePatchPairs(

( <masterPatch> <slavePatch> ) // merge patch pair 0( <masterPatch> <slavePatch> ) // merge patch pair 1…

)

Page 16: blockMeshコマンドを用いたメッシュ生成‚³マンド •OpenFOAMで最も基本となるメッシュ生成コマンド(ユーティリティ) •点・線・面・ブロックのデータを設定ファイル(blockMeshDict)に記述し、

blockMeshコマンドの演習(cavityチュートリアルを参考)

1. 1m×1m×3mの直方体(1ブロック)の作成(分割数は任意。zおよびy軸に平行な壁面にメッシュを寄せる設定)

2. 直方体の一部を曲線(円弧)にしたマルチブロックメッシュの作成

2017/5/21 16

1m

1m

3m

1m

1m

1m1m

R=1m

R=2m

cavityチュートリアルを適当にコピー&リネーム blockMeshDictを編集 blockMeshコマンド実行 paraFoamコマンドで確認

1mz

x

y

z

x

y

Page 17: blockMeshコマンドを用いたメッシュ生成‚³マンド •OpenFOAMで最も基本となるメッシュ生成コマンド(ユーティリティ) •点・線・面・ブロックのデータを設定ファイル(blockMeshDict)に記述し、

paraFoamの便利機能

• paraFoamを-blockオプション付きで実行すると、blockMeshDictを読み込み、記述が正しいか事前検討ができます(メッシュ生成前でもOK)

2017/5/21 17

Page 18: blockMeshコマンドを用いたメッシュ生成‚³マンド •OpenFOAMで最も基本となるメッシュ生成コマンド(ユーティリティ) •点・線・面・ブロックのデータを設定ファイル(blockMeshDict)に記述し、

codeStream機能

• blockMeshDict内で変数定義や計算(やや記述が煩雑)が可能です。

2017/5/21 18

R 1.0;x1 #calc “$R*sin(degToRad(30.0))”;x2 2.0;dx #calc “$x1 - $x2”;

vertices(

($R 0 0) // 節点番号0 ($x1 0 0) // 節点番号1

:);

Page 19: blockMeshコマンドを用いたメッシュ生成‚³マンド •OpenFOAMで最も基本となるメッシュ生成コマンド(ユーティリティ) •点・線・面・ブロックのデータを設定ファイル(blockMeshDict)に記述し、

2017/5/21 19

edges( spline 0 1 (

#codeStream{

codeInclude#{

#include "pointField.H" #};

code #{

label nbPoints = 20; for (label i = 0; i < nbPoints; i++) {

scalar xi = 0 + i*$L/(nbPoints-1);scalar yi = $Ri - ($Re-$Ri) * (6*pow(xi/$L,5) - 15*pow(xi/$L,4) + 10*pow(xi/$L,3)); os << point(xi, -yi, 0) << endl;

} #};

};)

);

Page 20: blockMeshコマンドを用いたメッシュ生成‚³マンド •OpenFOAMで最も基本となるメッシュ生成コマンド(ユーティリティ) •点・線・面・ブロックのデータを設定ファイル(blockMeshDict)に記述し、

以上で、blockMeshに関するハンズオンセミナーは終了です。お疲れ様でした!

2017/5/21 20