コンテンツにスキップ

ソルバー・前処理

FrontISTR の線形ソルバは,直接法または反復法を選び,反復法では前処理を組み合わせて線形方程式を解く構成になっている.MPC 処理方式と接触自由度消去は,多点拘束や接触拘束を含む線形系をどの形で扱うかを決める補助的な選択である.

機能の全体像

ソルバ・前処理は,以下の選択肢で構成される.まず線形ソルバとして反復法と直接法のいずれかを選び,反復法を選んだ場合に限り前処理を組み合わせる.

区分 主な選択肢 役割
反復法 CG, BiCGSTAB, GMRES, GPBiCG, GMRESR, GMRESREN 大規模疎行列をメモリ効率よく解く.
反復法用前処理 SSOR,対角スケーリング,BILU,AMG,SAINV,RIF 反復法の収束性を改善する.直接法では使用しない.
直接法 MUMPS, MKL 分解により線形方程式をロバストに解く.
MPC 処理方式 ペナルティ法,陽的自由度消去法 多点拘束を線形系へ反映する.
接触自由度消去 自動,常時有効 SLAGRANGE 接触で追加される接触自由度の扱いを切り替える.
補助機能 条件数推定,行列ダンプ,ログ出力 デバッグ,収束性確認,性能評価を補助する.

並列実行では,領域分割による MPI 並列と OpenMP スレッド並列を組み合わせられる.反復法は大規模並列解析の標準的な選択肢であり,直接法はライブラリをリンクした環境で,よりロバストな求解が必要な場合に用いる.

ソルバ・前処理の選び方

まず反復法と直接法のいずれを使うかを決め,反復法を選んだ場合は続いて前処理を選ぶ.

判断軸 推奨される考え方
問題規模 中小規模では直接法が安定で扱いやすい.大規模では反復法がメモリ効率に優れる.
行列の対称性 対称正定値問題では CG を候補にする.非対称問題では BiCGSTAB, GMRES, GPBiCG などを候補にする.
並列環境 MPI 並列では反復法と領域分割を組み合わせる.OpenMP 並列下の前処理ではマルチカラー対応の SSOR を候補にする.
前処理(反復法選択時) まずデフォルトの SSOR を試し,次に AMG を検討する.収束性が良い場合は計算が軽量なSSOR、複雑大規模な問題にはAMG前処理が良い.AMG には Trilinos-ML による実装と HEC-MW 組込みの SA-AMG があり,ビルド構成に応じて選ぶ.
接触・MPC 接触解析や多点拘束を含む解析では,MPC 処理方式と接触自由度消去の選択が収束性とロバスト性に影響する.
外部ライブラリ MUMPSMKL,AMG(Trilinos-ML)は対応ライブラリをリンクしたビルドで利用する.AMG(SA-AMG)は LAPACK を有効にしたビルドで利用する.

標準的な解析では,収束判定値,最大反復回数,前処理の対角補正係数などは既定値のままで十分動作する.収束が遅い場合や発散する場合に限り,反復法,前処理,MPC 処理方式,接触自由度消去を順に見直す.パラメータの値と書式はキーワードリファレンスの !SOLVER を参照する.

反復法

反復法は,大規模疎行列を対象に,行列ベクトル積と前処理を繰り返して解を更新する方法である.FrontISTR では次の反復法を選択できる.

反復法 適用の目安 備考
CG 対称正定値問題 構造解析や熱伝導解析の標準的な候補である.
BiCGSTAB 非対称問題 接触や連成で非対称性が強い場合の候補である.
GMRES 非対称問題 Krylov 部分空間サイズを指定して用いる.
GPBiCG 非対称問題 BiCGSTAB 系の改良法として利用する.
GMRESR 非対称問題,高度な用途 GMRES を入れ子状に用いる選択肢である.
GMRESREN 非対称問題,高度な用途 GMRESR 系の再帰版である.

CG は行列が対称正定値であることを前提とする.摩擦接触,非対称な拘束処理,連成効果などにより非対称性が強い場合は,BiCGSTABGMRESGPBiCG などを候補にする.GMRES では Krylov 部分空間サイズを大きくすると収束性が改善することがある一方,メモリ使用量も増える.

METHOD2 を指定すると,CG が発散または破綻したときに代替の反復法へ切り替えられる.この機能は CG を主ソルバとする場合のフォールバックであり,他の設定値とデータ行は主ソルバと同じものを使う.

CGBiCGSTABGPBiCGPipeCG は残差ベクトルを漸化式で更新するため,反復を重ねると丸め誤差が蓄積し,真の残差との乖離が生じる.これを防ぐため,一定の反復ごとに残差ベクトルを右辺と行列ベクトル積から計算しなおしている.RECOMPUTE_RESIDUAL でこの周期を指定できる.周期を長くすると行列ベクトル積は減るが,漸化式による残差が真の残差から離れ,収束していない解を収束と判定する危険が増す.逆に周期を短くしすぎると,行列ベクトル積が増えるだけでなく,漸化式が保っている残差と補助ベクトルの関係が崩れ,収束性そのものが悪化する場合がある.既定値は解法ごとにこの兼ね合いをとった値であり,変更した場合は収束履歴と最終的な相対残差を確認する.

前処理

前処理は,反復法の収束性を改善するために係数行列を変換する処理であり,反復法を選んだ場合にのみ適用される.直接法では前処理は使われない.同じ反復法でも前処理の選択により収束までの反復回数と計算時間が大きく変わる.

前処理 特徴 用途の目安
SSOR 標準的な前処理.マルチカラーオーダリングに対応する. まず試す候補.構造解析で広く利用する.
対角スケーリング 対角成分を用いる軽量な前処理. 計算コストを抑えたい場合.
BILU ブロック単位の不完全 LU 分解. SSOR で収束しにくい問題の候補.
AMG(Trilinos-ML) 外部ライブラリ Trilinos-ML による代数マルチグリッド. 大規模問題や階層的な誤差成分が支配的な問題の候補.
AMG(SA-AMG) HEC-MW 組込みの Smoothed Aggregation 型代数マルチグリッド. 同上.外部ライブラリを追加せずに AMG を用いる場合の候補.
SAINV Sparse Approximate Inverse. 接触問題や分散環境での特殊な前処理の候補.
RIF Robust Incomplete Factorization. 不完全分解系の別候補.

SSOR は標準的な選択肢であり,OpenMP 並列ではマルチカラーオーダリング版を用いる.対角スケーリングは軽量であるが,収束改善効果は問題に依存する.BILU はブロック単位の不完全 LU 分解として実装され,一般 DOF の行列にも対応している.BILU 系では,反復法が発散した際に対角補正係数 SIGMA_DIAG を自動的に増やして再試行する経路があるが,値の指定はキーワードリファレンスに委ねる.

AMG(代数マルチグリッド)には,外部ライブラリ Trilinos-ML を用いる実装と,HEC-MW に組み込まれた SA-AMG の 2 つがある.両者は独立した実装であり,必要なビルド構成と指定できるオプションが異なる.

Trilinos-ML による AMG は,ビルド時に ML が有効である必要がある.スムーザー,マルチグリッドサイクル,コースニング方式などを指定できるが,詳細な値はキーワードリファレンスに委ねる.

SA-AMG は Smoothed Aggregation 型の代数マルチグリッド前処理であり,Trilinos-ML を必要としない.一方で内部で LAPACK を用いるため,LAPACK を有効にしたビルドが必要であり,LAPACK を無効にしたビルドで指定した場合は解析を開始せずに終了する.粗グリッドの求解には,MUMPS を有効にしたビルドであれば MUMPS を利用でき,そうでなければ組込みの密行列直接法を用いる.

SA-AMG は対称正定値系(CG)を主な対象とするが,摩擦接触で生じる非対称な縮約系(BiCGSTABGMRES など)にも対応する.節点あたりの自由度は 1(熱伝導),2(平面),3(ソリッド),6(シェル)に対応し,節点ごとに自由度が異なる行列には対応しない.粗グリッド用ソルバ,マルチグリッドサイクル,スムーザーの次数などを指定できるが,既定値のままで標準的な解析に用いることができる.値と書式はキーワードリファレンスに委ねる.GPU(OpenACC)を有効にしたビルドでは,前処理の適用部が GPU 上で実行される.

SAINV を接触問題や MPC を含む並列解析で使う場合,領域分割時のオーバーラップ深さが収束性に影響することがある.

直接法

直接法は,係数行列を分解して線形方程式を解く方法である.反復回数に依存しないためロバストであり,接触解析や拘束条件を含む解析で安定した選択肢になる.一方で,問題規模が大きくなるとメモリ使用量が増える.

直接法 並列環境 用途
MUMPS MPI 並列 分散メモリ環境で疎行列を直接解法により解く.
MKL Intel MKL / OpenMP Intel MKL の直接法である.内部では Intel PARDISO が動作する.複数 MPI プロセスでは Cluster MKL 経路を用いる.DIRECTmklMKL のエイリアスである.

直接法は対称行列と非対称行列の双方で利用できる.MUMPSMKL はビルド時に対応ライブラリがリンクされている必要がある.ライブラリがない環境では利用できないため,必要な依存ライブラリと CMake オプションはビルドガイドを参照する.

FrontISTR には外部ライブラリを用いない組込み直接法の経路もあるが,通常の解析で直接法を選ぶ場合は MUMPS または MKL を候補にする.

直接法では前処理は適用されない.!SOLVER で前処理を指定していても,直接法経路では参照されない.

MPC 処理方式

MPC 処理方式は,多点拘束で結ばれた自由度を線形方程式へ反映する方法である.入力上の拘束式は同じでも,処理方式により係数行列の性質と収束性が変わる.

MPC 処理方式 位置づけ 既定の用途
ペナルティ法 拘束式に大きな剛性を加えて近似的に満たす. 直接法での既定.
陽的自由度消去法 拘束自由度を消去し,縮約された線形系を解く. 反復法での既定.

直接法ではペナルティ法が既定であり,反復法では陽的自由度消去法が既定である.かつて選択できた MPC-CG 法は削除されており,MPCMETHOD=2 を指定した入力は警告の上でこれらの既定に従って処理される.

陽的自由度消去法では,固有値解析と陽解法の動解析で用いる集中質量も剛性行列と同じ変換で縮約する.縮約後の質量行列は一般に対角にならないため,その行和を集中質量として用いる.拘束式の係数の和が 1 になる結合や内挿の拘束では,スレーブ自由度の質量が係数に比例してマスター自由度へ配分される.

MPC 処理方式は !SOLVERMPCMETHOD で明示できる.値の意味と書式はキーワードリファレンスを参照する.

接触自由度消去

接触自由度消去は,SLAGRANGE 接触で追加される接触自由度を,線形ソルバへ渡す前に縮約して扱う機能である.接触自由度を消去すると,反復法で扱う線形系の性質が改善する場合がある.

既定の自動モードでは,反復法使用時に接触自由度消去を行い,直接法使用時には接触自由度消去を行わない.直接法では,接触自由度を含む拡大系をそのまま扱う経路が用意されている.

CONTACT_ELIM を明示すると,直接法使用時にも接触自由度消去を行える.接触タイプ,接触ペア,接触アルゴリズムの入力側の選択は接触・埋め込みページを参照する.

補助機能

ソルバの収束性や性能を調べるために,条件数推定,行列ダンプ,ログ出力を利用できる.これらは通常解析では不要であり,デバッグや性能評価のために有効化する.

機能 用途 備考
条件数推定 CGGMRES で条件数の指標を出力する. LAPACK を有効にしたビルドで利用する.
行列ダンプ ソルバへ渡す行列と右辺をファイルへ保存する. Matrix Market,CSR,BSR 形式に対応する.
DUMPEXIT 行列ダンプ後に解析を終了する. 行列だけを取り出して外部で検証する場合に用いる.
ITERLOG 反復法の収束履歴を出力する. 残差の推移を確認する.
TIMELOG ソルバ計算時間を出力する. VERBOSE では詳細な内訳を出力する.
STEPLOG ステップ情報を出力する. 解析手順の確認に用いる.
LOGLEVEL AMG 前処理の階層構成などの診断情報を出力する. ITERLOGTIMELOG とは独立に指定する.値を大きくすると出力が増える.

行列ダンプは,解析で組み立てられた係数行列を外部ツールで確認するための機能である.DUMPEXIT を有効にすると,行列と右辺を保存した時点で解析を終了する.条件数推定は CGGMRES で利用する試験的な機能であり,収束性の診断に用いる.

関連項目