日本語版 
を使用した形状最適化事例#1 
Fumiya Nozaki 
CAESES/FFW 
GridPro 
OpenFOAM 
最終更新日: 2014年11月30日
2 
目的と概要 
 L字管を題材にして,CAESES/FFW を使用した設計最適化の基本的な部分 
を解説しています. 
 内部流れで一般的な性能指標である圧力損失を目的関数として最適化を行っ 
ています. 
 成果としては,圧力損失を基準形状に対して 50% 以上低減させることに成 
功しました. 
 この資料をご覧いただいて,ご不明な点などございましたら,お気軽にお問 
い合わせください.フィードバックはどんなものでもありがたいです.
 どのような形状最適化問題に取り組むかを決めるために,以下の点を明確に 
しましょう. 
• 何の形状を最適化するか? 
• 目的関数を何にするか? 
• 設計変数を何にするか? 
• 制約条件は何か? 
3 
最適化計算に際して決めること 
Questions Answers 
?
4 
何の形状を最適化するか? 
 L 字管 
0.7 m 
0.9 m 
入口 
出口 
Φ 0.2 m
5 
目的関数を何にするか? 
 “入口と出口間の全圧差” を目的関数とします. 
퐼 = − 
휌 푝 + 
1 
2 
푢2 풖 ∙ 풏 푑훤 inlet 
풖 ∙ 풏 푑훤 inlet 
− 
휌 푝 + 
1 
2 
푢2 풖 ∙ 풏 푑훤 outlet 
풖 ∙ 풏 푑훤 outlet 
[Pa] 
휌: 密度 
푝: 密度で割った圧力 
풖: 流速 
풏: 境界の単位法線ベクトル (計算領域外向き) 
simpleFoam の表記方法に合わせています.
 どのような設計変数を採用するのかにより,実現可能な変形が異なります. 
 最適化計算では,選択した設計変数により実現可能な形状の中で最も性能の 
優れた形状を探します. 
6 
設計変数を何にするか? 
採用する設計変数によって実現可能な最適形状が異なります 
設計空間1 設計空間2 
最適形状1 
最適形状2 
一般に
7 
使用するソフトウェア 
 次の3つのソフトウェアを組み合わせて最適化計算を行います. 
• パラメトリックモデルの生成 
• 連携するソフトウェアの実行制御 
• 最適化 
• 計算格子生成 
• 流体計算 
• 目的関数値の評価 
格子生成には,GridPro (商用ソフト) を使用しています.
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. パラメトリック形状モデルの生成 
Design Velocity: 
各設計変数の値を変更した際の 
法線方向への変形の大きさ 
大きい 
小さい 
設計変数:mid_height1 
各設計変数について, 
形状のどの部分の移動量が大きいのか 
直感的に把握することができます.
13 
1. パラメトリック形状モデルの生成 
Design Velocity: 
各設計変数の値を変更した際の 
法線方向への変形の大きさ 
大きい 
小さい 
設計変数:mid_height2 
各設計変数について, 
形状のどの部分の移動量が大きいのか 
直感的に把握することができます.
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 との連携の設定 
目的関数の計算値の出力ファイル 
圧力差をファイルに出力するように simpleFoam を改造 
(資料の最後にある補足をご覧ください) 
可視化用 vtk ファイル (Function object 機能で生成)
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 
files (修正前) 
EXE = $(FOAM_APPBIN)/simpleFoam 
mysimpleFoam.C 
files (修正後) 
EXE = $(FOAM_USER_APPBIN)/mysimpleFoam
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 の作成 
• 目的関数の計算値の出力ファイルを設定します. 
[createFields.H] ファイルの最後に以下を追加します. 
label wPrecision(readScalar(runTime.controlDict().lookup("writePrecision"))); 
std::ofstream fout("objValue", std::ios::out | std::ios::app); 
fout.precision(wPrecision);
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 の作成 
• [mysimpleFoam.C] ファイルに #include “objective.H” を追記します. 
turbulence->correct(); 
#include “objective.H” 
runTime.write(); 
Info<< "ExecutionTime = " << runTime.elapsedCpuTime() << " s" 
<< " ClockTime = " << runTime.elapsedClockTime() << " s" 
<< nl << endl;
67 
補足. CAESES Free のダウンロードサイト 
Windows,Linux ともに 
32bit,64bit の両方に 
対応しています. 
 ダウンロードサイト
68 
補足. CAESES Free のインストール 
 インストール 
ウィザードにしたがってインストールを実行します.
69 
「もっとここの説明詳しく」 
などご要望ありましたら, 
お気軽にご連絡ください!

CAESES-FFW,GridPro,OpenFOAMを使用した形状最適化事例#1

  • 1.
    日本語版 を使用した形状最適化事例#1 FumiyaNozaki CAESES/FFW GridPro OpenFOAM 最終更新日: 2014年11月30日
  • 2.
    2 目的と概要 L字管を題材にして,CAESES/FFW を使用した設計最適化の基本的な部分 を解説しています.  内部流れで一般的な性能指標である圧力損失を目的関数として最適化を行っ ています.  成果としては,圧力損失を基準形状に対して 50% 以上低減させることに成 功しました.  この資料をご覧いただいて,ご不明な点などございましたら,お気軽にお問 い合わせください.フィードバックはどんなものでもありがたいです.
  • 3.
     どのような形状最適化問題に取り組むかを決めるために,以下の点を明確に しましょう. • 何の形状を最適化するか? • 目的関数を何にするか? • 設計変数を何にするか? • 制約条件は何か? 3 最適化計算に際して決めること Questions Answers ?
  • 4.
    4 何の形状を最適化するか? L 字管 0.7 m 0.9 m 入口 出口 Φ 0.2 m
  • 5.
    5 目的関数を何にするか? “入口と出口間の全圧差” を目的関数とします. 퐼 = − 휌 푝 + 1 2 푢2 풖 ∙ 풏 푑훤 inlet 풖 ∙ 풏 푑훤 inlet − 휌 푝 + 1 2 푢2 풖 ∙ 풏 푑훤 outlet 풖 ∙ 풏 푑훤 outlet [Pa] 휌: 密度 푝: 密度で割った圧力 풖: 流速 풏: 境界の単位法線ベクトル (計算領域外向き) simpleFoam の表記方法に合わせています.
  • 6.
     どのような設計変数を採用するのかにより,実現可能な変形が異なります. 最適化計算では,選択した設計変数により実現可能な形状の中で最も性能の 優れた形状を探します. 6 設計変数を何にするか? 採用する設計変数によって実現可能な最適形状が異なります 設計空間1 設計空間2 最適形状1 最適形状2 一般に
  • 7.
    7 使用するソフトウェア 次の3つのソフトウェアを組み合わせて最適化計算を行います. • パラメトリックモデルの生成 • 連携するソフトウェアの実行制御 • 最適化 • 計算格子生成 • 流体計算 • 目的関数値の評価 格子生成には,GridPro (商用ソフト) を使用しています.
  • 8.
    8 計算とデータの流れ 目的関数値形状データ 流体計算を行い 形状の性能を評価 流体計算の実行に必要な 計算格子の生成 変形形状の生成,最適化 繰り返し計算の制御 繰り返し 計算格子
  • 9.
    9 最適化計算の流れ 1.CAESES/FFW を使用してパラメトリック形状モデルを生成 2. 基準形状 (パラメータ値が基準値の形状) に対して設定ファイルを作成 • GridPro の設定ファイル (~.fra,~.sch) • OpenFOAM の設定ファイル 3. 試しの計算を実行 4. 実行スクリプトファイルの作成 5. 連携の設定:[Software Connector] の設定 6. 設計空間の探索:実験計画法 (Design of experiments) を使用 7. 最適化計算 (近日中に追記予定) 8. Adjoint 法による形状最適化 (近日中に追記予定)
  • 10.
    10 1. パラメトリック形状モデルの生成 5つの 設計変数 設計変数の値を変更すると変形します.
  • 11.
    11 1. パラメトリック形状モデルの生成 5つの 設計変数 設計変数の値を変更すると変形します.
  • 12.
    12 1. パラメトリック形状モデルの生成 Design Velocity: 各設計変数の値を変更した際の 法線方向への変形の大きさ 大きい 小さい 設計変数:mid_height1 各設計変数について, 形状のどの部分の移動量が大きいのか 直感的に把握することができます.
  • 13.
    13 1. パラメトリック形状モデルの生成 Design Velocity: 各設計変数の値を変更した際の 法線方向への変形の大きさ 大きい 小さい 設計変数:mid_height2 各設計変数について, 形状のどの部分の移動量が大きいのか 直感的に把握することができます.
  • 14.
    14 1. パラメトリック形状モデルの生成 大きい 小さい 設計変数:mid_weight1 断面の丸みをコントロール Design Velocity: 各設計変数の値を変更した際の 法線方向への変形の大きさ 各設計変数について, 形状のどの部分の移動量が大きいのか 直感的に把握することができます.
  • 15.
    15 1. パラメトリック形状モデルの生成 大きい 小さい 設計変数:mid_weight2 断面の丸みをコントロール Design Velocity: 各設計変数の値を変更した際の 法線方向への変形の大きさ 各設計変数について, 形状のどの部分の移動量が大きいのか 直感的に把握することができます.
  • 16.
    16 1. パラメトリック形状モデルの生成 Design Velocity: 各設計変数の値を変更した際の 法線方向への変形の大きさ 大きい 小さい 設計変数:mid_width 各設計変数について, 形状のどの部分の移動量が大きいのか 直感的に把握することができます.
  • 17.
    17 2-1. GridProの設定ファイルの作成 計算格子のトポロジーを設定 • ブロック分割 (ワイヤーフレーム) • サーフェスと点の対応関係
  • 18.
    18 2-1. GridProの設定ファイルの作成 クラスタリング の設定
  • 19.
    19 2-1. GridProの設定ファイルの作成  基準形状に対して準備したトポロジーを変形形状の計算格子の生成にも活用 マルチブロックの 構造格子 ブロックごとに 色分け表示 します. 基準形状 変形形状
  • 20.
    20 5. 連携の設定  GridPro との連携の設定
  • 21.
    21 5. 連携の設定  OpenFOAM との連携の設定 目的関数の計算値の出力ファイル 圧力差をファイルに出力するように simpleFoam を改造 (資料の最後にある補足をご覧ください) 可視化用 vtk ファイル (Function object 機能で生成)
  • 22.
    22 5. 連携の設定 最新バージョン 3.1.2 では,CAESES Free と OpenFOAM の連携の設定のチュートリアルが 追加されています. 1. クリック 2. クリック 3. クリック PDF ファイル が開きます. 設定の詳細が解説されています!
  • 23.
     探索点の数が多いほど得られる情報は多くなりますが,計算コストもそれに 比例して増加します. 23 6. 設計空間の探索 1つ目の設計変数の値の範囲 2つ目の設計変数の値の範囲 最も直感的なアイディア: 各設計変数の定義域を均等に分割
  • 24.
    24 6. 設計空間の探索  探索点の数が多いほど得られる情報は多くなりますが,計算コストもそれに 比例して増加します. 最も直感的なアイディア: 各設計変数の定義域を均等に分割 1つ目の設計変数の値の範囲 2つ目の設計変数の値の範囲 それぞれの探索点 (変形形状) について, • 計算格子の生成 • 流体計算 を実行する必要があります.
  • 25.
    25 6. 設計空間の探索  この方法では,設計変数の数の増加に伴い,計算コストが指数関数的に増加 してしまいます. できるだけ少ない計算コストで 効率的に情報を得られるように 探索点を配置する方法はないのか? 実験計画法 Design Of Experiments (DOE) この資料では,Sobol を使用します.
  • 26.
    26 6. 設計空間の探索  Sobol とは? • Low-discrepancy sequence (低食い違い量列,超一様分布列),または, quasi random sequence (準乱数列) と呼ばれる点列の生成方法の一種です. • 決定論的な点列であり,同じ設定では同じ点列が生成されます. • 空間的に均等な分布をもたらすように設計されています. 実際に生成される点列の分布を見てみましょう.
  • 27.
    27 6. 設計空間の探索  探索点の分布の様子 (10 個)
  • 28.
    28 6. 設計空間の探索  探索点の分布の様子 (25 個)
  • 29.
    29 6. 設計空間の探索  探索点の分布の様子 (75 個)
  • 30.
    30 6. 設計空間の探索  Sobol の設定 変形形状の数を指定します. それぞれの設計変数の • 上限値 [Upper] • 下限値 [Lower] を設定します. 目的関数を指定します.
  • 31.
    31 6. 設計空間の探索  Sobol で生成した変形形状 (Sobol_01_des0000)
  • 32.
    32 6. 設計空間の探索  Sobol で生成した変形形状 (Sobol_01_des0001)
  • 33.
    33 6. 設計空間の探索  Sobol で生成した変形形状 (Sobol_01_des0002)
  • 34.
    34 6. 設計空間の探索  Sobol で生成した変形形状 (Sobol_01_des0003)
  • 35.
    35 6. 設計空間の探索  Sobol で生成した変形形状 (Sobol_01_des0004)
  • 36.
    36 6. 設計空間の探索  Sobol で生成した変形形状 (Sobol_01_des0005)
  • 37.
    37 6. 設計空間の探索  Sobol で生成した変形形状 (Sobol_01_des0006)
  • 38.
    38 6. 設計空間の探索  Sobol で生成した変形形状 (Sobol_01_des0007)
  • 39.
    39 6. 設計空間の探索  Sobol で生成した変形形状 (Sobol_01_des0008)
  • 40.
    40 6. 設計空間の探索  Sobol で生成した変形形状 (Sobol_01_des0009)
  • 41.
    41 6. 設計空間の探索  Sobol で生成した変形形状 (Sobol_01_des0010)
  • 42.
    42 6. 設計空間の探索  Sobol で生成した変形形状 (Sobol_01_des0011)
  • 43.
    43 6. 設計空間の探索  Sobol で生成した変形形状 (Sobol_01_des0012)
  • 44.
    44 6. 設計空間の探索  Sobol で生成した変形形状 (Sobol_01_des0013)
  • 45.
    45 6. 設計空間の探索  Sobol で生成した変形形状 (Sobol_01_des0014)
  • 46.
    46 6. 設計空間の探索  Sobol で生成した変形形状 (Sobol_01_des0015)
  • 47.
    47 6. 設計空間の探索  Sobol で生成した変形形状 (Sobol_01_des0016)
  • 48.
    48 6. 設計空間の探索  Sobol で生成した変形形状 (Sobol_01_des0017)
  • 49.
    49 6. 設計空間の探索  Sobol で生成した変形形状 (Sobol_01_des0018)
  • 50.
    50 6. 設計空間の探索  Sobol で生成した変形形状 (Sobol_01_des0019)
  • 51.
    51 6. 設計空間の探索 終了したタスクを表示 実行中のタスクを表示 選択したタスクの 標準出力を表示 この図では, OpenFOAM の出力
  • 52.
    52 6. 設計空間の探索 20 個の 変形形状 全圧差の 計算値
  • 53.
    53 6. 設計空間の探索  目的関数の値でソート 全圧差小 20 個の中でベストな形状 全圧差大
  • 54.
    54 6. 設計空間の探索 基準形状 (baseline) Sobol のベスト形状 921.12 [Pa] 439.32 [Pa]  形状比較
  • 55.
     壁面せん断応力の分布 (wallShearStressユーティリティで計算) 55 6. 設計空間の探索 基準形状 (baseline) Sobol のベスト形状
  • 56.
    56 6. 設計空間の探索  流線 基準形状 (baseline) Sobol のベスト形状
  • 57.
    57 7. 最適化計算  設計空間の探索で得られたベストな形状 (Sobol_01_des0019) を初期形状 として最適化計算を実行します.
  • 58.
    58 7. 最適化計算 近日中に更新します.
  • 59.
    59 8. Adjoint法によるファインチューニング 近日中に更新します.
  • 60.
    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.
    61 補足. mysimpleFoamの作成 • 不要なファイル等を削除します. $ rm Allwmake $ rm –r SRFSimpleFoam $ rm –r porousSimpleFoam • ファイル名を変更します. $ mv simpleFoam.C mysimpleFoam.C • Make/files の内容を修正します. simpleFoam.C files (修正前) EXE = $(FOAM_APPBIN)/simpleFoam mysimpleFoam.C files (修正後) EXE = $(FOAM_USER_APPBIN)/mysimpleFoam
  • 62.
    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.
    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.
    64 補足. mysimpleFoamの作成 • 目的関数の計算値の出力ファイルを設定します. [createFields.H] ファイルの最後に以下を追加します. label wPrecision(readScalar(runTime.controlDict().lookup("writePrecision"))); std::ofstream fout("objValue", std::ios::out | std::ios::app); fout.precision(wPrecision);
  • 65.
    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.
    66 補足. mysimpleFoamの作成 • [mysimpleFoam.C] ファイルに #include “objective.H” を追記します. turbulence->correct(); #include “objective.H” runTime.write(); Info<< "ExecutionTime = " << runTime.elapsedCpuTime() << " s" << " ClockTime = " << runTime.elapsedClockTime() << " s" << nl << endl;
  • 67.
    67 補足. CAESESFree のダウンロードサイト Windows,Linux ともに 32bit,64bit の両方に 対応しています.  ダウンロードサイト
  • 68.
    68 補足. CAESESFree のインストール  インストール ウィザードにしたがってインストールを実行します.
  • 69.