More Related Content
PDF
Adjoint Shape Optimization using OpenFOAM PDF
OpenFOAM v2.3.0のチュートリアル 『oscillatingInletACMI2D』 PDF
PDF
OpenFOAMのチュートリアルを作ってみた#1 『くさび油膜効果の計算』 PDF
OpenFOAM -回転領域を含む流体計算 (Rotating Geometry)- PDF
OpenFOAM の Function Object 機能について PDF
ParaviewでのParticle Tracerを用いた可視化 PDF
OpenFOAM の cyclic、cyclicAMI、cyclicACMI 条件について What's hot
PDF
Turbulence Models in OpenFOAM PPTX
PPTX
OpenFOAMによる気液2相流解析の基礎と設定例 PPTX
FSI analysis with preCICE (OpenFOAM and CalculiX) PDF
PDF
PDF
PDF
Boundary Conditions in OpenFOAM PDF
OpenFOAMの混相流用改造solver(S-CLSVOF法)の設定・使い方 PDF
PDF
OpenFOAMに実装したS-CLSVOF法検証(静止気泡のLaplace圧) PDF
OpenFoamの混相流solver interFoamのパラメータによる解の変化 PDF
PDF
PDF
PDF
OpenFOAM -空間の離散化と係数行列の取り扱い(Spatial Discretization and Coefficient Matrix)- PDF
PDF
無償のモデリングソフトウェアCAESESを使ってみた PDF
CFD for Rotating Machinery using OpenFOAM PDF
Spatial Interpolation Schemes in OpenFOAM Viewers also liked
PDF
PDF
OpenFOAM Programming Tips PDF
オープンソースの CFD ソフトウェア SU2 のチュートリアルをやってみた PDF
PDF
blockCoupledSwirlTestチュートリアル PDF
Limited Gradient Schemes in 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計算の衝突モデルの解読 Similar to CAESES-FFW,GridPro,OpenFOAMを使用した形状最適化事例#1
PDF
配管流路の多目的最適化OpenFOAM+OpenMDAO(第28回オープンCAE勉強会@関西) PDF
OpenFOAM+のCo-simulation機能とFMUの試作 PDF
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
PDF
PDF
How to cad and meshing for OpenFOAM PDF
Dexcs2019 howto Cad and Meshing PPTX
PDF
PDF
PDF
Howto CAD and Meshing on DEXCS2020 CAESES-FFW,GridPro,OpenFOAMを使用した形状最適化事例#1
- 1.
- 2.
2
目的と概要
L字管を題材にして,CAESES/FFW を使用した設計最適化の基本的な部分
を解説しています.
内部流れで一般的な性能指標である圧力損失を目的関数として最適化を行っ
ています.
成果としては,圧力損失を基準形状に対して 50% 以上低減させることに成
功しました.
この資料をご覧いただいて,ご不明な点などございましたら,お気軽にお問
い合わせください.フィードバックはどんなものでもありがたいです.
- 3.
- 4.
- 5.
5
目的関数を何にするか?
“入口と出口間の全圧差” を目的関数とします.
퐼 = −
휌 푝 +
1
2
푢2 풖 ∙ 풏 푑훤 inlet
풖 ∙ 풏 푑훤 inlet
−
휌 푝 +
1
2
푢2 풖 ∙ 풏 푑훤 outlet
풖 ∙ 풏 푑훤 outlet
[Pa]
휌: 密度
푝: 密度で割った圧力
풖: 流速
풏: 境界の単位法線ベクトル (計算領域外向き)
simpleFoam の表記方法に合わせています.
- 6.
- 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.
- 11.
- 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.
- 18.
- 19.
19
2-1. GridProの設定ファイルの作成
基準形状に対して準備したトポロジーを変形形状の計算格子の生成にも活用
マルチブロックの
構造格子
ブロックごとに
色分け表示
します.
基準形状 変形形状
- 20.
- 21.
21
5. 連携の設定
OpenFOAM との連携の設定
目的関数の計算値の出力ファイル
圧力差をファイルに出力するように simpleFoam を改造
(資料の最後にある補足をご覧ください)
可視化用 vtk ファイル (Function object 機能で生成)
- 22.
22
5. 連携の設定
最新バージョン 3.1.2 では,CAESES Free と
OpenFOAM の連携の設定のチュートリアルが
追加されています.
1. クリック
2. クリック
3. クリック
PDF ファイル
が開きます.
設定の詳細が解説されています!
- 23.
- 24.
24
6. 設計空間の探索
探索点の数が多いほど得られる情報は多くなりますが,計算コストもそれに
比例して増加します.
最も直感的なアイディア:
各設計変数の定義域を均等に分割
1つ目の設計変数の値の範囲
2つ目の設計変数の値の範囲
それぞれの探索点 (変形形状) について,
• 計算格子の生成
• 流体計算
を実行する必要があります.
- 25.
25
6. 設計空間の探索
この方法では,設計変数の数の増加に伴い,計算コストが指数関数的に増加
してしまいます.
できるだけ少ない計算コストで
効率的に情報を得られるように
探索点を配置する方法はないのか?
実験計画法
Design Of Experiments (DOE)
この資料では,Sobol を使用します.
- 26.
26
6. 設計空間の探索
Sobol とは?
• Low-discrepancy sequence (低食い違い量列,超一様分布列),または,
quasi random sequence (準乱数列) と呼ばれる点列の生成方法の一種です.
• 決定論的な点列であり,同じ設定では同じ点列が生成されます.
• 空間的に均等な分布をもたらすように設計されています.
実際に生成される点列の分布を見てみましょう.
- 27.
- 28.
- 29.
- 30.
30
6. 設計空間の探索
Sobol の設定
変形形状の数を指定します.
それぞれの設計変数の
• 上限値 [Upper]
• 下限値 [Lower]
を設定します.
目的関数を指定します.
- 31.
- 32.
- 33.
- 34.
- 35.
- 36.
- 37.
- 38.
- 39.
- 40.
- 41.
- 42.
- 43.
- 44.
- 45.
- 46.
- 47.
- 48.
- 49.
- 50.
- 51.
51
6. 設計空間の探索
終了したタスクを表示
実行中のタスクを表示
選択したタスクの
標準出力を表示
この図では,
OpenFOAM の出力
- 52.
- 53.
- 54.
54
6. 設計空間の探索
基準形状 (baseline) Sobol のベスト形状
921.12 [Pa] 439.32 [Pa]
形状比較
- 55.
- 56.
- 57.
57
7. 最適化計算
設計空間の探索で得られたベストな形状 (Sobol_01_des0019) を初期形状
として最適化計算を実行します.
- 58.
- 59.
- 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.
- 69.