k_product_dtcx_crs

    CRS法を用いて格納された2つの非正方行列 \(C,D\) とベクトル \(\boldsymbol{x}\) から \(D^T C \boldsymbol{x}\) を計算する高速倍精度サブルーチン.ただし,行列 \(C,D\) の非零要素パターンが同一である場合を対象とする.
     
     
  • サブルーチン名: k_product_dtcx_crs

  •  
  • 呼び出し方:call k_product_dtcx_crs(mdim, ndim, n_nonzero, c_val, d_val, row_ind, col_ind, row_nz, n_row_nz, x, cx, dtcx)

  •  
  • 引 数:
  • 引数
    意 味
    入出力の区分
    備 考
    mdim, ndim 行列 \(C,D\) の寸法
    入力
    整数型
    n_nonzero 行列 \(C,D\) の非零要素数
    入力
    整数型
    c_val(n_nonzero) 行列 \(C\) の非零要素を格納する1次元配列
    入力
    倍精度実数型
    d_val(n_nonzero) 行列 \(C\) の非零要素を格納する1次元配列
    入力
    倍精度実数型
    row_ind(n_nonzero) 非零要素の行番号を格納する1次元配列
    入力
    整数型
    col_ind(n_nonzero) 非零要素の列番号を格納する1次元配列
    入力
    整数型
    row_nz(mdim) 非零行ベクトルの行番号を格納する1次元配列
    入力
    整数型
    n_row_nz 非零行ベクトルの本数
    入力
    整数型
    x(ndim) ベクトル \(\boldsymbol{x}\) を格納する1次元配列
    入力
    倍精度実数型
    cx(mdim) 行列ベクトル積 \(C \boldsymbol{x}\) を格納する1次元配列
    出力
    倍精度実数型
    dtcx(ndim) 行列ベクトル積 \(D^T C \boldsymbol{x}\) を格納する1次元配列
    出力
    倍精度実数型

  • 注 意:\(D^T C \boldsymbol{x}\)の計算に,k_product_atx_crs と k_product_ax_crs を用いると,サブルーチン k_product_ax_crs 内で mdim 個の1元配列の初期化に\(O(\textrm{mdim})\)の計算コストが生じる.本ルーチンでは,行列 \(C\) の非零ベクトルに対応する成分だけを初期化している.そのため,本ルーチンを複数回呼び出すプログラムでは,初期化に要する計算コストが著しく軽減される.本ルーチンを複数回呼び出す場合は,予め次の2つの操作を行う必要がある.
    1. row_ind(n_nonzero), row_nz(n_nonzero), n_row_nz を決定するために,k_gen_row_ind_crsを1回だけ呼び出す.
    2. cx = 0.0 を1回だけ実行する.

    例:
    \(\cdots \cdots\)
    call k_gen_row_ind_crs(mdim, n_nonzero, col_ind, row_ptr, row_ind, row_nz, n_row_nz)
    cx = 0.0
    \(\cdots \cdots\)
    do m=1, mmax
      \(\cdots \cdots\)
      call k_product_dtcx_crs&
      (mdim, ndim, n_nonzero, c_val, d_val, row_ind, col_ind, row_nz, n_row_nz, x, cx, dtcx)
      \(\cdots \cdots\)
    end do