コンピュータを研究に使うための私的メモ。Python、Fortran、Ubuntu、etc...


コンパイルオプション

言語オプション

gfortranifortpgf90
自由形式を指定-ffree-form-FR-Mfree
固定形式を指定-ffixed-form-Mfixed
  • 指定がない場合は拡張子で判断される。

プリプロセッサオプション

エラー検知・警告オプション

gfortranifortpgf90
浮動小数点例外を検出-ffpe-trap-Ktrap

デバッグ

ディレクトリオプション

リンクオプション

ランタイムオプション

Intel Fortran

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

conversion option

gfortranifortpgf90
エンディアン変換-fconvert=big-endian/little-endian-convert big_endian/little_endian-byteswapio
-fdefault-integer-8-i8-i8
-fdefault-real-8-r8-r8

最適化

ライブラリ、インクルードファイル

gfortranifortpgf90
ライブラリ、.modファイルのサーチパス-I dir-I dir
.modファイルの生成パスとサーチパス-J dir-module

NaNを検出する。

logical function isnan(a) 
  real a 
  if (a.ne.a) then 
    isnan = .true. 
  else 
    isnan = .false. 
  end if 
return 
end

情報

管理人/副管理人のみ編集できます