k_mod_val_iccg

    ICCG法形式を用いて格納された対称行列情報中に非零要素 \(a_{ij}\) の情報を追加するために,非零要素の値を格納する配列 val に空き要素を追加する.
    推奨される応用例:省メモリ版FEFG,X−EFG用.
     
     
  • サブルーチン名: k_mod_val_iccg

  •  
  • 呼び出し方:call k_mod_val_iccg(nzdim, val, n_zero, k_zero, icode)

  •  
  • 引 数:
  • 引数
    意 味
    入出力の区分
    備 考
    nzdim 非零要素数の見積値.配列col_ind,valの整合寸法.
    入力
    整数型
    val(nzdim) 非零要素の値を格納する1次元配列.
    入出力
    倍精度実数型
    n_zero 行列 \(A=(a_{ij})\) の狭義上三角部分にある非零要素数
    入力
    整数型
    k_zero 非零要素 \(a_{ij}\) の非零要素番号
    入力
    整数型
    icode icode=1の場合には,配列valのk_zero番目の要素以降は右側にシフトし,icode=0の場合は,配列valには操作を行わない.
    入力
    整数型

  • 注 意:
    1. n_zero, k_zero, icodeを決定するために,本ルーチンを最初に呼び出す前に k_add_nz2_iccg を呼び出す必要がある.
    2. 使用例(EFG法)
    3.         do n=1,ndom
                 i=idom(n)
                 do m=1,ndom
                    j=idom(m)
                    if(i < j) then
                    call k_add_nz2_iccg(i,j,nnode,n_size,iu,nzu,row_ptr,n_zero,k_zero,icode)
                    call k_mod_val_iccg(n_size,au,n_zero,k_zero,icode)
                    a_val(k_zero) = a_val(k_zero)+(phayx(i)*phayx(j)+phayy(i)*phayy(j)) &
                                          *weit(ix)*weit(iy)*djaco(nc)
                 end do
                 ad(i) = ad(i)+(phayx(i)**2+phayy(i)**2)*weit(ix)*weit(iy)*djaco(nc)
              end do
      
    4. X-EFG法やEFG法では,バックグラウンド・セルを用いた数値積分を実行している.それ故,本ルーチンの実行時間は殆ど無視できる. これに対して,行列要素が解析的に計算できるFEMでは,本ルーチンの実行時間は他の計算時間と比べて無視できない.このような場合,本ルーチンは使うべきではない.