JP EN
数値流体解析とパラメータ最適化 前編

数値流体解析とパラメータ最適化 前編

Parametric optimization for maximizing performance about fluid using OpenFOAM Part 1

この記事では、パラメータ最適化を行う前段階としてOpenFOAMを使用して流体解析を行っています。

In this article we caluclated CFD by OpenFOAM as a first step to do geometry optimization.

明戸大介

Daisuke Aketo

2023,10,27 2023,10,27

はじめに

本記事では数値流体解析によるパラメータ最適化を行います(前編:数値流体解析の準備)。

流体解析とは

弊社Tech blogでは主に構造解析に関する記事を取り扱ってきましたが、工学分野において構造解析と同じく重要視されているシミュレーションとして流体解析があります。現在流体が影響する製品(自動車、家電、船舶、飛行機、工場、etc...)であれば規模の多寡はあれど全く実施していない分野は無いと言っても過言ではないでしょう。

\frac{\partial \bold{u}}{\partial t} +(\bold{u} \cdot \nabla)\bold{u}= -\frac{1}{\rho} \nabla p + \nu   (\nabla \cdot \bold{u}) +\bold{F}

m \bold{a} = \bold{F}に相当する上記流体運動の支配方程式であるNavie-Stokes方程式を解くことで流れ場を得ます(格子ボルツマン法等、他の手段もありますが今回は割愛)。 方程式そのものの発見は19世紀ですが、未だ解析解が発見されていない難しい式であり、大がかりな工業的適用は数値解を取得する手段である計算機の発展と共に歩んできました。 file (理化学研究所 様から抜粋)

そんな前置きはさておき、実際に使ってみます。

OpenFOAM

最適化の前段階として、通常の流体解析を実施します。次の課題を設定します。

Φ=20 mm、L= 200 mm の一定速度で空気が一方向に流れる直管がある。この中間に回転方向の流れが生じる構造物(以下ミキサーと呼称)を設けることでなるべく圧損を上げずに旋回流を作り出す。

file

ある種の攪拌を想定した系になります。

OpenFOAMはおそらく最も有名なオープンソースの数値流体力学(連続体力学)ソフトウェアです。困った時の対応策も日文英文共にネットに多く転がっているので、無難な選択ではないでしょうか。(特にPENGUINITISさんとXSimさんにはお世話になっています。)

設定ファイルをバリバリ書けばそれに従ってモリモリ解析してくれます…が今回は内なるコンセプトとして比較的気軽に実行できる話にしたいと考えてますので、各種サンプルファイルをベースにして解析実行できるモノを組んでいきます。(前述のXSimさんはWeb上で設定ファイルを作成できるサービスを行っています、初心者にはそちらもおすすめです。) なお、以降のメッシュ表示等には特記ない限り同じくオープンソースの可視化ソフトParaViewを使用しております。

解析準備

非圧縮定常の解析を行いたいのでベースとなる[インストールフォルダ]/tutorials/incompressible/simpleFoam/motorBike フォルダを作業箇所にコピーします。まずは形状をconstant/triSurfaceに用意しましょう。今回はstlで用意しました。 file 明確化の為、かつ後々の最適化時にファイル差し換えが簡単にできるように各形状(流入口、流出口、円筒管壁面、ミキサー形状)を別のファイルにしています。-regはメッシュの細分化(blade周辺、outlet直前5mm)領域を明示的に定義しています。

OpenFOAMは基本的にSI単位系で解析を実行しますが、メッシュ作成に使用するsnappyHexMeshが普通に使うと(m単位時の)mm以下の扱いがあまり得意でないので、本形状ぐらいのサイズの時は1000倍(=mm単位)で出力したstlでメッシュを作成し、後々0.001倍スケーリングした方が安定します。

こちらは試しに20×20(×10)mmのロゴに対して ・左...m単位でstlを出力して厚さ0.0001の壁面レイヤー挿入命令 ・右...mm単位でstlを出力して厚さ0.1の壁面レイヤー挿入命令、メッシュ作成後全体を0.001倍 を実行した結果です。常に失敗する訳ではありませんが、最適化実行時は生成されたメッシュを一つ一つ確認することは現実的ではないので、なるべく安定的にメッシュを作成できる方法が良いです。

Allrunが実行スクリプトです。この記述を参考に各設定ファイル(systemフォルダ内に実行名と同名ファイルが存在しています)を調整していきましょう。以下、設定を行う時に私が気を付けていることを書き出してみました。

・decomposeParDict...並列化設定です。今回のように一方向に長い形状の時はその方向のみ分割する設定にします。

・surfaceFeatureExtract...形状の特徴線を抽出してメッシュ作成時の参考にします。ミキサーのように明らかに形状の再現度が最終的な結果に大きく影響する形状に実施します。

・blockMeshDict、snappyHexMesh...メッシュ作成に関連しています。あまり他のメッシャーでは見られない方法でメッシュを作成していますので、他流体解析を実施されたことのある方も各種解説を一度確認してから使用した方がいいでしょう。 今回は最適化後のミキサーでも十分解析の精度を担保できるようにミキサーがとる範囲全体を集中的に細分化しています。また、出口近傍も運動量を取得する為に細分化を施しています。 file

・potentialFoam...ポテンシャル流れ(粘性のない流れ、簡単に解ける)を解いて初期値として場に与えます。解析初期の値の急激な変化を防ぐことができ、最終的な値の収束が早くなったり発散を防ぐ効果が見込まれますが、一方で与えらえた初期値に最終的な解が悪影響を受けて不正確な値を導くこともあります。ケースバイケースで適用可否を検討します。今回は使用しています。

・$(getApplication)...system/controlDictのapplicationにあるソルバ(simpleFoam)を実行します。収束計算の実行回数等もcontrolDictで設定します。適宜値を設定してください。また、ポスト処理用にfunctionsで出口近傍領域の角運動量を出力するようにします。[インストールフォルダ]/tutorials/incompressible/simpleFoam/pipeCyclicの記述が参考になります。残差も後々収束確認を行う為に出力しておきます。functions内に以下の行を記述します。 #includeFunc solverInfo

追加で以下の実行設定をします。

・transformPoints -scale "(1e-3 1e-3 1e-3)"...toposetの後に実行します。mmで作成されているメッシュをm単位にリスケール(×0.001)します。

・postProcess -func 'patchAverage(name=inlet, p)' ...最終行に記述します。inletの圧力を出力します。

以上を書き足して実行します。出力されたlogにエラーがなければひとまず成功です。ダメだった場合は適宜修正の後にリトライしましょう。Allcleanでリフレッシュします(こちらも初期状態だとtriSurface内の形状データも消してしまうので適宜書き換えてください)。

最適化に向けた確認事項

パラメータ最適化で使用することを念頭に、以下の検討、調整を行います。

・solverInfoに出力されている各種残差をプロットして、収束しているか確認します。パラメータ最適化を行う際に生成される形状次第では収束しにくい流れが生じる可能性があることから、若干余裕をもって多めのiteration数にしておきます。今回の場合、1500~2000回程度がよさそうです。 緩和係数の調整や収束判定条件を設けて計算を適宜打ち切る、逆にギリギリの回数を攻めて一回の解析にかかる計算時間を減らし、計算実行の総回数を増やした方がいいのではないか?等ここは色々な流派があるので、自分の肌感覚と計算対象に合う方向性を選ぶといいのではないでしょうか。

・一回の解析にかかる計算時間を計測しておきます。最適化を実施する際の総時間のおおよその目安となります。

・何個か実際にミキサー形状のstlを差し換えて計算し、問題なく計算が実行されるか確認します。

・結果を可視化し、明らかに異常な流れが生じていないか調べます。例えば出口から逆流していないか、非連続的な値が生じていないか等です。

file 流線を表示しています。紙面右側から円筒軸方向垂直に流れていた流れが緑色のミキサーにあたって旋回流になっていることが分かります。

まとめ

流体解析を用いたパラメータ最適化実施の前段階として、OpenFOAMの設定をし、実際に解析してみました。後編でパラメータ最適化します。

Writer

エンジニア

Engineer

明戸大介Daisuke Aketo Daisuke Aketo

自動車関連企業で情報工学と数値解析を両輪にした開発システムの研究から製品適用までを一貫して担当。2023年にNature Architectsに参画。

Worked in the automotive industry and was responsible for informatics and CAE simulation, And then he joined Nature Architects in 2023.

Daisuke Aketo

Nature Architects株式会社

Nature Architects, Inc.

代表取締役:大嶋 泰介

CEO:Taisuke Ohsima

所在地:〒103-0011 東京都中央区日本橋大伝馬町6-5 岩清日本橋ビル4F

ADDRESS:Iwasei Nihonbashi Building 4F, 6-5, Nihonbashi Odenmacho, Chuo-ku, Tokyo, 103-0011, Japan

設立:2017年5月

Funded:May, 2017

URL:https://nature-architects.com/

お問い合わせ:https://nature-architects.com/contact/

CONTACT:https://nature-architects.com/contact/

Related Topics

Up Next

最適化の設定について考えよう

最適化の設定について考えよう

Let's think about optimization settings.

皆さんは Grasshopper で最適化をしたことがありますか?特に Tunny をつかって最適化をしたことがありますか? その時にうまく最適化できないなと思ったことはないでしょうか。 Tunny が採用しているブラックボックス最適化と呼ばれる部類の最適化は感度を使用した最適化(例えば位相最適化)に対して収束が遅いため、適切な最適化設定でなかったり、対象の問題が適切でないと、ランダムより少し良い結果が得られる程度のものになってしまいます。 今回は Tunny を使って、最適化設定の違いによる結果の違いを見ていきましょう。

Have you ever performed optimization in Grasshopper? Specifically, have you used Tunny for optimization? During that time, did you ever feel that the optimization was not working well? The category of optimization called black-box optimization, which Tunny uses, has slower convergence compared to sensitivity-based optimization (such as topology optimization). If the settings are not properly configured or the problem is not suitable, the result may end up being just slightly better than random. In this article, let's look at the optimization results using Tunny with different settings.

夏目大彰

Hiroaki Natsume

2024,04,05 2024,04,05