SIMPLE法
SIMPLE法の理論基礎
SIMPLE法の概要
先生、SIMPLE法って名前はよく聞くんですけど、何の略で、何をする手法なんですか?
SIMPLE は Semi-Implicit Method for Pressure-Linked Equations の略で、1972年にPatankarとSpaldingが発表した圧力-速度連成アルゴリズムだよ。非圧縮性Navier-Stokes方程式を有限体積法で解くとき、圧力と速度をどうやって整合的に求めるかという問題を解決するんだ。
圧力と速度の連成って、なぜそんなに厄介なんですか?
非圧縮性流れでは連続の式(質量保存)が圧力の独立した方程式を含まないんだ。密度が一定だから状態方程式で圧力を求められない。結果として、運動量方程式と連続の式を同時に満たす圧力場と速度場を見つける必要がある。これが圧力-速度連成問題だよ。
支配方程式
まず基本の方程式を教えてください。
非圧縮性流れの支配方程式は次のとおりだ。
運動量方程式(Navier-Stokes方程式):
ここで $\mathbf{u}$ は速度ベクトル、$p$ は圧力、$\rho$ は密度、$\nu$ は動粘性係数だ。
未知数が4つ(u, v, w, p)で方程式も4つだから、原理的には解けるはずですよね?
そう。ただし圧力のPoisson方程式を直接導出して同時に解くのは計算コストが高い。SIMPLE法は「予測-補正」というアプローチで、この連成を効率的に分離して解くんだ。
SIMPLE法のアルゴリズム
具体的な手順を教えてください。
SIMPLE法の1反復は次の4ステップで構成される。
Step 1: 運動量方程式を仮の圧力 $p^*$ で解く
これで仮速度 $\mathbf{u}^*$ を得る。この速度場は一般に連続の式を満たさない。
Step 2: 圧力補正方程式を解く
連続の式の残差を消すための圧力補正 $p'$ を求める:
Step 3: 圧力と速度を補正する
ここで $\alpha_p$ は圧力の緩和係数だ。
Step 4: その他のスカラー方程式を解き、収束判定を行う
$a_P$ っていうのは運動量方程式の対角係数ですよね。圧力補正方程式の右辺が速度の発散ということは、連続の式の残差をゼロに近づけてるんですね。
その通り。反復を繰り返すと $\nabla \cdot \mathbf{u}^* \to 0$ となり、質量保存が満たされるんだ。
緩和係数の役割
$\alpha_p$ の緩和係数ってどういう意味ですか?
SIMPLE法では圧力補正で隣接セル係数($a_N$項)の寄与を省略している近似があるため、1回の補正では過補正になりがちなんだ。だから圧力には $\alpha_p = 0.3$ 程度、速度には $\alpha_u = 0.7$ 程度の亜緩和(under-relaxation)を適用するのが一般的だよ。経験則として $\alpha_u + \alpha_p \approx 1$ とする流儀もある。
なるほど、近似の代償として緩和が必要になるわけですね。これがSIMPLEの「Semi-Implicit」たる所以ですか。
そうだ。完全に陰的(Fully Implicit)に解くなら連成ソルバーになるが、SIMPLE法は分離型(Segregated)ソルバーとして非常に効率的なんだ。
Patankarが1970年代の計算機でSIMPLE法を動かした話
SIMPLE法(Semi-Implicit Method for Pressure-Linked Equations)を開発したS.V. Patankarは、1972年当時の計算機でNavier-Stokes方程式を解くという挑戦に挑んだ。当時のメモリは現代のスマホの1万分の1以下。そこで彼が取った戦略が「圧力と速度を分離して交互に解く」という反復法——これがSIMPLEの本質。完璧な連立方程式を一気に解かなくていい、という発想の転換は、限られた計算資源を最大限活用するための知恵だった。現代でも数百万セルのCFD解析にSIMPLEが使われているのは、この「分離型反復」のシンプルさと実績の賜物です。
SIMPLE法の数値計算手法
SIMPLE族アルゴリズムの比較
SIMPLE以外にもSIMPLECとかSIMPLERとか聞くんですけど、何が違うんですか?
SIMPLE法を改良したバリエーションがいくつかあるんだ。主要なものを比較しよう。
SIMPLEC(SIMPLE-Consistent)
Van Doormaalと Raithby(1984)が提案。圧力補正方程式で隣接セル係数の影響を部分的に考慮する改良版だ。
$a_P$ の代わりに $a_P - \sum a_N$ を使うことで、圧力の緩和係数を1.0に近づけられる。収束が速くなる場合が多いんだ。
SIMPLER(SIMPLE-Revised)
Patankar(1980)が改良版として提案。圧力補正の前に圧力方程式を別途解いて、より良い圧力場を推定する手法だ。
SIMPLECだと緩和係数を大きくできるのは嬉しいですね。実務ではどれを使うのが一般的ですか?
Rhie-Chow補間
有限体積法でSIMPLEを実装するとき、圧力と速度の格子配置ってどうなるんですか?
これは非常に重要なポイントだ。コロケーション格子(圧力と速度を同じ位置に配置)を使うと、圧力のチェッカーボードパターンが発生する問題がある。
Rhie-Chow補間(1983)はこれを解決するための手法で、セル面上の速度を計算するとき圧力の3次導関数的な項を追加することで、チェッカーボード振動を抑制する。
現在のほとんどの商用CFDコードはコロケーション格子+Rhie-Chow補間を採用しているんだ。
スタガード格子(速度と圧力を別の位置に配置)では不要なんですか?
スタガード格子ではチェッカーボード問題は自然に回避される。ただし非構造格子への拡張が難しいため、現代のCFDコードではコロケーション格子が主流なんだよ。
線形方程式系の解法
各ステップで線形方程式系を解くわけですが、どんな手法が使われますか?
運動量方程式にはガウス-ザイデル法やILU前処理付きBiCGSTAB法が一般的だ。圧力補正方程式は楕円型でスペクトルが広いため、AMG(代数的マルチグリッド)前処理が有効なんだ。
| 方程式 | 推奨手法 | 内部反復回数の目安 |
|---|---|---|
| 運動量(u, v, w) | ガウス-ザイデル / ILU-BiCGSTAB | 3〜10 |
| 圧力補正 | AMG前処理付きCG / GAMG | 50〜200 |
| スカラー(k, epsilon等) | ガウス-ザイデル | 3〜5 |
圧力補正の方が反復回数が多いんですね。
圧力補正方程式はラプラシアン型で情報の伝播が遅いんだ。だからマルチグリッドが効くし、ここがボトルネックになることが多い。全体の計算時間の60〜80%を圧力補正に費やすこともある。
SIMPLECとSIMPLER——「C」と「R」の違いって何だっけ?
SIMPLE法には派生型がいくつかある。SIMPLECは「Consistent」の頭文字で、速度補正係数の計算を改良して収束を速めた版。SIMPLERは「Revised」で、圧力の初期推定精度を上げた版。実際のところ、どっちが速いかはケースバイケース。単純な管内流れではSIMPLECがSIMPLEより30%速く収束した事例がある一方、複雑な再循環流れでは差が出ないこともある。現場では「まずSIMPLEで様子を見て、収束が遅ければSIMPLECに切り替える」という判断プロセスが多い。大切なのはアルゴリズムの名前より緩和係数のチューニングだという意見も根強い。
SIMPLE法の実務適用
実務での設定手順
先生、実際にCFD解析でSIMPLE法を使うとき、どんな手順で進めればいいですか?
定常解析でSIMPLE/SIMPLECを使う典型的なフローを示そう。
1. メッシュ生成と品質確認: 非直交性 < 70度、スキューネス < 0.85 が目標
2. 離散化スキームの選択: まず1次風上で安定に収束させ、そこから2次精度に切り替える
3. 緩和係数の初期設定: 圧力 0.3、速度 0.7、乱流量 0.5〜0.7
4. 残差モニタリング: 全変数の残差が $10^{-4}$ 以下、かつ監視点の物理量が安定
5. メッシュ感度解析: 3水準以上のメッシュで結果の依存性を確認
ソフト別のSIMPLE設定
各ソフトでの具体的な設定方法を教えてください。
Ansys Fluent での設定
Fluentでは Pressure-Based Solver を選択した上で、Coupled ではなく SIMPLE や SIMPLEC を Pressure-Velocity Coupling で選ぶんだ。
- Methods > Pressure-Velocity Coupling > SIMPLE or SIMPLEC
- 圧力離散化: Standard, PRESTO!, Second Order
- 運動量: Second Order Upwind(安定したら)
- Pseudo Transient オプションで擬似時間進行による安定化も可能
OpenFOAM での設定
OpenFOAMの定常ソルバー simpleFoam では fvSolution の SIMPLE エントリで設定する。
```
SIMPLE
{
nNonOrthogonalCorrectors 1;
residualControl
{
p 1e-4;
U 1e-4;
}
}
relaxationFactors
{
fields { p 0.3; }
equations { U 0.7; k 0.5; epsilon 0.5; }
}
```
nNonOrthogonalCorrectors はメッシュの非直交性が高い場合に増やすとよいんだ。
STAR-CCM+ での設定
STAR-CCM+では Segregated Flow モデルを選択すると SIMPLE アルゴリズムが使われる。Under-Relaxation Factors タブで緩和係数を設定できるよ。
緩和係数のチューニング指針
緩和係数を最適に設定するコツってありますか?
いくつかの実践的なガイドラインをまとめよう。
| 状況 | 圧力緩和 | 速度緩和 | 備考 |
|---|---|---|---|
| 標準的な流れ | 0.3 | 0.7 | デフォルト |
| 高Re数の乱流 | 0.2 | 0.5 | 安定性重視 |
| 自然対流 | 0.3〜0.5 | 0.5〜0.7 | 浮力項との連成 |
| 多孔質媒体 | 0.1〜0.2 | 0.3〜0.5 | ソース項が大きい |
| 収束が安定したら | 0.5 | 0.8 | 加速して仕上げ |
残差が振動するなら緩和を小さく、収束が遅いなら少しずつ大きくする。自動緩和機能を持つソルバーもあるよ。
「まず安全な設定で回して、安定したら攻める」という戦略ですね。
そのとおり。CFDは「急がば回れ」が鉄則だ。
緩和係数0.7/0.3はどこから来た?——SIMPLE実践の経験則
SIMPLEを使うとき「速度の緩和係数は0.7、圧力は0.3」という設定をよく見かける。これ、実は確固たる理論的根拠があるわけじゃない。Patankarの教科書や大量のベンチマーク事例から積み上げられた経験則だ。設定を0.9にすると最初は速く進む感じがするが、複雑な流れでは途中でブレて発散する。逆に0.5以下にするとひたすら遅い。ある自動車エンジンルーム冷却解析で0.7/0.3がなかなか収束しないとき、速度だけ0.5に下げたらスムーズに収束した——という微調整の経験談はCFDエンジニアなら誰しも持っているもの。緩和係数は「魔法の定数」ではなく、問題に応じて感触で調整するものです。
SIMPLE法のソフトウェア比較
主要CFDソルバーにおけるSIMPLE実装
SIMPLE法の実装って、ソフトによって違いがあるんですか?
基本原理は同じだが、各ソルバーが独自の改良や拡張を加えているんだ。
| ソルバー | 分離型アルゴリズム | 連成型の有無 | 特記事項 |
|---|---|---|---|
| Ansys Fluent | SIMPLE, SIMPLEC, PISO, Coupled | あり | Pseudo Transient, High Order Term Relaxation |
| Ansys CFX | 独自連成型のみ | 標準 | 分離型は非搭載。結合型AMGで高効率 |
| STAR-CCM+ | SIMPLE系 | あり | AMG前処理、自動緩和機能 |
| OpenFOAM | SIMPLE, SIMPLEC | 別途 | simpleFoam, rhoSimpleFoam, buoyantSimpleFoam |
Ansys Fluent
Fluentが最も選択肢が多そうですね。
FluentはPressure-Based SolverとDensity-Based Solverの2系統を持っていて、Pressure-BasedでSIMPLE/SIMPLEC/Coupled Algorithmを選べる。Coupled Algorithmは分離型ではなく圧力と速度を同時に解く連成型で、SIMPLEより収束が速いが、メモリを1.5〜2倍使うんだ。
Ansys CFX
CFXは元々AEA Technology(英国)が開発したコードで、設計思想として最初から連成型(Coupled)ソルバーを採用している。SIMPLEのような分離型アルゴリズムは搭載していないのが特徴だ。全変数を一つの行列系で解くため、SIMPLE系のような緩和係数チューニングが不要という利点がある。
OpenFOAM
OpenFOAMだと自分でアルゴリズムの中身を確認できるんですよね?
そうだ。simpleFoam のソースコード(applications/solvers/incompressible/simpleFoam/)を読めば、SIMPLE法の実装が100行程度のC++で書かれているのが分かる。教育目的には最適だよ。fvSolution で線形ソルバーや前処理を細かく制御できる。圧力にはGAMG(Geometric-Algebraic Multi-Grid)がデフォルトで使われることが多い。
ライセンスとコスト
コスト面ではどうですか?
| ソルバー | ライセンス | 年間コスト目安 | サポート |
|---|---|---|---|
| Ansys Fluent | 商用 | 数百万円〜 | 公式サポートあり |
| Ansys CFX | 商用 | Fluent同梱パッケージあり | 公式サポートあり |
| STAR-CCM+ | 商用 | 数百万円〜 | Siemens公式 |
| OpenFOAM | GPL v3 | 無償 | コミュニティまたは有償 |
OpenFOAMは無償だが、GUIやメッシャーは別途用意する必要がある。HELYX、simFlowなどのGUIフロントエンドを使う選択肢もある。商用ソルバーはワークフローの完成度が高い分、ライセンスコストがかかるんだ。
FluentのSIMPLEとOpenFOAMのsimpleFoam——「同じ」と思ったら大間違い
SIMPLEは汎用アルゴリズムだが、各ツールの実装にはクセがある。FluentのSIMPLEは速度補正に「Rhie-Chow補間」を自動適用しているが、OpenFOAMのsimpleFoamはfvSolutionの設定で明示的にコントロールできる。同じパイプ流れをFluentとOpenFOAMで解いて圧力損失が10%違った——と困っているエンジニアの原因の多くは、この補間方法の違いと緩和係数のデフォルト値の差。さらにFluentはコントロールアップデートの頻度を内部で調整するが、OpenFOAMは毎ステップ忠実にアルゴリズムを回す。「どのSIMPLE?」という確認は、ベンチマーク比較で必ず行うべき作業です。
SIMPLE法の先端研究
分離型ソルバーの限界と連成型への発展
SIMPLE法って50年以上前のアルゴリズムですよね。今も現役なんですか?
現役どころか、CFDの中核だよ。ただし、強い圧力-速度連成がある問題(高速回転流、強い浮力流れ)では分離型SIMPLEの収束が遅くなる。そこで連成型(Coupled)ソルバーが注目されている。
連成型では運動量方程式と圧力方程式をブロック行列として同時に解く:
AMG前処理と組み合わせることで、SIMPLE比で5〜10倍の収束加速が得られる場合がある。
GPU対応と大規模並列化
GPU計算との相性はどうですか?
SIMPLE法はステップが逐次的なので、GPU並列化の恩恵を受けにくい面がある。ただし各ステップ内の線形ソルバー(特にAMG)をGPUで加速することは可能だ。Ansys Fluent 2023R1以降ではGPUネイティブソルバーが搭載され、数億セル規模の計算がGPUクラスターで実行可能になっている。
OpenFOAMでもAmgXやPETScを介したGPU対応が進んでいる。
機械学習との融合
AIでSIMPLE法を高速化するような研究はありますか?
いくつかの方向性があるよ。
- 初期値推定: ニューラルネットで良い初期圧力場を予測し、SIMPLE反復回数を削減
- 緩和係数の自動調整: 強化学習で問題に応じた最適な緩和係数を逐次決定
- 前処理の学習: 線形ソルバーの前処理行列をMLで近似し、AMGを高速化
- PINN(Physics-Informed Neural Networks): N-S方程式の物理拘束をネットワークに埋め込み、メッシュなしで解を近似
特にPINNは最近論文をよく見ますね。
PINNはまだ複雑な産業問題には精度が不足しているが、パラメトリックスタディの高速サロゲートモデルとして有望だ。従来のSIMPLE法と組み合わせて、粗い初期推定をPINNで得てからSIMPLEで仕上げるハイブリッド手法も研究されている。
マルチフィジックスへの拡張
SIMPLE法は単相非圧縮性流れだけでなく、以下の分野にも拡張されている:
- VOF法との結合: 自由表面流れ(interFoam等)
- 共役熱伝達: 流体-固体の温度連成(chtMultiRegionFoam)
- 反応流: 燃焼解析での化学種輸送との連成
- 圧縮性低マッハ数流れ: rhoSimpleFoam による可変密度SIMPLE
SIMPLE法がこんなに広い分野で使われているとは知りませんでした。基本アルゴリズムをしっかり理解しておくのが大事ですね。
SIMPLEは「遅い」から消えるのか——Coupled Solverとの競争
最近、大手商用CFDツールは「Coupled Solver(連成ソルバー)」を前面に押し出してきている。圧力と速度を分離せず一気に解くから理論上は収束が速い——じゃあSIMPLEは時代遅れ? そうでもない。Coupled Solverはメモリ消費がSIMPLEの4〜5倍になることがある。1000万セルのメッシュでCoupled Solverを使おうとしたら64GBRAMが必要で、HPC申請が通らなかった——という笑えない話も聞く。SIMPLEはメモリ効率が良く、並列化との相性も実績がある。「低負荷で十分な精度」が求められる設計最適化の大量ケース解析では、今もSIMPLEが現役です。
SIMPLE法のトラブル対応
よくあるトラブルと対処法
先生、SIMPLE法の計算が収束しなくて困ってます。何からチェックすればいいですか?
SIMPLE法の収束問題は大きく分けて4パターンあるんだ。順番に見ていこう。
1. 残差が振動して収束しない
症状: 圧力や速度の残差がジグザグに振動する
原因と対策:
- 緩和係数が大き過ぎる → 圧力を0.2、速度を0.5に下げる
- メッシュの非直交性が高い →
nNonOrthogonalCorrectorsを2〜3に増やす(OpenFOAM) - 離散化スキームが高次すぎる → 一旦1次風上に落として安定させる
2. 残差が下がらずフラットになる
症状: 残差が $10^{-2}$ 程度で停滞する
原因と対策:
- メッシュ品質不良 → セルのスキューネス、アスペクト比を確認
- 境界条件の不整合 → 質量流量の入口/出口バランスを確認
- 乱流モデルの初期値が不適切 → $k$ と $\epsilon$ の初期値を流速から見積もり直す
3. 残差が発散する
症状: 数ステップで残差が急増し NaN になる
原因と対策:
- CFL数が大きすぎる(擬似時間進行法使用時)→ 擬似時間刻みを小さく
- 境界条件で逆流が発生 → 出口をPressure Outletにし、backflow条件を確認
- メッシュに負体積セルがある → メッシャーでリメッシュ
4. 連続の式の残差だけ下がらない
速度の残差は下がるのに圧力が下がらないってことですか?
そう。これはSIMPLE法特有の問題で、圧力補正方程式の解法に起因することが多い。
- AMG前処理のサイクル数を増やす(V-cycle → W-cycle)
- 圧力の線形ソルバー反復回数を増やす(50→200)
- メッシュの格子数比(coarsening ratio)を確認
ソルバー別の典型的エラー
各ソフトで出やすいエラーメッセージを教えてください。
Divergence detected in AMG solver: pressure correction→ 圧力緩和を下げる、メッシュ品質確認Reversed flow in N faces→ 出口境界を流れから十分離す
GAMG: Solving for p, Initial residual = 1, Final residual = 1→ 圧力方程式が解けていない。境界条件の型を確認(fixedValue vs zeroGradient)Floating point exception→ 負体積セル、ゼロ除算。checkMeshを実行
Diverging solution - Loss of fluid cells→ セル品質チェック、Time Step Factor を下げる
デバッグの手順
収束しないときの系統的なデバッグ手順をまとめよう。
1. メッシュ品質を確認: checkMesh(OpenFOAM)、Mesh Quality Report(Fluent)
2. 境界条件を簡略化: まず全壁面でテスト
3. 1次精度で安定計算: 収束してから2次精度に切り替え
4. 緩和係数を保守的に設定: 圧力0.2、速度0.5から開始
5. 残差の変数別推移を観察: どの変数が問題か特定
6. 物理量の場を可視化: 非物理的な領域がないか確認
9割のトラブルはメッシュか境界条件に起因する。ソルバー設定を疑うのは最後だよ。
SIMPLEが収束しない——「圧力参照点なし」という見落とし
SIMPLEで「残差がずっとプラトーのまま下がらない」というトラブルでよくある原因が「圧力基準点(pressure reference point)の未設定」。SIMPLE法は圧力の絶対値ではなく相対値(勾配)を解くので、全壁面で囲まれた閉じた系では圧力のレベルが不定になる。OpenFOAMで "singular matrix" と怒られたり、Fluentで残差が振動し続けたりするのはたいていコレ。解決策は圧力参照点をドメインのどこか一点に設定するだけ。でも出口が開放されていれば不要なため「そんな設定が必要だとは知らなかった」という初心者あるあるのトラブルです。
関連トピック
なった
詳しく
報告