RokkoInterfaceSparseSolversMatfree - t-sakashita/rokko GitHub Wiki

Matfree

デバッグのため、distributed_mfreeからmatrix market形式を生成

  • 任意のプロセス数で比較できる。
  • CRSを経由

Fortran binding

行列・ベクトル積を行うルーチン

  • ベクトルサイズの渡し方
  • multiply関数の引数として渡す
  • Fortanでは、moduleの変数を使って、入力配列のサイズを指定することはできないようだ。
  subroutine multiply (n, x, y) bind(c)
    implicit none
    integer(c_int), intent(in), value :: n
    double precision, intent(in) :: x(n)
    double precision, intent(out) :: y(n)
  • 計算に必要な変数

  • moduleのプライベート変数として、定義する。

  • ソルバには、multiply関数そのものを渡す。

  • Fortranには、moduleそのものを受け渡すことはできない。moduleは一つだけで、C++クラスのように、複数のインスタンスは作れない。

  • Fortranには、関数ポインタは存在しない。

  • Rokkoの中で、Fortranのprocedureを関数ポインタに変換している。