Programing Memo
プログラムに役立つ事を書いておきます。

fortranのCommonブロックをC++から読む

例えば
        integer rnum
        common/rnumstat/rnum
というfortranのcommonブロックをC++で読みたいときは
extern "C" {
  extern struct{
    int rnum;
  } rnumstat_;
}
のように宣言し、 C++のプログラムの中で
hoge = rnumstat_.rnum;
のようにして読み込めばよい。

fortranで作った配列をC++で読むときの注意点

Fortranの配列の始まりは通常1から、C++中では0からなので Fortranのプログラム中で
        integer a(10)
と定義していた場合、C++中では0番目の要素がFortranでの1番目の 要素と一致する。つまり
a[0] = a(1)
となる。

fortranで作った配列をC++で読むときの注意点その2

Fortran中で多次元配列を作った場合は以下の事に注意する。 メモリ上での配列のメモリ配置の違いから、例えばfortranで
        integer a(5,10)
と定義していた場合、C++で読み込むには
int a[10][5];
と定義する必要がある。行と列の要素が逆になる。 4次元配列
       integer aa(3,4,5,6)
の場合は、
int aa[6][5][4][3];
となる。

fortranとC/C++の変数の対応

FortranC/C++
integer*2short int
integerlong int or int
logicallong int or int
logical*1bool
realfloat
real*8double
complexstruct{float real; float imag;}
character*10 abcchar abc[6];



BACK