47
SU2 について インストール Quick Start Tutorial の実行 Fumiya Nozaki 1

オープンソースの CFD ソフトウェア SU2 のチュートリアルをやってみた

Embed Size (px)

Citation preview

Page 1: オープンソースの CFD ソフトウェア SU2 のチュートリアルをやってみた

SU2 について

インストール Quick Start Tutorial の実行

Fumiya Nozaki

1

Page 2: オープンソースの CFD ソフトウェア SU2 のチュートリアルをやってみた

SU2 (Stanford University Unstructured) は,オープンソースの数値流体力学(CFD)計算用ソフトウェアです.

• 開発元: スタンフォード大学 Aerospace Design Lab

• 開発言語: C++

• ライセンスの種類: GNU General Public License (GPL) v3

• ホームページ: http://su2.stanford.edu/

2

SU2 の概要

Page 3: オープンソースの CFD ソフトウェア SU2 のチュートリアルをやってみた

• 流速が速く,圧縮性が無視できない流れの計算に向いている.

3

OpenFOAM と比較した優位点

Page 4: オープンソースの CFD ソフトウェア SU2 のチュートリアルをやってみた

• Adjoint 法を使用した形状最適化計算の機能が実装されている.

4

OpenFOAM と比較した優位点

形状表面の感度分布 Free-Form デフォーメーション

Page 5: オープンソースの CFD ソフトウェア SU2 のチュートリアルをやってみた

ソフトウェアの ダウンロード&インストール

最新バージョン v3.0.0 (2014年1月19日現在)

5

Page 6: オープンソースの CFD ソフトウェア SU2 のチュートリアルをやってみた

6

ソフトウェアのダウンロード

ダウンロードには,簡単な登録作業が必要です.

http://adl.stanford.edu/docs/display/SUSQUARED/Download

ここをクリック

Page 7: オープンソースの CFD ソフトウェア SU2 のチュートリアルをやってみた

7

ソフトウェアのダウンロード

ダウンロードには,簡単な登録作業が必要です.

氏名

メールアドレス

所属 Academia, Government, Industry, Personal use から選択

国名

市町村名

知ったきっかけ

Page 8: オープンソースの CFD ソフトウェア SU2 のチュートリアルをやってみた

8

ソフトウェアのダウンロード

登録作業が完了すると,ダウンロードサイトにアクセスできます.

自分の環境にあった ソフトウェアを ダウンロード

Windows の場合,

単体 or 並列計算用で 実行ファイルが異なります

チュートリアル一式を ダウンロード

Page 9: オープンソースの CFD ソフトウェア SU2 のチュートリアルをやってみた

9

ソフトウェアのインストール

インストール手順については,以下のURLに説明があります.

http://adl.stanford.edu/docs/display/SUSQUARED/Installation

Windows に関しては,インストーラーが用意されているので,ウィザードに従って,簡単にインストールが可能です.

Page 10: オープンソースの CFD ソフトウェア SU2 のチュートリアルをやってみた

10

ソフトウェアのインストール|Windows

Windows の場合のインストール手順は以下のようになります.

単体計算用

1. ダウンロードしたファイル SU2-3.0.000-64-bit-Single-threaded を実行

2. 環境変数に実行ファイルへのPATHを追加 (例)PATH変数に追加 C:¥apps¥Stanford ADL¥SU2¥bin;

並列計算用のソフトウェア(SU2-3.0.000-64-bit-Parallel)をインストールする場合には,Microsoft® HPC Pack, 2012 のインストールが別途必要です.

手順:http://adl.stanford.edu/docs/display/SUSQUARED/Windows+Installation

インストールフォルダ(適宜自分の環境にあわせる)

Page 11: オープンソースの CFD ソフトウェア SU2 のチュートリアルをやってみた

11

ソフトウェアのインストール|Linux

Linux の場合,ソースからのインストール手順の概要は以下のようになります.

1. 圧縮されたソースファイル SU2v3.0.0.tgz を解凍

2. (optional) サードバーティーのメッシャーで作成した CGNS フォーマットのメッシュを使用する場合 → CGNS ライブラリのインストール

3. (optional) 並列計算に対応する場合 → METIS,OpenMPI(or MPICH2)のインストール

4. Makefileの作成(configure),コンパイル(make),インストール(make install)の実行

5. 環境変数の設定

手順: http://adl.stanford.edu/docs/display/SUSQUARED/Linux+and+Mac+Installation+from+Source

Page 12: オープンソースの CFD ソフトウェア SU2 のチュートリアルをやってみた

12

実行モジュール

インストールフォルダの中を見てみましょう.

以下の名前の実行ファイルがあるはずです.

• SU2_CFD: Computational Fluid Dynamics 偏微分方程式(Euler,NS方程式など)を離散化して解く, 最も基本となるモジュール

• SU2_DDC: Domain Decomposition Code 並列計算を実行する際に領域分割を行うモジュール

• SU2_MAC: Mesh Adaptation Code 解に対応して,計算格子を細分化するモジュール

• SU2_MDC: Mesh Deformation Code ボリュームメッシュのモーフィングを行うモジュール

など

Page 13: オープンソースの CFD ソフトウェア SU2 のチュートリアルをやってみた

13

プリ・ポスト処理について

プリ処理

• SU2 が対応可能なメッシュのフォーマット

独自のファイルフォーマット(拡張子:.su2)

CGNS フォーマット

• メッシュの作成方法

SU2 に付属のスクリプトを使用して,.su2 形式のメッシュを作成 → 複雑な形状は現実的に不可能

外部のメッシャーで作成した CGNS 形式のメッシュを使用する

ポスト処理

ポスト処理には,以下のソフトが使用可能です.

• Tecplot

• ParaView

Page 14: オープンソースの CFD ソフトウェア SU2 のチュートリアルをやってみた

チュートリアルの実行

Quick Start Tutorial http://adl.stanford.edu/docs/display/SUSQUARED/Quick+Start+Tutorial

14

Page 15: オープンソースの CFD ソフトウェア SU2 のチュートリアルをやってみた

チュートリアルの準備

TestCases.tgz ファイルを解凍 TestCases フォルダが作成される

チュートリアル一式

15

Page 16: オープンソースの CFD ソフトウェア SU2 のチュートリアルをやってみた

16

Quick Start Tutorial の内容

このチュートリアルでは,Adjoint 法を使用することで,一様流中におかれた NACA0012 翼型の抗力に関する感度分布を計算します.

使用するモジュール

SU2_CFD

チュートリアルフォルダ

euler¥naca0012

計算条件

遷音速流れ(オイラー方程式)

マッハ数: 0.8

圧力: 大気圧

温度: 273.15K

迎え角: 1.25° 計算領域

翼周りのメッシュ

Page 17: オープンソースの CFD ソフトウェア SU2 のチュートリアルをやってみた

• このチュートリアルでは,まず流れ場の計算を行い,その結果を用いてAdjoint場の計算を行います.

• この二つの計算ではともに,SU2_CFD モジュールを使用します.

• この二つの計算結果を用いて,感度分布を計算します.

Quick Start Tutorial の計算の流れ

17

流れ場の計算

Adjoint場の計算

SU2_CFD モジュールを使用

Page 18: オープンソースの CFD ソフトウェア SU2 のチュートリアルをやってみた

フォルダの確認

フォルダ(euler¥naca0012)の中を見ると,3つのファイルが用意されています.

.cfg ファイル: 計算の各種条件の設定ファイル

.su2 ファイル: メッシュファイル

% ----------- COMPRESSIBLE AND INCOMPRESSIBLE FREE-STREAM DEFINITION ----------% % % Mach number (non-dimensional, based on the free-stream values) MACH_NUMBER= 0.8 % % Angle of attack (degrees) AoA= 1.25 % % Free-stream pressure (101325.0 N/m^2 by default, only Euler flows) FREESTREAM_PRESSURE= 101325.0 % % Free-stream temperature (273.15 K by default) FREESTREAM_TEMPERATURE= 273.15

18

inv_NACA0012.cfg ファイル の内容の一部

Page 19: オープンソースの CFD ソフトウェア SU2 のチュートリアルをやってみた

19

流れ場の計算の実行

1. コマンドプロンプトを開く

2. 設定ファイルが置いてあるフォルダ( euler¥naca0012 )へ移動

3. 計算結果の出力フォーマットを TECPLOT から PARAVIEW へ変更

4. 計算実行(実行コマンドは下記太字部分)

…¥euler¥naca0012>SU2_CFD inv_NACA0012.cfg

% % Output file format (PARAVIEW, TECPLOT) OUTPUT_FORMAT= TECPLOT

ここを PARAVIEW に変更

inv_NACA0012.cfg ファイル内

Page 20: オープンソースの CFD ソフトウェア SU2 のチュートリアルをやってみた

20

流れ場の計算結果のファイル

計算が終了すると,以下の結果ファイルが作成されます.

• flow.vtk - 内部ボリュームの計算結果

• surface_flow.vtk - 境界上の計算結果

• surface_flow.csv - 翼境界上の Cp 値,Ma 数の値

• restart_flow.dat - 計算をリスタートする際に使用するファイル

• history.csv - 抗力,揚力や残差の時間履歴

OpenFOAM の用語を使うと,

flow.vtk が internalField のデータ,surface_flow.vtk が boundaryField のデータ に対応します.

Page 21: オープンソースの CFD ソフトウェア SU2 のチュートリアルをやってみた

21

計算結果のデータ

ParaView を起動して,flow.vtk ファイルを読み込みます.

Mach(マッハ数),Pressure(圧力),Pressure_Coefficient(圧力係数)

については,その名前が示す通りです.ここで,圧力係数とは次式で定義される無次元数です.

計算結果の変数のリスト

𝐶𝑝 =𝑝 − 𝑝∞

12

𝜌∞𝑉∞2

その他の変数については次のページ.

Page 22: オープンソースの CFD ソフトウェア SU2 のチュートリアルをやってみた

22

計算結果のデータ

4つの変数 Conservative_1 ~ Conservative_4 は,以下に示す保存量を表しています.

• Conservative_1

• Conservative_2

• Conservative_3

• Conservative_4

ここで,𝜌 は密度,𝑣1 および 𝑣2 は速度成分,𝐸 は単位質量当たりのエネルギーを表します.

三次元計算の場合には,上記に 𝜌𝑣3 が加わります.

𝜌

𝜌𝑣1

𝜌𝑣2

𝜌𝐸

Page 23: オープンソースの CFD ソフトウェア SU2 のチュートリアルをやってみた

23

圧力,マッハ数分布

圧力(Pressure)コンター図 マッハ数(Mach)コンター図

圧力,マッハ数の分布を可視化してみましょう.

Page 24: オープンソースの CFD ソフトウェア SU2 のチュートリアルをやってみた

次に,速度分布を可視化してみましょう. 1. 変数 Conservative_2,つまり,𝜌𝑣1 から 𝑣1 を作成します.

2. もう一方の速度成分 𝑣2 も Conservative_3 から同様に作成します. 24

速度成分の可視化

1-1. Calculator を選択 1-2. Calculator の設定

Conservative_2(𝜌𝑣1) を Conservative_1(𝜌) で割ることで,𝑣1 を算出し,それに v1という名前(Result Array Name) を付けています.

Page 25: オープンソースの CFD ソフトウェア SU2 のチュートリアルをやってみた

25

速度成分の可視化

速度成分の コンター図

Page 26: オープンソースの CFD ソフトウェア SU2 のチュートリアルをやってみた

26

速度ベクトルの可視化

速度成分 𝑣1 および 𝑣2 から速度ベクトルを作成します. ここでも,Calculator の機能を使用します.

Calculator の設定

スカラー量である速度成分 𝑣1 および 𝑣2 と

x,y 方向の単位ベクトル iHat および jHat から

速度ベクトル v1*iHat+v2*jHat

を作成し,Velocityと名前を付けています.

Page 27: オープンソースの CFD ソフトウェア SU2 のチュートリアルをやってみた

27

速度ベクトルの可視化

Glyph を使用して,速度ベクトルを可視化してみましょう.

Page 28: オープンソースの CFD ソフトウェア SU2 のチュートリアルをやってみた

28

計算結果の可視化

抗力係数,密度の残差の時系列変化 翼上の圧力係数の分布

history.csv をグラフ化 surface_flow.csv をグラフ化

Page 29: オープンソースの CFD ソフトウェア SU2 のチュートリアルをやってみた

29

流れ場の計算

Adjoint場の計算

お疲れ様でした.ここまでで, チュートリアルの前半部分が終了です.

次のページから Adjoint場の計算に移ります.

• SU2_CFD モジュールを使用する

• 流れ場の計算結果を使用する

の2点だけ頭に入れておいてください.

Page 30: オープンソースの CFD ソフトウェア SU2 のチュートリアルをやってみた

30

Adjoint場の計算の実行

流れ場の計算を実行したフォルダにとどまって計算を実行します.

1. 設定ファイル(inv_NACA0012.cfg)を開いて,変数 MATH_PROBLEM の値を DIRECT から ADJOINT に変更します.

% ------------- DIRECT, ADJOINT, AND LINEARIZED PROBLEM DEFINITION ------------% % % Physical governing equations (POTENTIAL_FLOW, EULER, NAVIER_STOKES, % MULTI_SPECIES_NAVIER_STOKES, TWO_PHASE_FLOW, % COMBUSTION) PHYSICAL_PROBLEM= EULER % % Mathematical problem (DIRECT, ADJOINT, LINEARIZED, ONE_SHOT_ADJOINT) MATH_PROBLEM= DIRECT % % Restart solution (NO, YES) RESTART_SOL= NO % % Console output (VERBOSE, CONCISE, QUIET) CONSOLE= VERBOSE

ここを ADJOINT に変更

この変数で,通常の流体計算(DIRECT)と Adjoint計算(ADJOINT)とを切り替えます.

Page 31: オープンソースの CFD ソフトウェア SU2 のチュートリアルをやってみた

31

Adjoint場の計算の実行

1. あい

2. ファイル restart_flow.dat の名前を solution_flow.dat に変更します.

3. 計算実行(実行コマンドは下記太字部分)

…¥euler¥naca0012>SU2_CFD inv_NACA0012.cfg

このファイルから流れ場の計算結果が読み込まれます.

Page 32: オープンソースの CFD ソフトウェア SU2 のチュートリアルをやってみた

32

Adjoint場の計算結果のファイル

計算が終了すると,以下の結果ファイルが作成されます.

• adjoint.vtk - 内部ボリュームの計算結果

• surface_adjoint.vtk - 境界上の計算結果

• surface_adjoint.csv - 翼境界上の感度およびAdjoint変数の値

• restart_adj_cd.dat - 計算をリスタートする際に使用するファイル

• history.csv - 残差の時間履歴

リスタートファイルの名前の中の cd は cfgファイルで指定した目的関数に対応して変化します.このチュートリアルでは,目的関数として DRAG を考えているのでこのような名前が付けられています.

% Optimization objective function with optional scaling factor % ex= Objective * Scale OPT_OBJECTIVE= DRAG * 0.001

Page 33: オープンソースの CFD ソフトウェア SU2 のチュートリアルをやってみた

33

感度分布

ファイル surface_adjoint.csv に保存されている感度情報をグラフにしてみましょう.

-1.0

-0.8

-0.6

-0.4

-0.2

0.0

0.2

0.4

0.6

0.8

1.0

0.0 0.2 0.4 0.6 0.8 1.0

Su

rface S

en

sit

ivit

y

x/c

翼下面

翼上面 翼上面

翼下面

• 感度は翼面上の点を法線方向に移動したときの目的関数(今の場合は 抗力)の変化の割合を表します.

• 感度の値は翼面上の各節点で計算されます.

Page 34: オープンソースの CFD ソフトウェア SU2 のチュートリアルをやってみた

• 必要な情報の多くはここから入手可能

http://adl.stanford.edu/docs/display/SUSQUARED/SU2+Home

• 計算モデルからクラスの説明までとても詳しい資料

http://su2.stanford.edu/documents/SU2_AIAA_ASM2013.pdf

• CFD Online の Forum

http://www.cfd-online.com/Forums/su2/

34

参考となるサイト・資料

Page 35: オープンソースの CFD ソフトウェア SU2 のチュートリアルをやってみた

今後も資料を更新していく予定です.

質問,コメントなんでも受け付けています.

最後までご覧いただきありがとうございました.

35

Page 36: オープンソースの CFD ソフトウェア SU2 のチュートリアルをやってみた

付録

メッシュのフォーマット

36

Page 37: オープンソースの CFD ソフトウェア SU2 のチュートリアルをやってみた

37

% % Problem dimension % NDIME= 2 % % Inner element connectivity % NELEM= 8 5 0 1 3 0 5 1 4 3 1 5 1 2 4 2 5 2 5 4 3 5 3 4 6 4 5 4 7 6 5 5 4 5 7 6 5 5 8 7 7

(右上へ続く)

% % Node coordinates % NPOIN= 9 0.00000000000000 0.00000000000000 0 0.50000000000000 0.00000000000000 1 1.00000000000000 0.00000000000000 2 0.00000000000000 0.50000000000000 3 0.50000000000000 0.50000000000000 4 1.00000000000000 0.50000000000000 5 0.00000000000000 1.00000000000000 6 0.50000000000000 1.00000000000000 7 1.00000000000000 1.00000000000000 8 % % Boundary elements % NMARK= 4 MARKER_TAG= lower MARKER_ELEMS= 2 3 0 1 3 1 2 MARKER_TAG= right MARKER_ELEMS= 2 3 2 5 3 5 8 MARKER_TAG= upper MARKER_ELEMS= 2 3 8 7 3 7 6 MARKER_TAG= left MARKER_ELEMS= 2 3 6 3 3 3 0

メッシュファイル (.su2) のフォーマット

% がコメントアウト

1

2

3

4

• メッシュファイル (.su2) は大きく 4つの部分から構成されます.

Page 38: オープンソースの CFD ソフトウェア SU2 のチュートリアルをやってみた

38

メッシュファイル (.su2) のフォーマット

• 前ページのメッシュファイルは,上図の2Dメッシュを表現しています.

• 次ページから詳しく見ていきましょう.

0 1 2

3 4 5

6 7 8

0

1

2

3

4

5

6

7

: 節点番号

: セル(要素)番号

Page 39: オープンソースの CFD ソフトウェア SU2 のチュートリアルをやってみた

39

メッシュファイル (.su2) のフォーマット

% % Problem dimension % NDIME= 2

1

• 解こうとしている問題の空間の次元を,変数 NDIME に指定します.

• SU2 で取り扱いが可能なのは,2次元 または 3次元 の問題 したがって NDIME= 2 または NDIME= 3

2次元の問題を解きます

Page 40: オープンソースの CFD ソフトウェア SU2 のチュートリアルをやってみた

40

% % Inner element connectivity % NELEM= 8 5 0 1 3 0 5 1 4 3 1 5 1 2 4 2 5 2 5 4 3 5 3 4 6 4 5 4 7 6 5 5 4 5 7 6 5 5 8 7 7

2

メッシュファイル (.su2) のフォーマット

メッシュは, • 8つの要素からできており, • それぞれの要素は三角形 であることがわかります.

• 要素の個数を変数 NELEM に指定します. • 以下の8行では,それぞれの要素の形状および要素を構成する

節点番号のリスト,要素の番号を指定します.

次ページで詳しく見てみましょう.

Page 41: オープンソースの CFD ソフトウェア SU2 のチュートリアルをやってみた

41

0 1 2

3 4 5

6 7 8

0

1

2

3

4

5

6

7

: 節点番号

: セル(要素)番号

% % Inner element connectivity % NELEM= 8 5 0 1 3 0 5 1 4 3 1 5 1 2 4 2 5 2 5 4 3 5 3 4 6 4 5 4 7 6 5 5 4 5 7 6 5 5 8 7 7

5 0 1 3 0

• NELEM= 8 のすぐ下の行は,要素 についての設定です.

要素 0

要素 7

0

要素の形状を指定

要素の頂点をなす節点番号のリスト

SU2 では三角形を5で表現します.詳しくは次のページ.

要素の番号(番号は0からスタート)

Page 42: オープンソースの CFD ソフトウェア SU2 のチュートリアルをやってみた

42

メッシュファイル (.su2) のフォーマット

要素のタイプ SU2での識別番号

線(LINE) 3

三角形(TRIANGLE) 5

四角形(Quad) 9

四面体(TETRA) 10

六面体(HEXAHEDRON) 12

三角柱(WEDGE) 13

ピラミッド(PYRAMID) 14

SU2 では下の表のように,各要素のタイプを整数値で識別します.

Page 43: オープンソースの CFD ソフトウェア SU2 のチュートリアルをやってみた

43

メッシュファイル (.su2) のフォーマット

要素を構成する節点リストの並びは,VTK (Visualization Toolkit)の仕様に準拠します.

http://www.vtk.org/VTK/img/file-formats.pdf の9ページをご参照ください.

Page 44: オープンソースの CFD ソフトウェア SU2 のチュートリアルをやってみた

44

メッシュファイル (.su2) のフォーマット

% % Node coordinates % NPOIN= 9 0.00000000000000 0.00000000000000 0 0.50000000000000 0.00000000000000 1 1.00000000000000 0.00000000000000 2 0.00000000000000 0.50000000000000 3 0.50000000000000 0.50000000000000 4 1.00000000000000 0.50000000000000 5 0.00000000000000 1.00000000000000 6 0.50000000000000 1.00000000000000 7 1.00000000000000 1.00000000000000 8

3

• メッシュが9つの節点から構成されていること

• それぞれの節点の座標 がわかります.

• 節点の個数を変数 NPOIN に指定します. • 以下の9行では,それぞれの節点の座標および番号を指定して

います. • 例えば次の行は,節点番号が5の節点は,

X座標=1,Y座標=0.5 であることを意味しています.

1.00000000000000 0.50000000000000 5

Page 45: オープンソースの CFD ソフトウェア SU2 のチュートリアルをやってみた

45

% % Boundary elements % NMARK= 4 MARKER_TAG= lower MARKER_ELEMS= 2 3 0 1 3 1 2 MARKER_TAG= right MARKER_ELEMS= 2 3 2 5 3 5 8 MARKER_TAG= upper MARKER_ELEMS= 2 3 8 7 3 7 6 MARKER_TAG= left MARKER_ELEMS= 2 3 6 3 3 3 0

4

メッシュファイル (.su2) のフォーマット

メッシュ内に, lower,right,upper,left という名前の4つの境界があることがわかります.

• 境界の個数を変数 NMARK で指定します.

• 各境界に対して, 名前(MARKER_TAG), 境界上の要素数(MARKER_ELEMS) を指定します.

• .cfg ファイルで境界条件を設定する際にこの境界名を使用します.

次のページで1つ目の境界について詳しく見てみましょう.

1つ目の境界

2つ目の境界

3つ目の境界

4つ目の境界

Page 46: オープンソースの CFD ソフトウェア SU2 のチュートリアルをやってみた

46

3 4 5

6 7 8

0

1

2

3

4

5

6

7 : 節点番号

: セル(要素)番号

MARKER_TAG= lower MARKER_ELEMS= 2 3 0 1 3 1 2

1つ目の境界

• 四角形の計算領域の下辺に相当する境界に lower という名前を付けて,

• その境界が,2つの線要素(節点0と1とを結ぶ線分,節点1と2とを結ぶ線分)で構成される

という指定になっています.

0 1 2

Page 47: オープンソースの CFD ソフトウェア SU2 のチュートリアルをやってみた

OpenFOAMのpolyMeshとの比較

• ともに非構造のデータの持ち方をしていますが,

• OpenFOAM がメッシュデータを複数のファイル(points,facesなど)に分割してもつのに対して, SU2 では情報を一つのファイル(.su2)で持つ点に違いがあります.

• OpenFOAMでは,任意の多面体のセルを扱えるのに対して, SU2

では扱えるセルタイプは30~31ページに記載したものに限られます.

• 二次元計算の場合,OpenFOAMでは奥行き方向に1セル作成する必要がありますが,SU2 の場合には,奥行き方向を無視して,完全に二次元として取り扱います(32ページの節点座標を指定するところで二つの座標成分しか指定していないことからもわかります).

47