SlideShare a Scribd company logo
日本語版 
を使用した形状最適化事例#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 
「もっとここの説明詳しく」 
などご要望ありましたら, 
お気軽にご連絡ください!

More Related Content

PDF
CAESES Free チュートリアル
PDF
OpenFOAM -空間の離散化と係数行列の取り扱い(Spatial Discretization and Coefficient Matrix)-
PDF
Boundary Conditions in OpenFOAM
PDF
Adjoint Shape Optimization using OpenFOAM
PDF
OpenFOAMの壁関数
PDF
Spatial Interpolation Schemes in OpenFOAM
PDF
Dynamic Mesh in OpenFOAM
PDF
OpenFOAM の Function Object 機能について
CAESES Free チュートリアル
OpenFOAM -空間の離散化と係数行列の取り扱い(Spatial Discretization and Coefficient Matrix)-
Boundary Conditions in OpenFOAM
Adjoint Shape Optimization using OpenFOAM
OpenFOAMの壁関数
Spatial Interpolation Schemes in OpenFOAM
Dynamic Mesh in OpenFOAM
OpenFOAM の Function Object 機能について

Viewers also liked (18)

PDF
Turbulence Models in OpenFOAM
PDF
CFD for Rotating Machinery using OpenFOAM
PDF
OpenFOAM の cyclic、cyclicAMI、cyclicACMI 条件について
PDF
OpenFOAMのチュートリアルを作ってみた#1 『くさび油膜効果の計算』
PDF
OpenFOAM Programming Tips
PDF
OpenFOAM -回転領域を含む流体計算 (Rotating Geometry)-
PDF
オープンソースの CFD ソフトウェア SU2 のチュートリアルをやってみた
PDF
ParaView による可視化 Tips
PDF
blockCoupledSwirlTestチュートリアル
PDF
無償のモデリングソフトウェアCAESESを使ってみた
PDF
Limited Gradient Schemes in OpenFOAM
PDF
OpenFOAM の境界条件をまとめよう!
PDF
OpenFOAM を用いた Adjoint 形状最適化事例1
PDF
Large strain computational solid dynamics: An upwind cell centred Finite Volu...
PDF
Basic Boundary Conditions in OpenFOAM v2.4
PDF
Large strain solid dynamics in OpenFOAM
PDF
Flow and Noise Simulation of the NASA Tandem Cylinder Experiment using OpenFOAM
PDF
OpenFOAMにおけるDEM計算の衝突モデルの解読
Turbulence Models in OpenFOAM
CFD for Rotating Machinery using OpenFOAM
OpenFOAM の cyclic、cyclicAMI、cyclicACMI 条件について
OpenFOAMのチュートリアルを作ってみた#1 『くさび油膜効果の計算』
OpenFOAM Programming Tips
OpenFOAM -回転領域を含む流体計算 (Rotating Geometry)-
オープンソースの CFD ソフトウェア SU2 のチュートリアルをやってみた
ParaView による可視化 Tips
blockCoupledSwirlTestチュートリアル
無償のモデリングソフトウェアCAESESを使ってみた
Limited Gradient Schemes in OpenFOAM
OpenFOAM の境界条件をまとめよう!
OpenFOAM を用いた Adjoint 形状最適化事例1
Large strain computational solid dynamics: An upwind cell centred Finite Volu...
Basic Boundary Conditions in OpenFOAM v2.4
Large strain solid dynamics in OpenFOAM
Flow and Noise Simulation of the NASA Tandem Cylinder Experiment using OpenFOAM
OpenFOAMにおけるDEM計算の衝突モデルの解読
Ad

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

PPTX
OpenFOAMによる気液2相流解析の基礎と設定例
PDF
配管流路の多目的最適化OpenFOAM+OpenMDAO(第28回オープンCAE勉強会@関西)
PDF
OpenFOAMの混相流用改造solver(S-CLSVOF法)の設定・使い方
PDF
OpenFOAM+のCo-simulation機能とFMUの試作
PDF
設計者がCAEを成功させる10の法則
PPTX
Ax symmetricpressurevesselelasticstressanalysis
PDF
rhoCentralFoam in OpenFOAM
PDF
SFC Design theory 2012 6/27
PDF
Free cad 0.19.2 and cfdof (Japanese Ver.)
PPTX
Salome-Meca応力解析中級教材:大変形弾塑性解析による引張試験の再現
PPT
基板を作ろう(修正版)
PPTX
2D Truss Analysis with SalomeMeca2023 (Code-aster 16.5)
PPT
基板を作ろう
PDF
ADVENTUREの他のモジュール・関連プロジェクトの紹介
PDF
aboutDexcsPlus2022.pdf
PDF
DEXCS2022 for preCICE
PDF
Mixer vessel by cfmesh
PDF
OpenFOAM LES乱流モデルカスタマイズ
PDF
How to cad and meshing for OpenFOAM
PDF
Dexcs2019 howto Cad and Meshing
OpenFOAMによる気液2相流解析の基礎と設定例
配管流路の多目的最適化OpenFOAM+OpenMDAO(第28回オープンCAE勉強会@関西)
OpenFOAMの混相流用改造solver(S-CLSVOF法)の設定・使い方
OpenFOAM+のCo-simulation機能とFMUの試作
設計者がCAEを成功させる10の法則
Ax symmetricpressurevesselelasticstressanalysis
rhoCentralFoam in OpenFOAM
SFC Design theory 2012 6/27
Free cad 0.19.2 and cfdof (Japanese Ver.)
Salome-Meca応力解析中級教材:大変形弾塑性解析による引張試験の再現
基板を作ろう(修正版)
2D Truss Analysis with SalomeMeca2023 (Code-aster 16.5)
基板を作ろう
ADVENTUREの他のモジュール・関連プロジェクトの紹介
aboutDexcsPlus2022.pdf
DEXCS2022 for preCICE
Mixer vessel by cfmesh
OpenFOAM LES乱流モデルカスタマイズ
How to cad and meshing for OpenFOAM
Dexcs2019 howto Cad and Meshing
Ad

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

  • 1. 日本語版 を使用した形状最適化事例#1 Fumiya Nozaki 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 補足. CAESES Free のダウンロードサイト Windows,Linux ともに 32bit,64bit の両方に 対応しています.  ダウンロードサイト
  • 68. 68 補足. CAESES Free のインストール  インストール ウィザードにしたがってインストールを実行します.