コンテンツにスキップ

!SOLVER

ソルバーの制御

必須の制御データ.

パラメータ

METHOD =    解法 (CG、BiCGSTAB、GMRES、GPBiCG、CR、DIRECT、DIRECTmkl、MUMPS)
            DIRECT     : 接触解析以外での直接法(逐次処理のみ) (現在使用不可)
            DIRECTmkl  : Intel MKLによる直接法
            MUMPS      : MUMPSによる直接法
            直接法を選択したとき、データ行は無視される。
            3自由度用の反復法はOpenMPによるスレッド並列が利用可能

PRECOND =   反復法の前処理手法 (1、2、3、5、10、11、12、22)
            1, 2       : (Block) SSOR (3自由度用のみマルチカラーオーダリング付き)
            3          : (Block) Diagonal Scaling
            5          : マルチグリッド前処理パッケージMLによるAMG
            10         : Block ILU(0)
            11         : Block ILU(1)
            12         : Block ILU(2)
            22         : HEC-MW組込みのSA-AMG(Smoothed Aggregation AMG)によるAMG
            10、11、12は3自由度問題でのみ利用可能
            22はLAPACKを有効にしたビルドでのみ利用可能
            OpenMPによるスレッド並列時はSSOR, Diagonal Scaling、MLまたはSA-AMGを推奨

ITERLOG =   反復法ソルバー収束履歴出力の有無          (YES/NO)(デフォルト: NO)

TIMELOG =   ソルバー計算時間出力の有無                (YES/NO/VERBOSE)(デフォルト: NO)

LOGLEVEL =  前処理の診断情報出力レベル                (整数)(デフォルト: 出力なし)
            ITERLOG、TIMELOGとは独立に指定する
            1以上でAMG系前処理(PRECOND=5、22)の階層構成などを出力
            2以上でさらに詳細な情報(メモリ使用量など)を出力

USEJAD =    ベクトル機向けオーダリングの有無          (YES/NO)(デフォルト: NO)
            3自由度問題で反復法使用時のみ有効

SCALING =   行列の対角成分を1とするスケーリングの有無 (YES/NO)(デフォルト: NO)
            3自由度問題で反復法使用時のみ有効

DUMPTYPE =  行列ダンプ型式(NONE、MM、CSR、BSR) (主にデバッグ用)
            NONE : ダンプしない(デフォルト)
            MM   : マトリックスマーケット型式
            CSR  : Compressed Sparse Row(CSR)型式
            BSR  : Blocked CSR型式

DUMPEXIT =  行列ダンプ直後のプログラム終了            (YES/NO)(デフォルト: NO)

MPCMETHOD = 多点拘束条件の処理手法(1、3)
            1: ペナルティ法(直接法使用時のデフォルト)
            3: 陽的自由度消去法(反復法使用時のデフォルト)
            2のMPC-CG法は削除された。2を指定した場合は警告の上デフォルトの手法で処理する

ESTCOND =   条件数推定の頻度 (試験的)
            指定された反復ごと、および、反復終了時に条件数推定を実施
            0の場合は推定を行わない

RECOMPUTE_RESIDUAL = 残差ベクトルを再計算する頻度
            METHODにCG、BiCGSTAB、GPBiCG、PipeCGを指定した場合のみ有効
            反復法は残差ベクトルを漸化式で更新するため丸め誤差が蓄積する
            指定された反復ごとに、残差ベクトルを{b}-[A]{x}から計算しなおす
            0の場合は解法ごとの既定値(CG: 50、BiCGSTAB: 100、GPBiCG: 20、PipeCG: 50)を使用する
            負の値を指定した場合は周期的な再計算を行わない
            収束判定が成立した際の確認のための再計算は、本指定によらず常に行われる
            周期を短くしすぎると、行列ベクトル積が増えるだけでなく
            収束性そのものが悪化したり、収束しなくなったりする場合がある
            既定値から変更した場合は、収束履歴と最終的な相対残差を確認すること

METHOD2 =   第2の解法 (BiCGSTAB、GMRES、GPBiCG) (試験的)
            METHODにCGを指定した場合のみ有効
            CG法が発散した場合に自動的に切り替えて求解を行う
            他のパラメータやデータ行の情報は同じものが利用される

CONTACT_ELIM = 接触解析において自由度消去を行うかどうかの指定 (0,1)
               0: 反復法使用時のみ自由度消去を行う(デフォルト)
               1: 常に(直接法使用時にも)自由度消去を行う

** 2行目以降 **

(2行目) NITER, iterPREmax, NREST, NCOLOR_IN, RECYCLEPRE
変数名 属性 内容
NITER I 反復回数(デフォルト: 100)
iterPREmax I Additive Schwarzによる前処理の繰り返し数(デフォルト: 1)
(推奨値は1 (並列計算では2が有効な場合もある))
NREST I クリロフ部分空間数(デフォルト: 10)
(解法としてGMRESを選択したときのみ有効)
NCOLOR_IN I マルチカラーオーダリングにおける目標色数(デフォルト: 10)
(OpenMPのスレッド数が2以上の時のみ有効)
RECYCLEPRE I 前処理セットアップ情報の再利用回数(デフォルト: 3)
(非線形解析でのみ有効)
(3行目) RESID, SIGMA_DIAG, SIGMA
変数名 属性 内容
RESID R 打ち切り誤差(デフォルト値: 1.0e-8)
SIGMA_DIAG R 前処理行列計算時に対角成分にかける倍率(デフォルト値: 1.0)
(ILU前処理でゼロ割や発散が起きる場合に1.0より大きい値を設定すると解ける場合がある)
SIGMA R 未使用(デフォルト値: 0.0)

PRECOND=5の場合(省略可)

PRECOND に5と22以外の値が指定された場合は、4行目は無視される。

(4行目) ML_CoarseSolver, ML_Smoother, ML_MGCycle, ML_MaxLevels, ML_CoarseningScheme, ML_NumSweep
変数名 属性 内容
ML_CoarseSolver I MLの粗グリッド用ソルバ(1: スムーザーで代用、2: KLU(逐次直接法)、3: MUMPS(並列直接法))(デフォルト値: 1)
(推奨値は、解き難い問題では3または2、通常の問題では1)
ML_Smoother I MLのスムーザー(1: Chebyshev、2: SymBlockGaussSeidel、3: Jacobi)(デフォルト値: 1)
(推奨値は1)
ML_MGCycle I MLのマルチグリッドサイクル(1: V-cycle、2: W-cycle、3: Full-V-cycle)(デフォルト値: 1)
(推奨値は、解き難い問題では2、通常の問題では1)
ML_MaxLevels I MLの最大レベル数(デフォルト値: 10)
(推奨値は、特に解き難い問題では、コースソルバを直接法にして、2(メモリが足りない場合は3)、通常の問題では10)
ML_CoarseningScheme I MLのコースニングスキーム(1: UncoupledMIS、2: METIS、4: Zoltan、5: DD)(デフォルト値: 1)
(推奨値は1または5)
ML_NumSweep I MLのスムーザーのスウィープ数(Chebyshevの場合は多項式の次数)(デフォルト値: 2)
(推奨値は、Chebyshevの場合は2、SymBlockGaussSeidelの場合は1)

PRECOND=22の場合(省略可)

PRECOND に22以外の値が指定された場合,5行目は無視される.4行目・5行目はいずれも行ごと省略でき,行の後方の項目のみを省略することもできる.値0を指定した項目にはデフォルト値が用いられる.

4行目の1〜7番目の項目は PRECOND=5 (ML) のオプション行と同じ並びであり,MLのオプション行をそのまま流用できる.8〜10番目はSA-AMG固有の項目である.

(4行目) SA_CoarseSolver, SA_Smoother, SA_MGCycle, SA_MaxLevels, (未使用), SA_ChebyDegree, SA_CoarseSize, SA_MaxAggSize, SA_GalerkinLowMem, (未使用)
変数名 属性 内容
SA_CoarseSolver I 粗グリッド用ソルバ(0: 自動,1: スムーザーで代用,2: 密行列直接法,3: MUMPS(並列直接法))(デフォルト値: 0)
(自動では,MUMPSを有効にしたビルドではMUMPS,それ以外では密行列直接法を用いる)
SA_Smoother I スムーザー(0,1: Chebyshev)(デフォルト値: 0)
(Chebyshevのみ対応する.他の値を指定した場合は警告を出力してChebyshevを用いる)
SA_MGCycle I マルチグリッドサイクル(0: デフォルト(W-cycle),1: V-cycle,2: W-cycle)(デフォルト値: 0)
(Full-V-cycleには対応しない)
SA_MaxLevels I 最大レベル数(デフォルト値: 20)
(未使用) I MLのコースニングスキームに対応する位置.SA-AMGは常にuncoupledアグリゲーションを用いるため,0以外を指定した場合は警告を出力して無視する
SA_ChebyDegree I Chebyshevスムーザーの多項式の次数(デフォルト値: 2)
SA_CoarseSize I 粗グリッドの打ち切りサイズ(デフォルト値: 粗グリッド用ソルバにMUMPSを用いる場合は50000,それ以外は100)
SA_MaxAggSize I アグリゲートの最大サイズ(デフォルト値: 96)
SA_GalerkinLowMem I 粗グリッド行列の計算方式(0: 通常(速度優先),正値: 省メモリ)(デフォルト値: 0)
(セットアップ時のメモリが不足する場合に正値を指定する)
(未使用) I 将来の拡張のための予約

5行目はSA-AMG専用であり,MLでは読み込まれない.

(5行目) SA_Theta, SA_ChebyAlpha, SA_Safety, SA_TaperK, SA_AggOrder, SA_MinAggSize, SA_Verify, SA_DumpVTK
変数名 属性 内容
SA_Theta R 強連結判定のしきい値(デフォルト値: 0.0)
(0.0では行列の非零構造をそのままグラフとして用いる)
SA_ChebyAlpha R Chebyshevスムーザーが対象とする固有値区間の下端を定める比(デフォルト値: 20.0)
SA_Safety R 最大固有値の推定値にかける安全係数(デフォルト値: 1.1)
SA_TaperK R 粗化テーパーの係数K(デフォルト値: 100)
(レベル2以降で少なくとも約K個のアグリゲートが残るように粗化を緩やかにする.負値を指定するとテーパーを無効にする)
SA_AggOrder R アグリゲーションの走査順序(0: デフォルト(BFS順),1: BFS順,2: 節点番号のハッシュ順(試験的),3: 次数の小さい順(試験的),4: 次数の大きい順(試験的),負値: 節点番号順)(デフォルト値: 0)
SA_MinAggSize R アグリゲートの最小サイズ(デフォルト値: 3)
SA_Verify R セットアップ時の自己検査の有無(0: 行わない,正値: 行う)(デフォルト値: 0)(主にデバッグ用)
SA_DumpVTK R 最上位レベルのアグリゲーションのVTK出力の有無(0: 出力しない,正値: 出力する)(デフォルト値: 0)(主にデバッグ用)

使用例

SSOR前処理付きCG法を利用し、最大反復階数を10000、打ち切り誤差を1.0e-8に設定する

!SOLVER, METHOD=CG, PRECOND=1, ITERLOG=YES, TIMELOG=YES
  10000, 1
  1.0e-8, 1.0, 0.0

SSOR前処理付きGMRES法を利用し、クリロフ部分空間数を40、マルチカラーオーダリングの目標色数を100に設定する

!SOLVER, METHOD=GMRES, PRECOND=1, ITERLOG=YES, TIMELOG=YES
  10000, 1, 40, 100
  1.0e-8, 1.0, 0.0

ILU(0)前処理付きCG法を利用し、前処理行列計算時に対角成分にかける倍率を1.1に設定する

!SOLVER, METHOD=CG, PRECOND=10, ITERLOG=YES, TIMELOG=YES
  10000, 1
  1.0e-8, 1.1, 0.0

CG法の前処理をMLによるAMG法とする

!SOLVER, METHOD=CG, PRECOND=5, ITERLOG=YES, TIMELOG=YES
  10000, 1
  1.0e-8, 1.0, 0.0

CG法の前処理をMLによるAMG法とし、粗グリッド用ソルバをMUMPSとする(解き難い問題向け)

!SOLVER, METHOD=CG, PRECOND=5, ITERLOG=YES, TIMELOG=YES
  10000, 1
  1.0e-8, 1.0, 0.0
  3

CG法の前処理をMLによるAMG法とし、マルチグリッドサイクルをW-cycleとする(解き難い問題向け)

!SOLVER, METHOD=CG, PRECOND=5, ITERLOG=YES, TIMELOG=YES
  10000, 1
  1.0e-8, 1.0, 0.0
  1, 1, 2

CG法の前処理をMLによるAMG法とし、粗グリッド用ソルバをMUMPS、最大レベル数を2とする(非常に解き難い問題向け)

!SOLVER, METHOD=CG, PRECOND=5, ITERLOG=YES, TIMELOG=YES
  10000, 1
  1.0e-8, 1.0, 0.0
  3, 1, 1, 2

CG法の前処理をHEC-MW組込みのSA-AMGとする

!SOLVER, METHOD=CG, PRECOND=22, ITERLOG=YES, TIMELOG=YES
  10000, 1
  1.0e-8, 1.0, 0.0

CG法の前処理をSA-AMGとし,粗グリッド用ソルバをMUMPSとする

!SOLVER, METHOD=CG, PRECOND=22, ITERLOG=YES, TIMELOG=YES
  10000, 1
  1.0e-8, 1.0, 0.0
  3

摩擦接触解析でBiCGSTAB法の前処理をSA-AMGとし,AMG前処理の階層構成を出力する

!SOLVER, METHOD=BiCGSTAB, PRECOND=22, ITERLOG=YES, TIMELOG=YES, LOGLEVEL=1
  10000, 1
  1.0e-8, 1.0, 0.0