SU2 CFDソルバー — アジョイント最適化と航空宇宙応用
SU2とは — スタンフォード発のCFD/最適化統合ソルバー
SU2って無料のCFDソフトですよね? OpenFOAMとの違いがイマイチわかってないんですが…
いい質問だね。SU2(Stanford University Unstructured)は、スタンフォード大学の航空宇宙工学科で開発されたオープンソースのCFD/最適化統合ソルバーだ。2012年にGitHubで公開されて、今ではLGPLv2.1ライセンスで誰でも使える。
「CFD/最適化統合」っていうのが気になります。普通のCFDソフトとは違うんですか?
そこがSU2の最大のアイデンティティなんだ。普通のCFDソルバーは「流れを解く」ところまでが仕事だよね。でもSU2は最初から「流れを解いて、その結果から形状を最適化する」という一気通貫の設計思想で作られている。特にアジョイント法(随伴法)による感度解析が標準搭載されていて、これが商用ソルバーでも有料オプションだったりするレベルの機能なんだ。
え、それが無料で使えるんですか? すごい…。開発の経緯ってどんな感じだったんですか?
もともとスタンフォードのProf. Juan Alonso(フアン・アロンソ教授)のグループが、航空機の空力設計を効率化するために開発を始めたんだ。NASAやエアバス、ボーイングの研究資金も入っている。C++で書かれていて、MPIによる並列計算にも対応。コードの設計がモジュール化されているから、新しい物理モデルを追加しやすいのも特徴だね。
SU2の基本プロフィール
| 項目 | 内容 |
|---|---|
| 正式名称 | Stanford University Unstructured (SU2) |
| ライセンス | LGPLv2.1(商用利用可) |
| 言語 | C++ / Python wrapper |
| 離散化 | 非構造格子有限体積法(FVM) |
| 最適化 | Continuous / Discrete Adjoint 標準搭載 |
| 並列化 | MPI + OpenMP ハイブリッド |
| 主な適用分野 | 航空宇宙、自動車空力、ターボ機械、風力エネルギー |
支配方程式と離散化手法
SU2の中身って、数学的にはどんな方程式を解いているんですか?
SU2が解くのは、圧縮性Navier-Stokes方程式の保存形だ。非構造格子上でセル中心型の有限体積法(FVM)を使って離散化する。保存変数ベクトル $\mathbf{U}$ と対流フラックス $\mathbf{F}$、粘性フラックス $\mathbf{F}^v$ を使って、こう書ける:
ここで保存変数ベクトルは:
$$\mathbf{U} = \begin{pmatrix} \rho \\ \rho u \\ \rho v \\ \rho w \\ \rho E \end{pmatrix}$$$\rho$ は密度、$(u, v, w)$ は速度成分、$E$ は全エネルギー、$\mathbf{S}$ はソース項である。
対流フラックスの計算って、どんなスキームが使えるんですか? OpenFOAMだと色々選べますけど…
SU2は圧縮性流れに特化しているだけあって、対流フラックスの評価スキームが充実しているよ。代表的なものを挙げると:
- JST(Jameson-Schmidt-Turkel)スキーム — 中心差分+人工粘性。航空機外部流れの定番
- Roe の近似リーマンソルバー — 衝撃波を含む流れに強い
- AUSM系 — 低マッハ数から超音速まで安定
- HLLC — 接触不連続面の解像度が高い
高次精度化にはMUSCL再構築+リミッターを組み合わせる。時間積分はオイラー陰解法やDual time steppingなど、定常・非定常どちらもカバーしている。
なるほど、圧縮性流れを得意としているから、航空宇宙で強いんですね。非圧縮性はどうなんですか?
SU2 v7以降では非圧縮性ソルバーも搭載されていて、圧力ベースのアプローチで解ける。ただし正直に言うと、低マッハ数の非圧縮性流れだけやるならOpenFOAMのsimpleFoamやpisoFoamのほうがノウハウも文献も圧倒的に多い。SU2の真価は「圧縮性流れ+最適化」のコンビネーションで発揮されるんだ。
アジョイント法による形状最適化
先生、SU2の一番の売りがアジョイント法だって言ってましたけど、そもそもアジョイント法って何なんですか? 普通の最適化と何が違うのかピンと来なくて…
じゃあ具体的な例で説明しよう。航空機の翼型を最適化したいとする。翼の断面形状を定義するパラメータが100個あるとしよう。目的関数は揚抗比 $C_L/C_D$ の最大化だ。
普通のやり方(有限差分法)だと、各パラメータを微小量 $\delta x_i$ だけ変化させて、CFD計算を再実行して感度 $\partial J/\partial x_i$ を求める。つまり100個のパラメータ × 1回のCFD計算 = 100回のCFD計算が必要になる。
100回も! 1回のCFD計算に数時間かかるとしたら、何百時間もかかっちゃいますね…
その通り。そこでアジョイント法の出番だ。アジョイント法では、目的関数 $J$ に対する随伴方程式を1回だけ追加で解く。すると、設計変数の数に関係なく、全パラメータに対する感度が一度に求まる。数式で書くとこうなる:
目的関数 $J$ の設計変数 $\mathbf{x}$ に対する感度は:
$$\frac{dJ}{d\mathbf{x}} = \frac{\partial J}{\partial \mathbf{x}} + \boldsymbol{\psi}^T \frac{\partial \mathbf{R}}{\partial \mathbf{x}}$$ここで $\boldsymbol{\psi}$ は随伴変数(アジョイント変数)で、以下の随伴方程式を解いて求める:
$$\left(\frac{\partial \mathbf{R}}{\partial \mathbf{U}}\right)^T \boldsymbol{\psi} = -\left(\frac{\partial J}{\partial \mathbf{U}}\right)^T$$$\mathbf{R}$ は流れの支配方程式の残差、$\mathbf{U}$ は流れの状態変数である。ポイントは、この随伴方程式のサイズが元のCFD方程式と同じだということ。つまり計算コストはCFD 1回分 + アジョイント 1回分 ≈ 2回分で済む。
100回が2回に! それは革命的ですね…。SU2にはどんなアジョイント法が実装されているんですか?
SU2には2種類のアジョイント法が実装されている:
- Continuous Adjoint — 偏微分方程式レベルで随伴方程式を導出してから離散化する方法。数学的にエレガントだけど、離散化誤差が入る
- Discrete Adjoint — 離散化された方程式に対して直接アジョイントを取る方法。アルゴリズム的微分(AD)を使って自動生成。離散的に正確な感度が得られるので、最適化の収束が良い。SU2ではCoDiPackというADライブラリを使っている
実務ではDiscrete Adjointのほうが信頼性が高いから、まずそちらを使うことをお勧めするよ。
アジョイント法の計算コスト比較
| 手法 | 設計変数 $N$ 個の場合 | CFD計算回数 |
|---|---|---|
| 有限差分法 | $O(N)$ | $N + 1$ 回 |
| 複素変数法 | $O(N)$ | $N$ 回 |
| アジョイント法 | $O(1)$ | 2 回(流れ+随伴) |
乱流モデルとRANS/LES対応
乱流モデルはどのくらい使えるんですか? 実務だとSpalart-Allmarasとk-omegaあたりが定番ですけど…
SU2のRANSモデルはかなり充実しているよ。搭載モデルを整理するとこうなる:
- Spalart-Allmaras (SA) — 1方程式モデル。航空宇宙の定番。SU2のメイン開発者がSA推しなので、実装の成熟度が高い
- SST k-ω — Menterの2方程式モデル。壁近傍のk-ωと主流のk-εをブレンド。自動車や一般産業向け
- k-ω (Wilcox) — 基本のk-ωモデル
- SA-neg, SA-BCM — SAの改良版。遷移予測への拡張
特にSAモデルは、アジョイント法との整合性がしっかり検証されているから、最適化ループで安定して回せるんだ。
LES(Large Eddy Simulation)もできるんですか?
SU2 v8以降ではLES/DES(Detached Eddy Simulation)にも対応している。ただし正直に言うと、LESの成熟度ではOpenFOAMのほうが一歩先を行っている。SU2でLESをやるケースは、非定常アジョイントと組み合わせたいという高度な研究目的が多いね。例えばジェットエンジンのノズル形状をLESベースで最適化するような研究だ。
SU2が解くRANS方程式は、レイノルズ平均したNavier-Stokes方程式にレイノルズ応力のモデル化を加えたものである。渦粘性仮説に基づき、レイノルズ応力テンソルを以下のようにモデル化する:
$$-\overline{u'_i u'_j} = 2\nu_t \left(S_{ij} - \frac{1}{3}S_{kk}\delta_{ij}\right) - \frac{2}{3}k\delta_{ij}$$$\nu_t$ は渦粘性係数、$S_{ij}$ は平均ひずみ速度テンソル、$k$ は乱流エネルギーである。SAモデルでは修正渦粘性 $\tilde{\nu}$ に対する1本の輸送方程式を解く。
Python wrapperとMDO連携
SU2ってPythonから制御できるって聞いたんですけど、具体的にどんなことができるんですか?
SU2にはpysu2というPython wrapperが用意されていて、CFDソルバーをPythonオブジェクトとして扱える。これが非常に強力で、例えばこんなことができる:
- ゾーン間のデータ受け渡し — 構造ソルバーとの連成(FSI: Fluid-Structure Interaction)
- 最適化ループの構築 — SciPyやDAkotaと組み合わせた多目的最適化
- 機械学習パイプライン — PyTorchやTensorFlowで学習したサロゲートモデルとの連携
- DOE(実験計画法) — Latin Hypercube Samplingなどでパラメータスタディ
MDO(多分野統合最適化)って、具体的にはどういう感じで使うんですか?
例えば航空機の翼設計だと、空力だけ最適化しても意味がないよね。構造重量も考えないといけない。SU2のPython wrapperを使うと、こんなワークフローが組める:
- 翼形状パラメータ(Hicks-Henne bump関数など)を定義
- SU2で空力解析 → $C_L$, $C_D$ を取得
- 構造ソルバー(Code_Asterなど)で構造解析 → 翼重量、応力を取得
- アジョイント法で両方の感度を計算
- SciPy.optimize や OpenMDAO で多目的最適化(揚抗比最大化+重量最小化)
これを全部Pythonスクリプト1本で自動化できるのが、SU2の真骨頂だ。
航空宇宙・産業応用事例
実際にSU2を使っている企業や研究機関ってどこがあるんですか? 論文だけの研究ツールじゃないですよね?
もちろん実務でも使われているよ。いくつか代表的な事例を紹介しよう:
- エアバス — EU研究プロジェクト「MADELEINE」で、高忠実度の翼型最適化にSU2のDiscrete Adjointを採用。遷音速条件での揚抗比を3%以上改善
- ボーイング研究部門 — NASA CRMウイング(Common Research Model)のベンチマークでSU2の検証を実施。商用ソルバーとの一致を確認
- Rolls-Royce — タービンブレードの冷却設計で、SU2のCHT(共役伝熱)ソルバーを評価
- DLR(ドイツ航空宇宙センター) — 超音速旅客機の形状最適化にSU2を適用
- KAIST(韓国科学技術院) — ターボ機械の翼列最適化で大規模な学術研究
へえ、エアバスやボーイングまで! 航空宇宙以外の分野でも使われていますか?
最近は適用範囲が広がっていて、こんな分野でも使われている:
- 自動車 — レーシングカーのリアウイング最適化。F1チームが内製ツールと組み合わせて使うケースもある
- 風力発電 — 風力タービンのブレード形状最適化。年間発電量の最大化が目的関数
- 建築 — ビル周りの風環境シミュレーション(ただし非圧縮性なのでOpenFOAMのほうが多い)
- バイオメディカル — 人工心臓弁の流れ解析。最適化よりは解析目的
ただし、やはりSU2が最も輝くのは航空宇宙系の圧縮性流れ+最適化の組み合わせだね。
SU2 vs OpenFOAM — 使い分けの指針
結局、SU2とOpenFOAMってどう使い分ければいいんですか? 両方オープンソースだし迷います…
いい質問だね。両者は設計思想が根本的に違うから、目的に応じて使い分けるのが正解だ。ざっくりまとめるとこうなる:
SU2 vs OpenFOAM 比較表
| 項目 | SU2 | OpenFOAM |
|---|---|---|
| 設計思想 | CFD + 最適化の統合 | 汎用CFDフレームワーク |
| 得意分野 | 圧縮性外部流れ | 非圧縮性・多相流 |
| アジョイント最適化 | 標準搭載(成熟) | adjointOptimisationFoam(限定的) |
| 乱流モデル数 | 約10種 | 50種以上 |
| メッシュ | 非構造格子(外部ツール) | blockMesh / snappyHexMesh 内蔵 |
| コミュニティ規模 | 中規模(学術寄り) | 大規模(産業+学術) |
| 学習コスト | 中(設定ファイルがシンプル) | 高(ディレクトリ構造の理解が必要) |
判断基準を簡潔に言うとこうだ:
- 「形状を最適化したい」→ SU2。特に航空機の翼やノズルの形状最適化なら圧倒的に楽
- 「多相流・燃焼・化学反応もやりたい」→ OpenFOAM。物理モデルの幅広さではOpenFOAMが圧勝
- 「圧縮性の遷音速/超音速流れ」→ SU2。もともと航空宇宙向けだから、数値スキームが洗練されている
- 「チームに既存ユーザーがいる」→ そちらを選ぶ。ノウハウの蓄積は何物にも代えがたい
よくあるトラブルと対処法
SU2を使い始めるにあたって、ハマりやすいポイントってありますか? 先輩から「最初は苦労する」って聞いたんですが…
あるある、よくあるトラブルをまとめておこう:
SU2 初心者がハマるポイント TOP5
1. メッシュフォーマットの問題
SU2はネイティブの .su2 フォーマットを使う。CGNS や Gmsh の .msh からの変換が必要で、境界条件のマーカー名がずれることがある。SU2_DEF ツールでメッシュ変形する際にも注意。
2. 設定ファイル(.cfg)のパラメータ名変更
SU2はバージョンアップで設定パラメータ名が変わることがある(例: CONV_NUM_METHOD_FLOW → NUM_METHOD_GRAD)。エラーメッセージをよく読んでドキュメントを確認すること。
3. アジョイント計算が収束しない
まずフロー解析(直接問題)が十分に収束しているか確認。残差が4桁以上落ちていないとアジョイントは不安定になる。CONV_RESIDUAL_MINVAL = -8 程度に設定しよう。
4. CFL数の設定
SU2ではAdaptive CFL(CFL_ADAPT = YES)が推奨。初期値を小さく(1〜10)設定して、自動で上げていく方式が安定する。
5. 並列実行時のメッシュパーティショニング
MPI並列で実行する場合、SU2_CFD が自動でパーティショニングするが、プロセス数がメッシュセル数に対して多すぎると効率が落ちる。1プロセスあたり最低5万セル程度を目安にしよう。
ありがとうございます! アジョイントの収束問題は特に注意します。最後に、SU2を学ぶのにおすすめのリソースってありますか?
公式が充実しているから、まずはここから始めるといい:
- 公式チュートリアル(su2code.github.io)— NACA 0012翼型の基本解析から形状最適化まで段階的に学べる
- SU2 GitHub Discussions — コミュニティQ&A。開発者本人が回答してくれることも
- AIAA Journal / Computers & Fluids の論文 — "SU2: An Open-Source Suite for Multiphysics Simulation and Design" (Economon et al., 2016) が基本文献
- スタンフォードのMDOLab — SU2の上流にあたる研究室。最新のアジョイント手法の論文が豊富
まずはチュートリアルの「Quick Start」でNACA翼型を回してみて、その後に形状最適化のチュートリアルに進むのがベストな学習パスだよ。
CAE技術は日々進化しています。 — Project NovaSolverは最新の研究成果を実務に橋渡しすることを目指しています。
SU2の実務で感じる課題を教えてください
Project NovaSolverは、CAEエンジニアが日々直面する課題——セットアップの煩雑さ、計算コスト、結果の解釈——の解決を目指しています。あなたの実務経験が、より良いツール開発の原動力になります。
お問い合わせ(準備中)なった
詳しく
報告