この文書の現在のバージョンと選択したバージョンの差分を表示します。
| Both sides previous revision Previous revision Next revision | Previous revision | ||
|
fortran [2009/10/29 21:54] saito |
fortran [2009/12/01 13:59] (現在) saito |
||
|---|---|---|---|
| ライン 80: | ライン 80: | ||
| ===== データファイルの読み込み ===== | ===== データファイルの読み込み ===== | ||
| - | データファイルの中に何行あるか分からないときにはendを使う. | + | |
| + | データファイルの中に何行あるか分からないときにはiostatかendを使う. | ||
| + | iostatの方がスマートなやり方かも. | ||
| + | |||
| + | ==== やり方その1 ==== | ||
| + | read文にiostatのオプションを付ける. | ||
| + | iostatが正の数を返す場合はエラー,負の値を返す場合は行の終わりを意味するらしい. | ||
| + | <code fortran> | ||
| + | program hoge | ||
| + | implicit none | ||
| + | real a,b | ||
| + | integer i,inputstatus | ||
| + | do i=1,10 | ||
| + | read(*,*,iostat=inputstatus) a,b | ||
| + | if(inputstatus>0) stop "error" | ||
| + | if(inputstatus<0) exit | ||
| + | write(*,*) a,b,a**2-b | ||
| + | end do | ||
| + | end program hoge | ||
| + | </code> | ||
| + | ==== やり方その2 ==== | ||
| + | |||
| + | endを使う. | ||
| 以下サンプル.プログラムの中では10回ループを回すが,読み込むのは5行分だけ. | 以下サンプル.プログラムの中では10回ループを回すが,読み込むのは5行分だけ. | ||
| ライン 122: | ライン 144: | ||
| tar czvf ${TAR} Makefile *.f90 | tar czvf ${TAR} Makefile *.f90 | ||
| </code> | </code> | ||
| + | |||
| + | |||
| + | ===== implicit none ===== | ||
| + | 宣言文で宣言した変数以外を利用しないようにする。 | ||
| + | 長いプログラムを書く場合はミスを避けるためにも使用するべき。 | ||
| + | 自由形式の場合はuse文の後に使用。 | ||
| + | <code fortran> | ||
| + | program hoge | ||
| + | use hoge_lib | ||
| + | implicit none | ||
| + | real(8) a,b,c, | ||
| + | ... | ||
| + | </code> | ||
| + | ===== 装置番号 ===== | ||
| + | write(?,*)やread(?,*)の?に入る番号。 | ||
| + | 通常、5が標準入力(キーボード)、6が標準出力(ディスプレイ上の端末)に使用されるので、 | ||
| + | 5と6を使ってopenするのは避けるべき。 | ||
| + | slatecのI1MACHを使えば、標準入力、標準出力の番号が調べられる。 | ||
| + | 装置番号にはcharacterも入る。 | ||
| + | |||
| + | |||
| + | |||
| + | ===== 連番のファイル名をつける。 ===== | ||
| + | ファイル名をcharacter変数に代入して使う。ファイル名の変更にはwrite文を使う。 | ||
| + | 逐次計算に使える。 | ||
| + | <code fortran> | ||
| + | character(len=12) filename | ||
| + | ... | ||
| + | do i=1,100 | ||
| + | write(filename,'(a,i4.4,a)') 'hoge',i,'.dat' | ||
| + | open(10,file=filename) | ||
| + | ... | ||
| + | write(10,*) ... | ||
| + | ... | ||
| + | close(10) | ||
| + | end do | ||
| + | </code> | ||
| + | |||
| + | |||
| + | |||
| + | ===== 簡単なシェルスクリプト ===== | ||
| + | 連続してプログラムを実行したいとき、shファイルが便利。 | ||
| + | 端末で入力する内容をあらかじめファイルに書いておき、それを実行すれば、上から順に実行してくれる。 | ||
| + | windowsで言うバッチファイル。 | ||
| + | |||
| + | <code bash> | ||
| + | gfortran hoge.f90 | ||
| + | cd case10 | ||
| + | ../a.out | ||
| + | cd ../case20 | ||
| + | ../a.out | ||
| + | cd ../case30 | ||
| + | ../a.out | ||
| + | </code> | ||
| + | <code> | ||
| + | $ sh hoge.sh | ||
| + | </code> | ||
| + | |||
| + | |||