caeses-ffw,gridpro,openfoamを使用した形状最適化事例#1

69
日本語版 Fumiya Nozaki 最終更新日: 2014年11月30日 CAESES/FFW GridPro OpenFOAM を使用した形状最適化事例#1

Upload: fumiya-nozaki

Post on 13-Jul-2015

1.195 views

Category:

Technology


5 download

TRANSCRIPT

日本語版

Fumiya Nozaki

最終更新日: 2014年11月30日

CAESES/FFW GridPro

OpenFOAM を使用した形状最適化事例#1

2

目的と概要

L字管を題材にして,CAESES/FFW を使用した設計最適化の基本的な部分を解説しています.

内部流れで一般的な性能指標である圧力損失を目的関数として最適化を行っています.

成果としては,圧力損失を基準形状に対して 50% 以上低減させることに成功しました.

この資料をご覧いただいて,ご不明な点などございましたら,お気軽にお問い合わせください.フィードバックはどんなものでもありがたいです.

どのような形状最適化問題に取り組むかを決めるために,以下の点を明確にしましょう.

• 何の形状を最適化するか?

• 目的関数を何にするか?

• 設計変数を何にするか?

• 制約条件は何か?

3

最適化計算に際して決めること

Questions Answers

?

4

何の形状を最適化するか?

L 字管

0.7 m

0.9 m

入口

出口

Φ 0.2 m

5

目的関数を何にするか?

“入口と出口間の全圧差” を目的関数とします.

𝐼 = − 𝜌 𝑝 +

12𝑢2 𝒖 ∙ 𝒏 𝑑𝛤

inlet

𝒖 ∙ 𝒏 𝑑𝛤inlet

− 𝜌 𝑝 +

12𝑢2 𝒖 ∙ 𝒏 𝑑𝛤

outlet

𝒖 ∙ 𝒏 𝑑𝛤outlet

[Pa]

𝜌: 密度

𝑝: 密度で割った圧力

𝒖: 流速

𝒏: 境界の単位法線ベクトル (計算領域外向き)

simpleFoam の表記方法に合わせています.

どのような設計変数を採用するのかにより,実現可能な変形が異なります.

最適化計算では,選択した設計変数により実現可能な形状の中で最も性能の優れた形状を探します.

6

設計変数を何にするか?

採用する設計変数によって実現可能な最適形状が異なります

設計空間1 設計空間2

最適形状1

最適形状2

一般に

7

使用するソフトウェア

• パラメトリックモデルの生成 • 連携するソフトウェアの実行制御 • 最適化

• 計算格子生成

• 流体計算 • 目的関数値の評価

格子生成には,GridPro (商用ソフト) を使用しています.

次の3つのソフトウェアを組み合わせて最適化計算を行います.

8

計算とデータの流れ

流体計算を行い 形状の性能を評価

流体計算の実行に必要な 計算格子の生成

変形形状の生成,最適化 繰り返し計算の制御

繰り返し

目的関数値 形状データ

計算格子

9

最適化計算の流れ

1. CAESES/FFW を使用してパラメトリック形状モデルを生成

2. 基準形状 (パラメータ値が基準値の形状) に対して設定ファイルを作成

• GridPro の設定ファイル (~.fra,~.sch)

• OpenFOAM の設定ファイル

3. 試しの計算を実行

4. 実行スクリプトファイルの作成

5. 連携の設定:[Software Connector] の設定

6. 設計空間の探索:実験計画法 (Design of experiments) を使用

7. 最適化計算 (近日中に追記予定)

8. Adjoint 法による形状最適化 (近日中に追記予定)

10

1. パラメトリック形状モデルの生成

5つの 設計変数

設計変数の値を変更すると変形します.

11

1. パラメトリック形状モデルの生成

設計変数の値を変更すると変形します.

5つの 設計変数

12

1. パラメトリック形状モデルの生成

大きい

小さい

設計変数:mid_height1

Design Velocity: 各設計変数の値を変更した際の 法線方向への変形の大きさ

各設計変数について, 形状のどの部分の移動量が大きいのか 直感的に把握することができます.

13

1. パラメトリック形状モデルの生成

大きい

小さい

設計変数:mid_height2

Design Velocity: 各設計変数の値を変更した際の 法線方向への変形の大きさ

各設計変数について, 形状のどの部分の移動量が大きいのか 直感的に把握することができます.

14

1. パラメトリック形状モデルの生成

大きい

小さい

設計変数:mid_weight1

断面の丸みをコントロール

Design Velocity: 各設計変数の値を変更した際の 法線方向への変形の大きさ

各設計変数について, 形状のどの部分の移動量が大きいのか 直感的に把握することができます.

15

1. パラメトリック形状モデルの生成

大きい

小さい

設計変数:mid_weight2

断面の丸みをコントロール

Design Velocity: 各設計変数の値を変更した際の 法線方向への変形の大きさ

各設計変数について, 形状のどの部分の移動量が大きいのか 直感的に把握することができます.

16

1. パラメトリック形状モデルの生成

Design Velocity: 各設計変数の値を変更した際の 法線方向への変形の大きさ

大きい

小さい

設計変数:mid_width

各設計変数について, 形状のどの部分の移動量が大きいのか 直感的に把握することができます.

17

2-1. GridPro の設定ファイルの作成

計算格子のトポロジーを設定 • ブロック分割 (ワイヤーフレーム) • サーフェスと点の対応関係

18

2-1. GridPro の設定ファイルの作成

クラスタリング の設定

19

2-1. GridPro の設定ファイルの作成

マルチブロックの 構造格子

ブロックごとに 色分け表示

基準形状に対して準備したトポロジーを変形形状の計算格子の生成にも活用します.

基準形状 変形形状

20

5. 連携の設定

GridPro との連携の設定

21

5. 連携の設定

OpenFOAM との連携の設定

可視化用 vtk ファイル (Function object 機能で生成)

目的関数の計算値の出力ファイル

圧力差をファイルに出力するように simpleFoam を改造 (資料の最後にある補足をご覧ください)

22

5. 連携の設定

最新バージョン 3.1.2 では,CAESES Free と OpenFOAM の連携の設定のチュートリアルが追加されています.

1. クリック

2. クリック

3. クリック PDF ファイル が開きます.

設定の詳細が解説されています!

探索点の数が多いほど得られる情報は多くなりますが,計算コストもそれに比例して増加します.

23

6. 設計空間の探索

1つ目の設計変数の値の範囲

2つ

目の

設計

変数

の値

の範

最も直感的なアイディア: 各設計変数の定義域を均等に分割

24

6. 設計空間の探索

探索点の数が多いほど得られる情報は多くなりますが,計算コストもそれに比例して増加します.

1つ目の設計変数の値の範囲

2つ

目の

設計

変数

の値

の範

それぞれの探索点 (変形形状) について, • 計算格子の生成 • 流体計算 を実行する必要があります.

最も直感的なアイディア: 各設計変数の定義域を均等に分割

25

6. 設計空間の探索

この方法では,設計変数の数の増加に伴い,計算コストが指数関数的に増加してしまいます.

実験計画法 Design Of Experiments (DOE)

できるだけ少ない計算コストで

効率的に情報を得られるように

探索点を配置する方法はないのか?

この資料では,Sobol を使用します.

26

6. 設計空間の探索

Sobol とは?

• Low-discrepancy sequence (低食い違い量列,超一様分布列),または,quasi random sequence (準乱数列) と呼ばれる点列の生成方法の一種です.

• 決定論的な点列であり,同じ設定では同じ点列が生成されます.

• 空間的に均等な分布をもたらすように設計されています.

実際に生成される点列の分布を見てみましょう.

27

6. 設計空間の探索

探索点の分布の様子 (10 個)

28

6. 設計空間の探索

探索点の分布の様子 (25 個)

29

6. 設計空間の探索

探索点の分布の様子 (75 個)

30

6. 設計空間の探索

Sobol の設定

それぞれの設計変数の • 上限値 [Upper] • 下限値 [Lower] を設定します.

変形形状の数を指定します.

目的関数を指定します.

31

6. 設計空間の探索

Sobol で生成した変形形状 (Sobol_01_des0000)

32

6. 設計空間の探索

Sobol で生成した変形形状 (Sobol_01_des0001)

33

6. 設計空間の探索

Sobol で生成した変形形状 (Sobol_01_des0002)

34

6. 設計空間の探索

Sobol で生成した変形形状 (Sobol_01_des0003)

35

6. 設計空間の探索

Sobol で生成した変形形状 (Sobol_01_des0004)

36

6. 設計空間の探索

Sobol で生成した変形形状 (Sobol_01_des0005)

37

6. 設計空間の探索

Sobol で生成した変形形状 (Sobol_01_des0006)

38

6. 設計空間の探索

Sobol で生成した変形形状 (Sobol_01_des0007)

39

6. 設計空間の探索

Sobol で生成した変形形状 (Sobol_01_des0008)

40

6. 設計空間の探索

Sobol で生成した変形形状 (Sobol_01_des0009)

41

6. 設計空間の探索

Sobol で生成した変形形状 (Sobol_01_des0010)

42

6. 設計空間の探索

Sobol で生成した変形形状 (Sobol_01_des0011)

43

6. 設計空間の探索

Sobol で生成した変形形状 (Sobol_01_des0012)

44

6. 設計空間の探索

Sobol で生成した変形形状 (Sobol_01_des0013)

45

6. 設計空間の探索

Sobol で生成した変形形状 (Sobol_01_des0014)

46

6. 設計空間の探索

Sobol で生成した変形形状 (Sobol_01_des0015)

47

6. 設計空間の探索

Sobol で生成した変形形状 (Sobol_01_des0016)

48

6. 設計空間の探索

Sobol で生成した変形形状 (Sobol_01_des0017)

49

6. 設計空間の探索

Sobol で生成した変形形状 (Sobol_01_des0018)

50

6. 設計空間の探索

Sobol で生成した変形形状 (Sobol_01_des0019)

51

6. 設計空間の探索

実行中のタスクを表示

終了したタスクを表示

選択したタスクの 標準出力を表示 この図では, OpenFOAM の出力

52

6. 設計空間の探索

20 個の 変形形状

全圧差の 計算値

53

6. 設計空間の探索

目的関数の値でソート

全圧差大

全圧差小 20 個の中でベストな形状

54

6. 設計空間の探索

基準形状 (baseline) Sobol のベスト形状

921.12 [Pa] 439.32 [Pa]

形状比較

壁面せん断応力の分布 (wallShearStress ユーティリティで計算)

55

6. 設計空間の探索

基準形状 (baseline) Sobol のベスト形状

56

6. 設計空間の探索

流線

基準形状 (baseline) Sobol のベスト形状

57

7. 最適化計算

設計空間の探索で得られたベストな形状 (Sobol_01_des0019) を初期形状として最適化計算を実行します.

58

7. 最適化計算

近日中に更新します.

59

8. Adjoint 法によるファインチューニング

近日中に更新します.

60

補足. mysimpleFoam の作成

目的関数の値を計算してファイルに出力するように simpleFoam に変更を加えます.

変更後のソルバー名を,mysimpleFoam としています.

• OpenFOAM の環境変数の読み込み

$ source $HOME/OpenFOAM/OpenFOAM-2.3.x/etc/bashrc

• simpleFoam ディレクトリへ移動

$ sol

$ cd incompressible/simpleFoam

$ wclean

• simpleFoam をコピー

$ cd ../

$ cp -r simpleFoam mysimpleFoam

• mysimpleFoam ディレクトリへ移動

$ cd mysimpleFoam

61

補足. mysimpleFoam の作成

• 不要なファイル等を削除します.

$ rm Allwmake

$ rm –r SRFSimpleFoam

$ rm –r porousSimpleFoam

• ファイル名を変更します.

$ mv simpleFoam.C mysimpleFoam.C

• Make/files の内容を修正します.

simpleFoam.C

EXE = $(FOAM_APPBIN)/simpleFoam

mysimpleFoam.C

EXE = $(FOAM_USER_APPBIN)/mysimpleFoam

files (修正前)

files (修正後)

62

補足. mysimpleFoam の作成

• 密度の値を [transportProperties] ファイルから読み込めるようにします.

[createFields.H] ファイルの最後に以下を追加します.

Info<< "¥nReading density rho¥n" << endl; IOdictionary transportProperties ( IOobject ( "transportProperties", runTime.constant(), mesh, IOobject::MUST_READ, IOobject::NO_WRITE ) ); dimensionedScalar rho = transportProperties.lookup("rho");

63

補足. mysimpleFoam の作成

• 全圧用の変数 totP を定義します.

[createFields.H] ファイルの最後に以下を追加します.

// Total pressure field volScalarField totP ( IOobject ( "totP", runTime.timeName(), mesh, IOobject::NO_READ, IOobject::AUTO_WRITE ), mesh, dimensionedScalar("totP", dimPressure, 0.0) );

64

補足. mysimpleFoam の作成

label wPrecision(readScalar(runTime.controlDict().lookup("writePrecision"))); std::ofstream fout("objValue", std::ios::out | std::ios::app); fout.precision(wPrecision);

• 目的関数の計算値の出力ファイルを設定します.

[createFields.H] ファイルの最後に以下を追加します.

65

補足. mysimpleFoam の作成

• 目的関数の値を計算して,ファイルへ書き出すようにします.

[objective.H] ファイルを新規に作成し,下記の内容を追加します.

scalar volFlux = 0.0; scalar objValueIn = 0.0; scalar objValueOut = 0.0; scalar tPressDiff = 0.0; // Update total pressure field totP = p*rho + 0.5*rho*magSqr(U); label inletID = mesh.boundaryMesh().findPatchID("inlet"); label outletID = mesh.boundaryMesh().findPatchID("outlet"); // Calculate total pressure difference volFlux = -gSum(phi.boundaryField()[inletID]); objValueIn = -gSum(totP.boundaryField()[inletID]*phi.boundaryField()[inletID])/volFlux; objValueOut = gSum(totP.boundaryField()[outletID]*phi.boundaryField()[outletID])/volFlux; tPressDiff = objValueIn - objValueOut; fout<< "Total Pressure Difference = " << tPressDiff << " [Pa]" << std::endl;

66

補足. mysimpleFoam の作成

turbulence->correct(); #include “objective.H” runTime.write(); Info<< "ExecutionTime = " << runTime.elapsedCpuTime() << " s" << " ClockTime = " << runTime.elapsedClockTime() << " s" << nl << endl;

• [mysimpleFoam.C] ファイルに #include “objective.H” を追記します.

67

補足. CAESES Free のダウンロードサイト

Windows,Linux ともに 32bit,64bit の両方に

対応しています.

ダウンロードサイト

68

補足. CAESES Free のインストール

インストール

ウィザードにしたがってインストールを実行します.

69

「もっとここの説明詳しく」

などご要望ありましたら,

お気軽にご連絡ください!