More Related Content
Similar to オープンソースの CFD ソフトウェア SU2 のチュートリアルをやってみた (20)
More from Fumiya Nozaki (11)
オープンソースの CFD ソフトウェア SU2 のチュートリアルをやってみた
- 2. SU2 (Stanford University Unstructured) は,オープンソースの数値
流体力学(CFD)計算用ソフトウェアです.
• 開発元: スタンフォード大学 Aerospace Design Lab
• 開発言語: C++
• ライセンスの種類: GNU General Public License (GPL) v3
• ホームページ: http://su2.stanford.edu/
2
SU2 の概要
- 11. 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
- 13. 13
プリ・ポスト処理について
プリ処理
• SU2 が対応可能なメッシュのフォーマット
独自のファイルフォーマット(拡張子:.su2)
CGNS フォーマット
• メッシュの作成方法
SU2 に付属のスクリプトを使用して,.su2 形式のメッシュを作
成 → 複雑な形状は現実的に不可能
外部のメッシャーで作成した CGNS 形式のメッシュを使用する
ポスト処理
ポスト処理には,以下のソフトが使用可能です.
• Tecplot
• ParaView
- 16. 16
Quick Start Tutorial の内容
このチュートリアルでは,Adjoint 法を使用することで,一様流中に
おかれた NACA0012 翼型の抗力に関する感度分布を計算します.
使用するモジュール
SU2_CFD
チュートリアルフォルダ
euler¥naca0012
計算条件
遷音速流れ(オイラー方程式)
マッハ数: 0.8
圧力: 大気圧
温度: 273.15K
迎え角: 1.25°
計算領域
翼周りのメッシュ
- 18. フォルダの確認
フォルダ(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 ファイル
の内容の一部
- 19. 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 ファイル内
- 20. 20
流れ場の計算結果のファイル
計算が終了すると,以下の結果ファイルが作成されます.
• flow.vtk - 内部ボリュームの計算結果
• surface_flow.vtk - 境界上の計算結果
• surface_flow.csv - 翼境界上の Cp 値,Ma 数の値
• restart_flow.dat - 計算をリスタートする際に使用するファイル
• history.csv - 抗力,揚力や残差の時間履歴
OpenFOAM の用語を使うと,
flow.vtk が internalField のデータ,surface_flow.vtk が boundaryField の
データ に対応します.
- 22. 22
計算結果のデータ
4つの変数 Conservative_1 ~ Conservative_4 は,以下に示す保
存量を表しています.
• Conservative_1
• Conservative_2
• Conservative_3
• Conservative_4
ここで,𝜌 は密度,𝑣1 および 𝑣2 は速度成分,𝐸 は単位質量当たりの
エネルギーを表します.
三次元計算の場合には,上記に 𝜌𝑣3 が加わります.
𝜌
𝜌𝑣1
𝜌𝑣2
𝜌𝐸
- 24. 次に,速度分布を可視化してみましょう.
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) を付けています.
- 26. 26
速度ベクトルの可視化
速度成分 𝑣1 および 𝑣2 から速度ベクトルを作成します.
ここでも,Calculator の機能を使用します.
Calculator の設定
スカラー量である速度成分 𝑣1 および 𝑣2
と
x,y 方向の単位ベクトル iHat および jHat
から
速度ベクトル v1*iHat+v2*jHat
を作成し,Velocityと名前を付けています.
- 30. 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)とを切り替えます.
- 31. 31
Adjoint場の計算の実行
1. あい
2. ファイル restart_flow.dat の名前を solution_flow.dat に変更
します.
3. 計算実行(実行コマンドは下記太字部分)
…¥euler¥naca0012>SU2_CFD inv_NACA0012.cfg
このファイルから流れ場の計算結果が読み込まれます.
- 32. 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
- 37. 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つの部分から構成されます.
- 38. 38
メッシュファイル (.su2) のフォーマット
• 前ページのメッシュファイルは,上図の2Dメッシュを表現していま
す.
• 次ページから詳しく見ていきましょう.
0 1 2
3 4 5
6 7 8
0
1
2
3
4
5
6
7
: 節点番号
: セル(要素)番号
- 39. 39
メッシュファイル (.su2) のフォーマット
%
% Problem dimension
%
NDIME= 2
1
• 解こうとしている問題の空間の次元を,変数 NDIME
に指定します.
• SU2 で取り扱いが可能なのは,2次元 または 3次元 の問題
したがって
NDIME= 2 または NDIME= 3
2次元の問題を解きます
- 40. 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行では,それぞれの要素の形状および要素を構成する
節点番号のリスト,要素の番号を指定します.
次ページで詳しく見てみましょう.
- 41. 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からスタート)
- 42. 42
メッシュファイル (.su2) のフォーマット
要素のタイプ SU2での識別番号
線(LINE) 3
三角形(TRIANGLE) 5
四角形(Quad) 9
四面体(TETRA) 10
六面体(HEXAHEDRON) 12
三角柱(WEDGE) 13
ピラミッド(PYRAMID) 14
SU2 では下の表のように,各要素のタイプを整数値で識別します.
- 44. 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
- 45. 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つ目の境界
- 46. 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
- 47. OpenFOAMのpolyMeshとの比較
• ともに非構造のデータの持ち方をしていますが,
• OpenFOAM がメッシュデータを複数のファイル(points,facesな
ど)に分割してもつのに対して, SU2 では情報を一つのファイル
(.su2)で持つ点に違いがあります.
• OpenFOAMでは,任意の多面体のセルを扱えるのに対して, SU2
では扱えるセルタイプは30~31ページに記載したものに限られま
す.
• 二次元計算の場合,OpenFOAMでは奥行き方向に1セル作成する
必要がありますが,SU2 の場合には,奥行き方向を無視して,完全
に二次元として取り扱います(32ページの節点座標を指定するとこ
ろで二つの座標成分しか指定していないことからもわかります).
47