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()があるクラスは、何でも受け入れられる。