fortranで書式なしダイレクトアクセスするとき、例えば4バイト×n要素を読み込みたいときは、
real a(n) open(11, file='hoge.bin', access='direct', form='unformatted', recl=4*n) read(11) a close(11)とするものだと思っていたらifortでは4倍のバイト数になってしまう。ifortは(古いバージョンはこれでいいらしいが)ダイレクトアクセスのときはバイト単位ではなくword単位になっている。つまりこれだと4バイト×(4×n要素)だと解釈されてしまう。ifortで上記の操作をしたい場合は、
real a(n) open(11, file='hoge.bin', access='direct', form='unformatted', recl=n) read(11) a close(11)とするか、コンパイル時に-assume bytereclオプションをつける。
$ ifort -assume byterecl hoge.f90互換性のためには-assume bytereclオプションで対応するのがいいか。grads形式のバイナリの読み書きの際に注意が必要。
gfortran -W -Wall -pedantic-errors -Wunderflow -O -fbacktrace -ffpe-trap=zero,overflow,underflow,invalid -fbounds-check -g mod_hoge.f90 hoge.f90
| -W | |
|---|---|
| -Wall | |
| -pedantic-errors | |
| -Wunderflow | |
| -O | |
| -fbacktrace | |
| -ffpe-trap | |
| -fbounds-check |
| gfortran | ifort | pgf90 | |
|---|---|---|---|
| エンディアン変換 | -fconvert=big-endian/little-endian | -convert big_endian/little_endian | -byteswapio |
| -fdefault-integer-8 | -i8 | -i8 | |
| -fdefault-real-8 | -r8 | -r8 |

最新コメント