fmemo

Fortran

最終更新:

fmemo

- view
管理者のみ編集可

ifortのコンパイルオプション


倍精度オプション
$ ifort -r8 test.f90

デバッグオプション。これをつけないと配列の領域外参照をしていてもエラーにならないことがある。最適化オプションと併用するとエラーが起きるかもしれない?
$ ifort -CB -traceback -g -check test.f90

書式無しファイル入出力でreclの単位を1byteにするとき。
$ ifort -assume byterecl test.f90

g95のコンパイルオプション


デバッグしたいとき。
$ g95 -g -Wall -fbounds-check -ftrace=full test.f90


エンディアンを指定したいとき


ifort


環境変数FORT_CONVERTn(nは数字)をBIG_ENDIANまたはLITTLE_ENDIANにすると、その装置番号で開いているファイルのエンディアンの扱いを変更できる。
$ FORT_CONVERT10=BIG_ENDIAN # 装置番号10番をBIG_ENDIANにしたいとき
$ FORT_CONVERT15=LITTLE_ENDIAN # 装置番号15番をLITTLE_ENDAINにしたいとき

すべてのエンディアンを一括して指定したいときは以下のオプションをつける
  • -convert big_endian
  • -convert little_endian

g95


環境変数G95_ENDIAN=BIG, G95_ENDIAN=LITTLEを使う。

Fortranデバッグ用オプション


実行時に引き数を渡したいとき


iargc, getargを使えばよい。これは非標準だが多くのコンパイラで使える。

program main
  implicit none  
  integer :: i
  integer :: iargc, num 
  character(128) :: var 
  ! iargcは引数の数を返す関数
  num = iargc()
  write(*,*) num
  ! getargは引数を返すサブルーチン
  do i=1,num
    call getarg(i,var)
    write(*,*) trim(var)
  enddo
  stop
end program 

$ ./iargc_getarg.exe Anne Beth Chris
 3
 Anne
 Beth
 Chris

ちなみに、0番目には"./iargc_getarg.exe"が入る。 

参考サイトfortran備忘録

整数のサイズ


integer(1)=1バイト整数 -128〜127

doループの仕様


do i=1,10
  ....
enddo
のdoループが終わった直後のiの値は11

内部入出力文


character(64) :: char
char='100 200'
read(char,*) num1, num2
write(*,*) "num1= ", num1

program main
  implicit none
  integer :: i,num
  character(100) :: fmt,cnum
  real(8) :: var
  i=4
  num = 4
  var = 1.23456
  write(cnum,'(i2)') num
  write(*,*) trim(cnum)
  fmt = '('//trim(cnum)//'f10.4)'
  write(*,*) trim(fmt)
  write(*,fmt) var,var,var,var
  stop
end program main

参考になるサイト




記事メニュー
ウィキ募集バナー