ソルバー・前処理¶
FrontISTR の線形ソルバは,直接法または反復法を選び,反復法では前処理を組み合わせて線形方程式を解く構成になっている.MPC 処理方式と接触自由度消去は,多点拘束や接触拘束を含む線形系をどの形で扱うかを決める補助的な選択である.
機能の全体像¶
ソルバ・前処理は,以下の選択肢で構成される.まず線形ソルバとして反復法と直接法のいずれかを選び,反復法を選んだ場合に限り前処理を組み合わせる.
| 区分 | 主な選択肢 | 役割 |
|---|---|---|
| 反復法 | CG, BiCGSTAB, GMRES, GPBiCG, GMRESR, GMRESREN |
大規模疎行列をメモリ効率よく解く. |
| 反復法用前処理 | SSOR,対角スケーリング,BILU,AMG,SAINV,RIF | 反復法の収束性を改善する.直接法では使用しない. |
| 直接法 | MUMPS, MKL |
分解により線形方程式をロバストに解く. |
| MPC 処理方式 | ペナルティ法,MPC-CG 法,陽的自由度消去法 | 多点拘束を線形系へ反映する. |
| 接触自由度消去 | 自動,常時有効 | SLAGRANGE 接触で追加される接触自由度の扱いを切り替える. |
| 補助機能 | 条件数推定,行列ダンプ,ログ出力 | デバッグ,収束性確認,性能評価を補助する. |
並列実行では,領域分割による MPI 並列と OpenMP スレッド並列を組み合わせられる.反復法は大規模並列解析の標準的な選択肢であり,直接法はライブラリをリンクした環境で,よりロバストな求解が必要な場合に用いる.
ソルバ・前処理の選び方¶
まず反復法と直接法のいずれを使うかを決め,反復法を選んだ場合は続いて前処理を選ぶ.
| 判断軸 | 推奨される考え方 |
|---|---|
| 問題規模 | 中小規模では直接法が安定で扱いやすい.大規模では反復法がメモリ効率に優れる. |
| 行列の対称性 | 対称正定値問題では CG を候補にする.非対称問題では BiCGSTAB, GMRES, GPBiCG などを候補にする. |
| 並列環境 | MPI 並列では反復法と領域分割を組み合わせる.OpenMP 並列下の前処理ではマルチカラー対応の SSOR を候補にする. |
| 前処理(反復法選択時) | まずデフォルトの SSOR を試し,次に AMG を検討する.収束性が良い場合は計算が軽量なSSOR、複雑大規模な問題にはAMG前処理が良い. |
| 接触・MPC | 接触解析や多点拘束を含む解析では,MPC 処理方式と接触自由度消去の選択が収束性とロバスト性に影響する. |
| 外部ライブラリ | MUMPS,MKL,AMG は対応ライブラリをリンクしたビルドで利用する. |
標準的な解析では,収束判定値,最大反復回数,前処理の対角補正係数などは既定値のままで十分動作する.収束が遅い場合や発散する場合に限り,反復法,前処理,MPC 処理方式,接触自由度消去を順に見直す.パラメータの値と書式はキーワードリファレンスの !SOLVER を参照する.
反復法¶
反復法は,大規模疎行列を対象に,行列ベクトル積と前処理を繰り返して解を更新する方法である.FrontISTR では次の反復法を選択できる.
| 反復法 | 適用の目安 | 備考 |
|---|---|---|
CG |
対称正定値問題 | 構造解析や熱伝導解析の標準的な候補である. |
BiCGSTAB |
非対称問題 | 接触や連成で非対称性が強い場合の候補である. |
GMRES |
非対称問題 | Krylov 部分空間サイズを指定して用いる. |
GPBiCG |
非対称問題 | BiCGSTAB 系の改良法として利用する. |
GMRESR |
非対称問題,高度な用途 | GMRES を入れ子状に用いる選択肢である. |
GMRESREN |
非対称問題,高度な用途 | GMRESR 系の再帰版である. |
CG は行列が対称正定値であることを前提とする.摩擦接触,非対称な拘束処理,連成効果などにより非対称性が強い場合は,BiCGSTAB,GMRES,GPBiCG などを候補にする.GMRES では Krylov 部分空間サイズを大きくすると収束性が改善することがある一方,メモリ使用量も増える.
METHOD2 を指定すると,CG が発散または破綻したときに代替の反復法へ切り替えられる.この機能は CG を主ソルバとする場合のフォールバックであり,他の設定値とデータ行は主ソルバと同じものを使う.
前処理¶
前処理は,反復法の収束性を改善するために係数行列を変換する処理であり,反復法を選んだ場合にのみ適用される.直接法では前処理は使われない.同じ反復法でも前処理の選択により収束までの反復回数と計算時間が大きく変わる.
| 前処理 | 特徴 | 用途の目安 |
|---|---|---|
| SSOR | 標準的な前処理.マルチカラーオーダリングに対応する. | まず試す候補.構造解析で広く利用する. |
| 対角スケーリング | 対角成分を用いる軽量な前処理. | 計算コストを抑えたい場合. |
| BILU | ブロック単位の不完全 LU 分解. | SSOR で収束しにくい問題の候補. |
| AMG | Trilinos-ML による代数マルチグリッド. | 大規模問題や階層的な誤差成分が支配的な問題の候補. |
| SAINV | Sparse Approximate Inverse. | 接触問題や分散環境での特殊な前処理の候補. |
| RIF | Robust Incomplete Factorization. | 不完全分解系の別候補. |
SSOR は標準的な選択肢であり,OpenMP 並列ではマルチカラーオーダリング版を用いる.対角スケーリングは軽量であるが,収束改善効果は問題に依存する.BILU はブロック単位の不完全 LU 分解として実装され,一般 DOF の行列にも対応している.BILU 系では,反復法が発散した際に対角補正係数 SIGMA_DIAG を自動的に増やして再試行する経路があるが,値の指定はキーワードリファレンスに委ねる.
AMG は Trilinos-ML を用いるため,ビルド時に ML が有効である必要がある.スムーザー,マルチグリッドサイクル,コースニング方式などを指定できるが,詳細な値はキーワードリファレンスに委ねる.SAINV を接触問題や MPC を含む並列解析で使う場合,領域分割時のオーバーラップ深さが収束性に影響することがある.
直接法¶
直接法は,係数行列を分解して線形方程式を解く方法である.反復回数に依存しないためロバストであり,接触解析や拘束条件を含む解析で安定した選択肢になる.一方で,問題規模が大きくなるとメモリ使用量が増える.
| 直接法 | 並列環境 | 用途 |
|---|---|---|
MUMPS |
MPI 並列 | 分散メモリ環境で疎行列を直接解法により解く. |
MKL |
Intel MKL / OpenMP | Intel MKL の直接法である.内部では Intel PARDISO が動作する.複数 MPI プロセスでは Cluster MKL 経路を用いる.DIRECTmkl は MKL のエイリアスである. |
直接法は対称行列と非対称行列の双方で利用できる.MUMPS と MKL はビルド時に対応ライブラリがリンクされている必要がある.ライブラリがない環境では利用できないため,必要な依存ライブラリと CMake オプションはビルドガイドを参照する.
FrontISTR には外部ライブラリを用いない組込み直接法の経路もあるが,通常の解析で直接法を選ぶ場合は MUMPS または MKL を候補にする.
直接法では前処理は適用されない.!SOLVER で前処理を指定していても,直接法経路では参照されない.
MPC 処理方式¶
MPC 処理方式は,多点拘束で結ばれた自由度を線形方程式へ反映する方法である.入力上の拘束式は同じでも,処理方式により係数行列の性質と収束性が変わる.
| MPC 処理方式 | 位置づけ | 既定の用途 |
|---|---|---|
| ペナルティ法 | 拘束式に大きな剛性を加えて近似的に満たす. | 直接法での既定. |
| MPC-CG 法 | 拘束を含む行列ベクトル積を反復法内で扱う旧来の方式. | 非推奨. |
| 陽的自由度消去法 | 拘束自由度を消去し,縮約された線形系を解く. | 反復法での既定. |
直接法ではペナルティ法が既定であり,反復法では陽的自由度消去法が既定である.MPC-CG 法は互換性のための旧来の選択肢であり,通常の新規解析では陽的自由度消去法または直接法の既定を用いる.
MPC 処理方式は !SOLVER の MPCMETHOD で明示できる.値の意味と書式はキーワードリファレンスを参照する.
接触自由度消去¶
接触自由度消去は,SLAGRANGE 接触で追加される接触自由度を,線形ソルバへ渡す前に縮約して扱う機能である.接触自由度を消去すると,反復法で扱う線形系の性質が改善する場合がある.
既定の自動モードでは,反復法使用時に接触自由度消去を行い,直接法使用時には接触自由度消去を行わない.直接法では,接触自由度を含む拡大系をそのまま扱う経路が用意されている.
CONTACT_ELIM を明示すると,直接法使用時にも接触自由度消去を行える.接触タイプ,接触ペア,接触アルゴリズムの入力側の選択は接触・埋め込みページを参照する.
補助機能¶
ソルバの収束性や性能を調べるために,条件数推定,行列ダンプ,ログ出力を利用できる.これらは通常解析では不要であり,デバッグや性能評価のために有効化する.
| 機能 | 用途 | 備考 |
|---|---|---|
| 条件数推定 | CG と GMRES で条件数の指標を出力する. |
LAPACK を有効にしたビルドで利用する. |
| 行列ダンプ | ソルバへ渡す行列と右辺をファイルへ保存する. | Matrix Market,CSR,BSR 形式に対応する. |
DUMPEXIT |
行列ダンプ後に解析を終了する. | 行列だけを取り出して外部で検証する場合に用いる. |
ITERLOG |
反復法の収束履歴を出力する. | 残差の推移を確認する. |
TIMELOG |
ソルバ計算時間を出力する. | VERBOSE では詳細な内訳を出力する. |
STEPLOG |
ステップ情報を出力する. | 解析手順の確認に用いる. |
行列ダンプは,解析で組み立てられた係数行列を外部ツールで確認するための機能である.DUMPEXIT を有効にすると,行列と右辺を保存した時点で解析を終了する.条件数推定は CG と GMRES で利用する試験的な機能であり,収束性の診断に用いる.
関連項目¶
- 線形ソルバ(理論) — 反復法・前処理の数学的原理.
- 非線形反復・時間積分 — 線形ソルバを呼び出す Newton 反復・接触反復・時間積分の枠組み.
- 領域分割 — MPI 並列解析とオーバーラップ深さの指定.
- 接触・埋め込み — 接触タイプと接触アルゴリズムの選択.
- !SOLVER — ソルバ・前処理パラメータの値と書式.
- 必須・オプション依存ライブラリ —
MUMPS,MKL(Intel PARDISO),Trilinos-ML,LAPACK などの依存ライブラリ.