マルチグリッド法による収束加速
理論と物理
概要
先生、大規模CFD計算をするといつまでたっても収束しないことがあって…マルチグリッド法って聞いたことあるんですが、どういう仕組みですか?
CFDや FEM で連立方程式を解くとき、ガウス・ザイデル法や SOR法などの単純な反復法は「細かい誤差成分(高周波誤差)」は速く消えるが「大きなスケールの誤差成分(低周波誤差)」が非常にゆっくりしか収束しない。マルチグリッド法はその低周波誤差を意図的に粗いメッシュで解くことで、$O(N)$ の計算量で全誤差を一気に消す。理想的には格子点数 $N$ に比例した計算量で解ける「最適解法」なんだ。
「粗いメッシュで解く」というのがポイントなんですか? どうしてそれが低周波誤差を消すんでしょう?
細かいメッシュでの低周波誤差は「遠くの点まで影響が及ぶゆるやかな変動」だ。これは粗いメッシュ上では高周波成分になる——そこで単純な反復法が速く収束できる。メッシュを2段階・3段階と粗くしながら誤差を取り除き、最後に細かいメッシュに戻して補正する。このフローをVサイクルと呼ぶ。最も重要なのは、マルチグリッド法の収束速度はメッシュサイズ $h$ に依存しないこと——これが単純な反復法と根本的に違う点だよ。
なぜ反復法の収束は遅いか
ガウス・ザイデル法の収束の遅さを数式で理解したいです。
反復法の誤差減衰は固有値(スペクトル半径)で決まる。$N$点のポアソン方程式 $A\mathbf{u} = \mathbf{f}$ では、ガウス・ザイデル法のスペクトル半径が:
$N = 100$ なら $\rho \approx 0.9999$——つまり1回の反復で残差が0.01%しか減らない。残差を $10^{-6}$ まで下げるには約138,000回の反復が必要だ。$N$ が大きいほど指数的に収束が遅くなる。マルチグリッド法はこれを $O(N)$ 回の算術演算で解決する。実際のCFD圧力方程式では、マルチグリッドにより反復回数が100分の1以下になることがある。
マルチグリッドの原理
粗いメッシュへの変換(制限)と細かいメッシュへの変換(補間)はどうやって行うんですか?
2つの演算子が必要だよ。
- 制限演算子 $I_h^{2h}$(Restriction):細かいメッシュの残差 $r_h = f_h - A_h u_h$ を粗いメッシュに写す。単純な注入(Injection)か加重平均(Full Weighting):
- 補間演算子 $I_{2h}^h$(Prolongation / Interpolation):粗いメッシュで得た誤差補正量 $e_{2h}$ を細かいメッシュに拡張して補正:
マルチグリッドのVサイクル1回あたりの計算量は $O(N)$($h$ レベルのメッシュで)、これを1〜2回繰り返すだけで十分な収束が得られる。
数値解法と実装
V-サイクルとW-サイクル
V-サイクルとW-サイクルの違いは何ですか?どちらを選べばいいですか?
V-サイクルは「細→粗→細」を1回通るシンプルなパターン。W-サイクルは粗いレベルで2回の再帰を行うため、より多くの低周波誤差を消せるが計算コストは1.5〜2倍になる。実務ではV-サイクルが多い。フルマルチグリッド(FMG)はV-サイクルを最粗レベルから始める初期化戦略で、特に収束が速い。
| サイクル | 計算コスト/サイクル | 収束速度 | 適用場面 |
|---|---|---|---|
| V-サイクル | 低 | 中 | 汎用(CFDで最も使われる) |
| W-サイクル | 中〜高 | 高 | 強い異方性問題、強結合システム |
| FMG(フルMG) | 1回で収束に近い | 非常に高 | 高精度の初期解が必要な場合 |
| FAS(Full Approximation Scheme) | 低〜中 | 中〜高 | 非線形問題(SIMPLE法との統合) |
代数マルチグリッド(AMG)
非構造格子や複雑な形状ではマルチグリッドのメッシュ階層が作れないですよね?
その問題を解決するのが代数マルチグリッド(AMG)だよ。幾何学的なメッシュ階層に頼らず、行列の係数パターンだけから粗いレベルの方程式を自動生成する。FEMやFVMの非構造格子でも適用できる。
- Ruge-Stüben AMG(RS-AMG):強い結合を持つ未知数をC点(粗化対象)とF点に分類。CFDの圧力方程式(楕円型)に多用。FluentのAMGはこの系統。
- Smoothed Aggregation AMG(SA-AMG):近傍の未知数をクラスタ化。構造解析(弾性問題)に効果的。
- AMGe(要素ベース):FEMの要素ベースの粗化。シェル・梁要素に対応。NastranやOptiStructに実装。
Smootherの選択
「Smoother」って何ですか? マルチグリッド法とどう関係するんですか?
SmootherはVサイクルの「細→粗」と「粗→細」の各ステップで実行する反復法のことだ。Smootherの役割は「高周波誤差を速く消すこと」で、これを2〜3回実行してから次のレベルに移る。代表的なSmootherの比較:
| Smoother | 速度 | 安定性 | 適用場面 |
|---|---|---|---|
| Gauss-Seidel / SOR | 中 | 高 | 汎用(最も多用) |
| ILU(0)(不完全LU分解) | 低〜中 | 高 | 強い結合・非対称問題 |
| Jacobi | 高(GPU並列に適する) | 中 | GPU並列計算 |
| Chebyshev多項式 | 中〜高 | 高 | スペクトル半径が既知の問題 |
実践ガイド
OpenFOAMでマルチグリッドの設定をするには何をすればいいですか?
OpenFOAMでは fvSolution ファイルでAMGを設定するんだ。圧力方程式(GAMG)の例:
p
{
solver GAMG; // Geometric-Algebraic Multigrid
smoother GaussSeidel;
nPreSweeps 0;
nPostSweeps 2;
cacheAgglomeration true;
nCellsInCoarsestLevel 10;
agglomerator faceAreaPair;
mergeLevels 1;
tolerance 1e-6;
relTol 0.01;
}
GAMG(Geometric-Algebraic Multi-Grid)はOpenFOAMの主力AMGソルバー。圧力ポアソン方程式に非常に効果的で、単純なICCGより5〜10倍速くなることも多い。速度方程式にはGAMGは通常使わず、smoothSolverとILUSmootherの組み合わせが標準だ。
- 圧力方程式にGAMG(OpenFOAM)またはAMG(Fluent)を設定
- Smootherは汎用性の高いGauss-Seidelから開始
- nCellsInCoarsestLevelを問題規模に応じて設定(10〜50程度)
- toleranceとrelTolを用途に合わせて設定(relTol=0.1で非定常、0.01で定常)
- 収束履歴グラフで各外部反復の残差減衰を確認
- 異方性格子(アスペクト比>100)ではW-サイクルまたはILU Smootherに変更を検討
ソフトウェア比較
主要CFDツールでのマルチグリッド実装を比較してください。
代表的なツールの比較を見てみよう。
| ツール | MG実装 | サイクル種類 | 特徴 |
|---|---|---|---|
| Ansys Fluent | AMG(Algebraic MG) | F-cycle, V-cycle | 全方程式(圧力・速度・スカラ)に適用可、デフォルトで自動設定 |
| OpenFOAM | GAMG | V-cycle | オープンソース、ユーザーが細かく制御可能、スパコン向き |
| Abaqus | AMG前処理(PCGAMG) | AMGe | FEMの圧力/構造問題に特化、超大規模モデルに対応 |
| COMSOL | PARADISO + AMG | V/W-cycle | 直接法との自動切り替え、マルチフィジックス対応 |
| OptiStruct | AMSES(AMG+Lanczos) | V-cycle | 超大規模固有値解析(1億DOF以上)に特化 |
先端技術
マルチグリッド法の最新研究ってどんな方向に進んでいますか?
面白い方向性がいくつかある。
- GPU-AMG:AMGのGPU並列化。AmgXライブラリ(NVIDIA)がCFDに広く使われ始めている。Fluentの2023年版ではGPUベースのAMGが実装された。
- 機械学習ベースのSmoother:ガウス・ザイデル法の代わりにニューラルネットワークをSmootherに使う研究(Greenfeld et al., 2019)。問題に適応した高速収束を実現。
- p-マルチグリッド:高次FEMで多項式次数をレベルとして使うマルチグリッド。スペクトル要素法との組み合わせが盛ん。
- 量子マルチグリッド:量子コンピュータ上での高速行列演算との融合。まだ理論段階だが、長期的に線形ソルバーの革新が期待される。
マルチグリッドの誕生とFAST
マルチグリッド法は1960〜70年代にAchi Brandt(ワイツマン科学研究所)が体系化した。Brandtの論文「Multi-Level Adaptive Technique(MLAT)」は当時の計算科学に革命を起こした。彼は「すべての楕円型偏微分方程式は $O(N)$ で解けるべきだ」という哲学を持ち続け、90歳を超えても研究を続けた。
トラブルシューティング
マルチグリッドを使っているのに収束が遅い場合、何が原因ですか?
よくある原因を表にまとめよう。
| 症状 | 原因 | 対策 |
|---|---|---|
| 収束が遅い(残差が下がらない) | 粗化レベルが少ない | nCellsInCoarsestLevelを減らし粗化レベルを増やす |
| 残差が発散する | Smootherが不安定 | ILU(0)またはガウス・ザイデルに変更 |
| 異方性格子で収束が悪い | 粗化方向が不適切 | W-サイクルまたはラインSmootherに変更 |
| 初期数サイクルで停滞 | 初期解が悪い | FMG(フルマルチグリッド)で初期化 |
収束の遅延、AMGの粗化失敗、異方性格子の問題など詳細解説