k_pgcr

    (右)前処理付きGCR (k) 法(一般化共役残差法)を用いて,非対称係数行列 [aij] とする連立1次方程式: [aij] [xj] = [bi] を解くための倍精度サブルーチン.
     
     
  • サブルーチン名: k_pgcr

  •  
  • 呼び出し方:call k_pgcr(ndim, bdim, k_restart, k_max, epsln, xdim, iopt, promv, precn)

  •  
  • 引 数:
  • 引数
    意 味
    入出力の区分
    備 考
    ndim 行列 [aij] の寸法
    入力
    整数型.ndim ≥ 2を満足するように選ぶ.
    bdim(ndim) 非同次ベクトル [bi] を格納する配列名
    入力
    倍精度実数型
    k_restart リスタート・パラメタ k
    入力
    整数型
    k_max 最大反復回数
    入力
    整数型
    epsln 収束判定子
    入力
    倍精度実数型.
    xdim(ndim) 解ベクトル [xj] を格納する1次元配列.
    入力出力
    倍精度実数型.入力時には解の初期推定値を格納する.
    iopt iopt=.true.のときのみ,残差履歴をシステム標準出力に表示する.
    入力
    論理型.
    promv 係数行列 [aij] とベクトル [vj] の積を計算する外部サブルーチン名.
    入力
    precn 右前処理行列K-1 とベクトルv の積を計算する外部サブルーチン名.
    入力
  • 注 意
    1. 係数行列 [aij] とベクトル [vj] の積を計算するサブルーチンは次の形をしている必要がある.
      subroutine promv(nval, vdim, avdim)
      但し,サブルーチン名は必ずしもpromvである必要はないが,3つの引数の意味は次の通りである.
    2. 引数
      意 味
      入出力の区分
      備 考
      nval 係数行列 [aij] の次元 入力 整数型
      vdim(nval) ベクトル 入力 倍精度実数型
      avdim(nval) 係数行列 [aij] とベクトル [vj] の積を表すベクトル 出力 倍精度実数型

    3. 右前処理行列K-1 とベクトルv の積を計算するサブルーチンは次の形をしている必要がある.
      subroutine precn(nval, vdim, akvdim)
      但し,サブルーチン名は必ずしもprecnである必要はないが,3つの引数の意味は次の通りである.
    4. 引数
      意 味
      入出力の区分
      備 考
      nval 係数行列 [aij] の次元 入力 整数型
      vdim(nval) ベクトル 入力 倍精度実数型
      akvdim(nval) 右前処理行列K-1とベクトルvの積 を表すベクトル 出力 倍精度実数型

    5. 係数行列 [aij] の情報はmodule文を利用して,promvに引き渡せば良い.同様に,右前処理行列K-1の情報もmodule文を介して,precnに引き渡せばよい.
    6. サブルーチンk_pgcrを呼び出す際には,promvとprecnが外部手続きであることを示すために,external宣言をしなければならない.
      (例)
      …
      external::promv, precn
      …
      …
      call k_pgcr(ndim, bdim, k_restart, k_max, epsln, xdim, iopt, promv, precn)
      …
      …