RokkoInternalwrappers - t-sakashita/rokko GitHub Wiki

internal wrappersの階層

LAPACKはFortran77で書かれているため、all possible argumentsを含む必要があった。

  • Fortran77(ソルバそのもの)

    • characterによる動作指定
  • Fortran77とCの間(LAPACKEと同様)

    • Fortranの外部関数宣言。underscoreのmangling
  • C向けの簡単化(LAPACKEと同様)

    • subroutineのinfoを戻り値とする。
    • work spaceの自動確保を行う関数を準備する。
    • 読み込み専用のスカラー変数(int, double, float型)は、値渡し。
    • 書き込み変数は、ポインタの受け渡し。
    • 読み込み専用のポインタ宣言には、constを付ける。
    • 複素数型の変換
  • Cラッパーに被せるC++ラッパー

    • 第1段階:ポインタ*から参照&にラップする。float / double、complexの有無のオーバーロードによる名前の統一。
    • 第2段階
      • 引数をテンプレート化。行列型(Eigen3 or ポインタ)、ベクトルはVEC
      • static_assertによる、コンパイル時の型チェック。
      • オーバーロード。不要なパラメータの省略。
        • 固有値のみの場合。
        • work spaceを自動確保する場合の省略
    • 上記の全てのオーバーロードをユーザが使用できるようにした。

検討事項

Fortran77のFortran95/2003化は必要か?

ベクトル型

  • メンバ関数data()があるクラスは、何でも受け入れられる。